当前位置:网站首页>8 figures | analyze Eureka's first synchronization registry
8 figures | analyze Eureka's first synchronization registry
2022-06-28 07:24:00 【A female programmer who can't write code】
The registry is particularly important for the registry , All functions are expanded around this registry . Services such as A To access the service B, You have to know the service B Of IP Address and port number . As shown in the figure below , The traditional way is to serve A I see. Service B After the address of , send out HTTP Request to the corresponding API Address .

That service A and service B The information is actually placed in the registry of the Registration Center , The registration center manages the registration of all services 、 Offline . service A and service B Want to get registration information , Unified access to the registry , Get the registry , I know the of other services IP Address And port number .

Last time , Let's talk about a Eureka Client Successfully registered to Eureka Server after ,Eureka Server Will save the registry information in a ConcurrentHashMap in .
that Client How to get other customer registration information ?

Two 、 Get registration information for the first time
First of all, let's think about , service B Sent the registration request to the Registration Center , That service A You have to get the registry , service A There must have been no registry information at the beginning , Then you must get the registration center to pull all the registration forms .( Service here A Also known as Eureka client )
service A For the registry , Namely
to see somebody for the first time, service A Want to putallSave a copy of the registration information in your own place , Convenient for follow-up API call .
Next, let's analyze how the client obtains the full registry from the perspective of source code .
The client sends a request to get
Client When initializing , It will start from Eureka Get the full registry from the registry :

The first time to obtain registration information is to use it in DiscoveryClient Obtained during initialization . We can find the following judgment from the source code :
if (clientConfig.shouldFetchRegistry() && !fetchRegistry(false)) {
fetchRegistryFromBackup();
}
The meaning of this code is shown in the figure :

First, it depends on whether it is configured shouldFetchRegistry, If the , It will call fetchRegistry Method to get the registry .
Because it's new client, So there must be no registration information , So local variables applications = null. Then judge whether it is necessary to obtain the full registry according to several conditions , If one of the conditions is met, the full amount of :

- Conditions for a : Whether to force full access . Transmitted false, You don't need a full amount .
- Condition 2 : Whether the registry information is empty .application == null, It's empty , Need full access to .
- Condition 3 : Get registered client Whether the number of is equal to 0. Yes , Need full access to .
Because of satisfaction applications=null, So you need to get the full amount .
Method for obtaining full registration information :
getAndStoreFullRegistry()
In this, you will send the following HTTP Request calling jersey Of restful Interface :
getApplications()
then Eureka Server Deal with this http The requested class is here :ApplicationsResource Class getContainers Method . This method will be used to get Server Over there .
3、 ... and 、Server Side of the registry cache
Server The client will put the registry into the cache , Reading the registry is actually read from the cache .
There are two levels of cache , A read-only cache readOnlyCacheMap And read-write cache readOnlyCacheMap.
As shown in the figure below :

The read logic of the cache is as follows :
Jersey Servlet Handle HTTP request .
First, the default will start from read-only Find it in the cache .
If not , Again from Reading and writing Find it in the cache .
If you find it, update it read-only cache , And return the found cache .
If you can't find it yet , Return empty .

Leave a few questions , Put it in the cache architecture article :
(1) How did the two-level cache data come from ?
(2) How cache data is updated ?
(3) How the cache expires ?
then ,Eureka Client After getting the registry information , It will be saved locally localRegionApps variable . such Client There will be a copy of Server The registry information of .
localRegionApps.set(this.filterAndShuffle(apps));
Four 、 summary
Registry, whether for Client still Server Come on , It's all very important :
- about Server End to speak , In order to better provide the service of querying the registry , Multi level cache is used to cache registry information .
- about Client End to speak , When the registry is obtained for the first time, it will grab the registry in full , Have their own local .
边栏推荐
- 华为云计算之物理节点CNA安装教程
- 什么是一致性哈希?可以应用在哪些场景?
- 同花顺网上开户安全吗
- Recommend several 0 code, free, learning and using visualization tools
- [c #] [reprint]furion frame address and tutorial address
- 在idea中,get和set方法爆红可能是没有安装Lombok插件
- [ thanos源码分析系列 ]thanos query组件源码简析
- 2021 VDC: technological architecture evolution of vivo Internet service for 100 million users | PPT download attached
- In idea, the get and set methods may be popular because the Lombok plug-in is not installed
- R language ggmap
猜你喜欢
面经---测试工程师web端自动化---大厂面试题

A small code editor can also run programs -- a summary of sublime Text3 running programs in various languages

Using interceptor and cache to complete interface anti brushing operation

Voice network VQA: make the user's subjective experience of unknown video quality in real-time interaction known

kubelet垃圾(退出的容器和未使用的镜像)回收源码分析

Comprehensive analysis of real enterprise software testing process

PLC -- 笔记

Practice of traffic recording and playback in vivo

Compilation principles final review

2021 VDC: technological architecture evolution of vivo Internet service for 100 million users | PPT download attached
随机推荐
ice - 资源
linux下修改mysql端口号
[C language] detailed explanation of C language to obtain array length
R 语言 Hitters 数据分析
自律挑战30天
"Jay bear" plummeted by 96.6%. Why is NFT with star goods cold?
vite2.9 中指定路径别名
Comment la passerelle BACnet / IP recueille - t - elle les données du système central de contrôle des bâtiments?
Libuv framework echo server C source code explanation (TCP part)
Practice of traffic recording and playback in vivo
Practice and exploration of vivo live broadcast application technology
腾讯下半年继续裁员,所有事业群至少缩减 10%,对此你怎么看?关注者
Construction and exploration of vivo database and storage platform
Libuv框架echo-server.c源码详解(TCP部分)
2021 VDC: technological architecture evolution of vivo Internet service for 100 million users | PPT download attached
全方位透析真实企业软件测试流程
基金的投资交易与结算
C语言教程大全
HTTP Caching Protocol practice
Open62541 import nodeset file directly