分布式下服务注册的地位和原理
2018-07-04 本文已影响2人
HmilyMing
1.分布式系统为什么需要服务发现
如图所示,在现在的分布式系统中,A、B服务都是集群的,这里只是为了简化分析A服务如何去找B服务才把A画一个。特别是现在很多时候都采用云服务,很多时候都是根据流量来动态改变B服务的集群数目,以及有可能某个节点发生故障而不可用,这时候如果还采用在A服务写死B服务的地址这种方式,就非常不可靠了。

这时就推动了架构演进,变成下图的架构

这时候必然就出现了注册中心的角色,B服务一上线一个就往注册中心注册服务,然后A通过注册中心来找有效的B服务,这就简便了很多。由上图可以很明显的看出注册中心是分布式系统中很重要的基础部分。
A具体如何发现B服务:
客户端发现:A从注册中心里面拿到所有B服务的地址,通过负载均衡策略来挑选出一个服务选用。这种方式能获得到所有可用服务的列表,缺点就是必须得自己实现一套负载均衡策略。
服务端发现:服务端多了一个代理角色,这个代理会做这个挑选工作,然后给A一个可用的B服务。实现了注册中心对消费者的透明化,不需要消费者自己实现挑选工作。
2.服务发现的两种方式
服务发现对于整个分布式系统来说是最重要的基础部分,少了它,整个系统都将无法运转。
客户端发现: eureka
服务端发现:Nginx、zookeeper、kubernetes
3.对微服务的一些理解
微服务的特点:异构,它应该能支持不同的开发语言、支持不同类型的数据库。在大型分布式系统中,肯定会有非java的服务。实际上非java语言也能在eureka注册,只要该服务实现了eureka对应的客户端即可,例如nodeJs的eureka-js-client。