王夏洋
(中国海洋石油集团有限公司,北京100010)
中海油税务管理系统于2014 年实施上线。系统的建立为集团公司提供了统一的税务信息管理平台,对税费数据统计、全税种纳税申报管理、日常办税管理、重大业务事项税务管理、税务风险管理等工作进行高效的支撑和管控,可对集团税务工作全貌进行全面、及时的掌控。同时,通过信息化手段实现了企业内、外部税务管理所需要的智能化、精细化的纳税申报管理、日常办税管理、重大业务事项税务管理、税务风险管理等业务功能管理和上述业务事项的IT 流程化管控。由于税务管理系统构建在单体架构下,随着系统不断的使用,面临以下问题:
(1)模块之间耦合度高(前后端一体化),其中一个模块升级需要其余全部升级,升级部署风险高。
(2)不能灵活地进行分布式部署,数据量越来越大,系统扩展性差,系统性能越来越差。
(3)业务多变,用户对界面个性化的要求越来越高。
(4)各分子公司对页面展示需求不一致,系统重复性开发工作量大。
(5)系统测试成本增加,版本管理要求高。
微服务[1-3](Micro service)具有松耦合、独立部署、开发效率高、代码维护易、成本摊薄等优点。
同时,PaaS 平台(Platform-as-a-Service,平台即服务),是将软件开发平台以一种服务的形式提供给用户,为用户提供全生命周期支持,使用户方便地进行测试和开发[4-5]。
鉴于此,本文设计了一种基于微服务架构的税务管理系统,并通过部署PaaS 平台实现了系统的高效开发和部署。
(1)微服务架构概念
微服务指通过一组服务实现应用,各个服务独立运行于不同的进程中,不同的服务通过轻量级的交互机制进行通信[6]。每个服务都围绕业务功能进行构建,且各个服务均维护着自身的数据存储、业务开发、自动化测试案例和独立部署机制。
微服务架构中前后端分离不仅仅只是一种开发模式,而是一种架构模式(前后端分离架构)。前后端分离时必须区分前后端的项目。前后端需要独立部署,用不同的工程,不同的代码库,不同的开发人员。前端和后端工程师需要就交互式接口达成一致,以实现并行开发,开发结束后需要进行独立部署,前端通过AJAX 来调用超文本传输协议(HyperText Transfer Protocol,HTTP)的请求调用后端的表述性状态传递(Representational State Transfer,REST)应用程序编程接口(Application Programming Interface,API)。前端只需要关注页面的样式与动态数据的解析,而后端则侧重于特定的业务逻辑。
(2)微服务架构技术
基于微服务架构和Docker 容器技术的PaaS 平台为开发人员提供了一系列流程,用于快速开发、部署、运维管理、持续开发和持续集成。
目前,业界成熟的微服务架构包括Netflix、Spring Cloud 和Dubbo。Spring Cloud 基于Spring Boot,提供了开发微服务所需的组件,它包含很多子框架,其中Spring Cloud Netflix 是其中的一套框架。
(3)微服务部署
微服务是一系列单功能、细粒度的服务,将业务分解为单独的服务单元,可扩展性强,低耦合,可以用不同的语言进行开发。由于每个微服务都以集群的方式部署,因此服务需要在彼此调用时进行负载平衡。
微服务在Docker 容器中作为镜像运行[6],Docker容器技术使我们的服务部署简单高效。
(4)服务容错
微服务之间存在复杂的依赖关系,本文使用Hystrix 组件进行微服务架构的容错处理。Hystrix 是Netflix 的开源组件,通过熔断、隔离、回退和限流为服务提供灵活的容错保护,以确保系统稳定。
(5)动态配置中心
微服务具有许多依赖配置,并且在服务操作期间需要动态修改某些配置参数。本文使用Spring Cloud的configserver 服务来实现动态配置中心。
(1)PaaS 平台特点
①系统弹性伸缩
通过应用程序和数据分离以及集群部署,系统可实现快速的在线扩展、处理能力的线性扩展和自动故障处理。可以灵活地扩展相对独立的应用程序主机。其特点有:
在线快速扩容:系统扩展运行时间短,无数据迁移,服务不中断。
处理能力线性扩展:系统处理能力可通过增加节点的近线性来实现高吞吐量和高并发处理能力,并响应服务的爆炸式增长。
故障自动接管:群集可以自动发现故障节点并调整任务调度策略以接管故障节点,而不会影响处理,并使系统保持高可用性。
②应用集群化部署
将紧耦合的大型应用模块化为多个小型应用,资源池提供系统资源的整体利用,将子模块拆分,部署在资源池中。池化后,实现了应用的弹性伸缩,从而按需分配硬件,充分提高了资源利用率。
③通过数据分类,分离应用程序和数据
根据数据的实时性、重要性、敏感性等因素,将数据分为几类,每类的数据对系统的作用、存储和保护方式也各有不同[12]。
通过对应用提供数据的透明访问,屏蔽数据的位置差异、数据分布差异、数据存储等差异:
位置无关性:无论数据存储子在本地还是远程,最好对应用程序透明。
分布无关性:数据分布在多个数据节点上,对应用程序是透明的。例如,查询某个客户的所有相关数据,尽管相同的用户信息分布在多个数据节点上,但它就像是应用程序的集中式数据库。
存储无关性:数据存储在内存库、物理库、文件或缓存中,对应用程序是透明的。
④合理规划实现数据分布式部署
对不同业务的数据和不同类型的数据进行有效规划部署。通过一定条件,将存储在同一数据库中的数据分发到多个数据库,并通过路由规则访问特定数据库。
⑤数据平台化
数据平台化是指针对应用程序和数据架构进行重组、规划和调整,将业务数据和状态数据与业务流程和应用程序分离,实现应用的轻量化、无状态;构建统一的数据访问层以实现对数据的共享访问。数据平台化是数据处理线性扩展的前提和基础。
(2)中海油PaaS 平台
中海油PaaS 平台采用红帽开源容器云OpenShift[7],OpenShift 构建基于Kubernetes 的企业应用云平台。
PaaS 平台服务具备快速愈合能力,即当一个服务坏掉,OpenShift 会自动发现并部署一个新的服务。OpenShift 容器平台是一个以开发人员为中心的PaaS平台,支持各行业各种规模公司的应用开发团队。OpenShift 容器平台及其相关程序构成了PaaS 包,为企业IT 开发人员提供了多种平台选择,实施开发活动,支持现有或重构的云应用程序。该PaaS 平台专注于三个主要领域:应用开发和交付、应用架构、基础设施及应用平台[13]。
OpenShift 提供了大量的核心软件组件。它结合了Docker 和Kubernetes 集群管理,可用于开发人员生命周期自动化(Lifecycle Automation)和容器管理。生命周期自动化提供预置模板、产品和构建计划,使开发人员能够简化应用程序的构建和部署过程。
首先介绍ROS的基础概念以及导航相关的功能包;然后按照实验的研究步骤分别介绍了定位方法、机器人运动模型、卡尔曼滤波和机器人控制策略;进而论述实现定位的算法和相关函数;最后分析在Rovio移动机器人平台上所获得的测试数据和结果,论证研究方法的有效性和算法优化的思路。
DevOps[8-9]可以使开发团队和运营团队之间高效协作。随着协作关系的改善,整个组织的效率得到提高,同时可以降低由反复变化带来的生产环境的风险。
应用程序发布是一项涉及多个团队的高容量高风险活动。但是,在有DevOps 功能的组织中,应用发布的风险却很低,原因如下:
(1)减少变更范围,每次发布包含的变化更少,服务与服务之间藕合性低。
(2)加强发布协调,即开发、测试、运维通过云平台可以一体化协调管理。
(3)自动化热部署,实时掌控服务状态。
与大规模,不经常发布的传统开发方法相比,敏捷方式大大提升了发布频率。
使用DevOps 开发模型可以实现开发运维一体化体系:
(1)开发方面:需要前后端分离,前端专注页面展显,个性化界面快速开发,后端专注业务服务层开发。
(2)运维方面:高效自动化部署,灵活发布、局部更新,同时资源要能弹性伸缩。
(3)安全方面:内外部服务分区管理,服务能自动恢复,实时掌控服务状态,OpenShift 平台具备服务自愈。
系统设计理念是轻前端,强中台,稳后台:
轻前端:以最终用户为中心,个性化(可定义),角色化(门户)、场景化(工作台),前端化(PC+Mobile)。
强中台:用Spring Cloud 微服务架构打造强
大的中台服务,专注业务服务开发。
稳后台:以OpenShift 产品为平台,容器技术、移动技术、互联网中间件、DevOps、OpenAPI 为基础。本文提出了基于微服务的税务系统的总体架构,如图1所示。
图1 基于微服务架构的税务系统总体架构图
图1 中,系统后台架构采用Spring Cloud 微服务架构,PC 前端采用流行的VueJS+Element+KendoUi 技术,实现前后端完全分离,同时系统需要支持移动端和电脑PC 端同时使用,后台统一开发服务,实现后端服务复用,减少开发工作量。
API 服务平台:所有的前端服务请求必须经过API服务平台进行调用,平台包括:API 网关,Euerka 注册中心,Zipkin 链路监控功能。
鉴权认证服务:所有的服务请求都必须经过授权认证才能进行访问,授权认证采用OAuth 2.0 技术,通过token 进行授权认证,同时采用Redis 进行分步式存储管理。
业务服务划分:后端服务根据业务的类型进行拆分,基础数据、用户权限、配置类信息为一类服务,企业所得税、增值税、房产税、印花税等税种分别进行拆分,同时把销项发票、进项发票、电子发票等所有发票相关的建立发票池服务。
基础组件服务:某些共享服务是分开的并用做基本技术组件服务,例如:消息推送服务、资源存储服务、分布式JOB 架构、邮件短信服务、缓存服务、API 认证授权服务等。
以上服务可以系统内部调用,也可以授权给第三方系统调用,平台可以通过API 过滤、白名单或公钥授权的方式供第三方调用或进行集群。
平台同时提供Job service 服务,API HUB,对外部一些旅游网站订票开具发票情况进行数据抽取分析。
平台具备系统监控功能,如版本管理、服务监控、运维监控、BI 分析平台、数据挖掘平台。
Eureka 的客户端是自行注册的,客户端负责处理服务实例的注册和注销。使用SpringBoot 集成微服务时,结合SpringCloud 项目可以很方便地实现自动注册。将注释@EnableEurekaClient 添加到服务器启动类,以便在服务实例启动时向配置的Eureka 服务器注册服务[10]。客户端的负载均衡由Netflix Ribbon 实现。服务网关使用Netflix Zuul,熔断器使用Netflix Hystrix。服务注册网关及实现请求逻辑图如图2 所示。
移动和PC 端通过调用Rest 服务,请求后端服务,那么多服务是如何管理和智能路由选择,则是通过服务网关控制。
服务网关是实现微服务可能必不可少的一个非常重要的组件。网关负责安全检查、认证授权、路由分发、流量控制和熔断保护。API 网关是整个微服务平台的核心,API 请求响应必经之路[11]。服务治理及交互机制如图3 所示。
图2 注册网关及实现请求逻辑图
图3 服务治理及交互机制图
这么多的分步式微服务,并且是分库存储,就必须要有相关的机制来保持事务的一致性。目前我们通过MQ 消息对队同步来保证事务一致性同步。
可靠消息最终一致性方案:这是一种目前比较常用的方案,其原理与上述方法类似,借助MQ,只是不再借助数据库的消息表,而是由系统发起一条预发送消息,当系统本身的事务执行完毕后再将MQ 中的消息变为确认消息,同样其他系统接收到MQ 的消息后开始处理本地事务,根据处理情况决定事务是否需要回滚。相对来说优点是事务控制较为灵活,确定是不稳定因素较多。
建立大数据分析BI 报表工具,确保进入系统的数据能通过报表方式按需展现出来。实现逻辑:申报表数据,日常税务数据,发票数据,财务数据,通过ETL 数据抽取进行过滤、清洗、转化到数据仓库,数据仓库通过数据挖掘、多维数据集成形数据集市,再通过BI 可视化工具,工具支持数据可视化界面配置、智能钻取手段、实现自助分析、形成分析报告。
基于微服务的税务系统部署于PaaS 平台上,入口界面如图4 所示。平台提供日志查询功能,方便问题的排查和上线检查。同时平台还提供服务器监控、应用监控、错误报警、Bug 管理、性能分析、用户行为分析、安全漏洞分析、时间管理等服务,供开发人员方便地使用,使开发人员更专注于开发过程,提升了开发效率,缩短了应用上线周期。平台的弹性伸缩性能很好地支持了业务并发。
图4 系统入口界面图
基于PaaS 平台的税务管理系统开发模式与传统开发模式,从数据准备时间、应用部署时间、资源利用率及开发工具准备时间等方面均有大幅提升。如表2所示。
表1 开发模式对比
系统展示效果如图5 所示。
图5
本文通过对税务管理系统的应用背景、微服务架构和PaaS 平台技术的研究,设计并实现了基于微服务架构的税务管理系统,并将系统部署于PaaS 平台。通过具体的实现,提升了系统的开发演化的稳定性,缩短了应用发布更新时间,提高了税务管理的工作效率。