Dawn's Blogs

分享技术 记录成长

0%

微服务架构设计模式 (1) 微服务架构介绍

微服务架构

应用程序的扩展方式

在解释什么是微服务架构之前,先看看一个应用程序的三种扩展方式:

  • X 轴扩展:又称为水平复制,通过克隆实例再加上负载均衡器进行的扩展方法,负载均衡器在 N 个相同的实例之间分配请求。

image-20230517144048395

  • Z 轴扩展:又称为数据分区,也需要运行单体应用程序的多个实例,但是每一个实例仅负责数据的一个子集。路由器根据请求中的特定属性将请求路由到特定的实例中去。

image-20230517144336551

  • Y 轴扩展:又称为功能性分解,把单体应用拆解为了一组服务,每一种服务都负责特定的功能。服务可以在需要的时候再进行 X 轴或者 Z 轴扩展

image-20230517144500811

微服务架构定义

所以,微服务架构就是把应用程序根据功能分解为一组服务的架构风格。每一种服务都是由一组专注的、内聚的功能职责组成。

微服务架构就是将服务作为模块化的单元。你只能通过 API 去访问服务,而无法越过 API 去访问服务内部的类。这使得服务可以独立的进行部署和扩展。

微服务架构的一个关键的特性就是每一种服务之间都是松耦合的,它们仅仅通过 API 进行通信。而为了实现这一种松耦合,每一个服务都拥有自己的私有数据库。这样对于一个服务,可以自由的修改数据库表的 Schema,而不必与其他服务进行协调。服务不会因为其他服务锁住了数据库而进入了堵塞状态。

微服务架构 vs SOA

SOA(Service Oriented Architecture)指的是面向服务的架构,SOA 也是进行了服务划分,它与微服务架构看似相同,但是深入研究就会发现二者的巨大差异。

  • 服务间的通信:SOA 常吃采用重量级的技术,如 ESB(Enterprise Service Bus)、SOAP 和 WebService。而微服务架构倾向于使用轻量级的技术,如 REST 或者 gRPC 这类轻量级的协议。
  • 数据管理:SOA 一般有一个全局的数据库。而微服务与之相反,每一个服务都有一个自己的私有数据模型。
  • 服务规模:SOA 应用通常包含若干个大型的服务。而微服务架构则常常由属实个甚至上百个更小的服务组成。

微服务的好处和弊端

微服务的好处

微服务架构有以下好处:

  • 大型应用可以拆解成多个小的服务,每一个服务可以独立的持续交付和持续部署
  • 每一个服务都较小,且易于维护。服务较小意味着代码少,更容易理解、更加快速的启动速度。
  • 服务可以独立扩展。根据服务的特点,我们可以选择有合适的硬件,并且可以根据服务特点自由的对服务进行 X 轴扩展或者 Z 轴扩展。
  • 更好的容错性。微服务架构具有天然的故障隔离优势,比如某个服务因内存泄漏而导致的崩溃并不会使得整个应用的崩溃。
  • 容易实验和采纳新的技术。在开发服务时,可以自由的选择技术框架。

微服务的弊端

微服务架构的主要弊端和问题在于:

  • 服务的拆分和定义是一项挑战。如果对服务的拆分出现了偏差,很可能会构建出一个分布式的单体应用:一个包含了一大堆相互之间紧耦合的服务,却又必须部署在一起的所谓分布式系统。这将会把单体架构和微服务架构二者的弊端集于一身
  • 分布式系统的复杂性。进程间的通信比简单的方法调用更加复杂、每一个服务都有自己的数据库使得跨服务的事务和查询称为挑战、更加先进的开发和软件交付能力、运维的复杂性。
  • 服务的依赖关系复杂。当微服务架构中的服务变得多起来之后,服务之间的依赖关系非常复杂,依赖关系决定着开发的顺序。
  • 何时采用微服务架构。通常在软件开发的初期,采用微服务架构是得不偿失的,因为设计分布式架构会拖慢开发的进程。但是到了开发后期,将应用程序分解为一组服务的时候,因为复杂的依赖关系导致重构困难。