瓜子二手车高级技术总监纪鹏程——瓜子后端技术架构的变迁
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 全球开发者大会