请选择 进入手机版 | 继续访问电脑版
首页 /科技 / 正文

12种从单体架构向微服务转型的设计原则与优秀实践

2020-03-05| 发布者: 醉舞为红颜| 查看: 58

不知您是否还记得,已往传统的应用步调通常是作为一个团体被开辟出来,然后被打包成为一个代码包,进而作为一个团体单元被摆设的。不停以来,这种单体架构本身和与之干系的维护极具复杂性,而且开辟与迭代速率也相当迟钝。这些都在促进软件开辟企业去不绝地寻求具有可连续性、机动性、以及易于集成的新型更换方案。

微服务架构的出现冲破了如许的僵局。它代表了浩繁小型、自动化和自包罗的服务的单一聚集。下图展示了体系怎样通过一个API网关,去访问多个微服务的逻辑。

微服务架构固然有着诸多上风,但是贸然从单体架构切换已往,大概会让很多企业由于低估了团体的复杂性,而导致本钱的激增,以及在研发的关键时间出现灾难性的不测错误。下面让我们一起讨论十二种值得依照的,从单体架构向微服务转型的操持原则与精良实践。

1. 提供单独的数据存储

在思量迁移之前,请事先弄清楚将会怎样根据各种微服务组件来分离数据的存储。您可以通过利用诸如“下令与查询责任隔离”(Command and Query Responsibility Segregation,CQRS,请参考:https://dzone.com/articles/microservices-with-cqrs-and-event-sourcing)之类的架构模式来实现,以使得数据对每一个微服务都是私有的。

如果各个服务都无法成为其数据的唯一全部者,那么就会导致多个服务必要访问同一个私有数据库的环境,即:产生了耦合标题。也就是说,我们最好不要在微服务之间直接共享数据,而是要通过API来实现。

2. 创建专门的团队

微服务的告急上风表现在云原生的应用上。这就意味着:任何更新,都必要相对快速且实时的发布。也就是说,任何停机都会给业务造成巨大的丧失。因此,如果您想举行线性且高效的扩展,就必要为每个微服务分配专门的开辟团队。

不外,光靠开辟职员则很难掌控大型应用全面的端到端方案。我们必要拥有一支专业的团队,在熟悉管理眇小差别的底子上,依附转换技能与开辟服从,进而依照微服务的各项精良实践。

3. 利用自动化举行独立摆设

为了将单体架构分解成为多个单独的微服务,我们必要确保实现“构建和发布”的自动化布局。如许不光可以有助于淘汰总体的交付时间,而且可以加快发布的速率,进而改善摆设的整个过程。可以说,有了自动化,微服务就可以大概被妥善地封装到容器中,并可以大概有用地摆设到包罗云端在内的任何环境里。

4. 利用REST API的利益

开辟职员在创建REST(Representational State Transfer,表现性状态传输)API时无需安装任何其他的软件与库,因此它为微服务提供了巨大的机动性,数据也不再绑定到任何特定的方法或资源之上。通过REST API,微服务可以处理处罚多种范例的调用,返回差别的数据格式,以及具有通过精确地实验超媒体,来修改布局的本事。

5. 相识文化的厘革

对于传统的开辟职员而言,他们风俗了端到端的测试环境。而随着从单体架构迁移过渡到基于微服务的架构,他们必须突然从大的格局转为关注一小部分的功能,而且管理层对此还布满了渴望。可见,这更大水平上是文化上的厘革,而不光仅是开辟技能上的厘革。也就是说,开辟职员必要明白和均衡公司愿景与自身工作方式的转换。

6. 将迁移分解为多步调

如果您已往从未处理处罚过此类迁移,那么请您做好无法一挥而就的预备。单体架构通常会涉及一个包罗有存储库、摆设、监控、以及其他复杂任务的协作网络。因此,最好的方法之一就是:在临时生存单体布局的底子上,并行开辟其他作为微服务的功能。一旦实现了新的服务,同时团队也已对新的流程有所相识,我们就可以在厘清怎样将旧的架构分解成为干系组件的底子上,开始逐一举行迁移。

7. 在混淆体系上构建分离体系

界说差别复杂部分之间的交互作用和过程,是微服务的关键操持原则与精良实践之一。因此,我们在迁移项目的初始阶段,就应当思量到拆分体系。每个拆分体系都应当对于正在构建的架构来说是唯一的。我们可以通过查抄单体布局,来连续监控各个组件的性能,以便相识各个组件之间的差别性,以及在微服务转换时大概出现的标题。

我们可以参考如下监督过程的工具:

  • New Relic
  • Datadog
  • InfluxDB
  • Grafana

8. 隔离运行时(Runtime)历程

由于我们通常针对差别的垂直细分范畴有着差别的流程,因此我们必要在运行时的级别上也具有肯定的隔离性。比方,您可以通过某种情势的分布式盘算,来分别实现容器化、变乱架构、各种HTTP管理方法、服务网格和断路器(circuit breakers)等。

9. 将精确的技能与精确的微服务相配对

正所谓殊途同归。大概在您的团队中,差别的成员会偏好利用差别的技能和编程语言来实现微服务,但是请只管选用那些易于日后方便更改或更换的技能,来实现快速上手与直接迭代。固然,如果您并不确定哪种技能最适当本身的项目,那么请在决议过程中思量以下方面:

  • 可维护性。
  • 容错性。
  • 可扩展性。
  • 构建本钱。
  • 易摆设性。

10. 思量利用域驱动式操持(Domain-Driven Design)

域驱动式操持在某种水平上可以被明白为:应用于业务模子的面向对象编程。作为一种操持原则,它利用实践规则和头脑来表达面向对象的模子。简朴来说:我们必要围绕着本身的业务范畴来操持微服务。比方,Netflix等平台就是利用差别服务器上的微服务,来举行内容交付和干系的跟踪服务。

11. 区分专用资源和按需资源

如果您的告急目的是提供杰出的客户体验,那么请思量将专用资源和按需资源区分开来。比方,针对某个电子商务平台,我们可以通过构建其微服务和云架构,来实现快速且安全地在内部平台和云环境之间,摆设并转移差别的工作负载。如许不光收缩了资源的相应时间,也使得迁移到云端的流量与资源更加直观。

12. 管理对开源工具的依赖

对于开辟职员来说,利用开源的微服务工具举行安全性、监控、调试、以及日志纪录,可谓“屡见不鲜”。但是,请确保不会以太过依赖某些库和工具的方式,去干扰架构的性能或安全性。我们可以参考如下方面,同时根据实际的开辟需求和所用到工具的范例,来实验各种得当的构造战略。

  • 为已允许的软件版本,创建正式的存储库。
  • 相识开源软件的供给关系。
  • 创建处理处罚非常的管理方案。

总结

综上所述,从单体架构向微服务架构转型简直极富寻衅性。上述操持原则与精良实践为您提供了参考的思绪与方法,您可以在实际开辟与迁移过程中,根据实际环境,按需采取渐渐的方法,即:先从团体体系中的一小部分,而且好坏关键的部分入手,通过厘清当前各个组件的工作原理,以及相识微服务的干系技能与文化,进而创建渐渐的迁移操持。同时,如许也更轻易获取长处干系者,以致构造层面上的支持。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

0人已打赏

©2001-2018 鲁新社区 http://www.luxinw.com/中国互联网举报中心非经营性网站Powered byDiscuz!X3.2公安网备 
Archiver手机版小黑屋广告合作客服QQ:156686636Comsenz Inc.