王作敬
作者王作敬2018-11-28 09:47
管理信息系统总监, 银河证券

微服务规划

字数 3937阅读 2285评论 0赞 6

作者:汪照辉 王作敬


万事开头难!要想做好微服务并不容易,因此在微服务规划阶段就需要尽可能的考虑微服务生命周期过程中可能遇到的问题。很多人觉得微服务不仅仅是技术问题,其实也没错。IT系统从来都是人、流程和资源之间的问题,不单单是技术问题。所以为什么现在谈起微服务就提DevOps、容器云或容器平台了。人就是是组织里承担不同职责担任不同角色的成员;流程是人为了完成工作需要遵循的规则、步骤;资源是人按照流程在完成工作的过程中需要用到的工具、平台等各种软硬件设施。组织和人可以通过云计算平台的多租户机制来实现隔离和管理,流程则是DevOps施展拳脚的领域,云计算平台同时运维和管理IT基础设施资源并为微服务(微服务-->业务流程—>业务应用)提供资源支撑和托管运营支撑,而微服务关注的是业务逻辑。所有这些努力关注的是提升对企业业务变化的响应能力,让企业生存下去。往大了说,是完成企业数字化转型,更好的适应当前和未来业务发展的需要,活的更好。
微服务规划就是要考虑如何利用好现有情况下的人、流程和资源。任何事情都是在变化中,不可能做到充分准备万无一失,所以我们觉得最重要的是要具备自主管控的能力。采用微服务也是一样。所以我们要尽可能在微服务规划阶段分析现有的人员技术特点、能力、局限,采用微服务的业务流程及其影响,基础设施水平,公司IT治理能力等。可能对很多想采用微服务架构的团队或项目组来说有点有心无力。可能是的,有时候我们是需要等待一个机会,前提是做到万事俱备,才能借得了这阵东风。

一、 微服务规划

微服务规划是微服务生命周期的第一个阶段。这个阶段并不包含前期的学习、调研和研究。在这个阶段要根据自身的技术实力,确定微服务实施的原则和指导方法;梳理业务流程,确定业务流程中每个步骤及其输入输出;分析并确定业务流程中的参与方及业务实体;确定业务数据流程;确定业务性能需求、部署要求、限制条件等;业务流程设计优化可行性分析,数据及数据流程、数据模型优化可行性分析等。另外需要考虑数据的持久化存储模型;微服务体系基础设施支撑规划;或者基于云计算平台或容器云平台的微服务体系建设规划。

(一) 全局思维

采用微服务的目的是重构业务应用,进行快速迭代,以适应快速变化的业务需求。但重构业务应用由于受诸多方面的影响。因此在进行微服务规划的时候,第一步需要用全局的思维来考虑微服务建设。哪怕起步只是很小的一部分业务,也需要用全局的思维来考虑微服务的规划和设计。我们以前提到过,企业最重要的是人才和数据。人才和数据都是资源,如何整合并利用好这些资源,是关键的第一步。
全局思维就是要基于现有条件下来整合资源。严格的组织结构职责划分会阻碍微服务的采用,但办法总会有的。我们把资源运维和应用(微服务实现)运维职责分离,开发和运营职责分离,应用项目组(微服务实施项目组)只关注业务逻辑实现,不需要考虑部署、运营、治理平台和资源,甚至不需要考虑业务应用配置、日志、监控问题,这些都通过平台来实现,这样即便是组织结构不变动,也可以很便利的推动容器平台和微服务架构的采用和推广。
微服务构建很重要的一个目的就是重用,重用的微服务组件越多,才能越快的构建业务应用、部署交付业务应用。不仅仅是基础组件,各个微服务团队需要从全局考虑业务微服务公共组件的规划和设计,这就涉及DevOps了,即便没有明确的责任或组织划分,也需要有人或团队来承担这样的职责,来在合适的契机推动变革以及自身的成长。

(二) 微服务设计原则和指导方法

在微服务前期的学习和调研中,我们可能已经了解到了一些微服务设计方法和设计原则。也许不成体系,即便是零散的设计原则和方法也会对我们的微服务设计带来帮助。不过要构建高效的微服务体系,还是要有一套合适的方法论。每个公司技术背景、技术力量、技术方向都可能不一样,需要根据自身的技术实力来确定适合自己的方法,或合作、或外包、或购买……。而对我们来说,自主可控是我们必须具备的能力。这样才不会被人牵着鼻子走,也不会被忽悠。最重要的是,可以规划长期的正确的技术方向。我们把微服务规划作为微服务生命周期的第一个阶段也是基于此考虑。正确的规划,可以确保微服务战略的方向性、正确性、长远性。所以我们需要尝试掌握一种合适的微服务设计方法论来指导我们微服务的设计和构建。
微服务规划通常由一个对微服务认识和理解比较深入的人来领导、指导和培训微服务体系团队成员。定义一些各团队需要遵循的微服务设计原则和设计方法。比如业务流程梳理方法,数据模型定义方法。目前比较流行的方法是领域驱动设计方法,不过我们觉得采用主数据设计方法可能更合适些,以数据驱动微服务设计,提供唯一数据来源,可以考虑借鉴行业通用数据模型设计,定义和完善自有数据模型。

我们借用了Thoughtworks专家的微服务设计原则:
 单一职责原则,每个服务只做一件事情,并且把它做好。
 独立部署原则,每个服务都运行在一个独立的容器中。
 轻量级的通信机制原则,服务和服务之间通过轻量级的机制实现彼此间的通信。
 松耦合原则,不需要改变依赖,只更改当前服务本身,就可以独立部署。这意味着该服务和其他服务之间在部署和运行上呈现相互独立的状态。

(三) 业务流程梳理

确定了原则和设计方法,需要选择相应业务域的业务流程进行梳理。业务流程梳理并不是完全按照原来的流程再实现一遍,业务流程梳理的目的之一是为了优化业务流程,定义各流程共享的业务微服务,这些业务微服务满足不同流程中不同场景的需要。
u0nawko12v66

u0nawko12v66

梳理业务流程,也是为了确定业务流程中每个步骤及其输入输出,确定业务数据实体和参与方,重要的是数据在业务流程中的流转,无论是以实体或者实体属性的方式流转,都需要把这些数据梳理清楚。梳理的目的是为了优化业务流程设计和数据流程设计。业务和数据紧密相关,不可分割,这也是我们建议采用主数据设计思想的原因之一。除了这些,还有非功能性要求,比如性能要求。要支撑的请求量是多少?最大请求延迟和平均请求延迟是多少?虚拟化部署还是容器化部署?是否有扩展性弹性需求?有哪些限制条件?比如当前只能非容器化部署,但需要支持扩展,负载均衡,同时要求采用安全的通信方式,敏感数据加密、数据分级等。业务流程梳理需要明确这些(包括但不限于)内容,其实这也是我们业务应用和服务需求分析的过程,从单体应用方式转向分布式微服务方式。

(四) 数据治理

业务流程梳理过程中会涉及数据,可能需要考虑数据标准化、数据安全、分级、数据所属,可能需要对数据进行去冗、充实、一致性保证,也可能需要数据集成或数据模型重构等等,这些都是数据治理范围的内容。因此我们以前也提到过,数据治理做的好,微服务设计和构建将会容易的多。如果数据治理没有做到位,可以在微服务设计和构建过程中同步进行数据治理的工作,这将有助于数据的整合,提高企业级数据质量,也为后期构建数据中台服务打下良好的基础。
采用微服务,切忌抛开数据只考虑业务功能实现。我们认为,数据价值的高低在于使用它的方式。真正把数据用起来、流转起来才能带来更多价值。传统上每个公司都有大大小小几十套上百套应用系统,数据散落各地,数据不一致、格式不统一、数据缺失、数据冗余等,即便有数据仓库、大数据平台或者数据湖,但数据依然不是一个整体,数据之间是集成关系,而且多了一层,以牺牲性能来提升了部分数据质量。
微服务重构的基础是数据重构。数据重构在于重构数据模型,包括数据物理存储模型,数据可能不只来源于数据库,文件、内存、大数据平台、云端等都有可能。所以在微服务规划的时候也需要考虑可能的基础设施平台支持和数据来源需求。

(五) 基础设施规划

万丈高楼平地起,要支撑微服务整个生命周期过程,也需要众多的基础设施资源和基础设施平台。比如微服务部署运营平台、微服务治理、微服务注册、微服务监控、微服务开放接口管理等等。在规划微服务支撑平台的时候也可以采用微服务的思想,每个支撑平台就可以看作是一个平台微服务。
采用微服务并不是为了构建一个庞大的复杂的技术环境,而是为了构建响应速度更快、更简化的技术环境,以此降低运营和监管风险。所以要考虑各个组件服务或基础平台服务之间的松耦合关系。确保即便缺少某个部分也不会影响到业务应用的正常运行。

(六) 基于容器平台的微服务体系规划

虽然微服务和容器并不是不可分的,不过微服务非常适合容器的轻量、弹性、自愈等特点,以及DevOps的持续集成、持续部署、持续监控、持续反馈、持续改进的流程和方法,因此经常把微服务和容器平台以及DevOps放在一起讨论。
容器平台通常已经具备微服务部署、注册、运营、监控等基础能力,因此基于容器平台构建微服务体系可能会相对快捷些。微服务、容器等技术有其优点,也有其缺点,都是在达到一定量之后才能体现出其优势,所以如果没有长远的规划,只是测试研究,不用考虑这么多。

(七) 微服务开发框架及工具选型

万事俱备、只欠开发工具。工具的好坏是一方面,使用工具的人是关键。因此需要根据整个团队的实际技术能力、技术经验来选择合适的开发框架和开发工具。别人觉得好的,可能并不适合自己,很多时候在于熟能生巧,只有熟悉了,真正理解了,才能做到举一反三。工具使用也是一样的道理。当然,同段位的两个人,就能显示出不同工具的优点了,好的工具将非常有助于提高工作效率。所以基于自身实际技术能力,选择合适的工具也是很重要的。

参考文献
1. 服务拆分和架构演进 禚娴静
http://insights.thoughtworkers.org/service-split-and-architecture-evolution/

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

6

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广