wuyongxiu / wuyongxiu.github.io

随便记录一下......
http://wuyongxiu.github.io
6 stars 3 forks source link

API网关的服务注册与发现 #6

Closed wuyongxiu closed 7 years ago

wuyongxiu commented 8 years ago

一 静态注册

服务的接口信息,后台主机ip信息,负载均衡策略,第三方应用与服务以及接口的关系都存储在数据库中,并通过开放平台更改。
网关启动时,从数据库中加载这些信息到内存中,当有请求来临时,网关根据服务和接口信息以及负载均衡策略路由请求。
管理员通过开放平台管理这些信息,如注册服务,更改接口信息,更改负载均衡策略等。每次网关检测到这些信息更改时,都会从数据库中再重新加载配置信息到内存中。

优点

实现过程清晰,并且通过开放平台实现了服务和接口的可视化管理。

缺点

在不同的网关下,相同服务可能具有不同的ip,若是都通过开放平台来配置,则要针对每个网关来进行服务ip的配置。

要解决的问题

单机房网关问题不大。当上升到多机房时,由于每个机房都会维护一个配置数据库。

动态注册是将服务的注册功能从由开放平台的手动更改移植到服务自身。利用ZooKeeper或者Etcd来充当配置中心(由于其是键值存储系统,且有一些优秀的特性,比如集群数据同步管理,以及一些持久化节点和TTL特性,很合适用来充当配置中心)。

服务注册与下架

首先实现一个公共的配置服务的客户端包,专门给各个服务调用。服务启动后,这个配置服务客户端包就会获取当前服务的服务名称,ip地址,发送到ZooKeeper或者Etcd中。查询Z(ZooKeeper)或者E(Etcd),若其中没有此服务,则添加此服务节点和ip子节点(有一定TTL的暂时性节点)。若没有此ip,则在已存在的服务下,添加ip子节点。
由于服务在Z或者E中的ip信息是有一定TTL的,服务启动后,会不停的向Z或者E发送包含服务名称和ip的心跳请求,每次心跳请求到达时,就refresh TTL,若服务宕机,则服务无法继续发送心跳请求,等到Z或者E中的节点里的TTL过期后,服务信息就自动从Etcd中移除。

网关和配置中心

网关启动时从配置中心读取配置信息缓存到本地内存中,并且采用watch机制,监控整个配置中心的服务列表。若是配置中心的服务列表有更改,则网关会自动重新读取配置信息。

服务的接口信息以及负载均衡策略

网关的信息有2类,一类是服务信息,一类是接口信息以及负载均衡策略。服务信息比如服务名称,ip地址等除了重启服务外没有必要更改,所以可以通过配置中心来对服务名称和ip进行动态注册。而像接口信息负载均衡策略等是需要后期能够更改的,所以这部分最好还是能够在开放平台或者控制台来进行更改,信息还是存储在数据库中。

优点

解决了静态配置中的不同网关下相同服务可能ip不同等引起的麻烦配置问题,同时服务的注册和上架下架变得非常容易,不再需要通过开放平台进行手工管理,服务可以动态注册和下架。

要解决的问题

还是跨机房问题

三 总结

解决了服务的动态注册与上架下架