今天看了一下互联网用户外部网站演进的过程。一个客户,刚刚开始创业的时候,他们的所有的业务可能部署在一台单一的服务器上,这台服务器包括web应用服务器,包括文件系统和数据库,随着业务量的扩大,单台服务器已经不能满足用户的需求,他们会把这些具体的应用进行区分,比如说web服务器单独占一台服务器,文件服务器占一台,数据库服务器占一台。随着业务量的进一步提升用户数不断的增加单台数据库服务器也不能够满足应用的需求,这个时候就需要对数据库进行改造,比如把数据库分成主备系统,所有的数据从主数据库写入从被数据库读取,以减小数据库服务器的负担。通常在应用层面有可能把对数据库的读取做成一个单独的模块,通过这个模块统一对数据库进行操作,以实现效率的最大化。随着业务的进一步发展,数据库依然面临着压力,毕竟无论是服务还是应用,都会对数据库进行访问,这个时候可以在数据中心内部设置缓存,将一些经常需要访问的数据放入缓存,直接从缓存读取以减轻数据库的负载。这些缓存服务器也叫分布式缓存服务器。无论如何缓存都是提高系统性能的不二法宝,比如说在应用层可以设置本地的缓存来增强应用层的性能。
随着用户量和使用规模的进一步扩大,下一步可以对应用进行分拆,我们可以把应用根据他的特点,分成不同的应用模块,每个模块儿有单独的研发团队进行调试研发和维护。这样不仅从结构上八业务进行分开,而且任何一个模块儿的变动,不会对其他模块产生相应的影响,使系统达到松耦合的状态。随着业务进一步的发展,我们可以把很多功能相同,可以同时复用的组件拿出来作为一个模块,所有其他的模块对该模块进行调用,从而更有效的实现数据的交互。在数据交互的过程中,如果无法及时处理请求可以将这些请求放入队列中,稍后处理,这不讲,可以及时对用户的请求进行反馈,而且避免等待,请求的反馈而影响整个操作流程的顺畅进行。那么这一部分组价就是队列。队列也作为一个公共的模块起作用队列的访问者分为生产者和消费者,生产者会把请求放入队列消费者呢会从队列中提取请求进行处理。这是大型互联网站异步处理的一部分。
接下来我们还可以在数据中心的外部增加cdn系统,这些cdn系统通常是由第三方提供的,用于缓存图片视频js和CSs这些静态文件。他们本质上也是缓存的一种应用,是将数据放在尽量靠近用户的位置,从而提高对用户请求的响应速度。接下来可以进一步优化的事数据存储服务器,数据存储服务器的最终发展形式是分布式存储,分布式存储一般采用nosql技术实现对海量数据的存储。对海量数据进行存储,必须通过搜索引擎来实现对海量数据的查找。在互联网业务网站的架构设计中,实际上每一部分都涉及到计算,但是有一些部分计算特点异常明显,比如说搜索引擎建立,大数据的处理和分析工作,这些都需要非常多的计算量,而这些计算量就是依靠分布式计算系统,在数据最为集中的位置进行分布式计算。这些计算通常是把计算任务进行分割,将分割的计算任务分配给多台服务器或者服务器集群,分别进行计算,并将结果最终收集在一起进行汇总,从而实现对海量数据的计算目标。
说了那么多,实际上互联网站的设计可以从垂直方向进行划分,可以把它划分为前端,应用层,服务层和数据层。每个层可以在进行分割分割成各个不同的模块。每个模块儿都可以采用集群的方式进行伸缩。通过对每个模块儿的伸缩最终实现一个可扩展的业务结构。在这其中数据层大概是最难实现可伸缩性的部分,分布式数据存储部分解决了这个问题。
以上讲了大型互联网网站所使用的一些技术,究竟什么技术是最适合用户的,是否将所有的技术都要用在用户的业务系统中呢?其实不是这样的,每一个用户都有自己的发展阶段和业务特点,业务规模,只有最适合用户特点的解决方案才是最好的。加工师的职责就是利用自己对产品熟悉的优势帮助用户更好的开发利用基于云平台得有系统,从而能使用户在开始发展到最终整个业务周期内,基于云平台做适合自己业务需求的演进。