偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Eureka,拿捏日千萬級(jí)訪問量妥妥的

開發(fā) 架構(gòu)
Spring Cloud架構(gòu)體系中,Eureka是一個(gè)至關(guān)重要的組件,它扮演著微服務(wù)注冊(cè)中心的角色,所有的服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn),都是依賴Eureka的。

問題起源

Spring Cloud架構(gòu)體系中,Eureka是一個(gè)至關(guān)重要的組件,它扮演著微服務(wù)注冊(cè)中心的角色,所有的服務(wù)注冊(cè)與服務(wù)發(fā)現(xiàn),都是依賴Eureka的。

不少初學(xué)Spring Cloud的朋友在落地公司生產(chǎn)環(huán)境部署時(shí),經(jīng)常會(huì)問:

  • Eureka Server到底要部署幾臺(tái)機(jī)器?
  • 我們的系統(tǒng)那么多服務(wù),到底會(huì)對(duì)Eureka Server產(chǎn)生多大的訪問壓力?
  • Eureka Server能不能抗住一個(gè)大型系統(tǒng)的訪問壓力?

如果你也有這些疑問,別著急!咱們這就一起去看看,Eureka作為微服務(wù)注冊(cè)中心的核心原理

下面這些問題,大家先看看,有個(gè)大概印象。帶著這些問題,來看后面的內(nèi)容,效果更佳:

  1. Eureka注冊(cè)中心使用什么樣的方式來儲(chǔ)存各個(gè)服務(wù)注冊(cè)時(shí)發(fā)送過來的機(jī)器地址和端口號(hào)?
  2. 各個(gè)服務(wù)找Eureka Server拉取注冊(cè)表的時(shí)候,是什么樣的頻率?
  3. 各個(gè)服務(wù)是如何拉取注冊(cè)表的?
  4. 一個(gè)幾百服務(wù),部署上千臺(tái)機(jī)器的大型分布式系統(tǒng),會(huì)對(duì)Eureka Server造成多大的訪問壓力?
  5. Eureka Server從技術(shù)層面是如何抗住日千萬級(jí)訪問量的?

先給大家說一個(gè)基本的知識(shí)點(diǎn),各個(gè)服務(wù)內(nèi)的Eureka Client組件,默認(rèn)情況下,每隔30秒會(huì)發(fā)送一個(gè)請(qǐng)求到Eureka Server,來拉取最近有變化的服務(wù)信息

舉個(gè)例子:

  • 庫(kù)存服務(wù)原本部署在1臺(tái)機(jī)器上,現(xiàn)在擴(kuò)容了,部署到了3臺(tái)機(jī)器,并且均注冊(cè)到了Eureka Server上。
  • 然后訂單服務(wù)的Eureka Client會(huì)每隔30秒去找Eureka Server拉取最近注冊(cè)表的變化,看看其他服務(wù)的地址有沒有變化。

除此之外,Eureka還有一個(gè)心跳機(jī)制,各個(gè)Eureka Client每隔30秒會(huì)發(fā)送一次心跳到Eureka Server,通知人家說,哥們,我這個(gè)服務(wù)實(shí)例還活著!

如果某個(gè)Eureka Client很長(zhǎng)時(shí)間沒有發(fā)送心跳給Eureka Server,那么就說明這個(gè)服務(wù)實(shí)例已經(jīng)掛了。

光看上面的文字,大家可能沒什么印象。老規(guī)矩!咱們還是來一張圖,一起來直觀的感受一下這個(gè)過程。

Eureka,拿捏日千萬級(jí)訪問量妥妥的

Eureka Server設(shè)計(jì)精妙的注冊(cè)表存儲(chǔ)結(jié)構(gòu)

現(xiàn)在咱們假設(shè)手頭有一套大型的分布式系統(tǒng),一共100個(gè)服務(wù),每個(gè)服務(wù)部署在20臺(tái)機(jī)器上,機(jī)器是4核8G的標(biāo)準(zhǔn)配置。

也就是說,相當(dāng)于你一共部署了100 * 20 = 2000個(gè)服務(wù)實(shí)例,有2000臺(tái)機(jī)器。

每臺(tái)機(jī)器上的服務(wù)實(shí)例內(nèi)部都有一個(gè)Eureka Client組件,它會(huì)每隔30秒請(qǐng)求一次Eureka Server,拉取變化的注冊(cè)表。

此外,每個(gè)服務(wù)實(shí)例上的Eureka Client都會(huì)每隔30秒發(fā)送一次心跳請(qǐng)求給Eureka Server。

那么大家算算,Eureka Server作為一個(gè)微服務(wù)注冊(cè)中心,每秒鐘要被請(qǐng)求多少次?一天要被請(qǐng)求多少次?

  • 按標(biāo)準(zhǔn)的算法,每個(gè)服務(wù)實(shí)例每分鐘請(qǐng)求2次拉取注冊(cè)表,每分鐘請(qǐng)求2次發(fā)送心跳
  • 這樣一個(gè)服務(wù)實(shí)例每分鐘會(huì)請(qǐng)求4次,2000個(gè)服務(wù)實(shí)例每分鐘請(qǐng)求8000次
  • 換算到每秒,則是8000 / 60 = 133次左右,我們就大概估算為Eureka Server每秒會(huì)被請(qǐng)求150次
  • 那一天的話,就是8000 * 60 * 24 = 1152萬,也就是每天千萬級(jí)訪問量

好!經(jīng)過這么一個(gè)測(cè)算,大家是否發(fā)現(xiàn)這里的奧秘了?

  • 首先,對(duì)于微服務(wù)注冊(cè)中心這種組件,在一開始設(shè)計(jì)它的拉取頻率以及心跳發(fā)送頻率時(shí),就已經(jīng)考慮到了一個(gè)大型系統(tǒng)的各個(gè)服務(wù)請(qǐng)求時(shí)的壓力,每秒會(huì)承載多大的請(qǐng)求量。
  • 所以各服務(wù)實(shí)例每隔30秒發(fā)起請(qǐng)求拉取變化的注冊(cè)表,以及每隔30秒發(fā)送心跳給Eureka Server,其實(shí)這個(gè)時(shí)間安排是有其用意的。

按照我們的測(cè)算,一個(gè)上百個(gè)服務(wù),幾千臺(tái)機(jī)器的系統(tǒng),按照這樣的頻率請(qǐng)求Eureka Server,日請(qǐng)求量在千萬級(jí),每秒的訪問量在150次左右。

即使算上其他一些額外操作,我們姑且就算每秒鐘請(qǐng)求Eureka Server在200次~300次吧。

所以通過設(shè)置一個(gè)適當(dāng)?shù)睦∽?cè)表以及發(fā)送心跳的頻率,可以保證大規(guī)模系統(tǒng)里對(duì)Eureka Server的請(qǐng)求壓力不會(huì)太大。

?關(guān)鍵問題來了,Eureka Server是如何保證輕松抗住這每秒數(shù)百次請(qǐng)求,每天千萬級(jí)請(qǐng)求的呢?

要搞清楚這個(gè),首先得清楚Eureka Server到底是用什么來存儲(chǔ)注冊(cè)表的?三個(gè)字,看源碼:

接下來咱們就一起進(jìn)入Eureka源碼里一探究竟:?

Eureka,拿捏日千萬級(jí)訪問量妥妥的

  • 如上圖所示,圖中的這個(gè)名字叫做registryCocurrentHashMap,就是注冊(cè)表的核心結(jié)構(gòu)。看完之后忍不住先贊嘆一下,精妙的設(shè)計(jì)!
  • 從代碼中可以看到,Eureka Server的注冊(cè)表直接基于純內(nèi)存,即在內(nèi)存里維護(hù)了一個(gè)數(shù)據(jù)結(jié)構(gòu)。
  • 各個(gè)服務(wù)的注冊(cè)、服務(wù)下線、服務(wù)故障,全部會(huì)在內(nèi)存里維護(hù)和更新這個(gè)注冊(cè)表。
  • 各個(gè)服務(wù)每隔30秒拉取注冊(cè)表的時(shí)候,Eureka Server就是直接提供內(nèi)存里存儲(chǔ)的有變化的注冊(cè)表數(shù)據(jù)給他們就可以了。
  • 同樣,每隔30秒發(fā)起心跳時(shí),也是在這個(gè)純內(nèi)存的Map數(shù)據(jù)結(jié)構(gòu)里更新心跳時(shí)間。

一句話概括:維護(hù)注冊(cè)表、拉取注冊(cè)表、更新心跳時(shí)間,全部發(fā)生在內(nèi)存里!這是Eureka Server非常核心的一個(gè)點(diǎn)。

搞清楚了這個(gè),咱們?cè)賮矸治鲆幌聄egistry這個(gè)東西的數(shù)據(jù)結(jié)構(gòu),大家千萬別被它復(fù)雜的外表唬住了,沉下心來,一層層的分析!

  • 首先,這個(gè)ConcurrentHashMap的key就是服務(wù)名稱,比如“inventory-service”,就是一個(gè)服務(wù)名稱。
  • value則代表了一個(gè)服務(wù)的多個(gè)服務(wù)實(shí)例。
  • 舉例:比如“inventory-service”是可以有3個(gè)服務(wù)實(shí)例的,每個(gè)服務(wù)實(shí)例部署在一臺(tái)機(jī)器上。

再來看看作為value的這個(gè)Map:

Map<String, Lease<InstanceInfo>>。

  • 這個(gè)Map的key就是服務(wù)實(shí)例的id。
  • value是一個(gè)叫做Lease的類,它的泛型是一個(gè)叫做InstanceInfo的東東,你可能會(huì)問,這倆又是什么鬼?
  • 首先說下InstanceInfo,其實(shí)啊,我們見名知義,這個(gè)InstanceInfo就代表了服務(wù)實(shí)例的具體信息,比如機(jī)器的ip地址、hostname以及端口號(hào)。
  • 而這個(gè)Lease,里面則會(huì)維護(hù)每個(gè)服務(wù)最近一次發(fā)送心跳的時(shí)間

Eureka Server端優(yōu)秀的多級(jí)緩存機(jī)制

假設(shè)Eureka Server部署在4核8G的普通機(jī)器上,那么基于內(nèi)存來承載各個(gè)服務(wù)的請(qǐng)求,每秒鐘最多可以處理多少請(qǐng)求呢?

  • 根據(jù)之前的測(cè)試,單臺(tái)4核8G的機(jī)器,處理純內(nèi)存操作,哪怕加上一些網(wǎng)絡(luò)的開銷,每秒處理幾百請(qǐng)求也是輕松加愉快的。
  • 而且Eureka Server為了避免同時(shí)讀寫內(nèi)存數(shù)據(jù)結(jié)構(gòu)造成的并發(fā)沖突問題,還采用了多級(jí)緩存機(jī)制來進(jìn)一步提升服務(wù)請(qǐng)求的響應(yīng)速度。
  • 在拉取注冊(cè)表的時(shí)候:
  • 首先從ReadOnlyCacheMap里查緩存的注冊(cè)表。
  • 若沒有,就找ReadWriteCacheMap里緩存的注冊(cè)表。
  • 如果還沒有,就從內(nèi)存中獲取實(shí)際的注冊(cè)表數(shù)據(jù)。
  • 在注冊(cè)表發(fā)生變更的時(shí)候:
  • 會(huì)在內(nèi)存中更新變更的注冊(cè)表數(shù)據(jù),同時(shí)過期掉ReadWriteCacheMap。
  • 此過程不會(huì)影響ReadOnlyCacheMap提供人家查詢注冊(cè)表。
  • 一段時(shí)間內(nèi)(默認(rèn)30秒),各服務(wù)拉取注冊(cè)表會(huì)直接讀ReadOnlyCacheMap
  • 30秒過后,Eureka Server的后臺(tái)線程發(fā)現(xiàn)ReadWriteCacheMap已經(jīng)清空了,也會(huì)清空ReadOnlyCacheMap中的緩存
  • 下次有服務(wù)拉取注冊(cè)表,又會(huì)從內(nèi)存中獲取最新的數(shù)據(jù)了,同時(shí)填充各個(gè)緩存。

多級(jí)緩存機(jī)制的優(yōu)點(diǎn)是什么?

  • 盡可能保證了內(nèi)存注冊(cè)表數(shù)據(jù)不會(huì)出現(xiàn)頻繁的讀寫沖突問題。
  • 并且進(jìn)一步保證對(duì)Eureka Server的大量請(qǐng)求,都是快速?gòu)募儍?nèi)存走,性能極高。

為方便大家更好的理解,同樣來一張圖,大家跟著圖再來回顧一下這整個(gè)過程:

Eureka,拿捏日千萬級(jí)訪問量妥妥的

總結(jié)

  • 通過上面的分析可以看到,Eureka通過設(shè)置適當(dāng)?shù)恼?qǐng)求頻率(拉取注冊(cè)表30秒間隔,發(fā)送心跳30秒間隔),可以保證一個(gè)大規(guī)模的系統(tǒng)每秒請(qǐng)求Eureka Server的次數(shù)在幾百次。
  • 同時(shí)通過純內(nèi)存的注冊(cè)表,保證了所有的請(qǐng)求都可以在內(nèi)存處理,確保了極高的性能。
  • 另外,多級(jí)緩存機(jī)制,確保了不會(huì)針對(duì)內(nèi)存數(shù)據(jù)結(jié)構(gòu)發(fā)生頻繁的讀寫并發(fā)沖突操作,進(jìn)一步提升性能。

上述就是Spring Cloud架構(gòu)中,Eureka作為微服務(wù)注冊(cè)中心可以承載大規(guī)模系統(tǒng)每天千萬級(jí)訪問量的原理。

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2018-10-16 09:43:26

負(fù)載均衡TCPHTTP

2018-12-06 09:41:12

持續(xù)集成軟件

2021-07-08 10:04:36

人工智能AI主管

2020-12-03 06:30:11

內(nèi)部類對(duì)象變量

2019-05-30 14:05:35

固態(tài)硬盤協(xié)議?

2009-08-26 11:33:28

Twitter

2018-01-30 14:26:49

監(jiān)控應(yīng)用性能管理運(yùn)維管理

2019-10-31 09:32:58

Redis微博緩存

2022-11-18 17:36:38

Spring架構(gòu)

2018-05-21 09:15:06

Redis美團(tuán)點(diǎn)評(píng)數(shù)據(jù)庫(kù)運(yùn)維

2011-06-19 12:12:12

網(wǎng)站瀏覽量訪問量

2018-06-08 09:48:52

緩存架構(gòu)設(shè)計(jì)

2018-06-05 09:31:01

微博緩存架構(gòu)設(shè)計(jì)

2023-06-05 08:17:03

2019-10-28 11:00:37

RedisMySQL數(shù)據(jù)庫(kù)

2013-12-30 10:33:43

訪問量12306癱瘓

2012-05-08 14:26:05

交換機(jī)銳捷

2009-01-12 10:39:55

Twitter訪問量SNS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)