一种高可用无侵入的系统架构的制作方法

文档序号:17535754发布日期:2019-04-29 13:58阅读:273来源:国知局
一种高可用无侵入的系统架构的制作方法

本发明属于微服务技术领域,更具体地,涉及一种高可用无侵入的系统架构。



背景技术:

目前的系统构架扩展方案更多的是采用横向扩展的方式来避免纵向扩展中物理宿主机带来的物理极限瓶颈,通常的解决方案是,将一个大的应用按照业务功能,拆分成若干个功能单一易于维护的分布式微服务。微服务从2014年由martinfowler与jameslewis提出。根据企业的业务形态不一样,具体的微服务实践情况也会不一样。微服务有如下特征:1.足够小;2.自制;3.集中把一件事情做好。微服务的特征决定了微服务有很多的优势,例如:服务异构,可以使用不同的技术来构建服务;程序的可维护性,防止相同的功能在整个系统的各个地方分布,导致程序修复和功能补充会变的非常困难。系统的复杂性被拆分为一个一个小型的微服务,让系统变得更易理解。

但是,在实践过程中系统的复杂性虽得到降低,但是依旧存在,它转移为监控、保护、连接、控制、管理众多微服务。这样的复杂性转移,导致维护人员和开发人员需要了解系统的各个方面,给服务交付带来高昂的成本。传统的系统构建已经在走在服务化的道路上,通过对系统的大部分功能进行拆分,开发出各个功能调用的接口,例如http的服务接口,再通过统一的中心代理集群将实际请求路由到具体的服务上去,然后应用服务需要感知基础支持服务,例如日志服务、性能指标服务和认证鉴权服务,来保障服务本身的健康和对生产数据的收集。同时服务的快速扩展会导致中心代理集群的压力。中心代理集群机制导致难以高效设计缓存规则。应用服务本身也需要考虑对服务请求返回数据进行一定规则的缓存,应用服务需要考虑到与实际业务关联的事情,但是由于应用服务与支持服务之间的耦合交互,导致每个应用服务在这部分与基础代码交互的过程会出现各种各样的差异,开发人员如果没有对这些细节进行处理的话,会导致一些生产事故,这样便没有充分获取服务化给我们带来的红利。



技术实现要素:

针对现有技术的缺陷,本发明的目的在于解决现有技术传统服务调用中应用服务与基础支持服务之间耦合带来的系统开发和维护问题以及服务规模增长带来系统扩展高昂成本的技术问题。

为实现上述目的,本发明实施例提供了一种高可用无侵入的系统架构,所述系统架构包含数据层和控制层;

所述系统架构根据代理的部署地方和承担功能,将集中式中心代理集群分为本地代理和远程代理;

所述数据层用于控制应用服务与应用服务之间的调用以及应用服务和所述控制层之间的交互,所述数据层由多个本地代理组成;

所述控制层用于负责管理本地代理,下发配置和tls证书到本地代理,以及对本地代理出现故障的情况下对其容错,所述控制层由远程代理、服务配置管理层、支持服务适配层和流量加密鉴权层组成。

具体地,所述本地代理具有服务发现、负载均衡、tls加密、熔断、健康检查、路由分发、监控指标收集、错误注入的功能,本地代理和相关应用服务部署在同一环境中。

具体地,所述远程代理用于在本地代理发生故障时,将请求方的请求转移到负载低的服务实例上。

具体地,所述流量加密鉴权层用于通过请求方的认证提供应用服务到应用服务、应用服务到用户的身份认证,通过服务对象设置访问策略。

具体地,所述服务配置管理层为本地代理提供服务发现,通过配置下发来控制本地代理的流量分发。

具体地,所述支持服务适配层用于提供多种适配支持服务的数据转换插件,同时用于本地代理的访问控制和监控指标收集统计。

具体地,所述系统架构采用分级缓存策略:所述本地代理承担一级缓存角色,大量的请求可从一级缓存中获取;所述支持服务适配层承担二级缓存角色,其提供了一个共享的二级缓存。

具体地,所述支持服务适配层采用分片缓存策略。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有以下有益效果:

1.本发明根据代理的部署地方和承担功能,将集中式的代理集群拆分为远程代理和本地代理。请求可根据本地代理更快地到达业务服务,同时远程代理给请求做了容错处理,在架构层面防止本地代理的不可用,从而解决了流量集中,难以管理的问题,有效限制了在生产环境中产生故障的影响范围,保障系统的高可用性。

2.本发明对本地代理支持插件功能化设计,将系统设计层面统一设计在本地代理中,让应用服务无需根据基础支持服务进行任何的适配性的更改,可有效地适配支持服务,极大地增加本地代理的可扩展性,同时让业务服务专心于业务服务,同时拥有本地代理所带来的服务治理功能,不用与支持服务进行紧密耦合,降低开发和运维成本。

3.本发明在架构层面对服务请求进行了管理,本地代理对请求中附加了相对应的请求元信息,这些元信息可有效帮助开发和运维人员,进行规则设定来达到分级缓存和分片缓存的效果,可有效降低请求的时延和对物理宿主机的负载,可根据配置下发的规则更有效地控制路由流量和提高命中缓存率,对服务有更高的控制能力,同时保持对业务服务的无侵入性。

附图说明

图1为本发明实施例提供的一种高可用无侵入服务系统结构示意图;

图2为本发明实施例提供的支持服务适配层缓存示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

首先,对本发明中用到的一些术语进行解释。

支持服务:又称为基础服务,分为权限认证支持服务、监控支持服务、日志服务。

外部服务:没有使用此系统架构的应用服务,依赖第三方,例如:芝麻信用服务,学历验证服务。

应用服务:又称业务服务,对用户提供具体功能的服务,例如:商品列表服务,订单服务。

微服务:把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

异构服务:指同步不同的技术栈实现的服务,例如同一个服务可以用java实现,也可以用python实现。一个完整的系统可以由多个微服务组成,这些微服务可以使用接口进行调用,实际的实现方式可以是不同的技术栈。

传统服务:将服务的代码集中在一个项目中,部署方式通常是单机模式。

服务实例:指一个实际运行,对外提供功能的程序。

如图1所示,一种高可用无侵入的系统架构,本发明将整个系统架构从逻辑上分成数据层和控制层。数据层用于控制应用服务与应用服务之间的调用以及应用服务和控制层之间的交互,数据层由一系列本地代理组成。控制层用于负责管理本地代理,下发配置和tls证书到本地代理,以及对本地代理出现故障的情况下对其容错,控制层由远程代理、服务配置管理层、支持服务适配层和流量加密鉴权层组成。

本发明根据代理的部署地方和承担功能,将集中式的中心代理集群拆分为本地代理和远程代理。为了解决流量问题,承担更多细节,本地代理应尽可能与应用服务在物理层面上靠近,其趋向于定制化开发。远程代理可在任何地方,部署地方无限制,是中心代理集群的保留,用于承担流量分发和现成的代理服务。

本地代理承担调节管理各应用服务之间入口流量和出口流量。在功能设计上,每个本地代理需要具有服务发现、负载均衡、tls加密、熔断、健康检查、路由分发、监控指标收集、错误注入等等功能。本地代理和相关应用服务部署在同一环境中,同一环境可以是同一物理宿主机,也可以是同一服务容器中。本地代理从请求中收集到丰富的服务指标,服务指标包括:流量来源、客户端类型、地区来源等,然后根据计算结果,把有价值的监控信息传给监控支持服务。本地代理让原本部署的应用服务在不重新设计架构和修改代码的情况下,拥有丰富服务治理的功能。这些功能对于各种应用服务通常是非常必要的,能够大幅度节省运维和开发成本。让这些本地代理来完成本不属于应用服务需要关注的一些基础问题,让应用服务可以更加智能和高效地运行,还能够兼顾现有服务的调用方式,实现无缝过渡。

远程代理是中心代理集群的保留,其对本地代理会有感知,会将客户端的流量请求转移到负载较低的服务实例上。在本地代理请求达到预计上限的时候,服务整体需要开启流量限制拒绝部分请求。为了防止本地代理发生本地服务代码出现问题、配置错误等故障导致不可用,保证服务的高可用,本地代理如果发生故障,需要把请求路由到远程代理上,然后通过远程代理来做到全局控制,保障本地代理健康。请求服务方的本地代理需要根据被请求的服务的负载进行合理的请求分发。请求方来进行请求分发控制可以有效减少请求的多次转发。

流量加密鉴权层通过请求服务方的认证提供应用服务到应用服务、应用服务到用户的身份认证。流量加密鉴权层通过服务对象设置访问策略层,而不仅仅是对网络流量的控制。

服务配置管理层为本地代理提供服务发现,通过配置下发来控制本地代理的流量分发。服务配置管理层在路由配置的顶层,通过实时地下发配置到本地代理来实现本地代理的流量智能分发。服务配置管理层根据路由规则,可局部小范围地更新本地代理配置,确认无误后再进行全量发布。容器技术的普及,让很多应用服务已经部署于容器。出于对基础设施和服务代码发布成本的考虑,将本地代码从应用服务的容器环境中分离出来,部署在物理宿主机上,然后通过共享文件的方式将本地代理的ip地址提供给服务容器,可避免每个容器的本地代理消耗更多的计算资源和由于代理功能扩展引来的非必要的代码发布。

支持服务适配层提供多种适配支持服务的数据转换插件,是支持服务与本地代理交互的桥梁。日志数据转换插件将日志上报请求发送给日志支持服务,鉴权数据转换插件将鉴权请求发送给鉴权支持服务,监控数据转换插件将监控指标上报给监控支持服务。同时,支持服务适配层还用于本地代理的访问控制和监控指标收集统计,其具有很高的灵活性。

如图1所示,本发明实施例中,用户通过客户端发送请求,通过入口网关将请求路由到对应的服务(a服务),a应用服务依赖b应用服务和c应用服务,需要调用b和c的数据,而c依赖一个外部服务。应用服务a的本地代理通过服务发现找到b和c的本地代理,将请求直接转发给应用服务b和c的本地代理(不需要再经过远程代理),然后发送请求给b和c。在这个整个流程中,服务a的本地代理通过服务配置管理层下发的配置(路由配置)可以将需要的请求b的请求根据配置比例分发到b的多个实例上去。如果b的某个实例请求达到设计上限,可以将请求发送到远程代理来做容错处理,为扩展服务提供一个缓冲时间。流量加密鉴权层可以定时的更新下发加密证书给本地代理,拥有相同的加密证书的本地代理之间才能加密解密数据进行正常通信。在客户端发出请求,以及引起服务a调用b和c的请求。在请求的开始和结束,可以通过把请求的一个特定指标上报给支持服务层,支持服务层可以根据需要请求的支持服务的类型,将数据进行适配然后发送给支持服务。

如图2所示,支持服务适配层在请求路径时,首先要考虑的问题——这会如何影响到系统的可用性和延迟。本地代理在每次请求前进行条件检查(例如:检查请求方的权限、是否超出请求频率等)和请求后进行监控指标上报,逻辑上都会请求支持服务适配层。本地代理有本地缓存,大部分的条件检查会命中本地缓存。此外,本地代理会缓存需要上报的监控指标,几千个请求上报的时候只需要上报一次。条件检查采用同步策略,监控指标上报采用异步策略,上传后本地代理就进行清除。

支持服务适配层通过数据转换插件,实现与具体支持服务(权限认证支持服务、监控支持服务、日志支持服务)的交互,从而隔离应用服务与支持服务,同时控制所有与后端服务的精细交互。

支持服务适配层有三个基础的特性:

1、支持服务适配层不会管理自己的任何持久存储,保持无状态特性。

2、支持服务适配层需要保持非常高的稳定性。

3、支持服务适配层需要积累大量的瞬间状态。

本地代理和应用服务在同一环境,对系统的内存占用不能太多;支持服务适配层是一个独立的存在,可以存储相当多的缓存。本地代理承担了高效的一级缓存角色,大量的请求可从一级缓存中获取。支持服务适配层承担了高可扩展和高可用的二级缓存的角色,其提供了一个共享的二级缓存。每次请求时,本地代理会逻辑上去调用支持服务适配层。在请求发生之前做条件检查,在请求之后做监控指标数据上报。但是每次请求不用真实地去请求支持服务适配层,可以在一级缓存中存储需要的数据,保证大部分的请求的条件检查是在一级缓存中就得到处理。监控数据上报可以在一级缓存中累积千条请求,然后再实际上报一次。本地代理和应用服务部署在统一环境不能侵占过多的内存资源。支持适配层所处的环境独立,可以使用大量的内存,因此支持适配层为本地代理扮演了一个高扩展和高可用的二级缓存的角色。支持适配层的缓存机制可以掩盖大量的支持服务的故障,二级缓存的数据依然能够响应应用服务本地代理的请求。支持服务适配层的可用性比支持服务高,它的本地缓存可以帮助掩盖支持服务的故障。这两者的结合可以极大降低网络访问的延时。

支持服务适配层的单个实例保持独立,大量的请求会导致支持服务适配层非常高的负载。如图2所示,本发明采用对二级缓存进行分片,分片策略可以是根据请求类型进行分片。

传统服务调用在到达真正的服务实例的之前,需要经历一个集中的代理集群,这样会导致较严重的服务调用延时和代理集群的高负载,在服务使用规模持续增长的同时会导致中心的代理集群持续扩展,带来高昂的计算资源成本。本发明提出的本地代理和远程代理基础架构,可更为有效的设计出这种分级分片的缓存策略,保持一部分实例来满足特定的请求的同时,通过分片将相关的请求路由到特定的服务实例,从而提升缓存的效率。支持服务适配层能够提升整个系统的可用性,减少请求的平均延时;支持服务适配层将基础服务故障与本地代理和服务隔离,能够有效的提高服务的可用性;通过大量的使用多级缓存和分片,支持服务适配层能够减少平均请求延时。

以上,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1