大咖专栏 | DevOps组织如何有效地实施MSA

【摘要】 对于任何企业,MSA的实施都不能一蹴而就。企业在实施MSA的过程当中应该避免教条主义、理想化、低估必需的投资、边学习新流程边变动架构、担心失败等风险与陷阱。企业能够在MSA实施指导框架的指引下,进一步创建MSA的战略目标、原则、实践、工具平台视图,以更好地指导MSA落地。数据库

随着领域驱动设计(DDD,Domain Driven Design)、持续交付、云计算、小型自治团队、大型集群系统等实践的发展与流行,微服务架构(MSA,Microservices Architecture)也应运而生。在数字化转型时代,许多组织为了提高业务敏捷性(Business Agility),发现MSA或许是帮助本身更快地交付软件的强大武器,由于MSA有望在灵活的变动交付、技术灵活性、更精准的弹性等方面带来益处。架构

然而企业却很快发现,单纯将MSA视为灵活的架构模式,每每难以保障MSA的成功实施。于是,若要成功实施MSA,除了改变软件交付物的结构化方式,企业必须在如下方面进行改变:框架

    应用开发、交付与运维的组织方式运维

     维持流动性同时确保质量与弹性的流程模块化

     微服务相关模式与实践所必需的新工具与平台微服务

那么,企业到底应该如何实施MSA才能提高成功率呢?有没有一种指导性框架为MSA实施保驾护航呢?在探讨此问题以前,也许明确一下MSA的适用场景更为紧要。在《人月神话》中,Fred Brooks曾指出“软件没有银弹”。此论断对于MSA仍然适用。企业不该该将MSA视为软件交付的银弹。从严格意义上来说,MSA的优点在于帮助企业解决软件领域的复杂问题(Complex Problem)。通常来说,复杂问题具备如下几个特征:(1)没有足够的数据进行决策;(2)必须进行探索;(3)须要浮现式设计与实践;(4)面向行动的方法。关于复杂问题的详细阐述,能够参考Cynephin框架(https://www.mindtools.com/pages/article/cynefin-framework.htm)。固然,在企业面对复杂问题或者系统时,若是同时须要频繁部署来快速响应市场需求、须要高可用以及快速弹性神做,MSA将成为优先选项。工具

基于MSA的适用场景,并结合诸多企业实施MSA的实践,造成了以下图所示的实施指导框架,称之为“3PSD”。性能

图 MSA实施指导框架3PSD单元测试

从上图中,能够天然而然地看出流程(Process)、人员(People)、平台(Platform)、服务(Service)、数据(Data)之间相互影响:学习

     从流程来说:流程须要平台自动化、流程驱动自治团队、流程优化驱动服务的范畴界定;

     从人员来说:人员文化支持流程优化,人员技能影响平台选择;

     从平台来说:平台能力支持流程执行、人员角色、约束服务,平台持久化与移动数据;

     从服务来说:服务的定义驱动平台需求、人员组织、数据组织;

     从数据来说:数据的组织驱动服务的范畴界定,数据需求驱动平台需求。

所以,对于实施MSA的软件系统来说,流程、人员、平台、服务、数据很难一步到位,采用迭代方式成为一种必然选择。固然,MSA的实施难以有明显的最终状态,由于随着迭代深刻,实施框架中的5个方面发生变化的几率很是大。

在实施MSA以前,企业组织肯定了适应的场景后,应该开展准备工做,评估组织的就绪程度。简单来说,企业能够从如下几方面进行评估:

1.     真正敏捷;敏捷开发流程与实践;

2.     自动化程度:构建、测试、部署等;

3.     工程师文化:规划交付,并准备好试验与演进;

4.     践行DevOps;持续交付等;

5.     产品思惟;

通过评估认为实施MSA已就绪后,企业应该确认商业干系人须要快速、可靠、灵活的功能交付与变动带来的价值。这样,企业就能够按照指导框架在流程、人员、平台、服务、数据等方面开展相关工做。
1      优化流程

开发与运维流程一般是MSA交付中最为关键而且最容易被忽略的部分。MSA须要很是高水平的开发与运维流程的成熟度与自动化。目前来看,DevOps的原则、文化与实践对于MSA的成功相当重要。企业组织应该从如下方面优化流程:

    持续集成/持续交付:利用流水线实现微服务并行独立部署

    流程自动化:构建、测试、部署、环境等环境自动化能力

    DevOps反馈环:在交付流程中加强反馈,随时掌握服务状态、健康度,行为等

    发布方式与计划:每一个独立的微服务能够独立、按需发布,来知足快速的须要;

    优化测试与QA流程:采用TDD/BDD、集成测试等测试左移(Shift-left testing)与金丝雀测试、A/B测试、在线巡检等测试右移(Shift-right testing)相结合

    解决自治与分布服务引起的治理诉求:服务的SLA定义,服务下线等等;

2      提高人员与技能

经过MSA实现敏捷性很是依赖小型的自治团队。此团队应该与业务服务领域对齐,而不是技术领域。此组织结构与敏捷开发中的特性团队或者组件团队相似。关于组织结构,能够参考“DevOps组织如何选取拓扑结构以提高协做效能”。对于人员与技能,建议在如下在如下方面进行提高:

    平衡自治与责任

    敏捷与DevOps文化相关的原则

    面向服务的工程师文化

    现代开发范式与概念:例如DDD、事件驱动架构、浮现式架构等;

    更普遍的技术技能:例如T-shaped;

    拥有质量意识:例如单元测试、测试自动化等;

3      构建技术平台

对于实施MAS的企业来说,不仅仅须要敏捷与DevOps流程、良好组织与技能丰富的人员,更须要技术平台来管理日益增长的复杂性。

图 MSA技术平台全景

如上图所示,MSA平台不该被过分简化为容器化,MSA平台包含了外部网关、Service Mesh、遥测与监控、CI/CD自动化等部件。关于MSA平台的选择能够分为2类:一类为云服务提供商平台,一类为部署在自行管理基础设施上的云原生应用平台。对于第一类平台,企业能够选择华为云相关服务,例如DevCloud()提供了端到端DevOps平台能力,能够有效支持CI/CD自动化;ServiceStage提供面向企业的云原生应用管理服务。
4      定义服务

在MSA中,模块化的主要单元是服务自己,主要包括:(1)功能集合与访问功能的接口;(2)实现的边界与部署单元。企业能够应用DDD与限定上下文来划定微服务,并在灵活性、复杂性与性能之间进行权限,使微服务知足如下特征:

     松耦合

     高内聚

     采用公开标准暴露接口

     实现单一职能

     拥有管理的数据

     独立部署

     独立伸缩

     将发布的API与微服务实现解耦

5      解耦数据

为了提升敏捷度以及服务间的独立性,企业必须对服务的数据进行解耦。数据解耦能够参考如下原则进行:

    数据必须被一个也只能被一个微服务管理(建立、更新与删除)

    数据只能经过管理此数据的微服务提供的接口访问

    严格禁止不一样服务拥有的数据之间的数据库强制型关系(例如引用完整性)

    须要平衡数据解耦带来复杂性与敏捷性

    能够经过API契约进行数据关系建模

对于任何企业,MSA的实施都不能一蹴而就。企业在实施MSA的过程当中应该避免教条主义、理想化、低估必需的投资、边学习新流程边变动架构、担心失败等风险与陷阱。企业能够在MSA实施指导框架的指引下,进一步创建MSA的战略目标、原则、实践、工具平台视图,以更好地指导MSA落地。

图 MSA战略目标-原则-实践-平台工具视图

华为云DevCloud做为一站式云端DevOps平台,集成华为近30年研发实践和前沿理念,面向开发者提供研发工具服务,让软件开发简单高效。现支持5人如下额度范围内,能够无偿使用,而且能够预定免费的产品演示和技术交流,详情查看华为云官网