蓝盟系统集成,灵魂高可用性网关配置缓存三种同步策略的详细说明

发布者:上海IT外包 发布时间:2019/12/5 16:23:10来源:www.linemore.com

      网关是流量请求的入口,在微服务体系结构中起着非常重要的作用。网关的高可用性的重要性是不言而喻的。在使用网关的过程中,为了满足业务需求,经常需要更改配置,如流量控制规则、路由规则等。因此,网关动态配置是确保网关高可用性的重要因素。那么,灵魂网关如何支持动态配置?
  使用过灵魂的学生知道灵魂的所有插件都是可热插拔的,所有插件的选择器和规则都是动态配置的,无需重启服务即可立即生效。然而,在使用灵魂网关的过程中,用户也反馈了许多问题。
  依赖动物园管理员给etcd、consul和nacos注册用户带来了麻烦。
  依靠redis和influxdb,我没有使用过限流插件和监控插件。我为什么需要这些
  因此,我们对灵魂进行了部分重建,持续了两个月的迭代,并发布了版本2.0
  数据同步方法消除了对zookeeper的强烈依赖,并添加了http长轮询和websocket。
  限流插件和监控插件实现了真正的动态配置,从以前的yml配置变为管理员后台用户动态配置
  1.有些人可能会问我为什么配置同步不使用配置中心。
  答:首先,配置中心的引入会增加很多额外的运行和维护成本,并会使灵魂变得沉重。此外,使用配置中心,数据格式不可控,不便于灵魂管理员进行配置管理。
  2.有人可以问吗?动态配置更新?每次我检查数据库,或者再贴现,不都是这样吗?我得到的是最新的。哪里有这么多东西?
  回答:灵魂是大门。为了提供更高的响应速度,所有配置都缓存在JVM的映射中,并且每个请求都缓存在本地,这非常快。因此,本文也可以理解为分布式环境中的三种内存同步方式。
  原理分析
  首先,让我们来看一个高清无代码图表。下图显示了灵魂数据同步的流程。当灵魂网关启动时,它同步来自配置服务的配置数据,并支持推挽模式以获取配置更改信息和更新本地缓存。但是,管理员在管理后台更改用户、规则、插件和流量的配置,并通过推挽模式将更改信息同步到灵魂网关。具体的推模式或拉模式取决于配置。关于配置同步模块,它实际上是配置中心的简单版本。灵魂高可用性网关配置缓存三种同步策略的详细说明
  在1.x版本中,配置服务依赖于动物园管理员的实现,管理背景将更改信息推送到网关。但是,2.x版支持webosocket、http、zookeeper,并通过soul.sync.strategy指定相应的同步策略。默认情况下,使用http长轮询同步策略,可以实现二级数据同步。然而,重要的是要注意灵魂网和灵魂管理必须使用相同的同步机制。
  如下图所示,灵魂管理员将在用户进行配置更改后通过事件发布者发出配置更改通知。事件调度程序将处理更改通知,然后根据配置的同步策略(http、weboscket、zookeeper)将配置发送到相应的事件处理程序
  如果是网络套接字同步策略,更改后的数据将被主动推送至灵魂网,在网关层,将有一个相应的网络套接字缓存处理器(WebsocketCacheHandler)来处理管理数据推送。
  如果是动物园管理员同步策略,将更改后的数据更新到动物园管理员,动物园管理员同步缓存(ZookeeperSyncCache)会监听动物园管理员的数据更改并进行处理。
  如果是http同步策略,灵魂网会主动发起一个长轮询请求,默认超时为90秒。如果soul-admin没有数据更改,它将阻止http请求。如果数据发生变化,它将响应变化的数据信息。如果超过60秒没有数据更改,它将响应空数据。收到响应后,网关层将继续启动http请求并重复相同的请求。
  灵魂高可用性网关配置缓存三种同步策略的详细说明
  动物园管理员同步
  基于动物园管理员的同步原理非常简单。它主要依靠动物园管理员的观察机制。灵魂网会监听配置好的节点。灵魂管理员将在启动时向动物园管理员写入全部数据。当随后的数据改变时,动物园管理员的节点将被递增地更新。同时,灵魂网将监听配置的节点,并在信息改变时更新本地缓存。
  灵魂高可用性网关配置缓存三种同步策略的详细说明灵魂将配置信息写到动物园管理员节点,是通过精细设计的。
  websocket同步
  websocket和动物园管理员机制有点类似,将网关与管理建立好websocket连接时,管理员会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过websocket主动推送给灵魂网
  使用websocket同步的时候,特别要注意断线重连,也叫保持心跳灵魂使用java-websocket这个第三方库来进行websocket连接。
  公共类WebsocketSyncCache扩展了WebsocketCacheHandler { /** *客户端*/私有WebSocketClient客户端;公共WebsocketSyncCache(最终的灵魂配置. WebSocketConfig WebSocketConfig){计划的线程池执行器=新的调度线程池执行器(1,线程工厂。创建(“WebSocket-connect”,真));客户端=新的WebSocketClient(新URI。getURl()){ @覆盖开放(最终服务器握手服务器握手){ //.} @覆盖消息上的公共空白(最终字符串结果){ //.} };//进行连接客户。connect blocking();//使用调度线程池进行断线重连,30秒进行一次遗嘱执行人。scheduleatFixedRate(()-
  {如果(客户!=空客户端。IsCoded()){client . REconnect blocking();} },10,30,时间单位。秒);}
  Http长轮询
  zookeeper和websocket数据同步机制相对简单,而http同步相对复杂。灵魂借鉴阿波罗和纳科斯的设计思想,决定了实现http长轮询数据同步功能的本质。请注意,这不是传统的ajax长轮询!
  灵魂高可用性网关配置缓存三种同步策略的详细说明
  如上所示,http长轮询机制,灵魂网网关请求管理员的配置服务,读取超时为90s,这意味着网关层请求配置服务最多等待90s,从而方便管理员的配置服务及时响应变化的数据,从而实现准实时推送。
  http请求到达sou-admin后,它不会立即响应数据,而是使用Servlet3.0的异步机制异步响应数据。首先,长轮询请求任务LongPollingClient被抛出到BlocingQueue中,调度任务在60秒后启动并执行。这样做的目的是在60秒后从队列中删除长轮询请求,即使在这段时间内没有配置数据更改。因为即使没有配置更改,网关也必须知道它不能等待,当网关请求配置服务时,它也有90秒的超时。

 

上海IT外包服务网 链接:http://www.linemore.com

>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部