《京东峰值系统设计》有感

 在京东618店庆和双11等大规模的促销活动时,因为用户抢购、促销和恶意攻击会影响电商流量峰值。这时京东系统高流量,高并发,这时如果保证系统的可靠性和稳定性成了研发团队需要面临的难题。

  京东电商系统的设计是围绕系统稳定性、可靠性、高并发和可扩展性为核心开展的。京东系统的特点:业务种类繁多;内部系统容纳很多,包括了商品供应链中除商品设计和生产外的几乎所有环节;整个京东体系及其复杂庞大;系统交互性强,各个功能模块之间关联性强。因此要缓解峰值带来的压力,京东峰值系统的设计主要从性能提升、流量控制、灾备降级、压测预案四个角度来进行。

(1)切分业务系统

  先将真个业务体系拆分为几个相对独立的子系统,然后将每个子系统细分为若干部分,逐级简化,直至可操作可优化的层级。接下来,针对每个功能模块的关键字部分进行切分,有针对性地做性能优化。比如秒杀系统,当流量突然增大时,不仅会导致秒杀系统反应迟钝,而且会影响普通交易系统。于是京东将秒杀做成一个独立的子系统,减少对后台存储的依赖。同时优化中间层存储机制,使得相对热点分散部署。

(2)分布式

   分布式系统可以解决提高用户体验和增强容错能力的问题。分布式操作系统,当一处数据中心饱和时,可以将其余的流量切入其他相对宽松的数据中心去,从而可以互为备份、互相支持。同时,由于提供用户就近服务,所以减少网络延时,页面反应速度也加快。

(3)API服务化

在各个系统中有很多相同的组件,API服务化可以高效统一地管理中间组件。 比如Redis

是京东常用的缓存组件。当各个业务团队分别维护时,专业性不强,使用有很多不当之处。但当集中管理之后,统一定制开发新功能和升级,并通过API服务化提供给各级用户。这样不但丰富了应用场景,还提升了性能和可靠性。

(4)架构,代码优化

   系统的架构可以直接决定可支撑峰值流量的多少和未来能达到的高度。选取适合自身发展的框架,既能充分发挥其效能,又可节约资源。比如对SQL语句的优化能更好地利用索引;Java/C++逻辑的优化,减少了不必要的循环和复杂的操作;算法优化使之更高效;功能实现逻辑的优化,变得更简洁和清晰。但代码优化终究不能冲破极限,难以追求极致,适可为止为宜。

(5)系统虚拟弹性化

当磁盘I/O不是瓶颈时,解决系统水平扩展就会变得容易许多。可以通过ZoopKeeper或类ZooKeeper将软件栈有机的串联起来,并配以高效的性能监管。当事务处理成为瓶颈时,利用当今流行的虚拟化技术可以在没有1认为干预的状况下自动进行弹性扩展。

总结:

京东系统通过切分业务系统、分布式、API服务化、架构,代码优化、系统虚拟弹性化高流量、高并发的情况下可靠性和稳定性的难题。

        

原文地址:https://www.cnblogs.com/wl2017/p/11037833.html