成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

百億級(jí)日訪問(wèn)量的應(yīng)用如何做緩存架構(gòu)設(shè)計(jì)?

開(kāi)發(fā) 架構(gòu)
微博日活躍用戶 1.6 億+,每日訪問(wèn)量達(dá)百億級(jí),面對(duì)龐大用戶群的海量訪問(wèn),良好的架構(gòu)且不斷改進(jìn)的緩存體系具有非常重要的支撐作用。

 微博日活躍用戶 1.6 億+,每日訪問(wèn)量達(dá)百億級(jí),面對(duì)龐大用戶群的海量訪問(wèn),良好的架構(gòu)且不斷改進(jìn)的緩存體系具有非常重要的支撐作用。

[[232164]]

本文由新浪微博技術(shù)專家陳波老師,分為如下四個(gè)部分跟大家詳細(xì)講解那些龐大的數(shù)據(jù)都是如何呈現(xiàn)的:

  • 微博在運(yùn)行過(guò)程中的數(shù)據(jù)挑戰(zhàn)
  • Feed 平臺(tái)系統(tǒng)架構(gòu)
  • Cache 架構(gòu)及演進(jìn)
  • 總結(jié)與展望

微博在運(yùn)行過(guò)程中的數(shù)據(jù)挑戰(zhàn)

Feed 平臺(tái)系統(tǒng)架構(gòu)

Feed 平臺(tái)系統(tǒng)架構(gòu)總共分為五層:

  • 最上面是端層,比如 Web 端、客戶端、大家用的 iOS 或安卓的一些客戶端,還有一些開(kāi)放平臺(tái)、第三方接入的一些接口。
  • 下一層是平臺(tái)接入層,不同的池子,主要是為了把好的資源集中調(diào)配給重要的核心接口,這樣遇到突發(fā)流量的時(shí)候,就有更好的彈性來(lái)服務(wù),提高服務(wù)穩(wěn)定性。
  • 再下面是平臺(tái)服務(wù)層,主要是 Feed 算法、關(guān)系等等。
  • 接下來(lái)是中間層,通過(guò)各種中間介質(zhì)提供一些服務(wù)。
  • 最下面一層就是存儲(chǔ)層。

Feed Timeline

大家日常刷微博的時(shí)候,比如在主站或客戶端點(diǎn)一下刷新,***獲得了十到十五條微博,這是怎么構(gòu)建出來(lái)的呢?

刷新之后,首先會(huì)獲得用戶的關(guān)注關(guān)系。比如他有一千個(gè)關(guān)注,會(huì)把這一千個(gè) ID 拿到,再根據(jù)這一千個(gè) UID,拿到每個(gè)用戶發(fā)表的一些微博。

同時(shí)會(huì)獲取這個(gè)用戶的 Inbox,就是他收到的特殊的一些消息,比如分組的一些微博、群的微博、下面的關(guān)注關(guān)系、關(guān)注人的微博列表。

拿到這一系列微博列表之后進(jìn)行集合、排序,拿到所需要的那些 ID,再對(duì)這些 ID 去取每一條微博 ID 對(duì)應(yīng)的微博內(nèi)容。

如果這些微博是轉(zhuǎn)發(fā)過(guò)來(lái)的,它還有一個(gè)原微博,會(huì)進(jìn)一步取原微博內(nèi)容。通過(guò)原微博取用戶信息,進(jìn)一步根據(jù)用戶的過(guò)濾詞對(duì)這些微博進(jìn)行過(guò)濾,過(guò)濾掉用戶不想看到的微博。

根據(jù)以上步驟留下的微博,會(huì)再進(jìn)一步來(lái)看,用戶對(duì)這些微博有沒(méi)有收藏、點(diǎn)贊,做一些 Flag 設(shè)置,還會(huì)對(duì)這些微博各種計(jì)數(shù),轉(zhuǎn)發(fā)、評(píng)論、贊數(shù)進(jìn)行組裝,***才把這十幾條微博返回給用戶的各種端。

這樣看來(lái),用戶一次請(qǐng)求得到的十幾條記錄,后端服務(wù)器大概要對(duì)幾百甚至幾千條數(shù)據(jù)進(jìn)行實(shí)時(shí)組裝,再返回給用戶。

整個(gè)過(guò)程對(duì) Cache 體系強(qiáng)度依賴,所以 Cache 架構(gòu)設(shè)計(jì)優(yōu)劣會(huì)直接影響到微博體系表現(xiàn)的好壞。

Feed Cache 架構(gòu)

接下來(lái)我們看一下 Cache 架構(gòu),它主要分為六層:

  • ***層是 Inbox,主要是分組的一些微博,然后直接對(duì)群主的一些微博。Inbox 比較少,主要是推的方式。
  • 第二層是 Outbox,每個(gè)用戶都會(huì)發(fā)常規(guī)的微博,都會(huì)到它的 Outbox 里面去。根據(jù)存的 ID 數(shù)量,實(shí)際上分成多個(gè) Cache,普通的大概是 200 多條,如果長(zhǎng)的大概是 2000 條。
  • 第三層是一些關(guān)系,它的關(guān)注、粉絲、用戶。
  • 第四層是內(nèi)容,每一條微博一些內(nèi)容存在這里。
  • 第五層就是一些存在性判斷,比如某條微博我有沒(méi)有贊過(guò)。之前有一些明星就說(shuō)我沒(méi)有點(diǎn)贊這條微博怎么顯示我點(diǎn)贊了,引發(fā)了一些新聞。而這種就是記錄,實(shí)際上她有在某個(gè)時(shí)候點(diǎn)贊過(guò)但可能忘記了。
  • 最下面還有比較大的一層——計(jì)數(shù),每條微博的評(píng)論、轉(zhuǎn)發(fā)等計(jì)數(shù),還有用戶的關(guān)注數(shù)、粉絲數(shù)這些數(shù)據(jù)。

Cache 架構(gòu)及演進(jìn)

簡(jiǎn)單 KV 數(shù)據(jù)類型

[[232165]]

[[232166]]

接下來(lái)我們著重講一下微博的 Cache 架構(gòu)演進(jìn)過(guò)程。最開(kāi)始微博上線時(shí),我們是把它作為一個(gè)簡(jiǎn)單的 KV 數(shù)據(jù)類型來(lái)存儲(chǔ)。

我們主要采取哈希分片存儲(chǔ)在 MC 池子里,上線幾個(gè)月之后發(fā)現(xiàn)一些問(wèn)題:有一些節(jié)點(diǎn)機(jī)器宕機(jī)或是其他原因,大量的請(qǐng)求會(huì)穿透 Cache 層達(dá)到 DB 上去,導(dǎo)致整個(gè)請(qǐng)求變慢,甚至 DB 僵死。

于是我們很快進(jìn)行了改造,增加了一個(gè) HA 層,這樣即便 Main 層出現(xiàn)某些節(jié)點(diǎn)宕機(jī)情況或者掛掉之后,這些請(qǐng)求會(huì)進(jìn)一步穿透到 HA 層,不會(huì)穿透到 DB 層。

這樣可以保證在任何情況下,整個(gè)系統(tǒng)***率不會(huì)降低,系統(tǒng)服務(wù)穩(wěn)定性有了比較大的提升。

對(duì)于這種做法,現(xiàn)在業(yè)界用得比較多,然后很多人說(shuō)我直接用哈希,但這里面也有一些坑。

比如我有一個(gè)節(jié)點(diǎn),節(jié)點(diǎn) 3 宕機(jī)了,Main 把它給摘掉,節(jié)點(diǎn) 3 的一些 QA 分給其他幾個(gè)節(jié)點(diǎn),這個(gè)業(yè)務(wù)量還不是很大,穿透 DB,DB 還可以抗住。

但如果這個(gè)節(jié)點(diǎn) 3 恢復(fù)了,它又加進(jìn)來(lái)之后,節(jié)點(diǎn) 3 的訪問(wèn)就會(huì)回來(lái),稍后節(jié)點(diǎn) 3 因?yàn)榫W(wǎng)絡(luò)原因或者機(jī)器本身的原因,它又宕機(jī)了,一些節(jié)點(diǎn) 3 的請(qǐng)求又會(huì)分給其他節(jié)點(diǎn)。

這個(gè)時(shí)候就會(huì)出現(xiàn)問(wèn)題,之前分散給其他節(jié)點(diǎn)寫回來(lái)的數(shù)據(jù)已經(jīng)沒(méi)有人更新了,如果它沒(méi)有被剔除掉就會(huì)出現(xiàn)混插數(shù)據(jù)。

實(shí)際上微博是一個(gè)廣場(chǎng)型的業(yè)務(wù),比如突發(fā)事件,某明星找個(gè)女朋友,瞬間流量就 30% 了。

突發(fā)事件后,大量的請(qǐng)求會(huì)出現(xiàn)在某一些節(jié)點(diǎn),會(huì)導(dǎo)致這些節(jié)點(diǎn)非常熱,即便是 MC 也沒(méi)辦法滿足這么大的請(qǐng)求量。這時(shí) MC 就會(huì)變成瓶頸,導(dǎo)致整個(gè)系統(tǒng)變慢。

基于這個(gè)原因,我們引入了 L1 層,還是一個(gè) Main 關(guān)系池,每一個(gè) L1 大概是 Main 層的 N 分之一,六分之一、八分之一、十分之一這樣一個(gè)內(nèi)存量,根據(jù)請(qǐng)求量我會(huì)增加 4 到 8 個(gè) L1,這樣所有請(qǐng)求來(lái)了之后首先會(huì)訪問(wèn) L1。

L1 ***的話就會(huì)直接訪問(wèn),如果沒(méi)有***再來(lái)訪問(wèn) Main-HA 層,這樣在一些突發(fā)流量的時(shí)候,可以由 L1 來(lái)抗住大部分熱的請(qǐng)求。

對(duì)微博本身來(lái)說(shuō),新的數(shù)據(jù)就會(huì)越熱,只要增加很少一部分內(nèi)存就會(huì)抗住更大的量。

簡(jiǎn)單總結(jié)一下:通過(guò)簡(jiǎn)單 KV 數(shù)據(jù)類型的存儲(chǔ),我們實(shí)際上是以 MC 為主的,層內(nèi) Hash 節(jié)點(diǎn)不漂移,Miss 穿透到下一層去讀取。

通過(guò)多組 L1 讀取性能提升,能夠抗住峰值、突發(fā)流量,而且成本會(huì)大大降低。

對(duì)讀寫策略,采取多寫,讀的話采用逐層穿透,如果 Miss 的話就進(jìn)行回寫。對(duì)存在里面的數(shù)據(jù),我們最初采用 Json/xml,2012 年之后就直接采用 Protocol Buffer 格式,對(duì)一些比較大的用 QuickL 進(jìn)行壓縮。

集合類數(shù)據(jù)

剛才講到簡(jiǎn)單的 QA 數(shù)據(jù),那對(duì)于復(fù)雜的集合類數(shù)據(jù)怎么來(lái)處理?

比如我關(guān)注了 2000 人,新增 1 個(gè)人,就涉及到部分修改。有一種方式是把 2000 個(gè) ID 全部拿下來(lái)進(jìn)行修改,但這種對(duì)帶寬、機(jī)器壓力會(huì)很大。

還有一些分頁(yè)獲取,我存了 2000 個(gè),只需要取其中的第幾頁(yè),比如第二頁(yè),也就是第十到第二十個(gè),能不能不要全量把所有數(shù)據(jù)取回去。

還有一些資源的聯(lián)動(dòng)計(jì)算,會(huì)計(jì)算到我關(guān)注的某些人里面 ABC 也關(guān)注了用戶 D。這種涉及到部分?jǐn)?shù)據(jù)的修改、獲取,包括計(jì)算,對(duì) MC 來(lái)說(shuō)實(shí)際上是不太擅長(zhǎng)的。

各種關(guān)注關(guān)系都存在 Redis 里面取,通過(guò) Hash 分布、儲(chǔ)存,一組多存的方式來(lái)進(jìn)行讀寫分離?,F(xiàn)在 Redis 的內(nèi)存大概有 30 個(gè) T,每天都有 2-3 萬(wàn)億的請(qǐng)求。

在使用 Redis 的過(guò)程中,實(shí)際上還是遇到其他一些問(wèn)題。比如從關(guān)注關(guān)系,我關(guān)注了 2000 個(gè) UID,有一種方式是全量存儲(chǔ)。

但微博有大量的用戶,有些用戶登錄得比較少,有些用戶特別活躍,這樣全部放在內(nèi)存里成本開(kāi)銷是比較大的。

所以我們就把 Redis 使用改成 Cache,比如只存活躍的用戶,如果你最近一段時(shí)間沒(méi)有活躍,會(huì)把你從 Redis 里踢掉,再次有訪問(wèn)的時(shí)候再把你加進(jìn)來(lái)。

這時(shí)存在一個(gè)問(wèn)題,因?yàn)?Redis 工作機(jī)制是單線程模式,如果它加某一個(gè) UV,關(guān)注 2000 個(gè)用戶,可能擴(kuò)展到兩萬(wàn)個(gè) UID,兩萬(wàn)個(gè) UID 塞回去基本上 Redis 就卡住了,沒(méi)辦法提供其他服務(wù)。

所以我們擴(kuò)展一種新的數(shù)據(jù)結(jié)構(gòu),兩萬(wàn)個(gè) UID 直接開(kāi)了端,寫的時(shí)候直接依次把它寫到 Redis 里面去,讀寫的整個(gè)效率就會(huì)非常高。

它的實(shí)現(xiàn)是一個(gè) long 型的開(kāi)放數(shù)組,通過(guò) Double Hash 進(jìn)行尋址。

我們對(duì) Redis 進(jìn)行了一些其他的擴(kuò)展,大家可能也在網(wǎng)上看到過(guò)我們之前的一些分享,把數(shù)據(jù)放到公共變量里面。

整個(gè)升級(jí)過(guò)程,我們測(cè)試 1G 的話加載要 10 分鐘,10G 大概要 10 分鐘以上,現(xiàn)在是毫秒級(jí)升級(jí)。

對(duì)于 AOF,我們采用滾動(dòng)的 AOF,每個(gè) AOF 是帶一個(gè) ID 的,達(dá)到一定的量再滾動(dòng)到下一個(gè) AOF 里去。

對(duì) RDB 落地的時(shí)候,我們會(huì)記錄構(gòu)建這個(gè) RDB 時(shí),AOF 文件以及它所在的位置,通過(guò)新的 RDB、AOF 擴(kuò)展模式,實(shí)現(xiàn)全增量復(fù)制。

其他數(shù)據(jù)類型:計(jì)數(shù)

接下來(lái)還有一些其他的數(shù)據(jù)類型,比如一個(gè)計(jì)數(shù),實(shí)際上計(jì)數(shù)在每個(gè)互聯(lián)網(wǎng)公司都可能會(huì)遇到,對(duì)一些中小型的業(yè)務(wù)來(lái)說(shuō),實(shí)際上 MC 和 Redis 足夠用的。

但在微博里計(jì)數(shù)出現(xiàn)了一些特點(diǎn):?jiǎn)螚l Key 有多條計(jì)數(shù),比如一條微博,有轉(zhuǎn)發(fā)數(shù)、評(píng)論數(shù),還有點(diǎn)贊;一個(gè)用戶有粉絲數(shù)、關(guān)注數(shù)等各種各樣的數(shù)字。

因?yàn)槭怯?jì)數(shù),它的 Value size 是比較小的,根據(jù)它的各種業(yè)務(wù)場(chǎng)景,大概就是 2-8 個(gè)字節(jié),一般 4 個(gè)字節(jié)為多。

然后每日新增的微博大概十億條記錄,總記錄就更可觀了,然后一次請(qǐng)求,可能幾百條計(jì)數(shù)要返回去。

計(jì)數(shù)器 Counter Service

最初是可以采取 Memcached,但它有個(gè)問(wèn)題,如果計(jì)數(shù)超過(guò)它內(nèi)容容量時(shí),會(huì)導(dǎo)致一些計(jì)數(shù)的剔除,宕機(jī)或重啟后計(jì)數(shù)就沒(méi)有了。

另外可能有很多計(jì)數(shù)它為零,那這個(gè)時(shí)候怎么存,要不要存,存的話就占很多內(nèi)存。

微博每天上十億的計(jì)數(shù),光存 0 都要占大量的內(nèi)存,如果不存又會(huì)導(dǎo)致穿透到 DB 里去,對(duì)服務(wù)的可溶性會(huì)存在影響。

2010 年之后我們又采用 Redis 訪問(wèn),隨著數(shù)據(jù)量越來(lái)越大之后,發(fā)現(xiàn) Redis 內(nèi)存有效負(fù)荷還是比較低的,它一條 KV 大概需要至少 65 個(gè)字節(jié)。

但實(shí)際上我們一個(gè)計(jì)數(shù)需要 8 個(gè)字節(jié),然后 Value 大概 4 個(gè)字節(jié),所以有效只有 12 個(gè)字節(jié),還有四十多個(gè)字節(jié)都是被浪費(fèi)掉的。

這還只是單個(gè) KV,如果在一條 Key 有多個(gè)計(jì)數(shù)的情況下,它就浪費(fèi)得更多了。

比如說(shuō)四個(gè)計(jì)數(shù),一個(gè) Key 8 個(gè)字節(jié),四個(gè)計(jì)數(shù)每個(gè)計(jì)數(shù)是 4 個(gè)字節(jié),16 個(gè)字節(jié)大概需要 26 個(gè)字節(jié)就行了,但是用 Redis 存大概需要 200 多個(gè)字節(jié)。

后來(lái)我們通過(guò)自己研發(fā)的 Counter Service,內(nèi)存降至 Redis 的五分之一到十五分之一以下,而且進(jìn)行冷熱分離,熱數(shù)據(jù)存在內(nèi)存里,冷數(shù)據(jù)如果重新變熱,就把它放到 LRU 里去。

落地 RDB、AOF,實(shí)現(xiàn)全增量復(fù)制,通過(guò)這種方式,熱數(shù)據(jù)單機(jī)可以存百億級(jí),冷數(shù)據(jù)可以存千億級(jí)。

整個(gè)存儲(chǔ)架構(gòu)大概是上圖這樣,上面是內(nèi)存,下面是 SSD,在內(nèi)存里是預(yù)先把它分成 N 個(gè) Table,每個(gè) Table 根據(jù) ID 的指針序列,劃出一定范圍。

任何一個(gè) ID 過(guò)來(lái)先找到它所在的 Table,如果有直接對(duì)它增增減減,有新的計(jì)數(shù)過(guò)來(lái),發(fā)現(xiàn)內(nèi)存不夠的時(shí)候,就會(huì)把一個(gè)小的 Table Dump 到 SSD 里去,留著新的位置放在最上面供新的 ID 來(lái)使用。

有些人疑問(wèn)說(shuō),如果在某個(gè)范圍內(nèi),我的 ID 本來(lái)設(shè)的計(jì)數(shù)是 4 個(gè)字節(jié),但是微博特別熱,超過(guò)了 4 個(gè)字節(jié),變成很大的一個(gè)計(jì)數(shù)怎么處理?

對(duì)于超過(guò)限制的,我們把它放在 Aux dict 進(jìn)行存放,對(duì)于落在 SSD 里的 Table,我們有專門的 IndAux 進(jìn)行訪問(wèn),通過(guò) RDB 方式進(jìn)行復(fù)制。

其他數(shù)據(jù)類型:存在性判斷

除了計(jì)數(shù),微博還有一些業(yè)務(wù),一些存在性判斷。比如一條微博展現(xiàn)的,有沒(méi)有點(diǎn)贊、閱讀、推薦,如果這個(gè)用戶已經(jīng)讀過(guò)這個(gè)微博了,就不要再顯示給他。

這種有一個(gè)很大的特點(diǎn),它檢查是否存在,每條記錄非常小,比如 Value 1 個(gè) bit 就可以了,但總數(shù)據(jù)量巨大。

比如微博每天新發(fā)表微博 1 億左右,讀的可能有上百億、上千億這種總的數(shù)據(jù)需要判斷。

怎么來(lái)存儲(chǔ)是個(gè)很大的問(wèn)題,而且這里面很多存在性就是 0。還是前面說(shuō)的,0 要不要存?

如果存了,每天就存上千億的記錄;如果不存,那大量的請(qǐng)求最終會(huì)穿透 Cache 層到 DB 層,任何 DB 都沒(méi)辦法抗住那么大的流量。

我們也進(jìn)行了一些選型:首先直接考慮能不能用 Redis。單條 KV 65 個(gè)字節(jié),一個(gè) KV 可以 8 個(gè)字節(jié)的話,Value 只有 1 個(gè) bit,這樣算下來(lái)每日新增內(nèi)存有效率是非常低的。

第二種我們新開(kāi)發(fā)的 Counter Service,單條 KV Value 1 個(gè) bit,我就存 1 個(gè) byt,總共 9 個(gè) byt 就可以了。

這樣每日新增內(nèi)存 900G,存的話可能就只能存***若干天的,存?zhèn)€三天差不多快 3 個(gè) T 了,壓力也挺大,但比 Redis 已經(jīng)好很多。

我們最終方案是自己開(kāi)發(fā) Phantom,先采用把共享內(nèi)存分段分配,最終使用的內(nèi)存只用 120G 就可以。

算法很簡(jiǎn)單,對(duì)每個(gè) Key 可以進(jìn)行 N 次哈希,如果哈希的某一個(gè)位它是 1,那么進(jìn)行 3 次哈希,三個(gè)數(shù)字把它設(shè)為 1。

把 X2 也進(jìn)行三次哈希,后面來(lái)判斷 X1 是否存在的時(shí)候,從進(jìn)行三次哈希來(lái)看,如果都為 1 就認(rèn)為它是存在的;如果某一個(gè)哈希 X3,它的位算出來(lái)是 0,那就***肯定是不存在的。

它的實(shí)現(xiàn)架構(gòu)比較簡(jiǎn)單,把共享內(nèi)存預(yù)先拆分到不同 Table 里,在里面進(jìn)行開(kāi)方式計(jì)算,然后讀寫,落地的話采用 AOF+RDB 的方式進(jìn)行處理。

整個(gè)過(guò)程因?yàn)榉旁诠蚕韮?nèi)存里面,進(jìn)程要升級(jí)重啟數(shù)據(jù)也不會(huì)丟失。對(duì)外訪問(wèn)的時(shí)候,建 Redis 協(xié)議,它直接擴(kuò)展新的協(xié)議就可以訪問(wèn)我們這個(gè)服務(wù)了。

[[232167]]

小結(jié)一下:到目前為止,我們關(guān)注了 Cache 集群內(nèi)的高可用、擴(kuò)展性、組件高性能,還有一個(gè)特別重要就是存儲(chǔ)成本,還有一些我們沒(méi)有關(guān)注到的,比如運(yùn)維性如何,微博現(xiàn)在已經(jīng)有幾千差不多上萬(wàn)臺(tái)服務(wù)器等。

進(jìn)一步優(yōu)化

服務(wù)化

采取的方案首先就是對(duì)整個(gè) Cache 進(jìn)行服務(wù)化管理,對(duì)配置進(jìn)行服務(wù)化管理,避免頻繁重啟,另外如果配置發(fā)生變更,直接用一個(gè)腳本修改一下。

服務(wù)化還引入 Cluster Manager,實(shí)現(xiàn)對(duì)外部的管理,通過(guò)一個(gè)界面來(lái)進(jìn)行管理,可以進(jìn)行服務(wù)校驗(yàn)。

服務(wù)治理方面,可以做到擴(kuò)容、縮容,SLA 也可以得到很好的保障。另外,對(duì)于開(kāi)發(fā)來(lái)說(shuō),現(xiàn)在就可以屏蔽 Cache 資源。

總結(jié)與展望

***簡(jiǎn)單總結(jié)一下,對(duì)于微博 Cache 架構(gòu)來(lái)說(shuō),我們從它的數(shù)據(jù)架構(gòu)、性能、儲(chǔ)存成本、服務(wù)化等不同方面進(jìn)行了優(yōu)化增強(qiáng)。歡迎對(duì)此有研究或有疑問(wèn)的同行們留言,跟我們一起探討。

責(zé)任編輯:武曉燕 來(lái)源: 中生代技術(shù)
相關(guān)推薦

2018-06-05 09:31:01

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

2019-10-31 09:32:58

Redis微博緩存

2018-01-30 14:26:49

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

2018-05-21 09:15:06

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

2019-07-24 08:55:09

APP重設(shè)計(jì)界面

2019-10-28 11:00:37

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

2018-05-17 10:10:17

架構(gòu)設(shè)計(jì)優(yōu)化

2017-04-01 09:04:54

docker自動(dòng)化

2018-05-28 08:20:12

服務(wù)器Redis優(yōu)化

2022-07-17 06:54:51

Eureka架構(gòu)

2023-08-20 12:21:18

軟件開(kāi)發(fā)架構(gòu)設(shè)計(jì)

2022-04-11 09:15:00

前端開(kāi)發(fā)技術(shù)

2019-12-04 09:05:15

千萬(wàn)級(jí)流量高并發(fā)

2020-01-14 10:41:45

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2009-07-30 15:50:49

ASP.NET中網(wǎng)站訪

2020-01-17 11:00:23

流量系統(tǒng)架構(gòu)

2021-01-11 10:19:51

安全架構(gòu)

2011-06-19 12:12:12

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

2018-12-17 09:02:25

百億大表維度查詢

2013-07-24 10:01:24

產(chǎn)品設(shè)計(jì)產(chǎn)品經(jīng)理新手做產(chǎn)品
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 成人在线小视频 | 欧美激情黄色 | 精品网站999 | 久久国产精品无码网站 | 91免费在线播放 | 欧美精品网 | 国产日韩欧美 | 隔壁老王国产在线精品 | 欧美大片一区 | 欧美黑人激情 | 精品久久精品 | 国产精品视频网站 | 欧美日韩国产在线 | 自拍视频精品 | 91精品国产色综合久久不卡蜜臀 | 曰批视频在线观看 | 国产成人久久精品 | 国产精品久久久久久中文字 | 黑人巨大精品欧美一区二区一视频 | 91av视频| 免费观看一级特黄欧美大片 | 福利片在线看 | av影音资源| 密室大逃脱第六季大神版在线观看 | 欧美日韩精品一区 | 精品国产一区二区在线 | 日韩一区二区在线播放 | 亚洲欧美中文日韩在线v日本 | 激情小视频 | 成人妇女免费播放久久久 | 国精产品一区二区三区 | 亚洲精品在线免费播放 | 天天色图 | 国产女人第一次做爰毛片 | 毛片国产| 久久国产精品视频 | 成人视屏在线观看 | 国产99久久久国产精品 | 日韩成人在线电影 | 9porny九色视频自拍 | 日韩在线视频一区 |