京东物流系统架构演讲中的最佳实践读后感
阅读文章:京东物流系统架构演讲中的最佳实践
文章网址:https://mp.weixin.qq.com/s?__biz=MzIyNjE4NjI2Nw==&mid=2652558141&idx=1&sn=2647360a45d94266d548d37bf9f0d7ec&chksm=f39a3649c4edbf5f4bef34715a26f88c78e9d15e942dd645ed6441c17e29a0aa6a9a07577a35&scene=21#wechat_redirect
青龙系统从2012年开始1.0的封闭开发,到2016年规划的6.0智慧物流,基本打造了一套完善的电商物流系统。
青龙系统1.0,主要实现了电商物流基础功能,满足了但是的核心业务诉求。青龙系统1.0上线,被京东当年评为优秀项目,成功之处就是比较好的遵循了MVP原则,也就是最初的版本只实现最有价值的部分。
青龙系统2.0,起于2013年,主要是追赶功能。到2.0完成开发时,青龙系统已经成为完善的自营电商物流系统。
青龙系统3.0,确立了以外单开放为主题。我们开发了青龙开放平台,接单系统,和主流的ISV软件完成对接,以及改造现有分拣,运输,配送等环节,来支持外单。
青龙系统发展到今天,已经包含了分拣中心,运输路由,终端,对外拓展,运营支持等五十余个核心子系统,构建了完善的电商物流体系。
青龙系统架构演进过程中,从高可用,高性能,数据一致性,用户体验四个方面,积累了丰富的经验,确保了青龙系统在发展过程赢得了公司内外的口碑。
(1)高可用
青龙系统作为京东后台物流系统,系统高可用也同样重要,对于系统高可用,主要包括:合适的架构方案;大系统小做,服务拆分;并发控制,服务隔离;灰度发布;全方位监控报警;核心服务,平滑降级。首先是选择合适的架构方案。互联网系统一般可以分为前端应用系统和后端数据库系统,前端应用系统实施分布式集群部署技术上是比较成熟的,后端数据库系统实现异地多活技术难度很大。对于大多数应用,前端应用双机房集群部署,后端数据库系统采取成熟的主备从的模式,也就是单个机房作为写入,备库在另外机房,可以快速进行切换,读库双机房部署,是优选的方案。对于这个架构方案,存在跨机房写延长的问题,可以根据场景利用异步的方式进行解决,一般也是没有问题的。对于青龙系统来讲,也有些特别,利用分拣中心的本地服务器和操作人员的设备,实现离线生产,进一步提高可用性。
(2)高性能
对应互联网服务来说,高性能是必须的,用户的响应一般都要求是秒级,而一个用户操作都包含多个服务调用,对应服务接口响应的要求都是毫秒级。对应青龙系统来讲,支持物流操作人员有十万余人,每个操作提升一秒,那么就能节约三个人员,意义是非常大的。青龙系统属于后台操作型系统,业务逻辑复杂,如果不能缓存,完全依靠数据库操作,那么,响应会超过数十秒。如何进行缓存,需要设计缓存系统进行支撑,青龙系统在演进过程中,依托公司的缓存服务,并且结合应用内存,包括Redis消息通知体系,构建了具有自己特色的缓存体系,很好的支撑了业务发展。
(3)数据一致性
一般需要考虑实时性和一致性,这两个最重要的维度,当然,数据量也是一个维度,一般我们认为是大数据的应用场景。
实时&强一致场景:
典型应用是生产系统的实时监控,例如实时生产量,各个生产环节差异量等,其实是作为生产系统的一部分。利用当前主流的大数据处理架构是可以解决的,例如线上生产库binlog实时读取,Kafaka进行数据传输,Spark进行流式计算,ES进行数据存储等。
实时&弱一致性场景:
典型的应用场景是消息通知,例如电商的全程跟踪消息,如果个别数据出现丢失,对于用户的影响并不大,也是可以接受的,因此,可以采用更加廉价的解决方案,应用完成对应的动作后,将消息发出即可,使用方订阅对应的消息,按照主键,如订单号,存储即可。
离线&强一致场景:
这是典型的大数据分析场景,也就是众多的离线报表模式。从技术上,传统的ETL抽取技术也能满足要求,数据仓库对应的技术也能够解决。
离线&弱一致场景:
对于抓取互联网数据,日志分析等进行统计系统,用于统计趋势类的应用,可以归为此类,这类应用主要是看能够有足够廉价的方案来解决,是不是可以巧妙的利用空闲的计算资源。这个在很多公司,利用晚上空闲的计算资源,来处理此类的需求。
用户体验:MVP原则,也就是敏捷开发中的迭代思路。对应一个大的项目,按照传统的瀑布模型,一般经历设计,研发,测试到最后上线阶段,这对于互联网应用来说,很多情况下是不能接受的,因为业务需求变化太快,如果上线周期太长,也许上线后发现情况已经变化了,或者,上线后发现不能落地推广。因此,对应一个大项目,一般会进行迭代分解,最核心的需求,会优先开发,并完成上线,上线验证后,继续开发优先级低的需求。
动态运营,其实也和MVP原则有很强的联系,也就是功能上线后,要真正运营起来,看具体数据,如果发现和设计不符合,那么,就要进行调整,到符合用户需求。这也是互联网服务的用户体验,要优于传统的软件开发系统,传统软件开发基本上上线后就不在优化了,而对于互联网服务来说,上线只是开始,只有将这个功能运营好,才叫好,并且,这个过程一直是持续的。