首页 > 其他分享 >微服务架构设计原则

微服务架构设计原则

时间:2022-11-22 16:15:00浏览次数:43  
标签:架构设计 网关 服务 原则 数据库 视图 查询 API

在微服务架构的设计过程中,首先需要通过统一的API网关对外提供服务,各微服务之间通过REST或gRPC协议通信。单个微服务可以调用多个不同的微服务来完成自己的功能,同时每个微服务都需要有自己独立的数据存储。微服务的部署、运维等需要通过自动化的手段来实现。

服务注册中心

一个服务可以有多个实例,但如何知道这个服务有哪些实例呢?为了减少手工维护的麻烦,需要有一个服务注册中心来完成相关的管理工作。每个服务实例启动时,都向服务注册中心注册自己的IP地址等信息。这样,当一个服务在调用其他服务的接口时,就可以通过服务注册中心查询到其他服务的实例,然后向该实例发起请求。

API网关

API 网关往往是微服务应用的统一入口,在完成微服务的开发之后,还需要考虑哪些微服务的API需要公开。之所以需要API网关,其中一个原因是,如果让外部服务直接访问微服务,当微服务开发人员在迭代过程中更新、修改微服务的API时,会影响到调用这个微服务的外部服务,从而影响这个应用。另一个原因是,有些微服务会提供gRPC或AMQP等非REST协议,这往往会受限于防火墙而无法穿透,因此需要API网关对所有微服务向外部公开的API进行封装。
API网关作为从防火墙外部进入应用的API请求的单一入口,负责请求路由、登录认证和协议转换。来自外部的所有请求先到达API网关,API网关将一部分请求直接路由到相应的服务上。在有些场景中,API网关使用API组合的模式处理其他请求,调用多个服务并聚合结果。API 网关还可以在客户端友好的协议与客户端不友好的协议之间转换。在微服务中,API网关往往采用后端前置模式,为一组微服务提供独立的API网关。

使用API网关的好处是它封装了应用的内部结构,外部不必调用特定的微服务,而是直接与API网关通信。
API网关的功能包括:路由、负载均衡、统一认证和鉴权、监控、日志、限流降级等。

API网关的缺点是增加了部署和运维的复杂度,同时需要适配大量接口,导致难以维护。

另外,因为通过API网关会在调用链增加一跳,所以会导致性能的下降。

跨服务通信

跨服务通信通常通过同步的REST和gRPC或者异步的消息队列来实现。

API设计

在单体应用中,因为应用独享数据库,所以实现诸如查询等操作相对简单。为了实现不同数据的聚合,可以通过执行SQL语句中的join来关联各个相关表。而在微服务架构中,因为所涉及的数据可能分布在多个微服务所拥有的数据库中,所以接口的设计和编写就变得很复杂。

1.API组合模式

客户端调用拥有数据的多个微服务,并组合服务返回结果。一般在实际操作过程中会创建一个单独的API组合服务来实现API组合的功能,对内调用各个微服务,对外提供标准的REST查询接口。API组合服务会尽可能并行调用各个微服务,最大限度地缩短查询等操作的响应时间。

API 组合的缺点在于它需要调用多个微服务和查询多个数据库,这带来了额外的开销,需要更多的计算和网络资源,也相应增加了运行应用程序的成本。同时因为API组合需要调用多个微服务,所以它的可用性也会随着所涉及服务数量的增加而降低。虽然可以通过缓存等方式来提升性能及可用性,但这仍然是一大隐患。另外,单体应用通常使用一个数据库事务执行查询等操作,即使它执行多个数据库查询,数据库的ACID事务属性也可以确保应用具有一致的数据视图。而通过API组合模式,因为数据分布于不同的微服务中,所以可能会造成数据的不一致。

2.CQRS模式

CQRS(Command and Query Responsibility Segregation)比API组合模式更强大,但也更复杂,它在提供接口的客户端维护一个或多个只读视图数据库,这类视图数据库的唯一目标就是支持查询类调用。CQRS 使用事务来维护从多个微服务复制而来的只读视图,借此来实现对多个微服务的数据查询。

CQRS将持久化数据的使用分为两个部分:修改更新类和查询类。涉及查询类的微服务独自位于视图数据库中,通过订阅事件的方式与源数据库同步,视图数据库会订阅相关领域事件并更新数据库,从而确保视图数据库不断更新。
CQRS一般包括4个子模块。
查询API:提供查询服务。
事件处理程序:负责订阅、处理一个或多个服务发布的事件来更新数据库。
数据库访问:实现数据库访问逻辑,查询API与事件处理程序都会使用该模块来更新和查询数据库。它往往采用数据访问对象(DAO),把上层代码映射到数据库API使用的数据类型上。
视图数据库:负责持久化相关领域模型的视图。NoSQL往往是CQRS的最好选择,因为它不受 NoSQL 事务处理能力的限制,只需要提供简单的事务并行执行固定查询即可。

独立的查询模型可以用来处理查询场景,查询模型往往比修改更新模型简单得多,因为它不需要负责实现具体的业务逻辑。尤其在微服务中,可以高效地实现跨微服务的查询。使用CQRS视图将会更加有效,因为该方法通过视图数据库预先加载了来自源数据库的数据。CQRS使用专有视图数据库来避免单个数据库的限制,每个视图数据库都有效地实现特定的查询,因为相关的微服务不必同时处理修改更新类和查询类操作,从而大大增强了隔离性。
CQRS 的缺点在于开发人员必须编写修改更新和查询两类操作的代码,因此大大增加了运维成本。

另外,由于数据库间实时同步的差异,也会造成数据一致性的缺陷。

数据一致性处理

1.数据库事务ACID强一致性模型

2.CAP原理

在只访问一个数据库的单体应用中,事务管理较为明朗,因为可以通过数据库ACID 特性来保障事务的完整。而在微服务架构下,事务往往需要横跨多个微服务,每个微服务都有自己的数据库。当对应用进行微服务拆分之后,对于更新多个微服务所拥有的数据的操作,传统的事务处理已经无法满足要求,所以需要更为高级的事务管理机制。
分布式系统的最大难点在于各个节点的状态如何同步。

传统应用采用集中式架构,因为不存在分区,所以可以同时确保一致性和可用性。在分布式系统中,因为分区无法避免,所以可以认为CAP中的P(Partition tolerance,分区容错性)总是存在,而CAP中的C(Consistency,一致性)和A(Availability,可用性)无法同时满足。所以在进行应用系统设计时应该考虑到这种问题,只能选择一个目标。如果追求一致性,那么就无法保证所有节点的可用性,ZooKeeper 的实现其实就是保证了一致性和分区容错性;如果追求所有节点的可用性,那么就没法做到一致性,大部分分布式应用的设计都选择这种模式。

3.BASE原理

BASE是Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)的缩写,是对CAP中AP的扩展。其核心理念如下。
基本可用:当分布式系统出现故障时,允许损失部分可用功能,保证核心功能可用。
软状态:允许系统中存在中间状态,这个状态不影响系统可用性,但会损失部分一致性。
最终一致性:是指经过一段时间后,所有节点数据都将达到一致。
BASE解决了CAP中没有考虑到的网络延迟问题,在BASE中用软状态和最终一致性来保证延迟后数据的一致性。BASE与ACID的理念是相反的,ACID秉持的是一种强一致性的理念,而BASE原理则是通过牺牲强一致性来获得可用性的,并允许数据在一定时间内是不一致的,但最终达到一致状态。

4.分布式事务

 

标签:架构设计,网关,服务,原则,数据库,视图,查询,API
From: https://www.cnblogs.com/muzinan110/p/16915398.html

相关文章

  • 微服务开发框架(spring cloud /dubbo)
      Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,基于RPC调用,对于目前使用率较高的SpringCloudNetflix来说,它是基于HTTP的,所以效率上没有Dubbo高,但问题在于Du......
  • IIS服务没有Windows身份验证
    解决方法:1.打开C:\Windows\servicing\Packages,查找文件Microsoft-Windows-IIS-WebServer-AddOn-2-Package~31bf3856ad364e35~amd64~~10.0.19041.964.mum(注意一定要加上后......
  • 存取数据的演变史、数据库软件应用史、数据库的本质、数据库的分类、MySQL简介、MySQL
    存取数据的演变史1.文本文件 文件路径不固定:C:\aaa.txtD:\bbb.txtE:\ccc.txt 数据格式不统一:jason|123 jason$123 jason1232.软件开发目录规范 规定了数......
  • 当顶象无感验证遇上工商联人才交流服务中心
    随着经济转型升级、经济发展方式转变、产业结构调整、技术革新步伐和城镇化进程加快,人才技能水平与岗位需求不匹配的就业结构性矛盾将会越来越突出。企业发展过程中,普遍存......
  • 【访谈】Eolink:通过 API 连接全球企业的数据服务
    采访嘉宾:刘昊臻主持人:马畅   9月,在QECon上海站大会现场,QECon2022年度顶级合作伙伴,EolinkCEO刘昊臻接受了质效前沿的采访。刘昊臻在主会场发表了《API全......
  • Swarm集群弹性创建服务(8)
    Swarm集群弹性创建服务扩缩容功能,创建服务,动态扩展服务,更新服务,日志,灰度发布(更新网站(服务)时依旧提出服务,不挂404)功能:扩缩容功能(扩容:增加容器,缩容:减少容器),灰度发布目的:......
  • 服务质量
    1.质量保证体系测试策略构建质量保证体系2.测试实践单元测试与mock实践集成测试实践端到端测试实践测试自动化3.混沌工程混沌工程的核心理念基于服务网格的网络......
  • Linux7系统安装Docker服务
    一.环境准备1.系统介绍系统:centos7.9内核版本:3.10.0-11602.yum更新(不是必须的,后面出现不兼容的情况再update)yum-yupdate#升级所有包同时也升级软件和系统内核;yum-......
  • 如何修改服务器的用户名和密码Windows2008/2012
    在我们刚拿到服务器的时候密码都是系统随机生成的初始密码,所以这时候我们一般第一时间拿到服务器应该为了安全起见先修改服务器密码以免密码泄露避免发生一些没必要的事情。......
  • 2流高手速成记(之九):基于SpringCloudGateway实现服务网关功能
    咱们接上回 上一节我们基于Sentinel实现了微服务体系下的限流和熔断,使得整个微服务架构的安全性和稳定性上升了一个台阶篇尾我们引出了一个问题,众多的微服务节点,我们如......