电信运营商单体架构到微服务架构转型设计思路

作者:董昭 责任编辑:甄清岚 2017.09.14 08:39 来源:通信世界全媒体

通信世界网消息(CWW)微服务架构是一种电信运营商架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

微服务架构与传统单体架构

传统单体架构应用就是将应用程序的所有功能都打包成一个独立的单元,可以是JAR、WAR、EAR或其它归档格式,现有的大部分工具、应用服务器、框架和脚本都是这种应用程序。单体应用没有额外的依赖,部署后所有的服务或特性可以直接使用,这简化了测试过程。目前为止,单体应用因为其易于开发、易于部署、易于拓展等方面的优势,在应用开发与集成中得到了广泛的应用。

随着电信运营商系统不断完善,电信运营商应用的复杂程度不断提高,单体应用不管如何模块化,最终都会因为其体量过大带来改造、运维困难,持续部署难度增大,弹性扩展能力不足等弊端。

(1)改造困难。

单体应用在几期项目进程后会形成巨大的代码库,应用难以被理解和进行修改,导致开发速度减慢。由于没有清晰的模块边界,模块化会逐渐消失。

(2)容器过载。

应用越大,Web容器启动时间越长。容器启动耗费时间,极大影响到开发者的生产效率,对部署工作也有负面影响。

(3)难于进行规模化开发。

单体应用是规模化开发的障碍。应用一旦达到特定规模,需要将现有组织拆分成多个团队,每个团队负责不同的功能模块。团队需要在工作进度和重新部署上进行协调。对于各团队而言,这使得变更和更新产品变得异常困难。

随着电信运营商业务需求的快速发展变化,敏捷性、灵活性和可扩展性需求不断增长,迫切需要一种更加快速高效的软件交付方式。微服务就是一种可以满足这种需求的软件架构风格。单体应用被分解成多个更小的服务,每个服务有自己的归档文件,单独部署,然后共同组成一个应用程序。这里的“微”不是针对代码行数而言,而是说服务的范围限定到单个功能。

原本单一的应用按照功能边界分解成一系列独立、专注的微服务。每个微服务对应传统应用中的一个组件,但是可以独立编译、部署和扩展。相对单块架构,微服务架构具备以下优势,

(1)复杂度可控

在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。可以非常方便地支持开发人员开发各种丰富的实例。

(2)独立部署

由于微服务具备独立的运行进程,所以每个微服务也可以独立部署。当某个服务发生变更时无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低对生产环境所造成的风险,最终缩短交付周期。

(3)技术选型灵活

微服务架构下,技术选型是去中心化的。每个团队可以根据自身服务的需求和行业发展的现状,自由选择最适合开发的技术栈。由于每个实例相对简单,当需要对技术栈进行升级时所面临的风险较低,甚至完全重构一个微服务也是可行的。

(4)容错

当某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,形成应用全局性不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他云件可通过重试、平稳退化等机制实现应用层面的容错。

(5)可扩展

单块架构应用也可以实现横向扩展,就是将整个应用完整地复制到不同的节点。当不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个组件可以根据实际需求独立进行扩展。

微服务架构设计策略

采用容器化技术进行微服务的封装、部署、管控。为不同类型的微服务提供差异化的管理策略,并通过能力平台进行服务设计、编排、授权、配置,以实现复杂多种应用场景的敏捷交付、独立快速部署、高可用、弹性扩展。同时,使用微服务,需要设计一整套应用程序部署流程并确保其运行,包括服务注册和发布、服务接入管控、服务调度、服务恢复和服务监控等。微服务管理架构设计如图1所示:

QQ截图20170914084558.png

图1 电信运营商微服务架构设计

微服务设计的主要实现进行服务API的设计,完成服务API开发测试后,将服务注册并发布到服务目录。供服务消费者使用,服务设计并提供服务流程编排的能力。

服务接入主要实现服务的消费者发现并接入服务,通过服务调度来使用API服务。并进行接入的安全控制和接入策略控制。

服务管控主要是实现服务的路由控制、流量控制和基于SLA的质量管控等。

微服务化软件架构的优点是服务作为工作单元可以非常便利的管理、可以非常快速的动态扩展;服务之间解除耦合,减少依赖,极大的提供了稳定性,为运维管理动态发布提供了良好的架构支持;微服务功能单一,服务接口友好,为业务系统升级和扩展提供了良好的技术基础;微服务粒度小,轻便灵活,可以快速敏捷部署,极大的提高运维效率和系统性能。

API设计思路

微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。

好的API,应该是易于学习、易于使用、易于阅读并且使用它的代码容易维护、足够强大来满足需求、易于扩展。在API的设计过程中,应遵循以下原则 ,如图2。

第一,设计团队构建。在API 的设计中,首先需要建立一个围绕“业务功能”的组织团队,基于服务构建团队而非基于项目构建团队,“一个团队在一个产品的整个生命周期中都应该保持对其拥有”这样的理念。这样的“产品”理念,是与业务功能的联动绑定在一起的。

QQ截图20170914084609.png

图2 微服务设计团队架构

第二,设计高内聚低耦合的API。使用微服务所构建的各个应用的API,都是尽可能地实现“高内聚和低耦合”。微服务最常用的两种协议是:带有资源API的HTTP“请求-响应”协议,和通过一个轻量级的消息总线来进行消息发送。

第三,设计独立性。微服务每一个模块都是单独的部属单元。且具有技术的多样性及数据的独立性。

第四,容错设计。具有很好的“容错设计”,如果服务提供方不可用,那么任何对该服务的调用都会出现故障。客户端要尽可能友好地应对这种情况。必须做好: 能够快速地检测出故障,而且在可能的情况下能够自动恢复服务。

第五,API版本管理。微服务架构保证了软件随着业务发展而不断变化的过程中能够采用合适的工具和技术不断调整软件架构。对于API的版本管理,在多版本下的微服务集成测试,一般会采用基于消费者驱动的契约测试。

最后,服务管控中心提供图形化和可视化的针对服务注册和服务管理的平台,进行服务的注册发布、删除、查询和暂停等方面的管理,当服务注册成功后也可以编辑和修改。同时服务的使用者也可以查询已经在发布的服务信息,确定是否使用该服务。还可以检查服务信息和管理监控服务的状态。

作者:中国移动通信集团设计院  董昭

注:该文章为通信世界全媒体特约文章,禁止转载,谢谢合作。


发表评论请先登录
...
CWW视点
暂无内容