大型网站技术架构 核心原理与案例分析
传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。IT系统应用于企业管理已有超过半个世纪的历史,人们在这方面积累了大量的知识和经验(架构模式,领域分析,项目管理),而真正意义上大型网站从出现至今不过短短十多年的时间,很多技术挑战还在摸索阶段。市面上关于传统企业应用开发的书籍汗牛充栋,而真正能够深入全面地阐述大型网站技术架构的图书寥寥无几。所以很多人就很困惑:为什么很多看起来不是很复杂的网站,比如Facebook、淘宝,都需要大量顶尖高手来开发呢?
值得庆幸的是,作者为我们带来了这本《大型网站技术架构:核心原理与案例分析》,比较全面地阐述了大型网站的主要技术挑战和解决方案。宏观层面上,将网站架构的演化发展、架构模式、核心要素一一道来;微观层面上,将网站架构常用的分布式缓存、负载均衡、消息队列、分布式服务、甚至网站如何发布运维都逐一进行了阐述。大型网站的技术之道尽在于此。
这些年互联网技术蓬勃发展,各种成熟的组件、工具、框架越来越丰富,各种理论逐渐发展成熟,各大公司公开的理论和实践资料也越来越多,在各个领域都有比较成熟的解决方案,但是研究领先互联网公司的架构,无论是Google、Facebook、Amazon还是淘宝、支付宝、腾讯、百度,都各有其独特的地方。
各个环节都有成熟的产品或者方案,为什么这么多互联网公司的架构还有如此明显的差异呢?是不是照着Google、Facebook、淘宝的架构做,就能做好一个“大型的互联网应用”呢?
正如本书中所言:“好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握。”
这些大型的互联网应用是设计出来的?还是演化出来的?在设计的过程中需要考虑哪些因素?演化过程中都会面临哪些问题,哪些挑战?
本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素面临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合目前成熟的解决方案,以及作者自己的工作经验,理论联系实际,踏实细致地提出合理的解决方案,非常值得我们学习和借鉴。
作者还通过对淘宝、Wikipedia、分布式存储系统、秒杀系统等案例的分析,仔细探讨了典型互联网架构的演进过程,剖析了分布式系统设计和实现中的挑战和解决方案,并研究了极端情况下,秒杀给网站带来的难以预计的瞬间高并发冲击的应对策略和架构设计。还通过一些实实在在发生过的故障案例分析,从另一个侧面来说明,我们在做技术架构时,需要考量的一些关键点,这些分享都是不可多得的血泪经验。