读《大型网站技术架构》之后的思考

《大型网站技术架构》这本书是李智慧著,电子工业出版社出版。

阅读本书的收获是,书中勾勒的大型网站建设的蓝图,提升了我对网站架构整体的认知,如大型网站建设时常用的模式(问题以及对应的解决方案)、大型网站建站的要素(性能、可用性、可伸缩性等)。回想之前写的文章,"从lamp到高可用的web架构的演进",文章只是从整体且偏运维的角度粗略的描述了构建一个高并发、高性能网站的迭代步骤,但未提炼出网站架构中的模式和要素,而本书恰好在这方便做了很完善的总结。

豆瓣上有对该书的评价说只是一本互联网架构的科普书,我比较认同这个观点,书中确实没有技术细节的讲解。但我认为本书重点是思路的指导,而不是技术细节的教学,例如:当业务发展到一定规模时,可以考虑业务上分层、应用上分割和使用分布式、集群、自动化等技术手段消除单点瓶颈、提高访问速度和提升维护效率等。若期望在本书得到类似分库分表、读写分离等技术方案,那就是缘木求鱼了。

书中的概念

首先,阅读本书我收获的是对几个名词概率的理解。

架构。维基百科的定义:“有关软件整体结构和组件的抽象描述,用于指导大型软件各个方面的设计。”

简单的理解,架构=系统中的重要组件+组件之间的关系。

模式。建筑学中对模式的定义:“每个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次的重用该方案而不必要做重复的工作”。

简单的理解就是,模式=问题+解决方案。想想OO中的设计模式,不也就是针对一些经常重复出现的问题提出的解决方案吗?书中描述的网站架构的模式,也就是网站在不断演进过程中的遇到的一些问题及其对应的解决方案。

分布式计算和并行计算。分布式计算是使用更多的计算机完成更多的任务,而并行计算是使用更多的计算机更快的完成任务。

集群。多台服务部署相同的应用构成一个集群,通过负载均衡设备对外提供服务。

可伸缩性和扩展性。所谓的伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问的压力和不断增长的数据存储需求。扩展性直接关注网站的功能需求,其目的就是快速的响应需求的变化。

之前一直没注意区分架构中的可伸缩性和可扩展性,实际上二者的差距还是挺大的,可伸缩性,更偏向运维,而可扩展性,更偏向于开发。

书中的一些有启发的观点

技术是用来解决业务问题的,而业务问题,也可以通过业务的手段解决。

书中列举的12306春节售票的例子。最开始,12306提前一个月售票,到了售票的时间点了,大家蜂拥而上,中国那么多人,后台要部署多少台服务器才能抗住这样的并发。后来靠通过优化业务流程,通过分时段,限量售票,从业务的角度解决了高并发问题。想想这个和电商在大促期间分时段抢购是一个路子啊。

企图用技术手段解决所有业务问题,有时是不现实的。有时可以考虑通过业务策略的调整,均衡压力。

好的设计绝对不是模仿,不是生搬硬套某个模式,而是对问题深刻理解之上的创造与创新,即使是“微创新”,也能让人耳目一新。

书中列举了新浪微博消息发布从推模式改为异步推拉模式组合的例子。最开始,用户发表微博之后,系统会将该微博插入到数据库所有粉丝的列表中,对于明星用户,发表一条微博,会为引起大量的数据库写操作,从而导致数据库超载。最后的解决方案,增加消息队列,快速的响应用户的操作,然后再异步的插入到数据库中在线粉丝的列表中,同时,对于离线用户,下次登录时,采用拉的模式,拉取订阅列表。

书中知识点梳理

读《大型网站技术架构》之后的思考_第1张图片
大型网站架构.png

你可能感兴趣的:(读《大型网站技术架构》之后的思考)