您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    12种从单体架构向微效劳转型的设计准绳与优秀实际
    时间:2020-03-08 12:32 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    【51CTO.com快译】不知您能否还记得,过去传统的运用顺序往往是作为一个全体被开收回来,然后被打包成为一个代码包,进而作为一个全体单元被部署的。不断以来,这种单体架构本身和与之相关的维护极具复杂性,而且开发与迭代速度也相当缓慢。这些都在促进软件开发企业去不断地寻求具有可继续性、灵敏性、以及易于集成的新型替代方案。

    微效劳架构的出现打破了这样的僵局。它代表了众多小型、自动化和自包含的效劳的单一集合。下图展现了系统如何经过一个API网关,去拜访多个微效劳的逻辑。

    12种从单体架构向微效劳转型的设计准绳与优秀实际

    微效劳架构虽然有着诸多优势,但是贸然从单体架构切换过去,能够会让许多企业由于低估了全体的复杂性,而招致成本的激增,以及在研发的关键时辰出现灾难性的不测错误。下面让我们一同讨论十二种值得遵照的,从单体架构向微效劳转型的设计准绳与优秀实际。

    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. 在混合系统上构建别离系统

    定义不同复杂部分之间的交互作用和进程,是微效劳的关键设计准绳与优秀实际之一。因此,我们在迁移项目的初始阶段,就应当思索到拆分系统。每个拆分系统都应当关于正在构建的架构来说是独一的。我们可以经过反省单体结构,来继续监控各个组件的功用,以便了解各个组件之间的差异性,以及在微效劳转换时能够出现的成绩。

    我们可以参考如下监视进程的工具:

    8. 隔离运转时(Runtime)进程

    由于我们往往针对不同的垂直细分范围有着不同的流程,因此我们需求在运转时的级别上也具有一定的隔离性。例如,您可以经过某种方式的散布式计算,来辨别完成容器化、事情架构、各种HTTP管理办法、效劳网格和断路器(circuit breakers)等。

    9. 将正确的技术与正确的微效劳相配对

    正所谓异曲同工。也许在您的团队中,不同的成员会偏好运用不同的技术和编程言语来完成微效劳,但是请尽量选用那些易于日前方便更改或交流的技术,来完成快速上手与直接迭代。当然,假设您并不确定哪种技术最适宜本人的项目,那么请在决策进程中思索以下方面:

    可维护性。

    容错性。

    可扩展性。

    构建成本。

    易部署性。

    10. 思索运用域驱动式设计(Domain-Driven Design)

    域驱动式设计在某种水平上可以被了解为:运用于业务模型的面向对象编程。作为一种设计准绳,它应用实际规则和思想来表达面向对象的模型。复杂来说:我们需求围绕着本人的业务范围来设计微效劳。例如,Netflix等平台就是运用不同效劳器上的微效劳,来停止内容交付和相关的跟踪效劳。

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

    (责任编辑:admin)