虛心求教幾個大並發 redis 承載的問題和微服務概念的問題

今天被一個大概小我一圈的人給弄懵瞭,問瞭幾個問題我沒答好,最後又被教育瞭一下。也沒辦法……

有幾個問題我大概這輩子也不會碰到,也不知道怎麼答,有會的 V 友能解答一下麼。

一個是 redis 和 memcached 有什麼不同?我說的是兩個差不多,redis 在功能上更加豐富一點,有集合隊列什麼的。可能 memcache 稍稍快一些。不過他說想問的不是這個,我也不知道瞭,因為 memcache 基本上不用。是在內核數組結構算法的實現上面有不同嗎?這個問題已經被問到過兩次瞭,很鬱悶。

一個是 REDIS 怎麼處理大數量並發下未命中的問題。這個……我也真是沒碰到過這麼大的量。似乎對方的意思是就算是簡單的 key value 結構,在一定規模的並發下面,會出現取值 Miss 的問題?(好吧……這個似乎以前別人也問到過。我還真沒碰到過。)

一個是 REDIS 的吞吐量的上限是多少(還是平均吞吐量……有點沒記住)?最大訪問量是可以到多少的請求。

一個是微服務方面的內容,他問瞭一堆很專業的術語,真沒聽到過,現在回過頭來一下子也沒記住。我估計可能是書或是別的技術文章裡的術語。應該不是很常見的那種吧,因為之前看一些文章也沒碰到。這個問題很難求解瞭,不過換個說法就是有沒有比較有深度的文章或是比較好的書籍可以作深入瞭解的。

我對微服務也就是停留在弄個 RPC 或是 HTTP 上面,保證請求的一致性什麼的。kubernetes 現在特別火,可是實在是沒精力去看(光看程序書就已經要瘋掉瞭,根本沒有時間,而且大部分看瞭就忘忘瞭再看,去年已經看熟的 springmvc,這兩天花瞭整整一個星期才重新撿起來。。。)。如果有深入淺出的文章或書的話也求推一下。

RPC 和 HTTP 的最本質的不同(協議不同這還是知道。。)和應用場景也被問瞭,隨便答瞭一下,感覺也可能說得比較淺吧,如果有深入瞭解的朋友也求解惑一下.

謝啦~

已邀請:

極品家丁txt

贊同來自:

就我知道的一些淺顯的理解,僅針對單機

不同:進程模型不同,數據結構支持不同,持久化支持不同
大並發問題:我所理解的的 redis 這種順序執行的不受並發影響吧,非說影響就是超時?可能需要看下協議才知道

七哥

贊同來自:

我回答下第一個吧,拋個磚:

Redis 支持的數據類型更豐富一些,基於各種數據類型可以做出類似於 top K 列表、連續 N 天簽到、等等功能;
Redis 支持數據持久化(但是很雞肋,一般持久化的 KV 會用 LevelDB );
Redis 支持主從和 sharding
最新的 Redis 企業版支持基於 CRDT 的分佈式多主集群

美合

贊同來自:

Redis 是單線程,mm 是多線程,miss 這個沒懂什麼意思,至於最大吞吐量自己寫個程序就能測出來瞭

微服務的書就那幾本,翻翻就大概瞭解是怎麼回事瞭,但是深入理解還是需要大量實踐

風行雲

贊同來自:

個人認為微服務還是不要考慮 Java 瞭,一點都不“微”

郎騎竹馬來

贊同來自:

至於 redis miss 那個,他估計是要問你怎麼處理雪崩效應的,就是假如並發有 1K,請求 keyA,但是 keyA 失效瞭,這個時候要到數據庫去取 keyA 的值,

紅樓夢txt

贊同來自:

1. 我覺得他可能想問 redis 支持持久化
2. redis 大並發下未命中,意思是隻讓一個請求穿透到 DB 層?
3. redis 吞吐量上限是 10W
4. rpc 是指遠程調用是一個抽象的概念,http 是一個具體的協議

qyqx

贊同來自:

@chinvo 為什麼不能考慮 Java?

沉舟

贊同來自:

RPC 跟 HTTP 最本質的不同,,啥本質?
一個是 可以自己定義的私有協議( RPC 叫做遠程過程調用,你可以自己在 TCP 上 定義一層自己的報文協議,簡單點的 你可以直接把請求序列化成 Json 然後 送到另外一邊,,然後 json 結果傳回來 這也算是 rpc ),
一個是標準協議 ,有標準的報文格式,

@chenqh #5 這不是緩存擊穿麼?

幸運歌迷陳先生

贊同來自:

redis 和 memcached 有什麼不同,, 名字不同,下一題
REDIS 怎麼處理大數量並發下未命中的問題 ,, 緩存擊穿,壓力直接到 DB 下一題
REDIS 的吞吐量的上限是多少 ,,for (int i = 0 ; i < count ; i ++){ new Thread().run( getRedisConnAndReadValue() )} 這個代碼 什麼時候崩瞭 ,Redis 的吞吐就是多少瞭, 話說這玩意不是 還可以做集群麼?

知北遊txt全集下載

贊同來自:

@chenqh akka 大法好

奧術神座txt下載

贊同來自:

緩存 miss 說的還是穿透到 db 的問題吧

上限靠壓測, 不同機器配置明顯不一樣

rpc 和 http 本質區別?
如果是指 http 和 mq 的區別的話

http 一旦訪問失敗就丟失瞭 mq 可以直接 cast 出去。。等接受端上線

調教員警

贊同來自:

還有 http 雖然支持長鏈接 但本質上還是不安全的 執行時間略長的都不適合通過 http 發送

所以一般 rpc 都盡量少用 http
所以一般 http 生成異步 request id

周星馳電影下載

贊同來自:

@afpro 這和 akka 有什麼關系?

以惡制惡

贊同來自:

memcached 和 redis 都是 in-memory key-value database. 目前 redis 更流行。緩存 miss 隻能查詢數據庫咯。redis 是單線程的,吞吐量和 CPU 單核性能相關。

粗略的回答下,太深入的也沒有研究過,後面大佬跟上
1 redis 支持的數據結構更為豐富,經過幾種數據結構的組合使用,能讓一些原來復雜的業務輕松實現,而 memcache 則比較單一.在可持續化上,我個人並不認同前面說的比較雞肋,redis 的落地方案有多種可選,實在不濟,怕落地導致性能問題,可以直接啟個從庫專門做落地,主庫完全不落地來解決
2 看你的意思應該是 redis 緩存 miss,被擊穿到 db 層.我沒遇到過這麼大的量,遇到瞭我第一反映是增加從庫和分片,理論上這個是可以無限橫向擴展的,加機器就好
3 redis 的單機上限我記得 redis 直接有工具提供可以壓測,雖然和實際你使用上性能會有偏差(比如數據類型等種種因素),但也是可數據化的
4 微服務還沒學到可以給人解答的地步,不亂說瞭

東方衛視極限挑戰

贊同來自:

@chenqh 把高並發同時 miss 一個 key 之後讀數據庫的操作放到一個 actor 上 簡單粗暴有效

傲世九重天txt下載

贊同來自:

redis 功能其實也不豐富啊……起碼在這麼多 nosql 裡面我感覺 redis 屬於超輕量化的,但是支持的數據結構,做緩存很爽

明道微博

贊同來自:

1. 他應該是想問緩存擊穿處理方式,一是要做 load db 的回寫,二是要防止大量請求落到數據庫上,防止雪崩(可以使用服務降級處理方式)
2. 微服務的核心是功能職責明確化。一個服務隻完成一個功能(模塊),降低服務之間依賴。微服務 A 宕掉之後不影響 B 服務。我們項目中使用微服務一點都不“微”,依賴還是很強,還是會產生雪崩。
3. rpc 和 http 理解不多,上面說的有一點非常中肯,一個是報文格式,一個是協議

王福重

贊同來自:

@suyuanhxx load db 的回寫是?我就知道 redis 回寫到磁盤。

沒向數據庫擊穿方面去想,一直在納悶 Redis 怎麼會有讀已存的數據會有 MISS 的情況但是我從來沒看到別人說起過。。

@Mirana 我記得之前讀過文章說 redis 吞吐量是 10w,但忘記哪裡看到瞭。
然後前段時間,有人問這個問題,我說瞭 10w,一哥們說根本不止。看在他多年工作的經驗上也不好反駁。
請問,相關文章是否可以提供參考一下?

要回復問題請先登錄註冊