瓜子二手车高级技术总监纪鹏程——瓜子后端技术架构的变迁

2020-02-27 666浏览

  • 1.瓜子后端技术架构的变迁 瓜子二手车高级技术总监 纪鹏程 2017 PHP 全球开发者大会
  • 2.纪鹏程 ⾃自我介绍 •  2000.9-2004.7 南开⼤大学 •  2004.9-2007.7 中科院软件所 •  2007.7-2011.5 百度-贴吧 •  2011.5-2015.9 赶集-交友、社区、⼆二⼿手物 品交易易、⼆二⼿手⻋车交易易 •  2015.9-now ⽠瓜⼦子⼆二⼿手⻋车 2017 PHP 全球开发者大会
  • 3.演讲⼤大纲 •  ⽠瓜⼦子及⼆二⼿手⻋车业务流程介绍 •  架构变迁过程的经验与教训 •  EP的实践⼯工作 •  ⽬目标 2017 PHP 全球开发者大会
  • 4.关于⽠瓜⼦子 2014.9 2014.11 2015.9 2016.3 2016.12 2017.3 赶集好⻋车项⽬目 在赶集内部开 始孵化 赶集好⻋车1.0 上线,最先在 北北京试点 赶集好⻋车正式 更更名为⽠瓜⼦子⼆二 ⼿手⻋车 融资2.0145亿美 元,后在9⽉月追 加⾄至2.5亿美⾦金金, 估值10亿美⾦金金 GMV突破30亿; 获得⼆二⼿手⻋车电 商领域⾸首张互 联⽹网⼩小额贷款 牌照 保卖、新⻋车新 业务;开启⽠瓜 ⼦子2.0新模式 2017 PHP 全球开发者大会
  • 5.•  收⻋车流程 车源线索 •  售⻋车流程 买家线索 ⼆二⼿手⻋车C2C交易易流程 收车客服 评估调度 评估师评估 售车客服 双约调度 工单 打款 上架审核 上架 销售带看 复检 合同/台账 过户 2017 PHP 全球开发者大会
  • 6.⽯石器器时代 2017 PHP 全球开发者大会
  • 7.PC/WAP 用户端/工作APP 业务后台 LVS(Load Balance) Nginx Nginx PHP业务逻辑 PHP业务逻辑 MySQL-M MySQL-S 架构V0.1 l  “Quick but dirty work”,“过早优化是⼀一切罪恶的根源” l  主要精⼒力力集中在业务上,快速迭代,实时响应业务需求 l  周边服务尽量量通过外部购买 l  缓存的使⽤用可以先缓缓 l  从开始就要重视“单点”问题 l  尽早确定数据库规范、数据字典 l  敏敏感数据的加密和脱敏敏处理理 2017 PHP 全球开发者大会
  • 8.问题 •  代码可维护性差,新⼈人介⼊入成本太⾼高 •  耦合太紧密,很⼩小的错误也会造成整体的crash •  全部业务都在⼀一个DB实例例上,性能扩展性极低 •  ⽇日志缺乏和规范不不统⼀一,定位问题困难 •  系统、应⽤用、业务级别的监控缺乏 •  从赶集体系剥离,⼀一些第三⽅方服务需要重新搭建 2017 PHP 全球开发者大会
  • 9.铁器器时代 2017 PHP 全球开发者大会
  • 10.架构V0.5 •  代码按照业务线分拆,业务之间通过HTTP接⼝口调 ⽤用 •  数据库按照业务线分实例例,实例例内分库分表 •  搭建监控平台,增加 XHProf 和应⽤用⽇日志,提供订 阅功能 •  制定统⼀一应⽤用⽇日志规范 •  增加Redis集群,基于Twemproxy来做中间代理理 2017 PHP 全球开发者大会
  • 11.PHP的性能发现 •  所有业务统⼀一接⼊入XHProf性能采样 •  业务不不同,采样率不不同 •  数据导⼊入ES中,⽅方便便根据业务线、时间进⾏行行检索 •  增加订阅机制 2017 PHP 全球开发者大会
  • 12.问题 •  业务内部拆分不不够细,耦合依然⽐比较重 •  代码分层混乱,越级、跨级调⽤用多 •  业务间接⼝口调⽤用⽅方式千差万别 •  接⼝口的可⽤用性和性能监控不不够 •  上线⼯工具不不完善,不不⽀支持回滚 •  测试以⿊黑盒为主 •  慢查询问题层出不不穷 2017 PHP 全球开发者大会
  • 13.蒸汽时代 2017 PHP 全球开发者大会
  • 14.架构V1.0 •  业务内部拆分出细粒度的服务 •  业务之间通过内部COMMON API接⼝口调 ⽤用 •  EBS上线平台,实现⾃自动上线和回滚 •  数据库平台增加对SQL上线的审核 •  模块内代码分层,禁⽌止跨层、跃层调⽤用 •  第三⽅方服务要使⽤用多家,保证可以⽆无缝切 换 •  引⼊入⾃自有研发的A/B测试框架 3&҈:$3 አಁᒒ$33҈ૡ֢$33 ᬩ០‫ݣݸ‬ҁත᫣̵ࠓ᫣̵ਭ໐҂ &20021$3, ᕚᔱ๐‫ۓ‬ ᫣რ๐‫ۓ‬ ॔༄๐‫ۓ‬ ਮಁᓕቘ ‫ݣ‬ᨴᓕቘ ૡ‫ܔ‬ᓕቘ Ꭸ‫מ‬ ֖ᗝ๐‫ۓ‬ ᦾ‫ۓ‬ ඪ՞ 0\64/0 0\64/҆6 0\64/҆6 ‫ڭ‬ᔮᕹ ᬦಁᓕቘ ᩅ‫ݸ‬๐‫ۓ‬ ᕟᕢຝ຅ വᭆ 5HGLV҆0 ‫מ‬ਭ๐‫ۓ‬ නྃ๐‫ۓ‬ ᦾ‫ۓ‬ᓕቘ ࢶᇆ ‫ੂے‬ 5HGLV҆6 (%6Ӥᕚଘ‫ݣ‬ &DW(\Hፊഴ य़හഝଘ‫ݣ‬ ᆻᡩ VZDJJHUଘ‫ݣ‬ *ଘ‫ݣ‬ $%7HVLQJ ᚕ๜᧣ଶ 2017 PHP 全球开发者大会
  • 15.EP的实践⼯工作 2017 PHP 全球开发者大会
  • 16.代码的艺术 •  代码的分层 •  代码规范-PSR1、PSR2 •  使⽤用git hook,代码提交前code sniffer检查准⼊入 •  内部库,使⽤用Composer封装和集成 •  代码遵循PSR4⾃自动加载机制 2017 PHP 全球开发者大会
  • 17.单测 •  单测重要性⼀一直被低估 •  持续集成的关键 •  核⼼心逻辑代码⼀一定要做,覆盖 率要达标 •  ⽤用好的⽅方法让单测更更简单 PHPUnit的Mock √ Public √ Protected × Static × Final × Private PATest的Mock √ Public √ Protected √ Static √ Final √ Private 2017 PHP 全球开发者大会
  • 18.•  接⼝口的重要性与⽇日俱增 •  ⽤用swagger集中统⼀一管理理 •  接⼝口测试的case管理理 •  可⽤用性及性能监控 接⼝口的管理理 2017 PHP 全球开发者大会
  • 19.接⼝口⽹网关 •  API的统⼀一⼊入⼝口,路路由分发 •  协议转换、身份认证、权限控 制、流量量控制、⽇日志记录等 •  KONG + Openresty 2017 PHP 全球开发者大会
  • 20.RPC的实践 •  规范、统⼀一接⼝口的调⽤用⽅方式 •  基于HTTP接⼝口的简化版 •  在Guzzle的基础上进⾏行行封装,⽀支持签名、并发请求、超时设置等 •  要跟内部接⼝口区分开,加特殊前缀,防⽌止滥⽤用!!! 2017 PHP 全球开发者大会
  • 21.服务的解耦 服务级别,Rabbitmq & Kafka 数据表级别,Canal+Kafka 2017 PHP 全球开发者大会
  • 22.前后端分离实践 •  满⾜足SEO,SSR的必要性 •  ⼤大前端思想 •  前后端界限更更加清晰 •  后端开发更更加聚焦在架构和逻辑上 •  NODEJS让并发能⼒力力进⼀一步提升 2017 PHP 全球开发者大会
  • 23.⽬目标 2017 PHP 全球开发者大会
  • 24.平台化 ⽬目标 服务化 智能化 2017 PHP 全球开发者大会
  • 25.平台化 •  基于docker的PAAS平台让资源更更有效的配置 •  容器器的部署、管理理,服务的部署 •  持续集成(CI)和持续交付(CD)的能⼒力力 2017 PHP 全球开发者大会
  • 26.服务化 •  微服务化不不是银弹 •  服务粒度的权衡 •  处理理好分布式系统带来的复杂性和时间消耗 •  需要中间件配合,服务注册、服务发现、服务部署、监控等 2017 PHP 全球开发者大会
  • 27.智能化 •  “算法+数据+应⽤用场景”的模式 将变得前所未有的重要 •  ⽠瓜⼦子⼤大脑 2017 PHP 全球开发者大会
  • 28.Q&AEmail:ji.pengcheng@foxmail.com 2017 PHP 全球开发者大会
  • 29.PHP 2017·北京 全球开发者大会 2017 PHP 全球开发者大会