go语言构建微服务架构 go语言微服务架构框架

微服务架构之服务注册与发现(一)一、服务注册中心的由来
假如没有服务注册中心,我们会干些什么事情呢?
在传统行业的项目架构中以下的方案最为常见了:
这种架构开发、部署都是最简单的,一般适用于中小企业访问量并不是太多的情况下 , 各个系统服务一台机器就搞定了 。系统之间的调用也是拿到对方的IP+PORT直接连接 。
接下来可能因为应用B开始访问量大了,单台机器已经不能满足我们的需求,于是一些反向代理工具应运而出,其中比较常见的有Apache、Nigix,架构演变为:
相比之前的应用B的单台机器访问 , 这种nginx代理的方式减轻了服务器的压力 , 但是可能会出现Nginx挂了,那么整个服务也不可用,于是又来了这么一套架构:
这样看方案算是完美了吧 。然后事情并不是想象的那么一帆风顺,这还只是应用A调用一个应用B , 如果应用A调用的可能是应用B、C、D、E... , 这种完全就不知道他后面到底还想干嘛,这种架构看似可以,但是绝对会累死运维的(nginx的配置将会非常混乱,直接导致运维不干了) 。
服务注册中心干些什么事情呢?
上面提到的那种靠人力(主要是运维干的事情)比较繁琐,还不好维护,有这么几点不方便:应用服务的地址变了、双十一搞活动服务器新增等等 。那么我们可以有这么的一种架构:
服务注册中心主要是维护各个应用服务的ip+port列表 , 并保持与各应用服务的通讯,在一定时间间隔内进行心跳检测 , 如果心跳不能到达则对服务IP列表进行剔除,并同时通知给其它应用服务进行更新 。同样要是有新增的服务进来,应用服务会向注册中心进行注册,服务注册中心将通知给其它应用进行更新 。每个应用都有需要调用对应应用服务的地址列表,这样在进行调用时只要处理客户负载杂均衡即可 。
二、微服务注册中心
1.Zookeeper
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件 。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等 。
上面的话直接摘抄百度百科的内容,国内很多公司做分布式开发最初的选型大部分都是采用dubbo框架 。dubbo框架注册中心主要使用zookeeper 。zookeeper服务端与客户端的底层通讯为netty 。zookeeper采用CAP理论中的CP,一般集群部署最少需要3台机器 。
2.Euraka
先来看一下euraka的架构图:
Register:服务注册
当Eureka客户端向Eureka Server注册时,它提供自身的元数据,比如IP地址、端口 , 运行状况指示符URL,主页等 。
Renew:服务续约
Eureka客户会每隔30秒发送一次心跳来续约 。通过续约来告知Eureka Server该Eureka客户仍然存在,没有出现问题 。正常情况下,如果Eureka Server在90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除 。建议不要更改续约间隔 。
Fetch Registries:获取注册列表信息
Eureka客户端从服务器获取注册表信息,并将其缓存在本地 。客户端会使用该信息查找其他服务,从而进行远程调用 。该注册列表信息定期(每30秒钟)更新一次 。每次返回注册列表信息可能与Eureka客户端的缓存信息不同,Eureka客户端自动处理 。如果由于某种原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息 。Eureka服务器缓存注册列表信息,整个注册表以及每个应用程序的信息进行了压缩,压缩内容和没有压缩的内容完全相同 。Eureka客户端和Eureka 服务器可以使用JSON / XML格式进行通讯 。在默认的情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息 。

推荐阅读