曹耘豪

基本信息
- 男,28岁(1997)
- 工作经验: 6年
- 联系方式
- 邮箱: yunhaocao@outlook.com
- 微信:
good_night_cyh
- iMessage: yunhaocao@outlook.com
- 博客: https://blog.caoyunhao.com
- 学历: 本科(统招) 同济大学 软件工程 2014.09~2018.06
专业技能
- 架构:微服务架构、分布式系统设计、领域驱动设计
- 编程:Java、Python、Go、JavaScript
- 框架:Spring Cloud、Spring Boot、Mybatis、Feign、Dubbo、React
- 数据库:MySQL、Redis、Kafka、HBase
- 其他:Git、Markdown、PlantUML、Google、Docker、Jenkins
工作经历
- 南京云快充信息科技有限公司 平台研发部 Java工程师 2023.04~至今
- 上海寻梦信息技术有限公司(拼多多) 商业化 Java后端工程师 2018.07~2022.04
项目经历
财务系统(云快充)
云快充(YKC)是一家新能源汽车充电服务提供商(偏SaaS),为普通C端用户、政企、车队、新能源车企提供全方位的充电服务
项目简介:云快充财务系统。涉及到C端用户钱包、充值退款、订单支付、会员购买等,对接多种支付渠道,支持免密支付、自动续费,还涉及到部分清结算业务
技术栈:Spring Cloud、MySQL、Redis、Kafka、Nacos、Prometheus、Grafana、ELK
我的贡献:
- 高质量交付业务需求。参与需求评审、设计、编码、code review等
- 抽取支付中台。统一支付渠道,将支付与业务隔离,方便各种业务接入支付
- 增强既有代码的复用性与可读性。提升系统的可维护性
- 开发DB查询平台。业余时间开发,极大提升查问题效率,后推广到整个研发部
收获:
- 深入理解Spring Boot和Cloud机制、本地事务、AOP、分布式锁、服务发现等
- 深入理解支付系统、幂等、最终一致性等
- 丰富的对接第三方API的经验
- 在维护老代码和做新业务需求过程中提升编码水平
- 对充电行业领域有一定了解
PaaS平台(拼多多)
项目简介:商业化服务统一部署平台,基于公司一级调度平台之上的二级调度平台。目标是提高部门的资源利用率
技术设计:前端React,后端Spring Boot,使用Http发送指令给调度器,调度器将状态保存至Etcd,调度器通过Kafka反馈集群事件到后端,每个Pod包含用户容器和Agent容器,Agent负责给用户容器发送指令以及服务注册,用户容器须实现对应命令Http接口;算法数据产出在HDFS,后端定时扫描对应路径;用户认证使用JWT+公司SSO
技术栈:Spring Boot、MySQL、Kafka、React、Ant design
成果:
- 支持部署应用、发布、灰度、扩缩容、挂载、回流等集群操作
- 数据源管理,支持数据的发现、校验,支持不同策略
- 支持自定义流水线部署模板,一键创建多个数据源以及多个集群
- 提供统一的服务发现机制,提供多语言Client
- 支持不同集群间的数据一致性
- 支持监控告警、弹性伸缩等
- 支持跨云部署、路由和数据同步
难点与亮点:管控和调度器的状态一致保证,不同集群的数据一致性保证、数据跨区同步
担任角色:后端Owner和核心开发(90%),参与部分调度器开发,前期也担任前端Owner,负责交互设计(ant design)
收获:
- 技术收获。负责整个管控后端的迭代设计和编码
- 对现代部署平台和微服务架构有一定的了解
- 产品设计。担任了部分平台交互设计工作
- 需求分析。由于服务多个业务方,所以对于特定业务方提出的特定功能需求,需要思考出更加通用的解决方案并实现
广告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和唯一开发
收获:
- 完整参与了项目立项、需求分析、设计、编码、测试、验收、上线、反馈等
- 充分理解服务的上下游和数据链路
- 对java与C++的gRPC和Protobuf有更进一步的认识
- 对广告业务领域有一定的了解
统一数据SDK(拼多多)
项目简介:提供给广告引擎服务的取数SDK,使用统一数据查询接口,为业务方屏蔽底层存储。本人在职期间全程维护该SDK
技术设计:定义统一的KV、KMAP、KSet访问接口,为Codis、HBase等客户端分别实现统一接口;使用基于权重的随机流量路由策略;使用Hystrix熔断和其线程池;利用反射拿到HBaseClient内部方法预热Meta等
技术栈:Java、HBase、Codis、线程池、反射、Hystrix、Caffine
SDK成果:
- 支持流量路由功能,用于容灾、数据无感迁移等
- 支持小数据加载至内存,定时更新
- 数据管理,支持动态上下线,提升算法数据迭代效率
- 支持连接的预热和复用
- 支持本地缓存、单机限流
担任角色:Owner和唯一开发,负责项目的设计、开发、推进升级、维护等
收获:
- 该项目主要使用了各种基本的设计模式,对Java编程有进一步的了解
- 了解业务的数据流上下游关系,以及HBase和Codis的架构和原理
- 对在线广告架构有一定的了解
One more thing
- 能快速学习新的领域和知识,能够迅速适应新环境和挑战
- 具备良好的团队合作精神
- 认真负责,注重细节,能够承受压力并高效完成任务
- 乐于学习新的技术和框架,追求个人与团队的共同成长
- 使用第三方SDK时也会深入源码看一些细节,优化使用方式