成功的微服务,需要企业组织架构如何变革?

微服务架构表现为组件化、模块化,
每个组件或模块称为产品中的一个服务,
不同的服务由不同的人员来开发和维护,
从而规避传统单体架构下面临的各种问题,
实现迭代速度快、新人易上手、业务高可用等好处,
也因此,微服务架构成为企业数字化转型升级的必备武器。



需要注意的是,
康威老爷子早已告诫我们:
系统设计等同于组织形式,
即团队要适应业务系统的架构。

由于传统单体应用和微服务架构差异巨大,
传统企业的微服务实践要取得成效,
组织架构的变革当然是必不可少的。
那么,
成功的微服务化改造需要怎样的组织架构呢?

匹配微服务:从中心化到去中心化

首先,我们需要一种去中心化的组织架构, 
因为单个服务的owner需要拥有对该服务的绝对自主权。 
我们知道,微服务降低业务研发难度, 
来自于其分而治之的基本思想, 
一个大型系统分割成多个小而自治的服务, 
支持每个服务采用不同的标准和技术来开发, 
可以独立修改、独立部署而不影响其他服务的运行, 
服务之间采用轻量级的通信机制。 
 
回顾传统单体应用的中心化架构, 
小功能往往要积累到大版本才能上线, 
上线又要开总监级别的大会, 
微服务化之后, 
如果仍然保持这种先请示后上线的组织架构, 
是否上线、何时上线、选择何种数据库都需要高层决策, 
那么服务拆分的粒度越细,决策的瓶颈就越明显。 
采用去中心化的组织架构, 
每一个服务由一个独立、自治的小团队开发和维护, 
小团队负责人自主决定服务的技术选择和开发计划, 
微服务架构快速迭代的能力才能体现出来。 
同时, 建立相应的机制来保证小团队的主动性, 
避免因为小团队责任心不足而影响整个产品发展。 
至于 小团队的终极规模,
可以参考“两个披萨原则”,
 
通常是5-7个人, 
超过10人则考虑进一步分散。





但如同业务拆分很难一步到位,
团队拆分也需要相应地逐步拆分。
需要注意的是,
由于组织架构的变革会涉及各种利益关系,
管理层共识和第一推动力的前提是必不可少的,
可以成立专门的架构师(中间件)团队执行微服务改造。

一来架构组可以劝说业务开发组和运维组实施微服务化,
二来微服务实践是一个渐进过程而非一场运动,
一旦实施了微服务,
业务系统就处于不断更新和迭代的状态中,
也处于不断的拆分和组合中,
架构组可以专心打造适合业务的、可靠的中间件,
比如消息队列、缓存等,
帮助企业更好地hold住这个演进的过程。


业务相对简单或者人力不足的企业也可以没有架构组,
不过中间件还要依赖于成熟第三方平台。

搞定微服务:从U型组织到全能小团队

伴随着组织架构的去中心化,
全权负责每一个服务的小团队必须是全能的,
或者说是全栈的,
 
搞得定用户交互UI设计、后台服务开发, 
做得了数据库管理、服务运营和运维等, 
惟其如此,才能实现服务自治。 
传统组织往往是一种职能型组织结构, 
也称为U型组织, 
不同职能人员分别隶属于不同的团队, 
比如产品、开发、测试、运维团队之间彼此独立。 
U型组织下跨部门沟通协调成本很高, 
产品需求实现和使用反馈的链路都很长, 
即便管理层把权力下放了, 
迭代效率也不高,还容易出问题, 
对软件交付并不友好。 
所以, 
为每一个服务设置一个专属的全能小团队, 
由产品、开发和测试人员负责服务的迭代开发, 
DBA和运维人员提供平台化的CI/CD、治理等底层支持, 
这是微服务架构的呼唤。 
全能小团队和传统的项目组有聚有散不同, 
因为微服务长久存在而需要长期稳固的合作。 
网易很早就采用一种专人就位的职能支撑模式, 
由各个职能部门培训并安排专人入驻各个产品组, 
同时确保岗位人员的专业性和产品团队的沟通效率, 
通过这种方式成功孵化了大量的互联网产品, 
这是传统企业在服务化改造过程中可以效仿的。 

玩转微服务:从运维背锅到DevOps组织

全能也还不够,微服务还意味着需要组织DevOps化。 
微服务意味着更多的并行开发、更频繁的发布和部署, 
意味着更高的整体复杂度, 
这时候打通组织和流程实现DevOps是不能少的。 
 
开发团队和运维团队如果不能精诚协作, 
还是沿袭传统的工作模式, 
一个只管开发、构建、测试, 
一个只顾提供资源、部署、运维, 
运维团队还是背锅侠, 
微服务业务还是没有办法高效地上线部署运行的。 
组织DevOps化,即需要开发与运维融合, 
不同服务、不同版本的交付环境需要开发来写, 
因为运维对不同模块的不同配置及更新不熟悉, 
很容易出现部署出错的情况,影响业务正常上线; 
而服务注册、发现、治理、配置等, 
每一个业务单独一套框架是不科学的, 
应当下沉成为运维团队统一管理的基础设施。 
所以开发团队和运维团队的工作都有变化, 
好在成熟的容器技术提供了融合的工具。





组织DevOps化的最大变化,
是开发团队需要完成环境配置的工作,
而运维团队需要将微服务通用能力平台化。

对于开发而言,
写个Dockerfile说明容器内部的运行环境,
仅仅是工作量增加5%的问题,难度不大。
对于运维而言,
灰度发布、自动化测试运维、故障自愈等工作就复杂了,
对于用户众多、功能复杂的大型业务尤其如此,
容器管理编排体系成为了基础,
顺畅的持续集成/持续交付能力是不可或缺的内功,
这些都需要打造给力的工具平台来支持。
满足全能团队需求的当然是完备的微服务平台,
容器化、DevOps、服务治理、监控、自动化测试统统搞定。
举个例子,
网易杭州研究院就是一个典型的DevOps组织,
整个分工界面简化如图,




云计算数据中心由运维部门来管理,
上面是云计算平台组,
该组基于OpenStack开发了租户可自助操作的云平台;
云平台包括了PaaS、容器、微服务管理和治理等组件,
PaaS组件点击可得,提供SLA保障;
容器组件提供容器管理、持续集成、持续部署的工具链;
微服务组件支持业务部门进行微服务的开发;
中间件组或者说架构组和云平台组沟通密切,
共同探讨如何以正确的姿势使用云平台组件;
最上面是业务部门的前端组、业务开发组和中台开发组。

享受微服务:构建中台团队

DevOps化、建成微服务平台之后,
大规模的业务中台化便可提上日程。
 
大家可能难以理解网易案例中的“中台开发组”, 
其实, 
传统企业也有组件化、模块化开发模式, 
实施应用架构微服务化改造之后, 
可复用的组件就可以变成一个个服务, 
并被注册到微服务平台的注册中心, 
企业可以从业务开发组分离出几个中台开发组, 
负责将可复用的能力和代码做成现成的中台服务, 
提供给业务系统开发团队使用。 
这样操作, 
一来数据模型会统一, 
数据共享和后续分析挖掘都更方便, 
二来业务开发组不需要全部从零开始, 
业务系统开发效率可以再上一个台阶。 
网易最近几年在不同领域迅速推出各种新产品, 
背后的中台能力功不可没。 

总结

企业微服务化改造的收益和挑战都是巨大的, 
组织架构如果能够做出合适的调整, 
走向去中心化、小团队化、全能化和DevOps化, 
以适应微服务架的特点, 
微服务的收益将会大于成本, 
并且收益会逐步递增,而成本会递减。 
相信越来越多的企业都能从微服务架构中获益。



点击了解网易云轻舟微服务,获取方案  


相关文章:
【推荐】 关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
【推荐】 windows系统下npm升级的正确姿势以及原理
【推荐】 从需求到数据到改进,如何形成闭环

posted @ 2019-03-22 14:31  网易数帆  阅读(722)  评论(0编辑  收藏  举报