互联网时代架构变迁

何为架构?往大了说,宇宙有架构,社会有架构;往小了说,建筑要有架构,软件要有架构;说玄乎一点,它由分工而来,回归整体而去;往实际了说,架构的核心就是为了解决问题,包括业务的问题、人的问题。
 
立足互联网行业,架构通常指的是技术架构,更具体一点的说是系统架构、软件架构,或者是最常见的网站架构。
 
本文就来探讨一下互联网时代,技术架构的演进过程及其优缺点。
 
为了方便表述,我姑且把互联网的架构演进过程分为三个时代:单机时代、集群时代和分布式时代。三个时代并非按照时间发展顺序排列,更多的是由团队或产品所处的时期来决定。

单机时代

互联网早期,好比某个产品团队初创之时,资源有限,人力不足,为了快速开发一个产品,或上线一个网站,单机往往是一个不错的选择。此时会将应用程序、文件服务、数据库服务等资源集中在一台 Server 上。其中应用程序通常整体打包和部署,具体格式依赖于应用的语言和框架,例如 Java 的 WAR 文件、Rails 的目录文件,此种架构通常称为单体架构。

单体架构

其系统架构图往往长这个样子:


 
○ 优点:如上文所述,简单快速,易于开发,易于测试,易于部署
 
○ 缺点:也非常显著,只适合早期项目,变大后不易维护,且存在单点,升级需要停服

分层架构

明眼人会发现,此时的应用程序架构显得杂乱无章。在早期的 Web 开发中可能存在,比如使用 JSP+JDBC,ASP+ADO,这显然不是一个友好的标准架构,于是分层架构应运而生。
 
分层架构如下图所示,一般分为表现层(presentation)、业务层(business)、持久层(persistence)和数据库(database)。这其实也是最常见的 MVC 架构。
 

 
改造之后的系统架构图如下:
 

 
○ 优点:结构简单,分工明确,分层测试,如果你不知道用什么软件架构时,推荐用它
 
○ 缺点:扩展性差,迭代开发效率低,有时候层次过多导致流程复杂

数据分离


添加了分层架构,应用上好看点了,团队的开发效率有了一定的提升。此时业务量进一步增大,并且有了一定的用户规模,逐渐发现一台主机上应用和数据资源争夺的非常厉害。因为每种服务对硬件资源的要求是不同的,应用服务器需要更快的CPU,文件服务器需要更大的硬盘,数据库服务器需要更大的内存和硬盘,于是决定把应用和数据服务分离,形成了如下架构:
 

○ 优点:资源分散,提高不同服务对硬件的利用率,方便维护
 
○ 缺点:增加了资源消耗和网络开销,同时还存在单点

缓存登场

产品有了一定的口碑,用户量持续增长,访问开始频繁,想提升访问速度,缓存必不可少,此时便闪亮登场。
 

 
服务端缓存又可以分为本地缓存和远程缓存,各有优劣,本地缓存访问速度快,但数据量有限,而且后续集群化不方便共享;远程缓存可以共享,可以集群,容量不受限制,但要注意缓存更新的问题。
 
○ 优点:简单有效,减少对 DB 的查询
 
○ 缺点:增加逻辑判断,不适合存储大对象,此架构同样有单点

读写分离

市场反响不错,业务也在持续增长,但性能又有所下降,分析整个架构,发现数据库读写非常频繁,甚至有些业务,读大于写,单台数据库服务器又成了瓶颈,此时就可以尝试做读写分离和主从复制了。
 

 
○ 优点:降低数据库单台压力,从机的数量可以灵活变更
 
○ 缺点:架构开始变得复杂,维护难度加大
 
自此,单机时代的架构已然成型,“麻雀虽小五脏俱全”,初期已经能很好地支撑业务的运转。
 
但随着业务的增长,各个模块还是可能出现瓶颈。单机时代最大的问题,就是整个架构都存在单点,这个问题将在集群时代一一解决。

集群时代

单机时代,做了不少措施来缓解数据库层的压力,包括服务器分离、引入缓存、数据分离等,但随着访问量的猛增,对高可用的要求越来越高,减轻应用层压力、解决单点问题成了当务之急,这就是集群时代需要做的事情。

负载均衡

代码是架构的基础,但前期改造代码的工作量较大,如果人员变动频繁,那风险就更高了,所以提高服务器性能,常用的手段还是先将应用集群化,做负载均衡。
 

 
○ 优点:去除应用层单点,可用性得到保证,性能有所提高
 
○ 缺点:这时要注意应用之间的一致性问题,比如对缓存的访问,对Session的存储

动静分离

希望进一步降低应用服务器的压力,可以采用动静分离技术。
 
动静分离是让动态网站里的动态网页,根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好拆分以后,我们还可以根据静态资源的特点将其做缓存操作,以加快响应速度。
 
在网易杭研,常用做法还会将前后端分离,后端应用提供 API,根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。
 

 
○ 优点:减轻应用服务器压力,缓存静态文件,加快响应速度,前后端分离,开发可以并行。
 
○ 缺点:静态文件缓存更新失效问题,前后端沟通成本提高

CDN 加速

内容分发网络(Content Delivery Network),简称 CDN),可以进一步加快网站响应。其原理是将源内容同步到全国各边缘节点,配合精准的调度系统,将用户请求分配至最适合他的节点,使用户可以以最快的速度取得所需内容。
 

 
○ 优点:解决网络带宽小、用户访问量大、网点分布不均等问题,提高用户访问的响应速度,减轻应用负载压力。
 
○ 缺点:显然成本上去了,CDN服务一般是按流量计费,同时也存在静态文件缓存更新失效问题。

冗余集群

以上一个中型网站架构基本成型。当中型网站继续向大型网站演进,最终的目标是要保证“三高”:高并发、高性能、高可用。
 
以上架构基本可以满足性能需求,接下来更多地是关注“高可用”,确保“无单点”。
 
此时,就要对关键的服务,做冗余集群负载。
理想情况下,我们将以下服务/应用都集群化:
 
1. 数据库服务集群
2. 文件服务集群
3. 缓存服务集群
4. 应用服务集群
5. 负载均衡调度器集群
6. 静态内容服务集群
7. CDN服务器集群
 

 
○ 优点:去单点,高可用
 
○ 缺点:数据有状态问题、数据一致性问题,资源成本、人力维护成本都上去了
 
到此为止,一个大型网站的架构也基本成型了。能“加机器”的地方都加完了,是不是就终结了?当然不是!伴随着 DT/分布式 时代的到来,大流量和大数据的场景的出现,对应用提出了更高的要求,接下来就需要对应用程序开刀了。

分布式时代

应用拆分

在前面,我们只是把应用程序做了分层架构,在创业初期或产品前期还是一个不错的选择。虽然应用也做了集群和负载均衡,但应用架构层面还是“集中式”的。随着业务越来越复杂,网站的功能越来越多,应用拆分势在必行了。
 
○ 优点:应用解耦,分拆团队负责,分而治之
 
○ 缺点:架构变复杂
应用拆分之后,还伴随着一个相互依赖、公共模块的问题,特别是依赖于相同的逻辑或功能代码。这时就可以考虑将这些共用的服务提取出来,独立部署,统一治理,提高重用度,这就是面向服务的架构(service-oriented architecture,缩写 SOA)了。

消息队列

应用拆分、服务独立部署之后,还是会出现一些通信或依赖问题,这时就可以引入消息队列,提高吞吐量。
 
○ 优点:异步、解耦,提高吞吐量
 
○ 缺点:消息消费延迟等问题

数据分库

应用拆分之后,DB分库理所当然,否则多个应用连接在单个数据库上,连接数、QPS、TPS、I/O处理能力都非常有限。
 
○ 优点:DB分压,降低耦合
 
○ 缺点:数据访问模块冗余、复杂
 
提到分库,不少人会想到分表,这一块我并未实践过,不好下笔。但想来会引入更复杂的数据架构和数据一致性问题,而且市面上成熟开源的分库分表方案并没有,保不准又是一个深坑。拆或不拆,也是一个值得思考的问题。

微服务架构

微服务架构(microservices architecture)一度成为热点,在文章、博客、大会演讲上经常被提及。
 
微服务并不是凭空出现,有人说,它是面向服务架构(SOA)的升级,在此之前,还有诸如集中式架构、分布式的架构等。这里借用一副抽象的图来描述下常见的几种架构:
 

 
微服务架构由多个微小服务构成,每个服务就是一个独立的可部署单元或组件,它们是分布式的,相互解耦的,通过轻量级远程通信协议(比如REST)来交互。每个服务可以使用不同的数据库,而且是语言无关性的。它的特征是彼此独立、微小、轻量、松耦合,又能方便地组合和重构,犹如《超能陆战队》中的微型机器人,个体简单,但组合起来威力强大。
 

 
○ 优点:扩展性好,服务之间耦合性低,服务间相互独立,容易部署,易于开发,方便测试每一个服务
 
○ 缺点:容易过度关注服务的大小,可能拆分地很细,导致系统依赖于大量的微服务,而服务之间的相互通信也会变得复杂,系统集成复杂度增加,很难实现原子性操作
 
微服务之所以这么火,另一个原因是因为 Docker 的出现,它让微服务有一个非常完美的运行环境。Docker 的独立性和细粒度非常匹配微服务的理念,Docker的优秀性能和丰富的管理工具,让大家对微服务有了一定的信心,概括来说 Docker 有如下四点适合微服务:
 
独立性:一个容器就是一个完整的执行环境,不依赖外部的任何东西。
细粒度:一台物理机器可以同时运行成百上千个容器,其计算粒度足够小。
快速创建和销毁:容器可以在秒级进行创建和销毁,非常适合服务的快速构建和重组。
完善的管理工具:数量众多的容器编排管理工具,能够快速地实现服务的组合和调度。
 
当然,好的架构和技术要应用于实践,需要用户认可才行,这就需要在微服务架构和 Docker 技术上有丰富的场景化应用。网易云基础服务也在积极探索微服务架构和容器云平台的场景化服务,欢迎一起来实践落地。
 
至此,架构变迁的三个时代介绍完成。总的来说架构不是一成不变的,时间不停,进步不止,人如此,架构依然。

后记

对我来说,架构之路小有实践,但实属尚浅,想探讨下这个话题,一下不知从何下笔,沉思良久,想到之前读过不少业界前辈对于架构的论述,比如王概凯老师执笔的《架构漫谈》,比如 O’Reilly 免费出版的小册子《Software Architecture Patterns》,比如前人对架构的探索总结,受益匪浅,汇集成文。

转载自 https://sq.163yun.com/blog/article/155776878871519232

原文地址:https://www.cnblogs.com/FromZeroToGod/p/10118365.html

时间: 2024-10-14 22:36:23

互联网时代架构变迁的相关文章

CSDN日报20170509 ——《互联网时代架构师的职责与思考》

[程序人生]互联网时代架构师的职责与思考 作者:木小鱼 在当下的互联网时代,架构师是互联网行业的热点关键词,人云亦云者居多,那互联网架构师到底是做什么的,如何来评价互联网架构师的优劣呢? 点击阅读全文 [Android]手把手教你构建 Android WebView 的缓存机制 & 资源预加载方案 作者:Carson_Ho 由于H5具备 开发周期短.灵活性好 的特点,所以现在 Android App大多嵌入了 Android Webview 组件进行 Hybrid 开发,但我知道你一定在烦恼 A

互联网+时代,共同建造云安全架构互联生态体系

在互联网+时代,首先企业公有云.私有云的应用,云化趋势迫使形势越来越复杂.防范的难度也随之叠加.再一个是攻防时间严重失衡,当黑客入侵的周期非常短,74%的攻击可以在一天内破译,而检测以及修复漏洞我们需要几天.几个星期甚至上月的时间.在资源短缺,受成本因素影响的情况下,企业IT安全预算相对缺乏,专业的安全运维人员缺乏,迫使企业需要利用更少的资源,更快地解决严重的威胁. 那么,如何让安全策略变得完善?让安全架构具备通过过去的事物进行学习和自适应的能力.简单说,就是变被动攻击为主动防御,一方面,在攻破

web前端工程师在移动互联网时代里地位问题

支付宝十周年推出了一个新产品:支付宝的十年账单,我也赶个时髦查看了一下我的支付宝十年账单,哎,感慨自己真是太屌丝了,不过这只是说明我使用淘宝少了,当我大规模网上购物时候,我很讨厌慢速的快递,所以我大部分消费都贡献给了像京东这样具有火箭般快递速度的电子商城了.不过在支付宝十年账单里,有个统计数据引起了我的危机意识,在中国一些偏远或者是经济欠发达的省份,电子购物在居民的全部消费里的占比比发达地区高多了,而这个的助推剂居然是移动互联网在中国的普及,在中国使用智能手机和平板电脑购物的人们已经远超使用PC

互联网时代下的生存方式:产品型社群

--你以为你的对手是友商,其实你的对手是时代. <<<-------------  <_< 向左看 互联网在兴起的二十年间,极大地改变了社会底层架构,有光纤的地方,信息传递的速度几为光速,信息流转的方式发生变化.互联网不仅是工业时代的工具或一次科技进步,它应被视为一个独立的时代,而当下最大的颠覆也正是互联网时代对工业时代的颠覆.时代颠覆的力量向来摧枯拉朽,回顾历史,貌似强大的北洋水师惨败于甲午海战,背后交锋的其实是两个时代,是农业时代对工业时代的惨败. 旧有体系被颠覆,要生存

“互联网+”时代,企业移动云生态体系如何构建?

光明网专访正益移动CEO王国春 信息技术的不断迭代升级,催生众多产业的"创业创新"新浪潮.在新一轮数字经济变革中,企业移动化应用需求发生了哪些变化?大数据.云计算等新技术的日益成熟,让移动应用支撑平台获得哪些新的能力,企业厂商又该如何抓住机遇,部署自己的移动云生态体系? 本月27日,即将在京召开的"2015 AppCan移动云大会"欲探讨上述问题.光明网记者近日专访正益移动AppCanCEO王国春,从他的角度解读新一轮企业移动化变革. 开源+开放,整合B2D和B2B

App服务端架构变迁

随着移动互联网时代的到来,移动技术也随之飞速发展.如今,App已然成为绝大多数互联网企业用来获取用户的核心渠道.以往以PC为主要承载平台的各业务线,源源不断集成加入到移动项目中来,原本以产品为中心快速迭代的单一开发模式,已经无法应对这汹涌爆炸式的业务接入和高速增长.同时伴随着用户量的增长,流量的持续暴增,系统架构面临的一系列挑战和转型.怎么构建出高可靠.高扩展.低成本.多快好省系统体系架构已成为业界乐而不厌的长谈话题. 发展 2010年-2012年 2010年移动端刚刚兴起,公司组建了移动团队(

程序猿崛起2——互联网时代下的新潮流和新活法

写在前面的话 在写完<程序猿崛起>之后,脑子里面有很多之前模糊的想法和头绪都渐渐在清晰,仿佛一点一点地串联起来,或许有一天我可以把他们组合在一起成为一个成熟的说法,甚至是一套靠谱的理论. 今天这篇文章,主要讲的就是关于我们所身处这个互联网时代的猜想和所做的实践. 从一条朋友圈说起,互联网时代的自我评价 这两个人都是我的大学同学,他们的评论按理说是应该回应一下的.然而我并没有,没有回应是因为没有必要.我所要寻找的是,看得懂我文章的人,或者是喜欢我文章的人.在受到这种质疑的时候,我很难在不是当面解

途牛网站无线架构变迁实践

从一开始的单机系统,发展到现在已拥有数百个分布式部署的系统.本文主要将途牛网站无线系统在从小到大的过程中,遇到的问题以及解决方法与大家分享,希望为大家带来一定借鉴.文章将从服务化推进.南北京机房之痛.性能提升实践.App客户端技术演进四个方面进行介绍. 服务化推进 途牛的服务化始于2011年,当时我们主要进行了会员的服务化,2012年进行了搜索2.0的服务化,2013年是服务化大举前进的时刻,主要进行了搜索3.0.价格中心.订单中心.产品基础数据等系统的服务化,2014年将TSP(途牛服务治理平

大型互联网技术架构4-分布式存储-II Google

The largest single database on earth - Google Spanner. 我们继续互联网技术架构-分布式存储. 上文大篇幅介绍了一些分布式存储的理论,偏重理论.可别小看这些理论,Google的各个神器都是建立在这些理论之上,甚至整个Apache的大数据3剑客项目都是受惠于这些理论.难怪@Tiger大牛讲Google靠的是一大批世界顶尖数据,物理,计算领域的Ph.D.,这些大神以及他们的Paper是Google为什么是Google的原因,以及Google没有开源