工作项目梳理

懂车帝工作经验整理

基础设施

  • Mysql
    • B端场景流量小,核心支付场景需要使用事务的方式保证一致性。同时考虑配合Redis分布式锁来实现一致性。(未使用过直接加Mysql锁的场景)

    • C 端很多时候无需直接查询数据库,可以考虑加一层缓存。

    • 非写后立即读的场景,可以考虑读从库,主从复制延迟1秒以内。

    • 慢查询治理。是否走了索引。添加索引或优化查询。考虑覆盖索引的情况。尽量不用like。

    • 监听 binlog,二进制文件,数据的变更,执行后续的操作。

      • 每次刷数据都会触发逻辑,需要做好相关逻辑处理,加好监控。
    • 数据库基本使用InnoDB引擎(引擎作用于表,不同引擎存储,功能各不相同)。

    • MVCC,多版本并发控制,默认隔离级别会有非一致性读问题,特殊场景需要加锁。

    • InnoDB支持全文索引,虽部署简单,但过于基础,优先考虑ES。

  • Redis
    • 用于加锁,防止并发,B端常见用法。
    • 内存-redis-数据库,三级缓存,数据回源。可将基础属性的查询耗时控制在数ms。
      • singleflight库,回源时一个实例只有一个协程去请求数据库。
      • 不同实例的数据可能存在短暂的不一致。
    • 用于容灾,缓存结果。
    • 保存临时性的数据,如定时任务等每日更新的数据。
    • redis队列,很少使用。
  • ES
    • 复杂数据的召回。
    • 稳定性。
  • MQ
    • B端常用。解耦操作。C端降低峰值流量。
    • 完成一个操作,发送事件,让依赖方按需要处理对应的逻辑。(也可使用RPC回调的方式,按需要的格式实现RPC接口,管理起来更麻烦一些)
    • 延迟发送功能。
  • ClickHouse
    • 特点:查询数据量大,昂贵,大流量稳定性较差
  • CronJob

C 端容灾

  • 背景: 活动,节假日,突发活动,场景流量激增,对服务造成很大压力。
  • 表现:
    • 服务CPU,内存被打满。
    • ES,数据库等基础设施组件无法支持如此大的流量。
  • 降级方案:
    • 可按百分比对用户流量进行分流,减少压力。
    • 对数据实时性要求不高的接口,在redis等地方,按场景的特征,设计key,直接缓存整个结果。返回给用户,避免白屏。
    • ES 召回,排序等场景设计兜底方案,流量激增时,打开开关,不在走ES,降低ES压力。
    • 重点服务,针对关键步骤增加容灾方案,降级的逻辑,服务。
    • 可考虑根据埋点,定时任务,针对关键场景进行降级。
    • TLB层降级方案每有接入过。

服务稳定性

车源排序召回打包

  • 背景:
    • 二手车一些属性(如自营城市,车源数量)一直在动态变化,一些还需要根据计算得出(推荐理由,需要根据距离,城市,品牌信息等计算),不方便离线存储,且不方便离线召回。
    • 随着二手车业务的发展,C端已经有将近20+的车源列表。不同列表文案、标签可能不同,很难复用,尤其是标签,B端各种商业化、活动的标签在快速迭代,每增加一个标签都需要新定义一个字段。同时各个车源列表的打包格式、字段定义都不统一,前后端维护成本极高。
  • 方案:
  • 问题:

feed 流,二手车C端feed流推荐车源

商业化付费

商家体系

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计