基于微服务架构的平台化业务实现
2018-08-03方昉,侯琳
方 昉,侯 琳
(塔里木油田公司信息与通讯技术中心,库尔勒 841000)
信息化建设对于油田公司的生产运行及经营管理起到了显著的支撑和促进作用,但同时由于软件系统规模日渐庞大,功能也越来越复杂,当油田公司原有业务需求发生变化,需要在旧系统上做相应的功能调整及扩展时,传统的单体式架构会带来开发难度大、开发成本高、开发周期长等一系列问题。而微服务架构的提出和应用无疑为解决这些问题带来的希望,它使得信息服务的软件架构在产生变动时的维护成本大大降低,并显著提高了稳定性。
1 微服务
微服务最早由Mar tin Fowler与James Lewis 于2014年共同提出,旨在通过将功能模块分解到各个独立的离散的服务中,从而降低系统的耦合性以提供更加灵活的服务支持[1]。其实,微服务就是一些协同工作的小而自治的服务。其框架特征主要有:由多个分布式服务组成,多个独立的服务,共同组成系统;每个服务单独部署,运行在独立的容器(进程)里;服务可以采用不同的技术路线进行独立的设计、开发、部署;分布式管理[2]。
2 微服务架构的实践应用
以微服务为理念,基于Spring boot技术,采用Spr ing Cloud为微服务的技术框架,运用智能网关、动态路由、服务注册与发现、断路器、客户端负载均衡、JWT(安全认证协议)、docker容器等相关技术,构建一套数据服务体系,以实现塔里木油田信息服务平台的各种业务功能,见图1。
图1 总体框架图
2.1 微服务应用部署
目前油田信息服务平台数据服务,由三台服务器(10.79.1.144、10.79.1.236、10.79.1.175)组成,均采用Linux Centos7操作系统作为数据服务基础环境,分别搭建了Docker集群、安全网关、服务注册中心、微服务应用集群、MongoDB副本集,整体应用部署见图2:
平台基于docker,swarm,etcd,shipyarn相关技术,搭建了docker集群,主要为微服务应用的部署提供环境支持,通过docker镜像,使微服务应用可以在开发、测试、生产环境中,实现无缝衔接;并利用JWT(JSON Web Token),作为框架安全认证协议,采用Nginx服务端负载均衡,同时结合Spring cloud微服务框架,运用其相关组件,搭建GateWay 集群、Eureka集群,实现了智能网关、动态路由、配置中心等功能,后续可以根据微服务应用需要选择相应的数据库独立部署至docker容器中。
图2 应用部署图
2.2 微服务应用案例
本文以塔里木油田信息服务平台为应用场景,以微服务架构技术实现平台上的“待办/已办事宜”业务。2.2.1 数据库设计
“待办/已办事宜”业务采用了Mongodb NOSQL 文档数据库作为数据存储,主要表(collection)结构见表1:
表1 数据结构表
主要表字段具体含义:
stid:实例ID,即实例的惟一标识;pid:业务ID,即待办事宜涉及相关系统的业务编码;ywxtbm:业务系统编码,即待办事宜涉及的系统编码;jgnbm:功能编码,即待办事宜涉及相关系统的业务功能编码;jyhid:接收人ID,即接收人的惟一标识;jyhdwbm:接收人单位编码,即接收人单位的惟一标识;yhid:发送人ID,即发送人的惟一标识。
2.2.2 服务接口设计
采用Restful风格WebApi,提供的主要功能包括三类服务:
(1)数据插入更新服务。提供向数据库插入或更新待办事宜信息。如图3包括两个接口。
图3 插入更新接口图
(2)待办信息查询。提供根据用户名(yhid)或用户名(yhid)+系统编码(xtbm)方式查询待办信息如图4。
图4 待办信息查询接口图
(3)已办信息查询。提供根据用户名(yhid)+系统编码(xtbm)方式查询已办信息如图5,返回结果按时间倒序排列。
图5 已办信息查询接口图
2.2.3 服务部署及访问流程控制
“待办、已办事宜”微服务中数据存储使用了mongodb,采用主从方式部署,服务以docker容器形式多副本部署以提供负载均衡,使用spr ing cloud提供服务的注册发现、服务治理以及安全网关与路由等功能。当用户请求已办事宜数据服务时,调用主要过程如下:
外部请求到达Nginx,并通过Nginx负载转发至docker集群的Zuul集群。请求中的token令牌将与JWT安全认证,当令牌认证通过后,由ribbon从客户端向Eureka服务注册中心,获取服务注册列表,并返回负载量最低的已办任务的注册地址,然后再通过Zuul智能路由至已办任务服务实例。当某个已办服务实例调用出现异常时,将触发Hyst r ix 服务保护机制,并进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息,当检测到该节点已办任务服务调用响应正常后,恢复调用链路。
3 结束语
微服务架构本身具有扩展性、稳定性、安全性等特性,油田信息服务平台通过部署微服务架构并结合Docker技术,实现数据高效共享服务,有效地提高了开发效率,降低了运维成本。■