京东618:一个中心五个原则,谈谈物流系统的大促优化实践(2)
生产 / 监控分离指的是生产报表和监控报表必须分离开来,所谓生产报表就是业务生产过程中强依赖的报表,比如仓储系统中的积压类报表(拣货、复核、打包等各环节积压数量),配送系统中的分拣差异报表、配送差异报表等等. 这两类报表业务优先级不一样,生产报表是要优先保障的,所以在系统中需要将这两类报表进行隔离,避免监控类报表影响到生产类报表.监控报表是一个独立系统,数据来源有两种路径,一种是从生产库通过 binlog 复制过来(我们用的是自研的 Decomb 总线),另一种是从生产库通过消息方式先进入 kafka,再从 kafka 消费到监控系统.因为监控报表业务场景的多样性和复杂性,监控系统的数据库会采用多种技术,比如 MySQL、ElasticSearch、HBase、Cassandra 等等. 在线 / 离线分离指的是在线报表和离线报表分离,在线报表是实时或准实时报表,查看的是 24 小时之内的业务数据,离线报表多为分析类报表,查看的是 24 小时之前的业务数据.因为二者的业务优先级和技术方案都不尽相同,所以必须要进行分离,避免相互影响. 图 5 分离技术 DB+ 技术经历过多次大促备战之后,给我们最大的感触就是业务规模的增长速度总是快于我们系统的迭代速度,业务规模总是在驱动着系统的迭代升级.面对亿级单量,单纯的引入前面提到的技术已经无法让系统容量发生质的变化,系统容量容易受制于数据库,所以,除了通过分库分表来实现数据库写的分布式,还需要引入一些 NoSQL 技术,所谓的 DB+,也就是 DB+NoSQL+ 分布式,主要包括如下几个方面的改进:
图 6 能简单说明 DB+ 的基本思路,系统的存储分两部分,一部分是传统的关系型数据库(MySQL),用来存储结构化,强事务数据,数据库做了 Sharding,读写均为分布式,支持弹性扩展.另一个是 KV 引擎,KV 引擎主要包括 Redis、HBase、ElasticSearch 和 Cassandra,Redis 主要用来做热点缓存,HBase 用来存储数据量级大而且 rowkey 又比较固定的数据,ElasticSearch 用来存储查询条件比较复杂的报表、查询类数据,Cassandra 主要用来存储日志、流水类数据,这类数据量级大,读写性能要求也比较高,但是大多都是按 key 查询. 图 6 DB+ 技术 思考总结在经历过多次大促备战之后,最大的感触是每次大促的业务规模总是在驱动着系统的技术不断的升级.不同的业务量级所需要使用的技术也大不一样,前面介绍的都是每次大促备战的一些技术实践.简而言之,对于 OLTP 类系统来说,面对大促的优化可以总结为 一个中心和五个基本原则. 一个中心就是要以数据库为中心,优化数据库性能为先,从数据库端出发来提升系统容量.五个基本原则就是大系统小做原则、大事务化小原则、分离原则、分布式原则和数据库弱依赖原则.下面分别介绍下:
现阶段正处于电商高速发展的黄金时期,业务规模还将持续保持快速增长,京东的物流系统也还将持续迭代和演进. 作者介绍 者文明,京东商城运营研发部首席架构师,中科院硕士,清华大学学士,15 年电子商务 / 企业应用领域研发、架构经验,涉及电子商务、互联网、大数据、人工智能等领域,专注电商物流系统架构、实时大数据、智慧物流等解决方案.2012 年初加入京东,主要负责京东物流系统架构. 原文来自微信公众号:聊聊架构 (编辑:ASP站长网) |