当前位置:首页 > 数码 > 微服务开发的九个最佳实践 (微服务开发的首选框架)

微服务开发的九个最佳实践 (微服务开发的首选框架)

admin5个月前 (05-12)数码33
微服务最佳实践:构建高效且可维护的架构 微服务架构作为服务器端代码开发和管理方式的演变,对软件开发产生了重大影响。遵循最佳实践对于减轻其固有复杂性至关重要,确保有效和可维护的微服务生态系统。 1. 采用单一职责原则 单一职责原则 (SRP) 规定,每个对象或模块应专注于一个特定职责。避免将多个职责集成到一个组件中,以提高可维护性和可理解性。 2. 建立职责明确的团队 微服务架构需要职责明确的团队。跨职能团队将不同角色的成员聚集在一起,负责整个微服务功能,从而提高协调性和效率。 3. 使用正确的工具和框架 选择合适的工具和框架对于微服务架构至关重要。考虑使用 Spring Boot、Kubernetes 和 Docker 等经过验证的选项,以简化自动化和部署管理。 4. 保持微服务之间的异步通信 异步通信允许服务并行操作,减少依赖性并提高效率。尽量最大化异步通信,仅在必要时使用同步通信。 5. 采用 DevSecOps 模型并保护微服务 DevSecOps 将安全考虑因素集成到软件开发生命周期中。实施安全措施,如身份验证、授权和加密,以保护微服务免受攻击。 6. 拥抱弹性和弹性 设计微服务以应对故障和异常情况。使用负载平衡、故障转移和自动缩放等技术来提高弹性和容错性。 7. 管理服务版本和依赖关系 明确管理微服务版本和依赖关系。使用版本控制系统跟踪更改,并定期更新依赖关系以确保兼容性和安全性。 8. 监控和可观察性 实施监控和可观察性策略,以收集微服务性能和行为数据。这对于故障排除、性能优化和容量规划至关重要。 9. 自动化测试和持续集成 自动化测试和持续集成实践对于确保微服务的质量和稳定性至关重要。建立自动化测试套件,并使用持续集成管道定期构建和部署更改。 10. 沟通和协作 建立有效的沟通和协作渠道。促进团队之间以及团队与利益相关者之间的定期沟通,以确保透明度和达成共识。 结论 遵循这些最佳实践可以帮助您建立高效、可扩展且安全的微服务生态系统。通过拥抱单一职责原则、建立明确的职责团队、使用合适的工具和技术,并强调安全性和弹性,您可以减轻微服务架构的复杂性并充分发挥其优势。

为什么DDD是设计微服务的最佳实践

微服务开发的九个最佳实践

在本人的前一篇文章《不要把微服务做成小单体》中,现在很多的微服务开发团队在设计和实现微服务的时候觉得只要把原来的单体拆小,就是微服务了。但是这不一定是正确的微服务,可能只是一个拆小的小单体。这篇文章让我们从这个话题继续,先看看为什么拆出来的是小单体。

在微服务架构诞生之前,几乎所有的软件系统都是采用单体架构来构建的,因此大部分软件开发者喜欢的开发路径就是单体架构模式。在这样的背景下,根据经济学和心理学的 路径依赖法则 ,当这些开发者基于新的技术想要把原来的大单体拆分成多个部分时,就必然会习惯性地采用自己最擅长的单体架构来设计每个部分。

在现实中我们经常看到这个法则随处都会发生,微信刚出来的时候很多人说这不就是手机上的QQ吗,朋友圈刚出来的时候他们又会说这不就是抄袭微博吗。很多时候当你兴致冲冲给朋友介绍一个新的东东时,朋友一句话就能让你万念俱灰:这不就是XXX吗?之所以这样,是因为人类在接触到新知识新概念的时候,都会下意识的使用以前知道的概念进行套用,这样的思维方式是人类从小到大学习新事物的时候使用的模式,它已经固化成我们大脑操作系统的一部分了。

理解了这个法则,我们就可以很容易的明白,已经在单体架构下开发了多年的软件工程师,当被要求要使用微服务架构来进行设计和开发的时候,本能的反应方式肯定是:这不就是把原来的单体做小了吗?但是这样做出来的“微服务”真的能够给我们带来微服务架构的那些好处吗?真的能提高一个企业的数字化响应力吗?

不断变化的软件需求和经常被视为效率低下的软件开发一直都是这个行业里最难解决的顽疾,从瀑布到敏捷,都是在尝试找到一个解决这个顽疾的方法,领域驱动设计(Domain Driven Design)也是其中一个药方,而且随着十多年的不断实践,我们发现这个药方有它自己的独特之处,下面我们先来介绍一下这个药方。

领域驱动设计这个概念出现在2003年,那个时候的软件还处在从CS到BS转换的时期,敏捷宣言也才发表2年。但是Eric Evans做为在企业级应用工作多年的技术顾问,敏锐的发现了在软件开发业界内(尤其是企业级应用)开始涌现的一股思潮,他把这股思潮成为领域驱动设计,同时还出版了一本书,在书中分享了自己在设计软件项目时采用的建模方法,并为设计决策者提供了一个框架。

但是从那以后DDD并没有和敏捷一样变得更加流行,如果要问原因,我觉得一方面是这套方法里面有很多的新名词新概念,比如说聚合,限界上下文,值对象等等,要理解这些抽象概念本身就比较困难,所以学习和应用DDD的曲线是非常陡峭的。另一方面,做为当时唯一的“官方教材”《领域驱动设计》,阅读这本书是一个非常痛苦的过程,在内容组织上经常会出现跳跃,所以很多人都是刚读了几页就放下了。

虽然入门门槛有些高,但是对于喜欢智力挑战的软件工程师们来说,这就是一个难度稍为有一点高的玩具,所以在小范围群体内,逐渐有一批人开始能够掌控这个玩具,并且可以用它来指导设计能够控制业务复杂性的软件应用出来了。虽然那时候大部分的软件应用都是单体的,但是使用DDD依然可以设计出来容易维护而且快速响应需求变化的单体应用出来。

到了2013年,随着各种分布式的基础设施逐渐成熟,而SOA架构应用在实践中又不是那么顺利,Martin Fowler和James Lewis把当时出现的一种新型分布式架构风潮总结成 微服务架构 。然后微服务这股风就呼呼的吹了起来,这时候软件工程师们发现一个问题,就是虽然指导微服务架构的应用具有什么特征,但是如何把原来的大单体拆分成微服务是完全不知道怎么做了。然后熟悉DDD方法的工程师发现,由于DDD可以有效的从业务视角对软件系统进行拆解,并且DDD特别契合微服务的一个特征:围绕业务能力构建。所以用DDD拆分出来的微服务是比较合理的而且能够实现高内聚低耦合,这样接着微服务DDD迎来了它的第二春。

下面让我们站在软件工程这个大视角看看DDD究竟是在做什么。

从计算机发明以来,人类用过表达世界变化的词有:电子化,信息化,数字化。这些词里面都有一个“化”字,代表着转变,而这些转变就是人类在逐渐的把原来在物理世界中的一个个概念一个个工作,迁移到虚拟的计算机世界。但是在转变的过程中,由于两个世界的底层逻辑以及底层语言不一致,就必须要有一个翻译和设计的过程。这个翻译过程从软件诞生的第一天起就天然存在,而由于有了这个翻译过程,业务和开发之间才总是想两个对立的阶级一样,觉得对方是难以沟通的。

于是乎有些软件工程界的大牛就开始思考,能不能有一种方式来减轻这个翻译过程呢。然后就发明了面向对象语言,开始尝试让计算机世界有物理世界的对象概念。面向对象还不够,这就有了DDD,DDD定义了一些基本概念,然后尝试让业务和开发都能够理解这些概念名词,然后让领域专家使用这些概念名词来描述业务,而由于使用了规定的概念名词,开发就可以很好的理解领域业务,并能够按照领域业务设计的方式进行软件实现。这就是DDD的初衷:让业务架构绑定系统架构。

后来发现这个方法不仅仅可以做好翻译,还可以帮助业务划分领域边界,可以明确哪个领域是自己的核心价值所在,以后应该重点发展哪个领域。甚至可以作为组织进行战略规划的参考。而能够做到这点,其实背后的原因是物理世界和虚拟世界的融合。

上面介绍了使用DDD可以做到绑定业务架构和系统架构,这种绑定对于微服务来说有什么关系呢。所谓的微服务拆分困难,其实根本原因是不知道边界在什么地方。而使用DDD对业务分析的时候,首先会使用聚合这个概念把关联性强的业务概念划分在一个边界下,并限定聚合和聚合之间只能通过聚合根来访问,这是第一层边界。然后在聚合基础之上根据业务相关性,业务变化频率,组织结构等等约束条件来定义限界上下文,这是第二层边界。有了这两层边界作为约束和限制,微服务的边界也就清晰了,拆分微服务也就不再困难了。

而且基于DDD设计的模型中具有边界的最小原子是聚合,聚合和聚合之间由于只通过聚合根进行关联,所以当需要把一个聚合根从一个限界上下文移动到另外一个限界上下文的时候,非常低的移动成本可以很容易地对微服务进行重构,这样我们就不需要再纠结应不应该这样拆分微服务?拆出的微服务太少了以后要再拆分这样的问题了。

所以,经过理论的严密推理和大量实践项目的验证,ThoughtWorks认为DDD是当前软件工程业界设计微服务的最佳实践。虽然学习和使用DDD的成本有点高,但是如果中国的企业想再软件开发这个能力上从冷兵器时代进入热兵器时代,就应该尝试一下DDD了解一下先进的软件工程方法。

从概念、部署到优化,Kubernetes Ingress 网关的落地实践

Kubernetes Ingress:从入门到优化实战</

在Kubernetes集群中,连接内外部流量的问题有多种解决方案,包括NodePort、LoadBalancer和Ingress。其中,Ingress凭借其灵活性和复杂路由支持,成为处理高级流量管理的理想选择。然而,Ingress本身的功能相对较基础,不支持流量分流等高级特性。通过Annotation和Custom Resource Definition (CRD),我们可以对其进行扩展以满足更多需求。

Ingress最佳实践

MSE网关作为下一代网关解决方案,不仅解决了Nginx Ingress的局限,还提供了多协议支持、安全性增强和高可用性。它具备低成本、集成度高、全面监控和WASM插件支持,简化运维,如从Nginx Ingress无缝迁移到MSE,只需要通过ACK实践MSE Ingress Controller的安装和CRD创建。

部署策略方面,通过设置MseIngressConfig和IngressClass的关联,实现集群流量的精细化治理。当部署状态改变时,MseIngressConfig的状态会显示为 (创建中)、 (成功监听)、 (运行中监控Ingress)或 (非法状态,需检查消息)。

灰度发布示例

使用Ingress配置稳定版本的HTTP服务:

```yamlapiVersion: /v1kind: Ingressmetadata:name: httpbinspec:ingressClassName: mserules:- host: :paths:- path: /versionpathType: Exactbackend:service:name: go-httpbin-v1port:number: 80```

灰度发布版本的Ingress配置:

```yamlapiVersion: /v1kind: Ingressmetadata:name: /canary: /canary-by-header: /canary-by-header-value: gray```

了解了这些关键实践后,你可以充分利用Kubernetes Ingress的功能,提升服务的灵活性、安全性和性能。进一步探索MSE网关,为你的应用程序提供强大的网关解决方案。如需了解更多细节,请参考阿里云直播链接,并注意所有内容由阿里云原创,未经许可,请勿转载。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 微服务

“微服务开发的九个最佳实践 (微服务开发的首选框架)” 的相关文章

九条微服务最佳实践-掌握你的服务架构 (微服务12要素)

九条微服务最佳实践-掌握你的服务架构 (微服务12要素)

前言 微服务的采用带来了许多好处,包括可伸缩性、可维护性和自主性。为了充分发挥这些好处,至关重要的是在微服务开发中遵循最佳实践。 最佳实践 1. 独立的数据存储 对于每个微...

单体与微服务的技术抉择-拆分还是整合 (单体微服务架构是什么意思)

单体与微服务的技术抉择-拆分还是整合 (单体微服务架构是什么意思)

作者|AshleyDavis 译者|明知山 筹划|丁晓昀 继续之战:单体架构与微服务 随着亚马逊云科技在他们的官博中宣称他们丢弃了微服务并回归单体架构,单体架构与微服务之间...

微服务容量规划的最佳实践-确保应用程序的高可用性和性能 (微服务需要多少内存)

微服务容量规划的最佳实践-确保应用程序的高可用性和性能 (微服务需要多少内存)

维护众多的服务需要巨大的努力,手动操作已不再可行。以微博的动态推送功能为例,仅远程过程调用(RPC)服务就接近40种。这些服务接口的性能和需求各不相同,一些接口虽然处理请求量大,但响应迅速,称为轻...

微服务全链路灰度颁布施行指南 (微服务全链路追踪)

微服务全链路灰度颁布施行指南 (微服务全链路追踪)

灰度颁布(GrayRelease,也称为灰度颁布或金丝雀颁布)是指在软件或服务颁布环节中,将新版本的性能或服务以较小的比例引入到消费环境中,仅向局部用户或节点提供新性能的一种颁布战略。 在传...

Netflix-微服务设计必看-Eureka-的内部运作机制-深入剖析 (netflix)

Netflix-微服务设计必看-Eureka-的内部运作机制-深入剖析 (netflix)

在微服务架构中,服务发现和注册是确保各个微服务之间通信和协作的核心组件。Netflix Eureka 作为一款开源的服务发现和注册工具,在现代分布式系统中扮演着重要角色。本文将从代码层面深入探...

别慌!丐版架构图带你秒懂-没用过微服务-轻松面试过关

别慌!丐版架构图带你秒懂-没用过微服务-轻松面试过关

微服务丐版架构图:面试必备 摘要 尽管大模型和云原生备受关注,微服务仍然在软件开发中占有重要地位。本文提供了一张丐版微服务架构图,帮助开发者在面试中了解微服务的基本概念和相关组件。 微服务架构...

稳如泰山!-开发微服务眼花缭乱-掌握这9个最佳实践 (稳如泰山心不乱打一最佳生肖)

稳如泰山!-开发微服务眼花缭乱-掌握这9个最佳实践 (稳如泰山心不乱打一最佳生肖)

微服务最佳实践:构建高效且复杂的生态系统 微服务架构已成为现代软件开发中最流行和先进的架构模式之一。它通过将应用程序分解为独立的、松散耦合的服务,实现了对解决方案的解耦,从而促进了持续交付和开发。...