系统架构的演变

368 阅读5分钟

随着互联网的发展,网站应用的规模不断扩大,需求激增,带来技术上的压力,系统架构也在不断发送改变。 大致经过如下几个过程。

  1. 单体应用架构
  2. 垂直应用架构
  3. 分布式架构
  4. SOA架构
  5. 微服务架构(现在主流的架构)
  6. Service Mesh(服务网格)

单体应用架构

单体架构就是最早期的互联网架构,应用的数据库、文件管理系统、应用都部署在同一台机器上。

  • 优点:结构简单 ,容易开发和维护,开发成本较低
  • 缺点:性能差,易出错,耦合度过高

垂直应用架构

随着访问量的增加,单一应用靠增加节点来应对,但是并不是所有的模块都有较大的访问量。所以只对某些模块增加节点。

比如:某个项目分两个模块,前台系统和后台系统,一般后台系统只有管理员才会登陆,访问量比较小,前台系统访问量比较大,需要增加前台系统的节点。

  • 优点:整个项目拆分为多个模块,针对不同模块进行不同优化,提高效率
  • 缺点:多个项目直接不能直接通信,并且还会有重复的开发任务

分布式架构

分布式架构 也是基于垂直应用架构演变而来,当垂直应用越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码抽取出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢?

image-20211115141439721

  • 优点:抽取公共的功能作为服务层,提高代码复用性
  • 缺点:系统耦合度变高,难以维护

SOA架构

在分布式架构下,当服务越来越多,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心对集群进行实时管理,比如,上面分布式架构中的前台页面系统,需要访问下面多个服务,十几二十个呢?下面的用户服务也被十几二十个调用者调用?

此时,用于资源调度和治理中心(SOA Service OrientedArchitecture,面向服务的架构)是关键

image-20211115141635419

微服务架构

维基百科对于微服务的定义。

微服务 (Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与***语言无关*** (Language-Independent/Language agnostic) 的 API 集相互通信

微服务架构是从SOA架构模式演变过来,比SOA架构模式粒度更加精细。这个很小的粒度就是微服务。每个微服务可以独立部署,互不影响,服务之间采用http进行通信

image-20211115142710471

目前互联公司采用的框架。

  • 优点:粒度更加精细,不容易崩溃,服务更容易扩展和升级
  • 缺点:技术成本很高,要学习很多高阶知识,才可以做出来。

Service Mesh(服务网格)

新兴的概念,但是非常火热,google提出来的技术,初出茅庐,但是有统一微服务时代的趋势

微服务模式看似非常完善,但是还存在一些本质的问题,就是通信,虽然微服务框架帮忙实现通信,但是在出现问题时,查找问题的难度也是非常大的。

所以可以把Service Mesh当作微服务时代的TCP/IP协议

服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。

优点:

  • 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;
  • 真正的语言无关,服务可以用任何语言编写,只需和Service Mesh通信即可;
  • 对应用透明,Service Mesh组件可以单独升级;

缺点

  • Service Mesh组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销;
  • Service Mesh组件接管了网络流量,因此服务的整体稳定性依赖于Service Mesh,同时额外引入的大量Service Mesh服务实例的运维和管理也是一个挑战;

分布式和集群的概念

  • 分布式:将一个项目的不同模块不在不同的主机上
  • 集群:多个主机上运行一个项目的同一个模块以提高性能

\