1、58速运微信小程序架构实战目 录58速运简介A小程序的意义B小程序架构实战C总结D覆盖中国及东南亚地区的同城货运平台100个驻点城市,100万注册司机,累计服务货运用户过亿次2018年速运2.02014年2015年2016年服务上线企业服务上线2017年平均日订单突破20W与GOGOVAN合并速运模式速运模式为什么要做微信小程序,意义是什么?什么是速什么是速运运2.01去中心化2新方向探索androidios订单服务派单服务接入层服务层用户端服务数据层DBcacheES序小程新实现H5司机端服务现有架构现有架构小程序功能小程序功能1、商品售卖A2、等级特权B3、收藏司机C4、自主接单D5、推广
2、码E.F思路思路1、避免大而全,功能拆分A2、由易到难,逐步细化B3、微服务架构C会员服务和用户等级会员服务和用户等级核心功 能点级别 展示定期 发券级别特权级别 变更会员服务会员服务用户等级服务用户等级服务定时任务消息队列延时消息更新用户等级更新用户等级如何解决高并发场 景下数据不一致的 情况?双缓存清除法商品服务商品服务-场景场景A1、读多写少B2、商品不可变C3、限购D4、库存控制商品服务商品服务如何保证商品服务稳定?商品及库存的缓存时效性怎么保证?某些场景下,库存是否会影响整体性能?商品服务商品服务商品服务web商品服务cache库存服务db1、可变数据隔离2、缓存3、CAS乐观锁司机
3、司机GPS服务服务PART11、写多读少PART33、实时性要求高PART22、请求量大司机司机GPS服务服务1、mysql压力大2、缓存无法搜索3、如何提高处理效率司机司机GPS服务服务1、异步多线程2、超时丢弃3、批量入库4、ES存储订单服务现状订单服务现状A1、老订单由于业务发展已经不适用B2、老订单按前台业务分表,后台单表C3、前后台采用canal方式同步D4、日增40w数据E5、前后台订单服务、 订单es服务订单服务订单服务1、统一订单服务2、采用分库实现订单服务订单服务订单服务20182017时间维度订单服务DB1DB2DB3水平拆库拆表DBEXT1DBEXT2DBEXT3订单服务
4、订单服务-场景场景1、用户订单列表、司机订单列表3、后台复杂查询2、抢单、订单详情订单服务订单服务如何确定分库方案?时间维度?优点:进行中直接查最新库(时间最新)缺点:如何确定时间维度?提前建好库?动态申请? 列表查询全部跨库订单服务订单服务如何确定分库方案?水平拆分?优点:横向扩展方便缺点:如何解决跨库查询 横向扩展?订单服务订单服务场景分析:85%的查询根据订单id10%的查询根据用户id4%的查询根据司机id1%的后台复杂查询订单服务订单服务订单id%dbcount 分库?orderid%8db0db1db2uidorderiduid1orderid1uid1orderid2uid1or
5、derid3uid2orderid4uid2orderid5如何解决列表查询?索 引 表订单服务订单服务用户id%dbcount 分库?uid%8db0db1db2如何解决订单id查询?基因法订单服务订单服务基因法:uid%dbcount分库基因订单id生成40bit时间9bit机器9bit分库基因5bit序号如何找所在库:(orderId 5)&(-1L (-1L dbBits)订单服务订单服务复杂查询:使用es解决webservicedb1db2es1es2订单服务订单服务用户维度分库订单id使用snowflake算法生成订单中记录分库因子复杂查询使用ES订单服务订单服务老旧服务的兼容性:
6、双写读新,不存在读老 历史数据迁移推送服务改造推送服务改造新增推送模式1、一对一推送2、一对多推送总总 体体 架架 构构 图图服务治理服务治理1、动态的机器管理2、流量监控3、访问耗时4、抛弃量监控监控平台监控平台Dtrack调调 用用 链链Dtrack调用链调用链1、全局跟踪2、异常报警3、清晰的调用结构4、整体效果监测机 器 2机 器 Iweb-applicationtraceid: unique_id spanId: 0 serviceAProxyspanId: 0.1 serviceBProxyspanId: 0.2 serviceCProxyspanId: 0.3 ServiceAt
7、raceid: unique_id spanId: 0.1.1traceid:unique_id spanId: 0.1Cache-Clienttraceid: unique_id spanId: 0.1.1.1DB-tool访 问访 问 表表 1traceid: unique_id spanId: 0.1.1.2DB-tool访 问访 问 表表 2traceid: unique_id spanId: 0.1.1.3CacheDB技术点1、全局唯一的traceid2、spanId描述调用层级3、数据采集-flumeDtrack调用链调用链总结总结1、准确的理解需求很重要2、对需求进行拆分、由简单到复杂进行拆分3、根据业务需求进行合适的技术选型4、任何脱离业务的架构设计都是耍流氓5、监控、监控、监控。重要的事情说三遍THANK YOU!