微服务架构下的服务调用与鉴权——某保险公司微服务平台实施案例分享


转载本文需注明出处:微信公众号EAWorld,违者必究。引言:根据保险行业发展趋势,目前保险交易已经呈现高频化、碎片化、场景化等特点,对系统的处理能力、容量、业务连续性、需求相应速度、运维响应速度提出了更高的要求。业务模式创新重塑导致系统更新频繁、应用复杂度急剧升高,传统架构不堪重负,敏捷开发和快速交付无从谈起。本次实施目标为建设满足XXX保险公司业务需求的微服务管理平台和配套工具规范,包括:微服务开发框架,微服务登记平台,微服务管理平台等,能够支撑微服务的开发、运行生命周期管理,进而更好的支持业务与技术的发展与创新。目录:一、项目背景与目标二、微服务平台架构设计三、微服务调用关系四、微服务访问鉴权设计根据保险行业发展趋势,目前保险交易已经呈现高频化、碎片化、场景化等特点,对系统的处理能力、容量、业务连续性、需求相应速度、运维响应速度提出了更高的要求。业务模式创新重塑导致系统更新频繁、应用复杂度急剧升高,传统架构不堪重负,敏捷开发和快速交付无从谈起。客户面临的问题主要是:基于单体架构或SOA架构的应用无法适应业务模式创新的需要缺乏微服务应用的统一技术标准与体系架构微服务架构试点项目反应出对于服务的管控、治理亟待提升客户微服务平台定制的目标,是建设满足新形势下保险业务需求的微服务管理平台和配套工具规范,能够支撑微服务的开发、运行生命周期管理,这主要包括:微服务开发框架:一个供开发微服务的服务框架基座;微服务登记平台:进行微服务设计、开发、变更、版本、订阅、下架等全生命周期管理;微服务管理平台:进行微服务运行时管理,包括服务注册、服务发现、配置中心、网关、负载均衡、认证鉴权、熔断降级、监控等功能。基于微服务架构的企业分布式应用平台,从集成开发工具、服务运行环境、应用管理监控、外部渠道接入等维度来划分,其功能架构如图所示,包括SDK&规范、注册中心、配置中心、监控中心、认证中心、API网关、服务运行环境、管理平台、登记平台等部分。
微服务平台逻辑架构
微服务平台概念模型结合客户的实际情况,微服务平台的概念模型定义如下:
注册中心:支持一个环境内所有域下所有微服务的注册配置中心:支持支持一个环境内所有域下所有微服务的配置APM:支持一个环境内所有域下所有微服务的APM监控断路器监控中心:支持一个环境内所有域下所有微服务的断路器监控,支持按每个版本查看日志中心:支持一个环境内所有域下所有微服务的日志收集、查看:对应完整的业务域,比如车险域网关:网关分为外部网关和内部网关。外部网关部署在DMZ区,用于把API对外网暴露;内部网关用于跨系统间的API调用系统:对应实际的业务系统,每个域有多个业务系统应用:对应业务系统中的业务模块,每个业务系统有多个应用微服务:每个应用有多个微服务微服务版本:每个微服务可以有多个版本,其中可以有多个上线运行版本API:每个微服务版本提供的API实例:每个微服务版本的运行进程微服务之间的调用关系分为系统内部和跨系统两种场景:1、系统内部的微服务之间调用采用直连方式,微服务多实例部署时,调用者采用客户端负载均衡器(如Netflix Ribbion)。2、跨系统的微服务之间调用跨系统的微服务调用通过API网关进行中转,服务提供者需要在API网关上配置路由,然后在API Store中发布API;服务消费者通过API Store订阅需要的API并获得订阅码,然后携带订阅码调用所订阅的API;API Store支持订阅审核流程,服务提供者可以对消费者的订阅请求进行审核。注:API Store是为客户定制的管理服务发布与订阅的模块,这里不做展开描述。在实际业务场景中,微服务提供者运行期存在多版本共存的情况,所以API网关和微服务SDK支持微服务多版本路由策略:客户端请求头指定调用目标服务版本支持灰度版本策略:可以设置针对特定的一组调用者允许或不允许访问灰度版本(即黑白名单),即灰度版本导入部分客户端流量支持灰度版本在线热切换成正式版本服务的调用过程包括服务发布与服务消费的过程。在不同的服务调用场景中,API网关和服务提供者需要对消费者的身份进行认证、对服务调用进行鉴权。API网关负责校验客户端订阅码的合法性(调用API鉴权服务进行鉴权),支持黑白名单配置;微服务提供者(SDK)负责校验客户端(系统内部服务或者API网关)身份的合法性。微服务访问鉴权设计1)服务消费者通过API网关调用服务提供者的API时,需要在请求头中携带订阅码2)API网关根据请求头中的订阅码,调用鉴权服务校验请求的合法性,鉴权失败则拒绝非法请求3)API网关鉴权成功后,删除请求头中的订阅码,避免泄露服务消费者的安全信息给服务提供者,并在请求头中添加API网关标识,然后根据当前路开发云主机域名由规则转发到后端某个API服务提供者实例上4)服务提供者接收到来自API网关或者系统内部其他微服务的调用请求,获取请求头中的客户端标识,根据这个标识从服务注册中心获取客户端实例列表,比较此次请求的来源是否在实例列表中,验证此次请求是否来自合法的消费者。下面是Java客户端调用示例,订阅码等调用所需的参数可以在application.yml (application.properties)或配置中心上配置,微服务SDK开发工具包中已经封装了请求头关于鉴权的处理。Java客户端调用示例以上便是通过某保险公司微服务平台实施案例,分享了微服务架构下的服务调用与鉴权的全部内容。精选提问:问1:“服务的调用过程包括服务发布与服务消费的过程”,这里讲了“服务消费的鉴权”,那“服务发布”有需要鉴权的么?API发布的时候可以设置是否需要审批,服务消费者订阅API的时候,API Store会根据是否需要审批的设置,判断是否交由服务提供者进行订阅审批,审批通过后才算是订阅成功,才能进行调用。服务发布本身现在是通过API Store的用户权限控制,由提供者的管理员进行发布。问2:系统A不允许访问系统B的服务1,但可以访问系统B的服务2,而服务2走系统内部直接访问服务1,那么:在系统A被授权或访问服务2的时候,API Store或者API网关会提示风险么?答:不会提示,系统B的服务2调用自己系统内部的服务1是不会被限制的,网关鉴权只关注系统A调用系统B的服务是否合法。关于作者李忠文,普元开发工程师,普元DevOps核心成员之一。曾参与兴业银行、上海大众、北京海关、交行卡中心、中国银联等项目关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享。

相关推荐: datastage 分析日志获取表记录条数

DataStage通过分析日志获取Job插入目标表的记录数这只是一种不太好的方法,也许还有更好、更简便的方法。这种方法要求每次运行Job之前删除已有的日志信息,否则无法统计出正确的记录数。当然,在Job跑完之后,可以在shell备份本次Job运行的日志到服务器…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 05/06 18:18
下一篇 05/06 18:22