(一)、微服务为什么要有服务注册与发现?
    微服务独立部署、具有清晰的边界,服务之间通过远程调用来构建复杂的业务功能。
    服务注册与发现主要解决如下两个问题:
        (1)、屏蔽,解耦服务之间的相互依赖的细节
                我们知道服务之间的远程调用必须知道对方的ip和端口信息。我们可以在调用方直接配置被调用方的ip、端口,这种调用方直接依赖IP、端口的方式存在明显的问题,如被调用的IP、端口变化后,调用方法也要同步修改。
                通过服务发现,将服务之间IP与端口的依赖转化为服务名的依赖,服务名可以根据微服务业务来做标识,因此,屏蔽、解耦服务之间的依赖细节是服务发现与注册解决的第一个问题。
        (2)、对微服务进行动态管理
                在微服务架构中,服务众多,服务之间的相互依赖也错综复杂,无论是服务主动停止,意外挂掉,还是因为流量增加对服务实现进行扩容,这些服务数据或状态上的动态变化,都需要尽快的通知到被调用方,被调用方才采取相应的措施。因此,对于服务注册与发现要实时管理服务的数据与状态,包括服务的注册上线、服务主动下线,异常服务的剔除。
                服务发现将服务IP、端口等细节通过一个服务名抽象给调用者,并动态管理各个微服务的状态检测、状态更新、服务上线、下线等,这些都是微服务治理的基础,包括:负载均衡,链路跟踪。
        
 (二)、微服务发现的服务器端模式
        服务器端模式通过使用一个中间的服务器,来屏蔽被调用服务的复杂性与变动性,当有新的服务加入或老服务剔除时,只需要修改中间服务器上的配置即可,此模式的显著特点是:引入独立的中间代理服务器来屏蔽真实服务的具体细节。
        如下图所示:服务A是调用方(消费者),服务B是被调用方,微服务B有三个负载,分别部署在三台IP为100、101、102的机器上。当服务A调用服务B时,先通过DNS域名解析找到Nginx服务器,然后将请求发送给Nginx,因为在Nginx上配置了服务B的真实访问地址,Nginx收到请求后根据负载均衡算法,将请求转发到某个真是服务B,服务B将请求结果返回给Nginx,Nginx再将返回结果给服务A,整个流程结束
        
    该模式的优点是:配置集中在独立的中间服务器端完成,对代码没有任何入侵,也不存在跨平台跨语言的问题。因为,所有请求都需要穿透中间服务器,缺点也很明显:中间服务器会成为一个单点,对性能也有影响。