当调用API或者发起网络通讯的时候,不管如何咱们都要知道被调用方的IP和服务端口,大部分状况是经过域名和服务端口,事实上基于DNS的服务发现,由于DNS缓存、没法自治和其余不利因素的存在,有不少局限。传统的DNS方式,都是经过nginx或者其余代理软件来实现,物理机器的ip和port都是固定的,那么nginx中配置的服务ip和port也是固定的,服务列表的更新只能经过手动来作,但若是后端服务不少时,手动更新容易出错,效率也很低,这在后端服务发生故障时,不可用时间就可能会加长。在微服务中,尤为是使用了Docker等虚拟化技术的微服务,其IP和port都是动态分配的,服务实例数也是动态变化的,那么就须要精细而准确的服务发现机制。当微服务app启动后,告诉其余服务本身的ip和端口,这里的其余服务就是Eureka Server和Eureka Client,这样其余服务就知道这个服务有多少实例在线,都在哪些地方,方便去负载均衡和调用。java
Eureka属于客户端发现模式,客户端负责决定相应服务实例的网络位置,而且对请求实现负载均衡。客户端从一个服务注册服务中查询全部可用服务实例的库,并缓存到本地。服务调用时,客户端使用负载均衡算法从多个后端服务实例中选择出一个,而后发出请求。Eureka分为Eureka Server和Eureka client, Eureka Server是一个服务注册中心,为服务实例注册管理和查询可用实例提供了REST API,并能够用其定位、负载均衡、故障恢复后端服务的中间层服务。在服务启动后,Eureka Client向服务注册中心注册服务同时会拉去注册中心注册表副本;在服务中止的时候,Eureka Client向服务注册中心注销服务;服务注册后,Eureka Client会定时的发送心跳来刷新服务的最新状态。nginx
客户端发现模式的优势是服务调用、负载均衡不须要和Eureka Server通讯,直接使用本地注册表副本,所以Eureka Server不可用时是不会影响正常的服务调用,性能也不会由于网络延迟和服务端延迟受到影响。但其缺点也很明显,但某个服务不可用时,各个Eureka Client不能及时的知道,须要1~3个心跳周期才能感知,可是,因为基于Netflix的服务调用端都会使用Hystrix来容错和降级,当服务调用不可用时Hystrix也能及时感知到,经过熔断机制来降级服务调用,所以弥补了基于客户端服务发现的时效性的缺点。面试
Eureka Server采用的是对等通讯(P2P),无中心化的架构,无master/slave区分,每个server都是对等的,既是Server又是Client,因此其集群方式能够自由发挥,能够各点互连,也能够接力互连。Eureka Server经过运行多个实例以及彼此之间互相注册来提升可用性,每一个节点须要添加一个或多个有效的serviceUrl指向另外一个节点。利用Eureka Server这种架构特性, 我在Eureka Server Cluster的部署时采用了三角形通讯模型,三角形是一个很好的均衡模型,既是各点互连,又是接力互连,三角形自己就是一个稳定性几何形状,有着稳固、坚决搜索、耐压的特色,家具、建筑、交通等各类行业都有应用。以下图所示,Eureka Cluster的每一个实例都和另外2个实例通讯交互。算法
感兴趣能够加Java架构师群获取Java工程化、高性能及分布式、高性能、深刻浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限 都是大牛带飞 让你少走不少的弯路的 群..号是:855801563 对了 小白勿进 最好是有开发经验后端
注:加群要求缓存
一、具备工做经验的,面对目前流行的技术不知从何下手,须要突破技术瓶颈的能够加。网络
二、在公司待久了,过得很安逸,但跳槽时面试碰壁。须要在短期内进修、跳槽拿高薪的能够加。架构
三、若是没有工做经验,但基础很是扎实,对java工做机制,经常使用设计思想,经常使用java开发框架掌握熟练的,能够加。app
四、以为本身很牛B,通常需求都能搞定。可是所学的知识点没有系统化,很难在技术领域继续突破的能够加。负载均衡
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工做经验的梳理和总结,带着你们全面、科学地创建本身的技术体系和技术认知!