您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

开发微服务眼花缭乱,掌握这9个最佳实践,稳了!

时间:2023-11-06 15:21:26  来源:今日头条  作者:架构摆渡君

微服务架构目前是最流程和成熟架构之一,在IT圈子里面如果说没听说过微服务,估计老板会找你喝茶了。微服务架构(Microservice Architecture)是一种架构,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。微服务架构是一种演进的模式,从根本上改变了服务器端代码的开发和管理方式。这种架构模式涉及将应用程序设计和开发为松散耦合服务的集合,这些服务通过定义良好的轻量级 API 进行交互以满足业务需求。

微服务旨在通过促进持续交付和开发来帮助软件开发公司加速开发过程,微服务架构模式从根本上改变了服务器端代码的开发和管理方式。

如果我们谈论其基本特征,则特定的微服务本身充当应用程序,与其他微服务形成更大的应用程序,这使得:

  • 更轻松、更快速的开发
  • 可维护性
  • 可扩展性

从本质上讲,这使您可以更有效地管理和维护应用程序。然而,这种模式固有的特定复杂性可以通过使用某些最佳实践来减轻。

我们都知道微服务设计对现代架构的网络弹性有直接影响,当企业决定使用微服务进行构建时,高效且有效地开发它们非常重要,以便它们可以在网络上运行,而不会导致过多的延迟、带宽消耗和数据包丢失。

现在我们将讨论如果您想实现一个没有极端架构复杂性的高效微服务生态系统,您应该考虑的基本微服务最佳实践。

1. 采用单一职责原则

单一职责原则是 OOP 中的任何单个对象都应该针对一个特定功能而创建的概念。基本上,它是罗伯特·马丁提出的编程原则的一部分。就像代码一样,一个类应该只有一个需要更改的理由,从而使软件更易于维护、可扩展且更易于理解。

要在软件开发中采用SRP,您应该确保每个类或模块都有明确定义的职责,并且不会尝试做太多事情。您还应该保持模块解耦,并使用清晰简洁的接口在它们之间进行通信。总结一下,我们有一个有趣的引述:

“将那些因相同原因而变化的事物聚集在一起,并将那些因不同原因而变化的事物分开。”——奥莱利

我们可以说,这是构建良好架构设计的最好、最基本的原则之一,因为它意味着微服务、模块、类、子系统或功能不应该有多个原因进行更改。

让我们通过一个例子来理解这个原理:

电子商务门户可能具有如下微服务架构

开发微服务眼花缭乱,掌握这9个最佳实践,稳了!

 

在这里,所有服务(例如产品列表服务、订单服务、客户服务、支付服务、购物车服务、愿望清单服务等)都有单一职责。这意味着确保在并非绝对必要的情况下不将一项服务与另一项服务集成非常重要,因为这会使架构的维护和测试变得更加复杂。

2. 建立职责明确的团队

开发微服务架构,需要建立职责明确的团队。这可以通过多种方式完成,例如基于角色的团队、跨职能团队等。在此架构中,每个微服务都作为独立的应用程序运行。

让我们通过一个例子来理解这一点:

组织可以拥有基于角色的团队,例如 UI/UX 开发人员、前端开发人员、后端开发人员、数据库管理员、QA、中间件开发人员等,他们独立工作,但每天通过会议进行互动(无论是面对面的)或者使用各种通讯工具,如 JIRA、Slack 等。

当我们考虑维护时,有时系统中也会出现小错误,有时甚至是大错误。因此,SCRUM 可能是一个可能的解决方案。它帮助每个团队成员缩短无意识的时间。但是,由于团队是根据角色组织的,因此在一个冲刺中集成一个更新可能会成为一项复杂的任务。例如,如果 UI/UX 开发人员没有从服务器人员那里获得有关 API 更改的任何信息,则新 API 将根本没有用处。

那么解决办法是什么呢?

建立职责明确的跨职能团队,帮助协调团队之间的工作

负责整个微服务功能的跨职能团队可能会给您的项目带来重大好处。该团队应由所有基于角色的团队的成员组成,并负责协调应用程序的各个部分,即 UI、开发、数据库,甚至 QA。如果应用程序有两个版本,即网络版本和移动版本,那么两个团队的开发人员都应该出现在该团队中。这种团队的主要好处是可以轻松解决错误、开发新功能并将其部署到生产环境中。

3. 使用正确的工具和框架

至此,您可能已经设计了微服务来独立部署它们,现在您必须实现这些微服务的最佳价值。为此,您需要使用一组良好的 DevOps 工具来自动化构建和部署管理。

使用正确的工具、框架和库将对实现微服务架构大有帮助。如果您计划在 JAVA 中执行此操作,请考虑Spring Boot 项目。选择正确的工具和框架需要花费大量的时间和精力,因此这里列出了适合该工作的“首选”、经过验证的工具和技术:

  • Jenkins 和 Bamboo 用于部署自动化
  • Docker 用于容器化
  • Postman用于 API 测试
  • 用于容器编排和部署的 Kube.NETes
  • Logstash 用于监控
  • DevSecOps 管理软件开发生命周期的整个过程
  • Github 用于源代码管理和版本控制
  • RobbitMQ 的简单消息队列服务
  • SonarQube 检查代码质量和安全性
  • Ansible 用于管理您的配置
  • Jira 用于问题跟踪和项目管理

4. 保持微服务之间的异步通信

微服务之间发生两种类型的通信:同步和异步。让我们通过一个例子来理解这一点:

对于电子商务平台来说,同步通信意味着用户将被要求“保持在线”并完成一系列步骤(选择商品、添加送货地址、付款详细信息、订单验证),最终导致客户通知“谢谢”您的订单!我们将于下周交付”。

一旦处理客户通知,也会发生一些异步通信,这些异步通信是订单“履行”阶段的一部分,例如:仓库通知、库存更新等。

在同步通信的情况下,一个服务变得依赖于另一服务。有时,使用多个微服务之间的同步通信来完成整个任务会变得非常耗时。

另一方面,异步通信彼此不依赖,每个服务都可以花一些时间来完成其任务。因此,人们应该尽可能地最大化微服务之间的异步通信,它减少了依赖性并提高了应用程序的整体效率。

您可以在下面看到这样的示例:

开发微服务眼花缭乱,掌握这9个最佳实践,稳了!

 

5. 采用 DevSecOps 模型并保护微服务

安全性在此架构中非常重要。随着微服务架构在云原生应用程序开发中的发展,DevSecOps 实践越来越多地用于通过增强的安全措施来确保持续集成和持续交付。使用微服务构建的应用程序可以分为以下代码类型:

  • 应用代码(核心逻辑)
  • 应用服务代码(网络连接、会话建立等)
  • 基础设施(数据存储资源、网络、平台等)
  • 监控(应用程序的持续可观察性)

DevSecOps 包含三个概念:开发、安全和操作,并已被证明是具有持续集成、持续交付和持续部署管道等原语的代码类型的促进范例。这些管道是使用开发人员的源代码进行开发、测试、部署以及许多此类操作的工作流程,这些操作由具有反馈机制的自动化工具支持。此外,它还使开发团队能够更快地交付更好、更安全的代码。微服务架构中的 DevSecOps 实践提供了许多好处,例如:

  • 高安全保证
  • 减少代码漏洞
  • 提高产品质量
  • 提高生产力
  • 提高操作速度
  • 更快地交付更好、更高质量的软件

6. 为每个微服务使用单独的数据存储

一项重要的实践是确保尽可能使用单独的数据库来存储数据,而不是为多个微服务使用相同的数据库。然而,更深入的分析可能表明一个微服务仅适用于数据库表的子集,而另一方面,另一个微服务仅适用于全新的表子集。如果两个数据子集都是正交的,则需要将数据库分成单独的服务。

因此,请确保为您的微服务拥有单独的数据存储,以减少延迟并提高安全性。这已经被提到很多次了,但需要强调的是,微服务之间应该尽可能少地依赖。

微服务架构的主要属性之一是每个服务的数据都是私有的,例如,每个服务数据库模式就是如此。

开发微服务眼花缭乱,掌握这9个最佳实践,稳了!

 

我们还可以使用共享数据库服务器,该服务器可供多个服务使用,并对其数据进行逻辑分离。

7. 单独部署每个微服务

如果您单独部署每个微服务,那么在维护或升级工作的同时,您肯定会节省大量与多个团队协调的时间。此外,如果一个或多个微服务具有相同的资源,我们建议您使用专用基础设施来隔离每个微服务的故障并避免全面中断。

部署微服务的一些最常见和流行的模式是:

  • 每个主机多个服务实例
  • 每个容器的服务实例
  • 每个主机单个服务实例
  • 每个虚拟机的服务实例

8. 编排微服务

微服务的编排是在流程和工具方面取得成功的最有影响力的因素之一。您可以使用 Docker 在虚拟机上运行容器,但它无法提供与容器编排平台相同级别的弹性。在尝试采用微服务架构时,这样的决定很可能会对您的正常运行时间产生负面影响。

以下是一些经过验证的编排平台:

  • K8(Kubernetes)
  • ACK(阿里云容器服务)
  • ECS(亚马逊弹性容器服务)
  • Azure 容器应用程序

这些平台有助于管理容器配置和部署、负载平衡、扩展、网络通信问题等。

9. 使用有效的监控系统

微服务架构可帮助您对数千个模块化服务进行巨大扩展,并提供提高速度和有组织的监控方法的潜力。然而,重要的是要确保检查所有微服务并定期检查它们是否按预期运行以及是否有效地使用可用资源。根据这些观察结果,如果未达到预期,您可以采取适当的措施。

让我们分析一个示例情况,假设您应用了微服务架构模式,该模式不具备处理请求的能力,但它们仍在运行。例如,如果数据库连接耗尽,监控系统应该能够在实例发生故障时生成警报,并且请求应路由到工作服务实例。

监控微服务并准确解释这些统计数据将帮助您改进决策并在需要时保持微服务可用。

让我们看一下微服务监控工具的几个示例。

  • AWS CloudWatch: 一种监控、可观察性和管理服务,可收集和可视化实时日志,并为 AWS、混合和本地应用程序及基础设施资源提供可操作的见解。
  • Jaeger: 旨在监控和解决微服务环境中的复杂问题的软件。
  • Datagod: 一个适用于云规模应用程序的可观察性、安全性和分析平台,使用基于 SaaS 的数据分析平台为数据库、服务和工具提供全面的解决方案。
  • Graphite: 一种开源软件,可以监控数字时间序列数据并绘制图表,并提供对底层系统的深入洞察。
  • Prometheus: 一个免费的开源软件工具,提供监控和修改解决方案。

结论

我希望您将遵循这些微服务的最佳实践,最终得到一个独立的、松散耦合的系统,以便获得该架构的好处。



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  Search: 微服务  点击:(4)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  Search: 微服务  点击:(114)  评论:(0)  加入收藏
九条微服务最佳实践,你学会了哪条?
微服务之间连贯一致的代码库对于可维护性至关重要。保持代码成熟度相似,可确保系统统一演进,防止服务间出现性能、安全性和功能差异。在开发微服务时,我们需要遵循哪些最佳实践...【详细内容】
2024-01-05  Search: 微服务  点击:(97)  评论:(0)  加入收藏
Go微服务入门到容器化实践
Go微服务入门到容器化实践Go 是一门高效、现代化、快速增长的编程语言,非常适合构建 Web 应用程序。而 Docker 是一种轻量级的容器化技术,能够使得您的应用程序在任何地方运行...【详细内容】
2024-01-01  Search: 微服务  点击:(61)  评论:(0)  加入收藏
微服务全做错了!谷歌提出新方法,成本直接降为1/9!
2023,微服务“水逆”之年。长期以来,不管大厂还是小厂,微服务都被认为是云原生服务应用程序架构的事实标准,然而2023,不止那位37signals的DHH决心下云,放弃微服务,就连亚马逊和谷歌...【详细内容】
2023-12-29  Search: 微服务  点击:(117)  评论:(0)  加入收藏
微服务架构中的数据一致性
在微服务中,一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案,如果其中一个分布式流程参...【详细内容】
2023-12-27  Search: 微服务  点击:(141)  评论:(0)  加入收藏
监控 Spring Cloud 微服务的实践方案
一、简介Spring Cloud是一个基于Spring Boot实现的微服务框架,它提供了丰富的微服务功能,如分布式配置、服务注册与发现、服务熔断、负载均衡等。为了更好地管理和监控这样复...【详细内容】
2023-12-19  Search: 微服务  点击:(141)  评论:(0)  加入收藏
聊聊微服务链路服务
微服务架构图片如果有用户反馈某个页面很慢,我们知道这个页面的请求调用链是 A -----> C -----> B -----> D(图片有误),怎么来定位是由哪个服务引起的问题呢? 更进一步,如果...【详细内容】
2023-12-15  Search: 微服务  点击:(123)  评论:(0)  加入收藏
选择适合微服务的编程语言,让你的工作事半功倍!
讨论编程语言就像是一场政治辩论。每个开发者都会过分捍卫他/她所使用的编程语言。然而,编程语言应该被看作是它们真正是的东西,即一种工作工具。每种编程语言都有特定的目的...【详细内容】
2023-12-14  Search: 微服务  点击:(177)  评论:(0)  加入收藏
Eureka: 微服务架构中不可或缺的服务治理工具
Eureka是Netflix开源的一款用于服务治理的工具,它是NetflixOSS(OpenSourceSoftware)项目的一部分,主要用于实现微服务架构中的服务注册与发现。在当今庞大而复杂的微服务系统中,E...【详细内容】
2023-12-14  Search: 微服务  点击:(190)  评论:(0)  加入收藏
▌简易百科推荐
对于微服务架构监控应该遵守的原则
随着软件交付方式的变革,微服务架构的兴起使得软件开发变得更加快速和灵活。在这种情况下,监控系统成为了微服务控制系统的核心组成部分。随着软件的复杂性不断增加,了解系统的...【详细内容】
2024-04-03  步步运维步步坑    Tags:架构   点击:(4)  评论:(0)  加入收藏
大模型应用的 10 种架构模式
作者 | 曹洪伟在塑造新领域的过程中,我们往往依赖于一些经过实践验证的策略、方法和模式。这种观念对于软件工程领域的专业人士来说,已经司空见惯,设计模式已成为程序员们的重...【详细内容】
2024-03-27    InfoQ  Tags:架构模式   点击:(13)  评论:(0)  加入收藏
哈啰云原生架构落地实践
一、弹性伸缩技术实践1.全网容器化后一线研发的使用问题全网容器化后一线研发会面临一系列使用问题,包括时机、容量、效率和成本问题,弹性伸缩是云原生容器化后的必然技术选择...【详细内容】
2024-03-27  哈啰技术  微信公众号  Tags:架构   点击:(10)  评论:(0)  加入收藏
DDD 与 CQRS 才是黄金组合
在日常工作中,你是否也遇到过下面几种情况: 使用一个已有接口进行业务开发,上线后出现严重的性能问题,被老板当众质疑:“你为什么不使用缓存接口,这个接口全部走数据库,这怎么能扛...【详细内容】
2024-03-27  dbaplus社群    Tags:DDD   点击:(11)  评论:(0)  加入收藏
高并发架构设计(三大利器:缓存、限流和降级)
软件系统有三个追求:高性能、高并发、高可用,俗称三高。本篇讨论高并发,从高并发是什么到高并发应对的策略、缓存、限流、降级等。引言1.高并发背景互联网行业迅速发展,用户量剧...【详细内容】
2024-03-13    阿里云开发者  Tags:高并发   点击:(5)  评论:(0)  加入收藏
如何判断架构设计的优劣?
架构设计的基本准则是非常重要的,它们指导着我们如何构建可靠、可维护、可测试的系统。下面是这些准则的转换表达方式:简单即美(KISS):KISS原则的核心思想是保持简单。在设计系统...【详细内容】
2024-02-20  二进制跳动  微信公众号  Tags:架构设计   点击:(36)  评论:(0)  加入收藏
详解基于SpringBoot的WebSocket应用开发
在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用...【详细内容】
2024-01-30  ijunfu  今日头条  Tags:SpringBoot   点击:(8)  评论:(0)  加入收藏
PHP+Go 开发仿简书,实战高并发高可用微服务架构
来百度APP畅享高清图片//下栽のke:chaoxingit.com/2105/PHP和Go语言结合,可以开发出高效且稳定的仿简书应用。在实现高并发和高可用微服务架构时,我们可以采用一些关键技术。首...【详细内容】
2024-01-14  547蓝色星球    Tags:架构   点击:(114)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11    王建立  Tags:Spring Boot   点击:(124)  评论:(0)  加入收藏
Spring Boot虚拟线程的性能还不如Webflux?
早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错。内容较长,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读。测试场景作者采用了一个尽可...【详细内容】
2024-01-10  互联网架构小马哥    Tags:Spring Boot   点击:(115)  评论:(0)  加入收藏
站内最新
站内热门
站内头条