阅读 406

架构竟然有这么多种,那我该怎么选呢?

热文索引,坚持原创不易,请小伙伴们不吝「点赞」支持:

  1. 如何设计出优美的Web API?
  2. 程序员必须掌握的性能调优 X Y Z
  3. 如何把单体式应用拆解成微服务?【上】
  4. 如何把单体式应用拆解成微服务?【下】
  5. 程序员“求包养”攻略揭秘


昨天我们聊了 架构是什么 ?今天我们来看看架构的前世今生。客户端-服务器(C/S)、浏览器-服务器(B/S)、面向服务架构(SOA)、微服务(Microservice)、无服务器(Serverless)、函数计算(FaaS)等,我们都听说过不少架构相关的名词,但它们之间究竟是什么关系,哪种架构更好?或许你跟我一样有类似的困惑,接下来我们一起来梳理一下。

  • 1. 演进历程概览

从二十世纪五十年代到现在,前后将近六七十年,架构总共演进了四代,差不多每十五年一代。按照专业角度划分,架构可以分为应用架构和基础架构,其中应用架构是指构建业务系统本身需要关注的设计内容,而基础架构是指部署业务系统时需要考虑的设计内容。我们都知道,任何科学技术都是服务于业务的,真正驱动技术革新的是业务需求。从整个演进过程中,我们可以看到业务类型变得越来越丰富:从最初软件主要是用于科研机构的计算,而随后信息服务开始兴起,逐步革新了报刊、黄页等传统媒体;再到企业将计算机、网络作为提升内部工作效率的工具,将各种线下手工的工作流程转化成各种企业应用。最后,从互联网+开始赋能各行各业,我们的衣食住行都离不开软件了。

演进历程概览

  • 第一阶段:计算机诞生最初是为了解决科学计算问题的,例如:模拟核试验、测算弹道导弹轨迹等,因为这种规模的计算量已经超出人工计算的能力范围。这个阶段的软件复杂度是较低的,主要是实现各种满足计算要求的算法,采用面向过程的应用架构,当时的计算机还是大型机。面向过程的应用架构现在依然存在,尤其是开发一些简单的软件,或者在学校的计算机课程学习当中,老兵哥我当年学习编程语言 C 就是从面向过程开始的。
  • 第二阶段:随着计算机不断普及,以及互联网的连通,许多机构开始通过互联网来对外提供信息服务。在老兵哥我印象里最深刻的,就是雅虎、新浪、搜狐、网易等,原先只能通过传统媒体(报刊杂志、广播电视等)的信息开始通过互联网这个渠道对外发布了。相对于科学计算,信息服务这类软件复杂度要高很多,业务需求催生了面向对象、组件的应用架构,借助封装、继承、多态等技术降低复杂度、提升复用性和灵活性等。这个阶段的基础架构主要是基于小型机,相对于大型机它具备更低的成本、更灵活的使用场景。
  • 第三阶段:这个阶段越来越多的企业开始采用软件来优化生产办公等,那个时候最热门的就是企业资源计划 ERP 等信息管理系统,2000 年前后老兵哥我还在学校,当时还用 JSP/Servlet 等技术开发过学生公寓管理系统、教学管理系统。像 JAVA 语言领域的 SSH(Struts/Spring/Hibernate)等分层应用架构就诞生在这个阶段,将不同类型的技术或复杂度做了分离,与之配套的基础架构就是 PC Server。
  • 第四阶段:当谷歌、百度、腾讯和阿里巴巴等企业借助计算机、软件和互联网推动了信息、通信和电子商务等行业的变革之后,各行各业都开始拥抱互联网这种生产力了,互联网+就是当下最大的趋势,与我们生活息息相关的各个方面都开始被重构优化,包括支付、差旅、出行、餐饮、娱乐等等。软件系统不再是一个个孤岛,它们的规模开始急剧膨胀,彼此之间的连接也越来越频密,微服务应用架构成为最优选择,再配套云计算基础架构。Spring Boot/Spring Cloud、Docker、Kubernetes 等新技术是当下最火的,也是我们程序员需要学习掌握的。

  • 2. 不同架构对比

回顾整个架构的演进过程,业务变得越来越复杂,从科研机构开始逐渐影响到每个人的衣食住行,软件的规模和复杂度也是随之增长。那么不同类型的架构有没有可比性呢?这是我们惯常的思维方式,也是老兵哥曾经的想法,但现在我会觉得各种类型的架构不是非此即彼的关系,其实它们存在包含互补的关系:面向过程是关注函数粒度的复杂度;对象组件是关注类对象、模块组件等粒度的复杂度;多层架构是关注整个系统粒度的复杂度;微服务是关注多个系统之间的复杂度。因此,它们是针对不同粒度复杂度的解决方案,彼此各具优势,能够在某个软件系统中和谐并存。

如果把面向过程比作马拉车,把对象组件比作拖拉机,把多层架构比作小轿车,把微服务比作超级跑车,这些不同类型的交通工具售价各不相同,但并不是越贵越好,它们各有各适用的场景,就像超级跑车无法在山间小路上奔驰。在选择架构时,我们需要了解每种架构的特点和适用场景,适合的就是最好的架构,这其实跟找对象差不多哦。今天暂时先分享到这里,接下来我们还要继续聊架构,看看架构都有哪些风格或模式,类库、模块、框架和架构之间的相互关系等,敬请关注哦。

坚持原创不易,如果你觉得有价值,麻烦动动手指点下文 「 推荐 」按钮,让更多小伙伴可以看到,老兵哥会更有动力坚持分享的。另外,我后续还会分享职业规划、应聘面试、技能提升、影响力打造等经验,欢迎 关注 本专栏或歪信公主号 「 IT老兵哥 」

微信公众号「 IT老兵哥 」

  • 软技能-热点文章(首发于公众号):
  1. “花式”裁员套路深,你知道吗?
  2. 遭遇裁员,如何渡过心理危机?
  3. 如何在寒冬中找到好工作?
  4. 2C 还是 2B,跟找工作有什么关系?
  5. 大公司 vs 小公司,你会选哪个?
  6. 记住这一点,不怕找不到好工作!
  7. 跳槽,跳还是不跳,该怎么跳?
  8. 程序员“求包养”攻略揭秘
  9. 很努力了,为什么我还在原地踏步?


  • 硬技能-热点文章:
  1. 如何写出好的产品帮助文档?
  2. 从程序员到架构师,有捷径吗?
  3. 图解 Spring:HTTP 请求的处理流程与机制【1】
  4. 图解 Spring:HTTP 请求的处理流程与机制【2】
  5. 图解 Spring:HTTP 请求的处理流程与机制【3】
  6. 图解 Spring:HTTP 请求的处理流程与机制【4】
  7. 图解 Spring:HTTP 请求的处理流程与机制【5】
  8. 如何正确使用 Spring Cloud?【上】
  9. 如何正确使用 Spring Cloud?【中】
  10. 如何正确使用 Spring Cloud?【下】