互联网在变,架构也在变。架构的变迁亦是互联网的变迁。
何为架构?往大了说,宇宙有架构,社会有架构;往小了说,建筑要有架构,软件要有架构;说玄乎一点,它由分工而来,回归整体而去;往实际了说,架构的核心就是为了解决问题,包括业务的问题、人的问题。
立足互联网行业,架构通常指的是技术架构,更具体一点的说是系统架构、软件架构,或者是最常见的网站架构。
本文就来探讨一下互联网时代,技术架构的演进过程及其优缺点。
为了方便表述,我姑且把互联网的架构演进过程分为三个时代:单机时代、集群时代和分布式时代。三个时代并非按照时间发展顺序排列,更多的是由团队或产品所处的时期来决定。
单机时代
互联网早期,好比某个产品团队初创之时,资源有限,人力不足,为了快速开发一个产品,或上线一个网站,单机往往是一个不错的选择。此时会将应用程序、文件服务、数据库服务等资源集中在一台Server上。其中应用程序通常整体打包和部署,具体格式依赖于应用的语言和框架,例如Java的WAR文件、Rails的目录文件,此种架构通常称为单体架构。
单体架构
其系统架构图往往长这个样子:
图-1:单机时代-ALLINONE○
优点:如上文所述,简单快速,易于开发,易于测试,易于部署
○
缺点:也非常显著,只适合早期项目,变大后不易维护,且存在单点,升级需要停服
分层架构
明眼人会发现,此时的应用程序架构显得杂乱无章。在早期的Web开发中可能存在,比如使用JSP+JDBC,ASP+ADO,这显然不是一个友好的标准架构,于是分层架构应运而生。
分层架构如下图所示,一般分为表现层(presentation)、业务层(business)、持久层(persistence)和数据库(database)。这其实也是最常见的MVC架构。
图-2:单机时代-软件架构-分层架构
改造之后的系统架构图如下:
图-3:单机时代-分层架构○
优点:结构简单,分工明确,分层测试,如果你不知道用什么软件架构时,推荐用它
○
缺点:扩展性差,迭代开发效率低,有时候层次过多导致流程复杂
数据分离
添加了分层架构,应用上好看点了,团队的开发效率有了一定的提升。此时业务量进一步增大,并且有了一定的用户规模,逐渐发现一台主机上应用和数据资源争夺的非常厉害。因为每种服务对硬件资源的要求是不同的,应用服务器需要更快的CPU,文件服务器需要更大的硬盘,数据库服务器需要更大的内存和硬盘,于是决定把应用和数据服务分离,形成了如下架构:
图-4:单机时代-数据分离○
优点:资源分散,提高不同服务对硬件的利用率,方便维护
○
缺点:增加了资源消耗和网络开销,同时还存在单点
缓存登场
产品有了一定的口碑,用户量持续增长,访问开始频繁,想提升访问速度,缓存必不可少,此时便闪亮登场。
图-5:单机时代-缓存登场服务端缓存又可以分为本地缓存和远程缓存,各有优劣,本地缓存访问速度快,但数据量有限,而且后续集群化不方便共享;远程缓存可以共享,可以集群,容量不受限制,但要注意缓存更新的问题。
○
优点:简单有效,减少对DB的查询
○
缺点:增加逻辑判断,不适合存储大对象,此架构同样有单点
读写分离
市场反响不错,业务也在持续增长,但性能又有所下降,分析整个架构,发现数据库读写非常频繁,甚至有些业务,读大于写,单台数据库服务器又成了瓶颈,此时就可以尝试做读写分离和主从复制了。
图-6:单机时代-读写分离○
优点:降低数据库单台压力,从机的数量可以灵活变更
○
缺点:架构开始变得复杂,维护难度加大
自此,单机时代的架构已然成型,“麻雀虽小五脏俱全”,初期已经能很好地支撑业务的运转。
但随着业务的增长,各个模块还是可能出现瓶颈。单机时代最大的问题,就是整个架构都存在单点,这个问题将在集群时代一一解决。
集群时代
单机时代,做了不少措施来缓解数据库层的压力,包括服务器分离、引入缓存、数据分离等,但随着访问量的猛增,对高可用的要求越来越高,减轻应用层压力、解决单点问题成了当务之急,这就是集群时代需要做的事情。
负载均衡
代码是架构的基础,但前期改造代码的工作量较大,如果人员变动频繁,那风险就更高了,所以提高服务器性能,常用的手段还是先将应用集群化,做负载均衡。
图-7:集群时代-负载均衡○
优点:去除应用层单点,可用性得到保证,性能有所提高
○
缺点:这时要注意应用之间的一致性问题,比如对缓存的访问,对Session的存储
动静分离
希望进一步降低应用服务器的压力,可以采用动静分离技术。
动静分离是让动态网站里的动态网页,根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好拆分以后,我们还可以根据静态资源的特点将其做缓存操作,以加快响应速度。
在网易杭研,常用做法还会将前后端分离,后端应用提供API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。
图-8:集群时代-动静分离○
优点:减轻应用服务器压力,缓存静态文件,加快响应速度,前后端分离,开发可以并行。
○
缺点:静态文件缓存更新失效问题,前后端沟通成本提高
CDN加速
内容分发网络(ContentDeliveryNetwork),简称CDN),可以进一步加快网站响应。其原理是将源内容同步到全国各边缘节点,配合精准的调度系统,将用户请求分配至最适合他的节点,使用户可以以最快的速度取得所需内容。
图-9:集群时代-CDN加速○
优点:解决网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问的响应速度,减轻应用负载压力。
○
缺点:显然成本上去了,CDN服务一般是按流量计费,同时也存在静态文件缓存更新失效问题。
冗余集群
以上一个中型网站架构基本成型。当中型网站继续向大型网站演进,最终的目标是要保证“三高”:高并发、高性能、高可用。
以上架构基本可以满足性能需求,接下来更多地是北京有白癜风专科医院吗江苏白癜风医院