一个做过的项目的小总结

项目简介

项目主要是针对品牌广告迁移至竞价广告平台,在竞价平台实现品牌广告下单,取代以前品牌广告复杂的交互,降低品牌广告主的准入门槛。

涉及系统

  1. 上游(S):广告平台前端(S1),以及广告平台后端(S2)
  2. 订单中心(C)
  3. 下游(X): 库存平台(X1),类似于商品库; 结算平台(X2),类似于生成发票; 计费平台(X3),实时扣除账户余额
  4. 落库记录:库存平台记录(R1),结算平台记录(R2),订单中心记录(R3),广告平台记录(R4),计费平台记录(R5)

流程

  1. 在广告前端页面(S1)发起一次创建,经过广告平台后的(S2)处理请求
  2. 在广告平台后端访问订单中心(C),订单中心调用库存平台(X1),占用投放库存,生成库存投放记录(R1)
  3. 订单中心调用结算平台(X2),完成结算单的创建(R2)
  4. 订单中心生成订单中心记录(R3),将下单结果返回给广告平台后端(S2),实现广告记录创建(R4)
  5. 在开始投放前5分钟,由订单系统异步调用计费平台(X3),发起计费余额锁定,生成计费记录(R5),完成下单全流程
  6. 广告会经过一些列处理,进入投放过程并实现实时扣费。

项目开发

前期准备
  • 上下游字段沟通

字段极值:精确对到每个字段的取值含义差距,比如某选项全选值,不选默认值,int16或者64

字段选填:字段可选or必填,如果必填,确认上游可以获取到值,以及对应值取值逻辑,含义是否一致

字段单位

时间相关:确认时区(广告主时区或者投放地时区),时区单位(utc,gmt),data string格式(yymmdd或者其他),时间戳取值(s,ms,或者其他);

货币相关:确认币种单位(美元或者其他),货币取值(广告主货币或者投放国家货币),放大或者不放大(有的国家小数点位数比较多,为了方便单次计费,可能会乘上一个固定值后存储,比如十万)

  • 流程对比梳理

接口文档:先提供给下游原有流程字段取值差异,在由下游给出接口文档,结合需求文档,确定字段取值是否严格一致,不一致,需要进行链路沟通(直接上下游和间接上下游),得出最终结论。

  • 流程排期

完成各方技术文档评审,产出项目相关研发同学排期,确定连调,提测时间,然后再去对齐测试同学排期,协调后给出测试时间,checklist时间,最后确认上线时间,告知到pm以及相关业务方

具体开发
  • 项目搭建

对齐公司主流项目架构,如果有特殊处理逻辑,考虑在项目结构命名中体现,比如用到了全局拦截,或者用到了某些设计模式

  • 中间件引入

(了解组件优劣,接入成本等综合考虑)

消息中间件:

缓存:

db:

动态配置:

项目维护

一些细节
  • 系统一致性

订单中心先写对帐表,在创建订单,(延迟消息+错峰定时扫描表)准实时对帐,push上下游提供按id查询状态信息,幂等取消接口

  • 重复订单

对帐表唯一键限制,加redis分布式锁,保证一个订单只能执行一次,且不会存在同时执行的情况

  • 延迟消息投递

订单为整点执行,采用双延时涉及,大周期扫描表先执行,扫描到的记录发送延迟消息到延迟任务,触发订单,小周期执行,扫描到未执行记录立刻执行,由于扫描表,可以将开始执行时间设置为索引,提高扫描效率

  • 超卖

天然低并发,以时区和版位粒度进行库存锁定

  • 效率工具开发
  1. 主动推送:邮件推送提前将准失败的订单告知广告主,以及群推送,将关闭订单进行群推送,附加traceid,异常结束订单附加具体原因。
  2. 定时推送:推送每天订单增量情况
  3. 主动关闭:存在不一致情况的订单,比如上游木有记录,可直接进行关闭,避免人工干预
  4. 打点:关键节点进行业务打点告警,系统通用打点接入(机器状态,垃圾回收试验,上下游时延)
  5. 自动开白工具搭建
  • 流程优化
  1. 异步具体的执行,只留最关键的校验和计费
  2. 一些和流程无关的步骤,比如日志存储,局部回显数据存储(只会影响部分观看),放在协程处理
  3. 异步调用接口改为同步后,给下游提出最长试验要求,push下游改动
  4. 提示性校验前置,提高广告主的订单成功率
  5. 推送相关辅助功能放单独项目进行触发管理,防止和主项目过多耦合
  6. 批量rpc接口发出时用不同的context,防止下游根据logid日志太多,不利于异常定位
持续跟进
流程优化:
接口性能:

主要是耗时,对齐下游超时原因,并协助优化。

库存侧(10->3s,提高333%)取消密集打点,将大文件进行更小粒度拆分;

合同侧(2s->200ms,提高1000%),梳理必要字段,减少不必要关联表查询,push上游提供专用接口;

结算平台侧(2s->300ms,提高666%),次要信息缓存,次要流程异步化处理

线上case总结:

订单不一致:主要因为超时导致某方无数据或者修改失败,后续考虑各方进行幂等接口处理,使接口可重复访问

接口超时:

业务流程:上下游bug,前端交互bug,间接依赖方相关处理流程未接入(豁免)

广告主自身case:创意未就绪,余额未及时充值,资金池不合规

机器时钟抖动:留出几秒buffer时间

团队建设

  • 阶段总结
  • 文档整理
  1. 整理需求文档,名称,需求prd文档,排期链接,必要备注,各阶段deadline
  2. 维护迭代文档,需求文档,技术方案文档,checklist文档合集,方便后续同学学习
  3. 整理项目相关系统交互,服务仓库地址
  4. 整理上下游依赖,接口文档,项目名称,常用群组以及联系人
  5. 复杂前后端逻辑整理设计文档
  6. 错误周复盘
  7. 搭建知识空间
  8. 完善oncall机制(发版,流水线,值班,case文档建设,周期性文档沉淀)
  • 新人指引
  1. 先操作一个RF广告(增删改查),观察核心接口调用,熟悉常见字段定义和数据流转
  2. 做一个小需求,熟悉常见项目,已经研发流程规范
  3. 独立own一个需求
  4. 完成新人串讲
  5. 组内cr,设计cr

一些小总结

多push,多沟通,严格执行deadline,快速响应问题为基本原则,自动化方案为最终实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值