《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——三、 网关(5) https://developer.aliyun.com/article/1223987
b) 数据同步原理
数据同步是指在shenyu-admin后台操作数据以后,使用何种策略将数据同步到Apache ShenYu网关。Apache ShenYu网关当前支持ZooKeeper、WebSocket、Http长轮询、Nacos、Etcd和Consul进行数据同步。默认是通过WebSocket进行数据同步。
数据同步的相关配置请参考数据同步配置。
• 数据同步的意义
网关是流量请求的入口,在微服务架构中承担了非常重要的角色,网关高可用的重要性不言而喻。在使用网关的过程中,为了满足业务诉求,经常需要变更配置,比如流控规则、路由规则等等。因此,网关动态配置是保障网关高可用的重要因素。
当前数据同步特性如下:
• 所有的配置都缓存在Apache ShenYu网关内存中,每次请求都使用本地缓存,速度非常快。
• 用户可以在shenyu-admin后台任意修改数据,并马上同步到网关内存。
• 支持Apache ShenYu的插件、选择器、规则数据、元数据、签名数据等数据同步。
• 所有插件的选择器,规则都是动态配置,立即生效,不需要重启服务。
• 数据同步方式支持Zookeeper、Http长轮询、Websocket、Nacos、Etcd和Consul。
• 数据同步原理分析
下图展示了Apache ShenYu数据同步的流程,Apache ShenYu网关在启动时,会从配置服务同步配置数据,并且支持推拉模式获取配置变更信息,然后更新本地缓存。管理员可以在管理后台(shenyu-admin),变更用户权限、规则、插件、流量配置,通过推拉模式将变更信息同步给Apache ShenYu网关,具体是push模式,还是pull模式取决于使用哪种同步方式。
在最初的版本中,配置服务依赖Zookeeper实现,管理后台将变更信息push给网关。而现在可以支持WebSocket、Http长轮询、Zookeeper、Nacos、Etcd和Consul,通过在配置文件中设置shenyu.sync.${strategy}指定对应的同步策略,默认使用webosocket同步策略,可以做到秒级数据同步。但是,有一点需要注意的是,Apache ShenYu网关和shenyu-admin必须使用相同的同步策略。
如下图所示,shenyu-admin在用户发生配置变更之后,会通过EventPublisher发出配置变更通知,由EventDispatcher处理该变更通知,然后根据配置的同步策略(http、weboscket、zookeeper、naocs、etcd、consul),将配置发送给对应的事件处理器。
。 如果是websocket同步策略,则将变更后的数据主动推送给shenyu-web,并且在网关层,会有对应的WebsocketDataHandler处理器来处理shenyu-admin的数据推送。
。 如果是zookeeper同步策略,将变更数据更新到zookeeper,而ZookeeperSyncCache会监听到zookeeper的数据变更,并予以处理。
。 如果是http同步策略,由网关主动发起长轮询请求,默认有90s超时时间,如果shenyu-admin没有数据变更,则会阻塞http请求,如果有数据发生变更则响应变更的数据信息,如果超过60s仍然没有数据变更则响应空数据,网关层接到响应后,继续发起http请求,反复同样的请求。
《Apache Dubbo微服务开发从入门到精通》——服务治理与生态——三、 网关(7) https://developer.aliyun.com/article/1223983