Eureka之简化理解
2018-09-01 05:42:22来源:博客园 阅读 ()
Netflix Eureka是Spring Cloud体系下构建微服务的核心,应用层面的路由、负载均衡、重试、熔断等等功能,全都是以Eureka方式作为默认支持的。
官方文档和网上一些学习资料对Eureka的分析也比较全面透彻,本文主旨是简化对Eureka的理解。
1. 服务发现的本质
Eureka是Spring Cloud体系微服务下的注册发现组件,我们首先得理解服务发现的本质,Ngnix官方有篇文章讲的很好:
Let’s imagine that you are writing some code that invokes a service that has a REST API or Thrift API.
In order to make a request, your code needs to know the network location (IP address and port) of a
service instance.
Service instances have dynamically assigned network locations. Moreover, the set of service instances
changes dynamically because of autoscaling, failures, and upgrades. Consequently, your client code
needs to use a more elaborate service discovery mechanism.
你在代码中访问微服务的时候,需要知道目标服务的ip:port,但是当目标服务频繁的变更宿主机、弹性伸缩、升级时,你如何管理ip:port?
服务发现通常是用一个标识来代表一个微服务,管理该微服务的所有实例及对应的ip:port相关信息。
2. Eureka的本质
在Eureka中,这个标识为serviceId,在依赖eureka做服务发现的微服务中,访问目标服务的rest接口时,使用http://serviceId/root/context/target/path这样的url,eureka client会自动为你负载到目标服务的实例上。围绕这个工作原理,简单理解Eureka本质:
- RestTemplate的切面,将访问url中的serviceId解析为相应的ip:port;
- 为了获取serviceId与ip:port的映射关系:要求微服务注册Register的时候将这些信息带上;
- 为了使各client端能够解析serviceId,因此需要定期任务执行FetchRegister,拉取和更新server端注册的所有微服务信息;
- 为了保证分发到各client端的注册信息可用,server端要求各微服务在定时任务中发出心跳;
- 为了使server端能够剔除长时间未发送心跳的失活实例,需要定时任务eviction去做剔除;
- 为了保证server端的高可用,多个eureka server之间做replication保证信息同步。
再简单归结一句话:
Eureka的本质是RestTemplate的切面,将url中的serviceId按照一定的策略替换为目标服务的ip:port;
为了保证serviceId与ip:port的映射关系正确,做了大量的定时任务和消息通知机制,来同步eureka server、eureka client的缓存。
Eureka中默认的替换策略--即负载策略是Round Ribbon。
下面来个官方的通信架构压压惊。
3.研读SpringCloud各组件代码的建议
Spring Cloud各组件的代码架构师比较统一的,初学者最快捷的研读方法是从spring.factories文件入手,如eureka-client.jar中的该文件:
1 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ 2 org.springframework.cloud.netflix.eureka.config.EurekaClientConfigServerAutoConfiguration,\ 3 org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceAutoConfiguration,\ 4 org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration,\ 5 org.springframework.cloud.netflix.ribbon.eureka.RibbonEurekaAutoConfiguration 6 7 org.springframework.cloud.bootstrap.BootstrapConfiguration=\ 8 org.springframework.cloud.netflix.eureka.config.EurekaDiscoveryClientConfigServiceBootstrapConfiguration 9 10 org.springframework.cloud.client.discovery.EnableDiscoveryClient=\ 11 org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration
以这些AutoConfiguration类为入口,分析内部定义的Bean,是一个很好的开始。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 通俗理解spring源码(六)—— 默认标签(import、alias、be 2020-06-07
- 一文带你深入理解JVM,看完之后你还敢说你懂JVM吗?颠覆you 2020-06-02
- 深入理解Mybatis(第一讲)——手写ORM框架(简易版Mybatis 2020-06-01
- 无责任书评:每个Java程序员都应该深入理解Java虚拟机 2020-05-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash