Tips:

说到互联网系统架构,随便网上一搜都有大量的相关文章/书籍,而这些,得益于过去几年互联网行业的快速发展与繁荣,在今天看来,这些技术/解决方案似乎早已不是什么新鲜的东西了,但是,本文笔者仍想简单聊聊这个话题,权当闲聊了。一家之言,姑且看看,不妥之处,还请淡然笑之。

一、前言

说到互联网系统架构,在互联网行业日渐成熟的今天,一谈到这背后的技术体系,很多人脑海中可能就会浮现从网上看到的,一个个庞大的知识图谱,能说地清楚其中一二的同学,自然是志得意满,而对于新入行的同学来说,则可能直接就劝退了。
那么,我们是否需要对所有的这些相关技术,都全部学习掌握呢?笔者以为,大可不必过渡焦虑,需要明白的是,一个庞大而复杂的互联网架构体系,必然是由一个强大的团队来共同支撑维护的,团队成员各司其职、各尽所长,而这也就是团队的力量。
当然,对于互联网系统架构的演进过程,相信很多人都有自己的理解,从单体应用到分布式应用、从开发框架到中间件技术、从容器化到云原生等等,不一而足。不过,在这庞杂的技术体系中,从宏观上理清其演变过程中的关键节点与可能面临的关键问题,对于我们理解一个大型互联网系统的架构,是很有裨益的。

二、大型互联网系统架构常见演变过程

Tips:
系统架构应当是基于具体业务场景的,脱离了具体业务谈技术架构,难免有空中楼阁、镜花水月之嫌。系统架构常见的演变过程,网上的相关文章不胜枚举,不过,为了保持本文整体的完整性与连惯性,笔者以为,仍需从基本的系统架构演进过程说起,纲举则目张,先对常见大型互联网系统架构的演进过程有一个整体上的大致梳理,再说演进过程中常见的问题,也就水到渠成了。

“一个优秀的大型互联网系统架构,不是设计出来的,而是不断演进而来的” ,类似的观点,相信大家都有所了解,也有所思考,但是,为什么是这样的呢?是技术同学技术能力不够,设计不出优秀的系统架构吗,还是说技术同学写的BUG太多,需要不断修复?
笔者以为,都不是,架构的演变,其本质在于技术是服务于业务需求的,而业务需求是不断变化发展的,而这,天生就注定了技术架构的不断演变,是一种必然的选择。也正是因为随着业务的不断发展,用户体量不断增长,业务场景越来越复杂,为了不断满足这些需求,对系统的要求也就自然越来越高,所以,这才是系统架构不断演变的根本原因。
通常情况下,互联网系统技术架构的演变大致会经历以下几个阶段:

在云服务越来越成熟的今天,以下,笔者对各阶段的技术架构进行简单说明:

1、单节点架构
在互联网业务发展的初期,通常是一些尝试性的产品探索/试验,而这些需求往往就是需求提出者的一个瞬间想法/点子,衍生完善而来。其需要的是快速实现其创意,并快速投放到市场验证,然后不断收集市场反馈,完善整体的产品逻辑,因此,其典型特点就是时效要求高、产品逻辑不够完善、不确定性大。
在这一阶段,对技术架构通常没有太高的要求,只需要实现基本的业务功能就行,从而技术投入自然也就不大,因此,单节点架构是比较适合的。即通常所说的,所有代码写在一个工程中,应用、存储等服务部署在一台机器上。技术人员在这一阶段最关键的在于保持良好的编程习惯、尽量预留演进余地。
当然,在云服务日渐成熟的今天,单节点架构通常如下图所示:

即,技术人员只需要将自己的业务代码部署在云服务器上,数据直接存储在云数据库中,高效且可靠性较高。(当然,也可以直接在云服务器上自己搭建数据库来存储,但现在一般不会/不需要这么做了)

2、集群架构
随着业务的发展,对系统的处理能力、高可用性也就提出了越来越高的要求,在单节点的基础上,集群架构应运而生,集群架构通常如下图所示:

在集群架构阶段,引入的技术/组件会慢慢变多,团队成员也会逐渐壮大,到了这一阶段,说明核心产品形态已初步成型,并已有相对稳定的、一定规模的流量,此时,技术团队开始迎来挑战。在这一阶段,技术团队最大的关键问题在于规范制定/团队建设/人才储备。

Tips:
在云服务厂商的支持下,集群架构已经能够支撑较大的用户流量了。云服务器、云数据库等云端基础服务的支撑能力,也比前些年要好了很多,升级扩容也方便了许多,已经足够满足一般规模下的系统性能需求了。所以,不要觉得业务量一上来,就立马要改系统架构,因为这反而可能带来不必要的麻烦。有时,直接通过升级云服务器/云数据库等的配置,就可以解决问题了。(通常来说,常规业务场景下,通过一些优化改造,顶住1万以内的QPS是没有太大问题的)。

3、分布式集群架构
随着业务的进一步发展,系统流量越来越大,业务复杂度越来越高,需求迭代越来越频繁,技术团队成员也快速发展(50人以上),此时,团队协作、业务响应效率、系统“三高”诉求等问题日益凸显,集群架构的不足之处日渐明显,此时,分布式集群架构的改造工作,也就需要开始提上日程了。

分布式集群架构简易示意如下图所示:

从集群架构演变到分布式集群架构,业务场景复杂度、技术复杂度都变地极高,繁杂的业务/技术需求,要求一个更专业的团队去整体协作支撑。在这一阶段,技术团队的关键问题在于技术选型/团队协作/工具化自动化/业务重构 。(实际系统架构情况要远远复杂得多,此处只是简单示意)

Tips:
分布式集群架构改造过程中,需要对业务进行合理的梳理与服务划分,否则,技术架构的改造不但不能解决实际问题,反而可能带来一系列的麻烦,那就真的成了“毒药”了。

4、未来架构
未来系统架构到底会往哪个方向发展,是往ServiceMesh方向发展,还是往Serverless方向发展,异或是别的方向?笔者也说不好,虽然这些技术架构方案都在某些方面体现了一些优越性,看起来设计理念确实很好,但是目前为止,笔者还没有看到太多成功落地实施的、较大规模系统的相关案例。所以,此处笔者也就不多妄言了。
但是,笔者以为,有一点趋势还是比较明显的,那就是,云服务在未来技术架构中,将扮演越来越重要的角色。未来,对绝大多数中小企业来说,技术架构的"云化"将是必然的选择;与此同时,随着云服务的日益完善,低代码化也将成为一个重要的、解决实际业务问题的一种选择。

Tips:
微服务架构、容器化部署架构、SOA架构、混合云架构等等,笔者以为,其实都可以看做是集群架构/分布式集群架构的延伸与变种,虽然具体概念上有些不同,但大体上来说,基本上在相应的设计理念边界上,并没有颠覆性的区别。

以上,就是对互联网系统架构演进过程的简单描述,作为一名技术人员,通常来说,大概率是不会完整经历以上过程的,能亲身经历一个大型互联网系统架构从0到1的演变过程,实属幸运。

三、架构演变不常说的一些问题

以上所述,在不少书籍/教程中基本都有相关的详细描述,笔者就不再过多赘述了,此处笔者再说几点其它地方可能提的比较少的,关于系统架构演变相关的一些问题。

1、选择分布式集群架构的原因
采用分布式集群架构(微服务),最关键的原因,不仅仅是为了解决系统性能问题,很大一部分原因,是为了解决业务迭代、团队协作、开发调试、编译部署等问题。这是因为,随着系统业务复杂度的提升、团队成员的增加,对单节点架构/集群架构来说,除了性能问题外,业务耦合度高且逻辑不清晰、业务版本迭代不便且协作开发易冲突、代码调试繁琐且部署风险大,等相关问题会逐渐变成主要矛盾,而通过分布式架构改造,就能较好地解决这些问题。

2、分布式集群架构改造的关键点
在技术架构演变的过程中,决不是简单粗暴地扩机器、拆代码、分服务,在不断演进过程中,难点其实在于对业务模型的完善设计,对业务流程的重新梳理,也就是业务架构。
如果说,从单节点架构/集群架构过渡到分布式集群架构的过程中,只是选一个分布式服务框架,然后将原有代码结构进行简单拆分成各个服务包,再通过框架来进行调用,那么,这决不算完成了分布式架构的演进。现如今,社区已有较为成熟的整套分布式集群架构解决方案,在系统改造过程中,分布式框架的选型与技术方案的制定,已不再是最困难的问题。相对而言,在改造过程中,如何对现有业务逻辑进行整体梳理与服务划分改造,才是重点与难点,因为在这一阶段,通常会面临改造服务与线上服务同时运行的兼容问题,以及其它可能存在的较为沉重的历史包袱。(这也是DDD最近几年日趋火热的原因之一吧)

3、架构演变需要考虑的因素
技术是服务于业务的,不能完全脱离于业务谈技术架构,所以,在进行技术架构设计/选型时,要充分结合实际业务场景进行取舍与平衡,切忌盲目随大流,人云亦云。更进一步,业务通常都是基于一定的商业目的的(政府/公益组织等不在其中),所以,在做技术架构时,商业因素有时也是需要考虑的。有时,甚至政策/法律/语言文化等因素,可能也需要有所考量。

4、架构演进的终点
技术架构是一个非常复杂的系统工程,从宏观上的整体把握到基本的代码实现,从服务端架构到客户端架构,从基础中间件到异构系统,凡此种种,浩如烟海,学无止境,我们只是站在前人的肩膀上,才不至于太过狼狈,要时刻心怀敬畏之心。分布式集群架构的代码改造完成只是万里长征的第一步,后续,服务治理才是分布式集群架构中的重点与难点。可以说,只要业务场景有需要,技术架构演进,永无止境。

5、架构演进技术选型的原则
现如今,大多数技术痛点,社区都有许多成套的相关解决方案,在这个时候,切忌盲目套用,一篮子全都使用了,造成整个技术体系异常庞杂,开发/维护都较为繁琐。需要注意的是,技术架构不是做的越多越好,相反,应当尽量少做,大道至简。我们应该结合自己的实际情况,如业务场景、团队整体技术栈、成员技术水平等综合考量,尽量选择通用的、成熟的相关解决方案就可以了,不需要追求所谓“前沿”但还不够成熟的相关技术,简洁而清晰的,往往是最适合的。

6、架构演进落地的关键点
系统架构的演进过程,其实就是一个不断取舍/平衡的过程,“三高”系统架构有常用的三板斧(扩容、缓存、流控),技术架构演变到最后,要实际落地的话,也会有三个关键问题需要处理,那就是业务、技术、团队协作之间这三者的平衡。

业务,指的是实际业务场景与业务迭代诉求;技术,指的是技术选型与制定的技术方案;团队协作,指的是技术团队内部之间(基础架构团队、运维团队、业务开发团队等)、跨部门团队之间的沟通与协作。如果这三者之间的关系没有处理/协调好的话,就会出现一个严重的问题,那就是技术方案都制定/预研完成了,结果实际推广落地时,却很难推进,甚至因长时间推不动而最终不了了之。(实际工作中,技术架构的落地,除了技术本身的问题,人的问题往往更难搞)

7、架构演进中的安全问题
在互联网技术架构的演进过程中,系统安全问题通常没有被重点考虑,这点需要引起我们的重视。造成这种情况,应该说有多方面的原因吧,笔者以为,主要原因有以下几个:
一是云服务厂商的日趋完善。云服务使得开发/部署一个基本的、可靠性较高的应用较为简单,更进一步的是,云服务厂商本身,从整体上做了大量的安全方面的基础工作,如防火墙(硬件、软件)、风控识别、数据保护等等。因此,相对于早期的自建机房/服务器托管方式,系统层面的常规安全风险大大降低,即便出现相关风险的时候,云服务厂商也会及时解决/协助解决。而这,也在很大程度上让我们往往对安全问题不够敏感/重视。
二是第三方基础服务商的完善。一个系统所涉及的关键业务流程中的支付(支付宝、微信等)、消息推送(短信、邮件等)、风险识别(涉黄、敏感信息等)等等,都有成熟的服务商提供相关服务,通常只需要接入相应SDK即可快速实现相关能力,简便高效。(第三方基础服务供应商,一般都有一套相对成熟的安全/风控机制)
三是社区开发框架的成熟完善。在今天的互联网技术生态中,类似Spring/Mybatis之类的开发框架已越来越成熟稳定,几乎是行业标配,而得益于这些框架的完善,我们已不需要(或只需少量配置)就可处理/避免大多数常见的安全问题。
那么,我们是否真的可以忽略安全问题呢?当然不是,因为类似用户敏感数据保护问题、“羊毛党”问题等等、时刻警醒者我们,安全问题,无处不在。

最后
工作在云服务厂商日渐成熟的今天,我们非常幸运,也非常不幸…

架构杂谈——也谈互联网系统架构演进相关推荐

  1. 大型互联网系统架构演进之路

    作者丨老农小江 来源丨网址:https://blog.csdn.net/cndmss/article/details/123636370 一.前言 说到互联网系统架构,在互联网行业日渐成熟的今天,一谈 ...

  2. 《程序员》 -- 互联网系统架构的演进

    自己非常喜欢<程序员>杂志,<程序员>杂志在一定程序上很能开阔我们的视野.因此,一直都想推荐给大家. 方便大家相互学习交流,本文转自<程序员>杂志 http://w ...

  3. 互联网系统架构的演进--作者杨光辉,淘宝北京研发中心技术专家

    发表于2013-08-29 09:27| 25337次阅读| 来源<程序员>| 79 条评论| 作者杨光辉 <程序员>杂志2013年9月刊特别策划互联网系统架构技术架构性能系统 ...

  4. 电脑端京东的我的订单html+css页面_互联网系统架构前后端分离技术体系

    点击「京东数科技术说」可快速关注 「摘要」随着互联网技术的发展以及终端设备的不断增多,前后端分离技术已成为移动互联网领域不可或缺的技术.前后端分离技术的不断完善,让前后端的分工与系统边界划分越来越清晰 ...

  5. 移动互联网系统架构特点及实践--手机凤凰网

    本文整理自:http://www.cnblogs.com/sunli/archive/2011/02/19/mobile_architecture.html 今天参加了InfoQ组织的百度技术沙龙活动 ...

  6. 互联网系统架构演变之一

    1. 程序三高 1)高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一.当多个进程或线程同时(或着说在同一段时间内)访问同一资源时会产生并发问题,因此需要 ...

  7. 互联网系统架构的演进

    多终端接入.开放平台给互联网带来了前所未有的用户量级和访问规模,SNS网站产生了海量的UGC(用户产生内容),而且这些内容依托关 系链扩散速度之快.传播范围之广是传统网站难以想象的,海量数据的计算存储 ...

  8. 阿里架构师,谈对技术架构的理解,以及架构师角色的思考

    我叫道延, 2014 年加入阿里,在阿里通信工作了近两年.2016 年年底加入业务平台团队,当时 Leader 找我的第一件事就是要解决大促的问题,第二件事就是解决安全生产的问题. 我带着这个命题进入 ...

  9. 系统架构专题(1):大型互联网系统架构演变

    1.构设计话题 **须知:**在实际的工作中,不管任何一个公司均不会一开始就可以设计出合理的架构方案,而是在满足业务需求的情况下不断带带诱惑出来的这是一个持续的过 程.当然如果一开始有一个好基础系统设 ...

最新文章

  1. eoiioe IE 和 firefox js 兼容问题
  2. 97.16% 的加班率,给你 3 倍工资:你愿意去大厂吗?
  3. JetsonXavier/Tx2性能测试比对
  4. 如何布局文章标题才更吸引搜索引擎注意?
  5. JavaScript中的立即执行函数
  6. android 一个有漂亮动画效果的Dialog
  7. 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)
  8. py2中存储的pickle和py3中pickle无法读取的兼容性问题解决方案
  9. pycharm (二)
  10. 计算机应用的重要性作文,关于科技的重要性作文(通用5篇)
  11. 有什么手机python编辑器_好用的Python编辑器有哪些?
  12. 如何使用PDF expert在Mac上给PDF调整页面顺序?
  13. 帝国CMS仿《游戏资讯网》优化版整站源码/专业游戏资讯网站系统模版
  14. A股动量策略有效性验证
  15. 网易微专业——Java Web开发工程师学习笔记(2):Tomcat
  16. python类的实例化和继承
  17. 2020区块链行业回顾与前瞻
  18. MyEclipse全局搜索
  19. Frame profiling
  20. 个人信息安全防护指南!

热门文章

  1. 关于RSCB中不提供PDB文件格式的问题
  2. nvidia实时刷新
  3. MySQL知识(十九)——用户管理之权限表
  4. java空间(Java堆空间)
  5. auto js 实现文本框输入
  6. pm2 管理nuxt
  7. 【5G消息产业图谱】正式发布!
  8. you-get下载速度慢解决方法
  9. Java 攻城狮面试题 06_Spring Cloud 微服务
  10. BGD,SGD,MBGD