微服务架构实践原则

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 微服务架构实践原则

好的微服务架构可以帮助团队加快产品发布,为用户提供更好的服务体验。但什么才是好的微服务架构?这篇文章简单介绍了微服务架构的设计原则。原文: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

目录
相关文章
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
191 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
1月前
|
运维 监控 持续交付
微服务架构解析:跨越传统架构的技术革命
微服务架构(Microservices Architecture)是一种软件架构风格,它将一个大型的单体应用拆分为多个小而独立的服务,每个服务都可以独立开发、部署和扩展。
244 36
微服务架构解析:跨越传统架构的技术革命
|
3天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
43 16
|
4天前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
28 10
|
25天前
|
弹性计算 Java 关系型数据库
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
Web应用上云经典架构实践教学
|
11天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
37 10
|
11天前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
13天前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
13天前
|
运维 安全 架构师
架构师工具箱:Well-Architected云治理提效实践
本次分享基于阿里云Well-Architected Framework的最佳实践案例,涵盖企业从上云到优化的全过程。安畅作为国内领先的云管理服务提供商(Cloud MSP),拥有800多名员工,其中70%为技术工程师,为企业提供架构安全、数据智能等技术服务。内容包括Landing Zone与Well-Architected的关系、企业云治理现状及需求分析,重点探讨了安全合规、成本优化、资源稳定性和效率提升等方面的最佳实践,并通过具体客户案例展示了如何通过自动化工具和定制化解决方案帮助企业提升云上业务价值。