曹耘豪

基本信息

专业技能

工作经历

项目经历

财务系统(云快充)

云快充(YKC)是一家新能源汽车充电服务提供商(偏SaaS),为普通C端用户、政企、车队、新能源车企提供全方位的充电服务

项目简介:云快充财务系统。涉及到C端用户钱包、充值退款、订单支付、会员购买等,对接多种支付渠道,支持免密支付、自动续费,还涉及到部分清结算业务

技术栈:Spring Cloud、MySQL、Redis、Kafka、Nacos、Prometheus、Grafana、ELK

我的贡献:

  1. 高质量交付业务需求。参与需求评审、设计、编码、code review等
  2. 抽取支付中台。统一支付渠道,将支付与业务隔离,方便各种业务接入支付
  3. 增强既有代码的复用性与可读性。提升系统的可维护性
  4. 开发DB查询平台。业余时间开发,极大提升查问题效率,后推广到整个研发部

收获:

  1. 深入理解Spring Boot和Cloud机制、本地事务、AOP、分布式锁、服务发现等
  2. 深入理解支付系统、幂等、最终一致性等
  3. 丰富的对接第三方API的经验
  4. 在维护老代码和做新业务需求过程中提升编码水平
  5. 对充电行业领域有一定了解

PaaS平台(拼多多)

项目简介:商业化服务统一部署平台,基于公司一级调度平台之上的二级调度平台。目标是提高部门的资源利用率

技术设计:前端React,后端Spring Boot,使用Http发送指令给调度器,调度器将状态保存至Etcd,调度器通过Kafka反馈集群事件到后端,每个Pod包含用户容器和Agent容器,Agent负责给用户容器发送指令以及服务注册,用户容器须实现对应命令Http接口;算法数据产出在HDFS,后端定时扫描对应路径;用户认证使用JWT+公司SSO

技术栈:Spring Boot、MySQL、Kafka、React、Ant design

成果:

难点与亮点:管控和调度器的状态一致保证,不同集群的数据一致性保证、数据跨区同步

担任角色:后端Owner和核心开发(90%),参与部分调度器开发,前期也担任前端Owner,负责交互设计(ant design)

收获:

  1. 技术收获。负责整个管控后端的迭代设计和编码
  2. 对现代部署平台和微服务架构有一定的了解
  3. 产品设计。担任了部分平台交互设计工作
  4. 需求分析。由于服务多个业务方,所以对于特定业务方提出的特定功能需求,需要思考出更加通用的解决方案并实现

广告DMP标签服务(拼多多)

项目简介:提供给广告主更精准的流量抓手。广告主在后台选择用户标签圈一个人群,实时展示所选标签对应人群数,同步人群包实时生效等

技术设计:上游服务请求Dispatcher服务(Spring),Dispatcher通过gRPC请求所有分片broker(C++、用户标签索引),broker计算对应人数与对应uid,uid通过kafka发出。Importer接收broker通过Kafka消息写入Codis。SDK负责查询用户人群包列表

技术栈:Spring Boot、C++、HBase、Codis、gRPC

成果:标签用户数毫秒级返回,人群包实时同步分钟级生效

担任角色:Dispatcher、Importer、SDK的Owner和唯一开发

收获:

  1. 完整参与了项目立项、需求分析、设计、编码、测试、验收、上线、反馈等
  2. 充分理解服务的上下游和数据链路
  3. 对java与C++的gRPC和Protobuf有更进一步的认识
  4. 对广告业务领域有一定的了解

统一数据SDK(拼多多)

项目简介:提供给广告引擎服务的取数SDK,使用统一数据查询接口,为业务方屏蔽底层存储。本人在职期间全程维护该SDK

技术设计:定义统一的KV、KMAP、KSet访问接口,为Codis、HBase等客户端分别实现统一接口;使用基于权重的随机流量路由策略;使用Hystrix熔断和其线程池;利用反射拿到HBaseClient内部方法预热Meta等

技术栈:Java、HBase、Codis、线程池、反射、Hystrix、Caffine

SDK成果:

担任角色:Owner和唯一开发,负责项目的设计、开发、推进升级、维护等

收获:

  1. 该项目主要使用了各种基本的设计模式,对Java编程有进一步的了解
  2. 了解业务的数据流上下游关系,以及HBase和Codis的架构和原理
  3. 对在线广告架构有一定的了解

One more thing