前言
本书的创作初衷
任何一本书,都是一个用于承载和传递知识的载体,读者可以从中探寻自己想要的答案。对我而言,书本就是带我领略奇妙计算机世界的最快途径。之所以想创作一本与大型网站架构相关的书籍,是因为最近几年我在实际的开发过程中经历了太多的技术难题,每当我和我的技术团队尝试解决这些问题之前,都会先尝试从市面上现有的技术书籍中寻求解决方案;但事与愿违,目前市面上高歌架构理论的读物居多,真正讲解大型网站架构解决方案的书籍却寥寥无几。对于这块领域的空白,我想尝试着去创作,把我这些年的经历和经验写出来,让更多人受益,毕竟架构是需要落地的,否则便是一纸空谈。
本书内容重点
本书一共5章,而每一章的内容几乎都是独立的,大家完全可以有选择性地进行阅读。在第1章中,笔者特意选择了以服务化架构作为全书的开篇,结合笔者多年来的实践经验,从0到1为大家讲解了大型网站架构的演变过程,以及在大规模服务化场景下企业应该如何实施服务治理。
验证系统所能够承受的最大负载是否接近于预期,是否经得住大流量的冲击,绝非是一件易事。有过分布式系统开发经验的同学都应该非常清楚,简单对某个接口、子系统进行压测,并不能够准确探测出系统整体的容量水位,这是由分布式系统与生俱来的复杂性决定的,并且对环境、目标都有着极为严苛的要求。近些年,全链路压测似乎备受追捧,基本上各大互联网企业,比如,阿里、京东等都会在大促前夕利用自研的“军演系统”在线上进行压测实战演练,其目的就是确保大促来临时核心链路的整体稳定。在第2章中,笔者重点为大家介绍了如何在大促前夕对线上环境实施全链路压测,以及如何做到有指导地在大促前进行容量规划和性能优化,让系统坚如磐石。
像天猫这种级别的大型电商网站,主要的技术挑战是来自庞大的用户规模所带来的大流量、高并发,以及海量数据,在“双11”“双12”等大促场景下尤为明显。如果不对流量进行合理管制,肆意放任大流量冲击系统,那么将会导致一系列的问题出现,比如一些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量降低,最终必然会导致系统产生雪崩效应。在第3章中,笔者重点讲解了如何有效地对流量实施管制,只要我们能够采用合理且有效的方式管制住峰值流量,使其井然有序地对系统进行访问,那么无论在任何情况下,系统都能够稳定运行。
热点数据的大并发读/写操作,可谓是秒杀、限时抢购等场景下最核心的2个技术难题。针对热点数据的大并发读操作,尽管我们可以通过分布式缓存来提升系统的QPS,但是缓存系统的单点容量还是存在上限的,一旦超过临界水位,分布式缓存容易被瞬间击穿。而热点数据的大并发写操作,势必会下潜至数据库,那么这就会引起大量的线程相互竞争InnoDB的行锁,并发越大时,等待的线程就越多,这会严重影响数据库的TPS,导致RT线性上升,最终导致系统发生雪崩。在第4章中,笔者会重点为大家讲解大促抢购核心技术难题的一系列解决方案。
在第5章中,笔者详细为大家讲解了在互联网场景下关系型数据库的架构演变过程。当大家清楚为什么关系型数据库需要进行分库分表后,笔者又实战演示了如何使用Shark中间件来完成数据路由,以及业务实施分库分表后的诸多注意事项和数据库的HA方案等。最后,还结合了实际的订单业务场景为大家重点讲解了如何保证数据的最终一致性。
本书面向的读者
本书适用于任何对大型网站架构感兴趣的架构师、开发人员,以及运维人员。我尽量用通俗易懂的文字描绘书中的各章知识点,更是结合了实际的业务场景引入了大量的真实案例,相信阅读完本书后你将能有所裨益。
读者讨论
由于能力有限,书中难免会出现一些错误或者不准确的地方,大家可以通过邮件gao_xianglong@sina.com将问题反馈给我,我会及时予以答复。
致谢
首先我要感谢我的妻子,是你的支持和鼓励才让我有了继续创作的勇气。每当我头痛欲裂思绪全无时,你的陪伴点燃了我在每个凌晨的斗志,我爱你。
其次,本书的顺利出版离不开孙学瑛老师及博文视点团队的共同努力,感谢你们的辛苦付出。最后,还要感谢那些一路支持我的读者朋友们,谢谢你们。
2019年11月05日凌晨