微服务架构实践原则

简介: 微服务架构实践原则

好的微服务架构可以帮助团队加快产品发布,为用户提供更好的服务体验。但什么才是好的微服务架构?这篇文章简单介绍了微服务架构的设计原则。原文:Medium Microservice Architecture Practice[1]


许多初创公司的技术栈会从单体 Node.js 应用开始,然后构建几个卫星通信服务,但并没有系统采用微服务架构。随着系统变得越来越复杂,团队必须构建一个更好的解决方案来最小化对系统的影响。微服务体系架构的目标就是帮助工程师团队更快、更安全、更高质量的交付产品。


在微服务体系架构中,多个松散耦合的服务一起工作,每个服务专注于一个目标,并与相关行为和数据保持高度内聚。其定义包括 3 条设计原则:


  1. 单一职责——每项服务都应该专注于一个目的并把它做好
  2. 松耦合服务——服务之间没有太多的联系,对一个服务的变更不应该要求更改其他服务,服务之间的通信只能通过公开的服务接口进行。
  3. 高内聚性——每个服务都将所有相关的行为和数据封装在一起,如果需要构建新功能,所有的更改都应该局限于一个服务中。


image.png


这些原则是充分利用微服务体系架构潜力的唯一途径,任意两者的缺乏都将使之成为一种反模式。如果没有一个单一的职责,每个微服务最终都会做很多事情,并成长为多个“单体”服务,因此我们没法从微服务架构中获得好处,但却需要支付运营成本。如果没有松耦合,对一个服务的更改会影响到其他服务,因此我们没法快速安全的发布变更,而这正是微服务体系架构的核心优势。更重要的是,由紧耦合引起的问题可能是灾难性的,比如数据不一致甚至数据丢失。如果没有高内聚性,我们将最终得到一个分布式的单体系统,一组混乱的服务,必须在构建单一功能的同时进行更改和部署。由于多服务协调(有时跨多个团队)的复杂性和成本,分布式单体系统通常比集中式单体系统还要差劲。


此外,微服务不是代码行更少或处理小任务的服务,只要满足了这 3 个原则,服务就可以实现复杂而重要的功能。事实上,由于我们可以直接从单体服务中提取逻辑,因此微服务并不总是采用新技术或者从头开始构建的。


Node.js 单体应用在很多方面已经成为瓶颈。首先,最大的瓶颈是性能。某些计算量大、I/O 量大的任务不适合 Node.js。我们一直在逐步改进这个整体应用程序,但事实证明这种努力收效甚微。其次,另一个紧迫的瓶颈是单体应用程序减缓了产品开发。所有工程师都在一个应用程序中构建功能,所以这些服务通常是紧密耦合的,因为对系统某一部分的更改也会影响到其他部分,因此很难对系统进行灵活的变更。因为影响难以预测,我们也害怕做出重大变更。整个应用程序作为一个整体部署,如果部署由于不正确的提交而停滞,则无法完成其他所有变更。在这种情况下,微服务体系架构适合于交付更好的复杂系统。在我们新的微服务体系架构中,更改可以一小时内发布到生产环境,工程师不必担心会影响系统的其他部分。第三,单体应用程序很难为特定任务扩展系统。单体应用程序只能扩展整个系统,这将导致其他简单任务的过度配置。我们分割了不同类型的请求来分离 Node.js 进程,但因为这些单体服务的迷你版本仍然是紧耦合的,因此伸缩性仍然受限。最后,最紧迫的瓶颈是它阻止我们尝试新技术。微服务体系架构的主要优点之一是,每个服务都可以使用不同的技术栈构建,并与不同的技术集成。这样,我们就可以为特定的工作找到合适的工具,并安全快速地完成任务。


在采用微服务体系架构时,我们会面临什么问题?


微服务也有可能出问题,并在实际上损害生产环境。有 7 种策略可以帮助我们:


  1. 用清晰的思路构建新的服务
  2. 单一的持久化存储是有害的
  3. 解耦“构建服务”和“运行服务”
  4. 详细一致的可观测性
  5. 注意失败
  6. 从一开始就避免“微服务综合症”


用清晰的思路构建新的服务


  • 有人可能认为,采用新的服务端架构意味着需要长期暂停产品开发并且重写所有内容。但实际上这是一种误解,我们永远不应该为了构建新的服务而构建。每当我们建立一项新服务或采用一项新技术时,我们必须有一个清晰的产品理念或工程价值。产品价值是造福用户,与单体 Node.js 应用相比,新服务需要提供更多的价值或更好的性能。工程价值指的是使工程团队更好、更快的合作。如果构建一个既没有产品价值也没有工程价值的新服务,我们还不如仍然停留在单体应用中。


单一的持久化存储是有害的


  • 为微服务建模只是微服务架构的一部分工作,另一大部分工作是为持久化存储的数据建模。跨服务共享持久数据存储似乎是集成微服务的最简单方法,然而,它实际上是有害的,我们应该不惜一切代价避免。首先,持久化数据存储与实现细节有关,跨服务共享数据存储将向整个系统公开服务的实现细节。如果服务更改了数据格式,或添加了缓存层,或切换到不同类型的数据库,那么其他服务也必须相应的更改,而这违反了松耦合原则。
  • 另外,如何修改、描述和使用数据并不是一种服务行为。如果我们跨服务共享数据存储,意味着其他服务也必须复制这些服务行为,而这违反了高内聚原则,会将给定域中的行为泄露给多个服务。如果我们修改一个行为,将不得不同时修改所有这些服务。
  • 在微服务体系架构中,只有一个服务应该负责特定类型的数据,所有其他服务都应该通过服务 API 请求数据,或者保留只读的非规范(可能是具化的)数据副本。
  • 这听起来可能有点抽象,这里有一个具体的例子。假设我们正在构建一个新的推荐服务,需要来自发布数据表中的一些数据,该数据表目前存储在 AWS Dynamo DB 中。


参考文献

Microservices Best Pratices: https://medium.com/@kmdkhadeer/microservices-best-practices-5fe3e28394b3


References:

[1] Medium Microservice Architecture Practice: https://jinlow.medium.com/medium-microservice-architecture-practice-5a2d61fff9fa

目录
相关文章
|
2月前
|
数据采集 监控 API
移动端性能监控探索:iOS RUM SDK 技术架构与实践
阿里云 RUM SDK 作为一款性能体验监控采集工具,可以作为辅助 App 运维的强有力助手,提升您的问题排查效率。
255 26
|
3月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1738 10
|
2月前
|
存储 运维 分布式计算
零售数据湖的进化之路:滔搏从Lambda架构到阿里云Flink+Paimon统一架构的实战实践
在数字化浪潮席卷全球的今天,传统零售企业面临着前所未有的技术挑战和转型压力。本文整理自 Flink Forward Asia 2025 城市巡回上海站,滔搏技术负责人分享了滔搏从传统 Lambda 架构向阿里云实时计算 Flink 版+Paimon 统一架构转型的完整实战历程。这不仅是一次技术架构的重大升级,更是中国零售企业拥抱实时数据湖仓一体化的典型案例。
217 0
|
3月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
3月前
|
数据采集 存储 运维
MyEMS:技术架构深度剖析与用户实践支持体系
MyEMS 是一款开源能源管理系统,采用分层架构设计,涵盖数据采集、传输、处理与应用全流程,支持多协议设备接入与多样化能源场景。系统具备高扩展性与易用性,结合完善的文档、社区、培训与定制服务,助力不同技术背景用户高效实现能源数字化管理,降低使用门槛与运维成本,广泛适用于工业、商业及公共机构等场景。
166 0
|
2月前
|
存储 SQL 消息中间件
从 ClickHouse 到 StarRocks 存算分离: 携程 UBT 架构升级实践
查询性能实现从秒级到毫秒级的跨越式提升
|
5月前
|
算法 物联网 定位技术
蓝牙室内定位技术解决方案:核心技术架构与优化实践
本文探讨了蓝牙iBeacon与Lora结合的室内定位技术,分析其在复杂室内环境中的优势与挑战。通过三层架构实现高精度定位,并提出硬件、算法与部署优化方向,助力智慧仓储、医疗等场景智能化升级。
320 0
蓝牙室内定位技术解决方案:核心技术架构与优化实践
|
5月前
|
数据采集 人工智能 安全
开源赋能双碳:MyEMS 能源管理系统的架构与实践价值
在全球碳中和趋势与“双碳”目标推动下,能源管理趋向精细化与智能化。MyEMS是一款基于Python开发的开源能源管理系统,具备灵活适配、功能全面的优势,覆盖工厂、建筑、数据中心等多元场景。系统支持能源数据采集、分析、可视化及设备管理、故障诊断、AI优化控制等功能,提供“监测-分析-优化”闭环解决方案。遵循“国家+省级+接入端”三级架构,MyEMS在重点用能单位能耗监测中发挥关键作用,助力实现能源效率提升与政策合规。开源模式降低了技术门槛,推动“双碳”目标落地。
210 0
|
2月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路

热门文章

最新文章