近年来,银行业因为庞大的业务体量和业务发展需求,纷纷投入微服务架构的建设中。但随着业务系统向微服务架构的转型,随之便产生了诸如微服务统一管控和治理这类令人头疼的问题。
为了解决这类问题,开源的Spring Boot/Cloud生态提供了大量开源的组件,虽然它们经历了市场考验,但存在一些共同的缺点,如各个组件缺乏有机的企业级集成、内置功能不能满足金融行业应用的特性等等。
对于金融企业来说开源解决方案并不能完全满足企业自身的现状和要求,甚至无法满足技术上的自主可控诉求,这也造成了金融企业在使用开源解决方案的同时,需要投入大量的资源对开源解决方案和开源组件进行二次开发和定制,甚至是修改开源组件源代码。
那该如何有效解决这类问题呢?
实践出真知,长亮科技结合多年在银行核心领域的积累及业内先进技术经验,总结并实现了面向金融业务系统的微服务治理体系,让我们一起看看,长亮科技在这方面经验与见解。
如何构建面向金融业务系统的微服务治理体系?
面向金融业务系统的微服务治理体系主要围绕服务管理、服务观测、服务预警、服务控制几大领域,提供服务全生命周期管理、数字化运维、立体化监控、细粒度服务治理等功能,以解决开发人员、运维人员、SRE、架构师等多方痛点,全方位提升工作效率。
要想实现统一的企业级微服务治理平台,整个体系需要以层级结构进行建设:
● 管控层:提供平台用户统一视角的管理控制台,通过前后端分离模式将治理控制台和治理功能服务拆分;
● 集成层:主要针对微服务应用提供治理服务集成能力,主要包括客户端集成SDK、客户端性能和链路探针、客户端日志收集代理;
● 服务层:对业务微服务提供治理能力的服务层,包含平台后端的主要业务逻辑,并对中间件提供的服务进行封装与定制;
● 中间件层:平台所依赖的中间件,以开源为主,二次开发和私有实现为辅,包括注册中心、配置中心、治理中心、网关中心、监控中心、日志中心、告警中心等;
● 数据层:为平台中的非业务参数提供数据存储,根据治理数据的特性和使用场景分为结构化数据和非结构化数据,分别采用对应的SQL和NoSQL存储;
● 基础设施层:平台在部署方面支持X86物理机、虚拟机环境部署,支持公有云、私有云和混合云的虚拟机部署,支持基于Docker环境的容器化部署,支持基于Kubernetes的容器云环境部署。
深度剖析企业级微服务治理体系四大核心领域设计
1.微服务统一管理
提供一套围绕业务应用和基础组件的管理体系。在业务应用管理方面,提供从域、系统、分区、应用和单元(集群)等多维度管理方案,进而细粒度的控制业务应用接入;在基础组件管理方面,可以对组件资源进行统一管理,做到应用零配置化即可使用组件。
● 平台上对基础组件资源的统一管理,为业务应用提供的SDK可以更简单的接入到这些基础组件。
■ 将微服务架构运行期所需要的各种基础组件,如注册中心、配置中心、API网关、分布式缓存、分布式消息等,通过平台区域控制服务统一接管,为企业级架构提供统一视角的基础组件资源管理。
■ 将业务应用集成这些基础组件所需要的各种客户端Starter包装成一个简单且统一的客户端Starter,利用Spring Boot内置的监听器机制,在业务应用启动时可以连接到平台上以此来获取连接这些组件资源所需要的各种参数,在这个过程中也可以通过Token机制实现对组件资源的访问权限控制,即降低了业务应用集成这些基础组件的配置参数管理难度,也提高了对基础组件使用的安全管控能力。
● 通过在平台上创建的系统/应用/集群/实例这样的模型结构,让接入到微服务治理平台的业务应用可以按照预期分拆的微服务运行,以此来做到对微服务应用规范强管控。
2. 运行期统一观测
对运行状态的微服务应用采用APM模块实现对健康状态、性能状态监控、链路追踪、应用日志分析、API接口管理等多维度实现统一的观测手段。
● 实例探测:Spring Boot原生提供了Actuator组件来暴露运行期的各种状态级数据指标,包括实例信息、启动环境、配置数据、Bean加载信息、端点映射、日志级别等,同时也暴露了一些敏感且不安全的端点,如停止操作、数据库密码等。在利用Actuator组件实现实例状态检测功能的同时,需要将这些存在不安全的端点进行屏蔽,同时在这类端点上增加访问安全权限控制,让该组件可以在安全可控的范围内为微服务治理观测提供实例健康状态探测相关特性能力。
● 性能监控:为了实现对业务应用的零代码侵入,可采用Java探针技术实现对微服务应用的性能数据采集,如Skywalking APM Agent;从应用、集群、端口等维度收集性能数据,性能数据包括但不局限于:服务可用级别、响应时间、每分钟调用数、百分位响应耗时、CPU、内存、GC情况等。应用实例通过平台SDK注册到平台获取到APM组件信息,通过APM组件客户端对APM组件进行相关初始化操作,之后依托Agent字节码增强技术在相应位置进行埋点,定时将性能数据推送至APM组件进行分析并持久化;平台本身通过访问APM组件暴露的端点获取相关性能数据。
● 链路追踪:与性能监控探针技术类似,利用Java探针技术,遵循OpenTracing标准,收集全链路数据,并分析链路数据形成调用拓扑;应用实例通过平台SDK注册到平台获取到APM组件信息,通过APM组件客户端对APM组件进行相关初始化操作,之后依托Agent字节码增强技术在相应位置进行埋点,定时将链路数据推送至APM组件进行分析并持久化,同时将MDC信息填充到日志,从而实现链路与日志的联动;平台本身通过访问APM组件暴露的端点获取相关链路数据。
● 应用日志分析:在日志收集和分析领域EFK是普遍采用的技术方案,但在应用日志分析的落地使用上,应用日志规范才是其核心的价值体系,对于企业级微服务日志观测方面,日志规范体系需要在日志组件上落地以此作强规范约束;将规范中的某些关键数据以MDC方式注入,并按标准输出到日志文件,日志收集组件到指定路径收集日志数据推送至日志分析组件,日志分析组件按规范解析日志数据并进行持久化;平台通过日志分析服务获取日志数据。
● API:通过Swagger组件获取应用实例运行时暴露的端点信息,从而进行在线接口调试;应用实例通过平台SDK注册到平台获取相关服务资源,之后正常启动实例,实例启动完成回调平台接口通知平台来拉取API数据,平台接收到API数据拉取通知之后调用应用实例特定端点获取API数据并持久化;平台通过对API数据进行分析,从而实现对应用实例API接口进行在线调试功能。
3. 健康状态统一预警
从性能数据和日志数据出发,提供性能告警和日志告警功能,结合灵活的告警规则可以针对不同业务场景产生与之相对应的告警,并在触发告警之后提供一套完善的告警事件处理体系,包括告警事件标记、告警事件推送等。
● 性能告警:通过管控端配置告警规则提交到告警管理模块落库持久化,同时将告警规则推送至配置中心,性能告警组件依赖配置中心可以动态感知告警规则的变化并实时生效,然后在APM预处理接收的性能指标数据时立刻计算告警规则,对于满足告警规则的指标数据立刻生成相应的告警事件,并持久化,随后产生相关告警数据,并将告警数据持久化,同时推送至告警推送系统进行下一步推送操作。
● 日志告警:通过管控端配置告警规则提交到告警管理模块落库持久化,同时将告警规则推送至日志告警组件,然后刷新本地告警规则配置并定时轮询检测日志数据是否触发告警规则,随后产生相关告警事件,并将告警事件持久化,同时推送至告警推送系统进行下一步推送操作。
4. 服务保护统一控制
平台服务网关提供一套以API为中心的完善的安全控制体系和治理体系。服务网关作为系统的统一入口,自身提供丰富的API治理和安全控制功能,这些功能可以按需开启。外围系统通过各种协议接入服务网关,服务网关经过一系列的安全校验治理,最终通过指定协议调用目标应用。对业务应用做到统一管控和统一治理。
平台服务网关接收到客户端接入请求,首先会对报文进行解包成网关内部请求对象,之后走核心过滤器链:
● 所有过滤器都正常执行则走到路由过滤器根据接出协议将网关内部请求对象转换成接出请求对象进行外部调用,调用成功拿到接出响应对象再转换为网关内部响应对象;
● 执行过程有校验不通过的直接抛出异常,异常处理过滤器对异常信息进行封装网关内部响应对象。
在网关上提供的核心治理体系主要分为安全控制和API治理两大部分:
● 安全控制体系:提供黑白名单、访问控制、密钥、租户认证等多种安全体系,其中密钥又从加密解密、加签验签和认证授权等多种方式来保证API访问的安全性。
● 治理体系:从限流控制、参数过滤、熔断降级、灰度路由、超时控制、并发控制、访问时段控制等维度对API访问进行全方位治理。
在金融数字化浪潮中,企业级分布式服务平台也在随之改善升级、与时俱进,我们可以预见,未来的企业级分布式服务平台将会进一步强化与企业金融应用开发平台的整合力度,加强从设计到运维一站式可视化操作能力,提供架构级、单元化级别的可视化生命周期管理,并结合深度学习等技术实现智能化、自动化的微服务、单元化治理能力。