微服务设计约束

相较于单体应用,微服务架构在提升开发、部署等环节灵活性的同时,也提升了在运维、监控环节的复杂性。结合实践总结,微服务架构的设计有以下四条设计约束遵循:

(1)微服务个体约束

一个设计良好的微服务应用,所完成的功能在业务领域的划分上应互相独立。微服务的微,应用是按照问题域对单体应用做合理的拆分。

微服务还应该具备正交分解特性,在职责划分上专注于特定业务,即遵守SOLID 原则中的 单一职责原则 (Single Responsibility Principle,SRP),微服务修改或者发布时,不应影响到另外一个服务的交互。

(2)微服务之间的横向关系

微服务的横向关系包括两个方面: 可发现性、可交互性。

可发现性是指, 当服务A发布或者扩缩容时,依赖服务A的服务X如何在保持运行的前提下自动感知到服务A的变化。这里需要引入第三方服务注册中心来实现服务的可发现性。

可交互性是指, 服务A采用什么方式才可以调用服务X,由于服务自治的约束 ,服务之间的调用需要采用开发语言无关的远程调用协议。现在业界大部分的微服务架构通常采用基于 IDL (Interactive Data Language, 交互式数据语言)的二进制协议进行交互,为了进一步实现解构,微服务体系还需要一个独立的元数据中心,由它来存储服务的元数据信息,服务通过查询该中心的定义来实现发起调用的细节。

此外,由于服务链路的复杂性,微服务架构也随之变的脆弱,因此面向失败的设计原则在微服务体系中就变得尤为重要。类似 限流、熔断、隔仓、负载均衡等增强服务韧性的可靠性设计也成为微服务架构的标配。

(3)微服务与数据层的纵向约束

微服务领域提倡数据存储隔离(Data Storage Segregation, DSS) 原则,即数据是微服务的私有资产,必须通过当前微服务提供的API来访问数据,避免数据层产生耦合。

同样,由于容器调度会对底层设施的稳定性产生不可预知的影响,在设计微服务时,应当遵守无状态服务设计原则,与底层基础设施解耦,从而实现在不同容器之间自由调度。对于有状态的微服务而言,通常使用计算与存储分类的方式,将数据下层到分布式存储方案中,从而一定程度上实现服务无状态化。

(4)全局视角下的微服务分布式约束

在设计微服务架构的开始阶段,就要考虑两个重要问题,如何实现高效的运维以及微服务体系的可观测能力。

  • 如何设计提升开发效率的全自动化的CI/CD流水线,并在这个基础之上支持蓝绿部署、灰度发布、金丝雀发布等不同策略。以满足业务对发布稳定性的诉求。
  • 全链路、实时和多维度的可观测性应是标配设计。在微服务的运维中,发现故障的时效性和根本原因分析的精确性是开发、运维的核心诉求。
相关推荐
Dawn-bit38 分钟前
Linux磁盘管理详解
linux·运维·服务器·计算机网络·云计算
RisunJan1 小时前
Linux命令-sftp(SSH 文件传输协议客户端)
linux·运维
极客先躯3 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
三言老师5 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
attitude.x5 小时前
Cursor+GitOps:自动化运维新姿势
运维·自动化
数智化管理手记6 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘
Shell运维手记7 小时前
ARP 协议超详细讲解(适合网工考试 / 运维理解)
运维·网络·网络协议·智能路由器
西安景驰电子7 小时前
PCIe 授时卡原理及应用
运维·服务器·windows·单片机·嵌入式硬件·fpga开发
huainingning9 小时前
华三瘦AP切换为胖AP并配置无线功能
运维·网络·网络协议·tcp/ip
外滩运维专家9 小时前
十几台服务器要改配置,别再一台台 SSH 了
运维