最近我在阅读2本关于大型网站架构的书:《大型网站技术架构——核心原理与案例分析》李智慧、《大型网站系统与Java中间件实践》曾宪杰。
我期望从这些书中学习到大型网站是如何做架构的,这个过程会遇到什么问题。当看完这2本书后,我总结出两个大问题:
1. 网站技术架构为什么会演进?换个说法就是为什么网站会变大?
2. 演进的过程会遇到什么问题?或者说为了演进,会遇到什么问题?
网站技术架构为什么会演进
我个人总结出来我们的技术架构演进的两种驱动力,驱动着我们为什么演进网站的技术架构:
1. 内在驱动力:我们期望把当前的业务做得更好,开发更多新业务
2. 外在驱动力:用户量的上升、用户种类的多样化
这两种驱动力不是独立的,更多时候是并行的。我想淘宝就是两种驱动力并行驱动的结果。
演进的原因很简单。但是在什么时机我们就应该演进网站的技术架构了,以及如何演进?面对这些问题,说实话,我没有任何经验,再说现实中每家企业当时都面临的问题都不一样,所以,我很难从经验中总结出什么是演进的时机。
但是我可以从另一个角度切入这个问题:研究网站内外结构,找到这些结构可能出现的问题点,知道或者预见到问题点了,你当然就知道应该怎么演进了。类似于你了解了PC机的结构,你也就知道什么时候要加内存了,什么时候要加硬盘了。
那么我们先看看网站的外部结构:
外部结构中,我们可以看由以下几个部分构成:
U:代表用户群。当用户群变了,我们的网站如何演进?用户群的分析,我目前能知道的维度有:数量,种类,地理位置(区域)。
N:代表网络环境。网络环境在每个地区都不同。你可以想像我们为什么需要CDN。当我们期望每个区域的用户都能得到好的体验,我们的网站如何演进?
S:代表安全。就是我们要安全到什么程度?这与网站当前所处阶段及你网站的性质有关。
C:代表我们的网站。属于内部结构
网站的内部结构:
内部结构的组成:
A:应用服务。
D:数据服务
总结下来就是我们在考虑网站是否应该演进了或者如何演进时,这些组成部分为我们提供了考虑问题的基准。
那么我们为什么不一开始就把网站设计成“大型”的。李智慧在后记里写到:“不要企图去设计一个大型网站”,“原因是互联网发展运行有其自己的规律,短暂的互联网历史已经一再证明这种企图行不通”。还说了:“大型网站不是设计出来的,而是逐步演化出来的”。对于最后这句话,我需要提醒下:“不是设计出来的”并不代表“随意设计”。
对于“大型网站的设计”,我个人的看法是现在我们的有“云”了,计算是可以买的,只要我们的设计能适应“云”,我是不是就可以一开始就设计大型网站了?
演进的过程会遇到什么问题
– 最初
从一个小网站说起。一台服务器也就足够了。
– 数据服务与应用服务分离
越来越多的用户代表着越来越多的数据,一台服务器已经满足不了。我们将数据服务和应用服务分离,给应用服务器配置更好的CPU,内存。而给数据服务器配置更好更大的硬盘。
– 使用缓存
因为80%的业务访问都集中在20%的数据上,如果我们能将这部分数据缓存下来,性能一下子就上来了。而缓存又分为两种:本地缓存和远程分布式缓存。具体使用哪种?还是两种都用,我目前不知道。