一、软件架构的发展历程
互联网产品常常面临庞大的用户量,日均数十亿PV的高并发,PB级别的数据存储等问题的挑战,同时要求保证系统的高可用和弹性伸缩,并且能够根据需要进行快速迭代扩展,这些都对于系统架构提出了很高的要求。
互联网架构从简到繁的演进经历了单体架构-分布式架构-SOA架构-微服务架构以及最新的service mesh的演进过程。
二、单体架构
早期互联网产品用户量少,并发量低,数据量小,多数只需要单个应用服务器可以满足需要,而数据库和文件服务部署在外部单个服务器上,这就是最早互联网架构,架构图如下所示。
单体应用一般都是采用MVC三层结构,在一个单独的项目中进行开发,部署的时候会打包成一个war包发布到web容器中,如tomcat。
单体架构的优缺点:
优点:容易开发、部署和测试
缺点:大型业务复杂的单体应用系统耦合性高、技术选型单一、开发效率低下。
PS:简单的小应用还是单体结构最香,所以对于初创型小项目还是推荐优先采用单体应用结构。任何架构的选择都不能脱离实际的业务场景。
随着用户规模和业务量的不断上涨,单个应用服务器将出现性能瓶颈,对于PB级的数据和高并发用户大流量访问,单一或者主备的数据库都已经不能满足需求。对于数据库存储量大破局思路是在垂直方向进行拆分即分库,水平方向进行拆分即分表。对于架构来说也是同理,可分为功能维度上即水平方向进行拆分和业务维度即垂直方向进行拆分。如下图所示:
三、分布式架构
1、垂直划分
按照业务垂直划分,每个业务都是单体架构,通过API互相调用。
2、水平拆分
水平分层架构从功能纬度将应用进行水平方向物理分成多个独立的进程包含:
1.网关层
2.业务逻辑层
3.数据访问层
4.数据存储层
每层直接逻辑解耦
四、SOA架构
SOA架构即从垂直方向上进行拆分,如下图所示:
基于SOA的系统架构实现了松耦合,系统之间通过服务接口(Service API)和中心化管理的企业服务总线(ESB)进行交互, 每个服务从本质上还是单体服务,对ESB严重依赖。
五、微服务架构
1、微服务架构定义
微服务架构在某种程度上是SOA架构的进一步的发展。
微服务目前并没有比较官方的定义。微服务 Microservices 之父,马丁.福勒,对微服务大概的概述如下:
In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.
微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。
另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。
微服务架构适用于项目的快速迭代及持续交付。
## 2、微服务架构特点
## 3、微服务需要解决的问题
## 4、微服务实现方案
目前最流行的两种微服务解决方案是SpringCloud和Dubbo。
六、服务网格架构
微服务好处自然很多,但是随着应用的越来越大,微服务暴露出来的问题也就随之而来了,微服务越来越多,管理越来越麻烦。特别是要你部署一套新环境的时候,随之而来的服务发现、负载均衡、Trace跟踪、流量管理、安全认证等等问题。
当然随着微服务的不断发展,微服务的生态的不断完善,新的微服务框架 Service Mesh 的出现就是为了解决这一系列问题。
1、服务网格定义
Service Mesh 是一个基础设施层,其独立运行在应用服务之外,提供应用服务之间安全、可靠、高效的通信,并为服务通信实现了微服务运行所需的基本组件功能,包括服务注册发现、负载均衡、故障恢复、监控、权限控制等等。Service Mesh 的中文译为 “服务网格”。
服务网格是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。在实践中,服务网格通常实现为一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。
一个典型的 Service Mesh 部署网络结构图
其中绿色方块为应用服务,蓝色方块为 Sidecar Proxy,应用服务之间通过 Sidecar Proxy 进行通信,整个服务通信形成图中的蓝色网络连线,图中所有蓝色部分就形成了 Service Mesh。
2、服务网格特点
首先第一个,服务网格是抽象的,实际上是抽象出了一个基础设施层,在应用之外。其次,功能是实现请求的可靠传递。部署上体现为轻量级的网络代理。最后一个关键词是,对应用程序透明。
3、为什么需要 Service Mesh?
最主要的理由来自于 Service Mesh 在提供微服务框架功能的同时,它是一个独立运行在应用服务之外的模块。这带来的好处就是应用服务不再需要为接入微服务框架而在代码和配置中添加繁多的依赖库和依赖配置项,实现了微服务框架和应用服务之间的解耦,让应用服务代码更加纯粹地去实现自己的业务逻辑,能够更加轻松地接入微服务框架,享受微服务框架带来的各种服务治理功能。
4、Servcie Mesh 的整体集成解决方案
Service Mesh 主要解决的是微服务之间的网络通信交互,随着业务服务增加,整个 Service Mesh 会变得庞大和复杂之后,这个时候需要对 Service Mesh 的管理功能进行抽象出来,从而满足丰富的微服务运营需求。
目前两款流行的 Servcie Mesh 开源软件 Istio 和 Linkerd 都可以直接在 kubernetes 中集成,其中 Linkerd 已经成为 CNCF 成员。
更多详细介绍可以查看:Service Mesh (服务网格) 入门
总结
本文主要介绍了互联网架构从简到繁的演进经历了单体架构-分布式架构-SOA架构-微服务架构以及最新的service mesh的演进过程。
值得注意的是,所有系统架构都要结合实际业务场景来考量,没有最好的架构,只有最适合当前业务场景的架构。