[請益] rds replication & cache 多問

作者: sean72 (.)   2018-08-02 14:19:28
問題一
如果使用memcache
寫db的時候
1. 先invalidate cache 再寫db
2. 先寫db 再invaludate cache
3. update cache 然後 update db
4. update db 然後 update cache
我以為這個動作有標準做法,但是問了在亞馬和snapchat的朋友
也看了幾個tech talk 竟然答案不同,請問大家怎麼分析?
我上了一個網路課程的課,他說2是最佳解
case3 & 4 如果某一個update fail都會造成cache裡面髒數據的情況
case1:
user1 invalidate cache, while updating db(未完成)
user2 此時讀資料,cache miss,去讀資料庫,得到舊數據,
並用舊數據update cache
user1 完成db更新
此時cache存著舊數據,db新數據,cache髒數據
case2:
user1 update db (未完成)
user2 此時讀資料,在cache讀了舊資料,離開
user1 finish db and update cache
以後的user都可以讀到最新數據,只有user2讀了舊數據,但僅只一次,無傷大雅
問題二
還有一個問題,關於db consistency
如果用relational db, such as MySQL , Master Slave
write to master,
read from slave
寫到master之後(假設user update一個url link),並且invalid cache
這時候replication還沒完成,假設有5秒的延遲
這個時候如果來了一個read,cache miss
按照邏輯,這時候應該slave read , 但這時候slave data是舊的
那我的client要怎麼處理?
reddit founder 他說當初他們碰到這情況
很多slave裡面的link都是404 very bad user experience
所以他寫db的時候,同時寫到cache
https://youtu.be/cDL7ny_hvio?t=50s
但如果同時寫DB & cache 如果其中一個操作失敗了,那就造成髒數據了,不是嗎?
又如果
我採用問題一的方式 先寫db 然後invalidate cache,
write to master db , 5 sec replication time
這時候一個read進來, cache miss, read from slave取得舊數據
順便update cache
五秒後slave完成replica,但這時候也造成了數據不一致。
replication latency的問題該怎麼解決呢?
感謝
作者: meowyih (meowyih)   2018-08-02 21:05:00
我不是搞資料庫的, 不過我有認真看了一遍這篇文章, 唯一的疑問是所有的問題都建立在 "cache 機制無法暫時關閉,開了就開了" 的前題下。但是為什麼不能暫時關閉? 都能整個砍掉了, 寫個判斷機制讓自己後端暫時停止 cache 直到資料庫更新完 (像 q1, case 1) 不就好了? 都能整個砍掉了暫時停止沒差吧所謂的 "暫時停止" 指的是不讓人讀取 cache, 當 cache 不存在的意思
作者: x000032001 (版廢了該走了)   2018-08-02 21:28:00
假設cache每秒可處理10k req db每秒只有2k req
作者: youtuuube000 (小孩)   2018-08-02 21:29:00
想了解+1
作者: x000032001 (版廢了該走了)   2018-08-02 21:29:00
把資料放在cache的目的是避免大量req直接打db 讀資料一旦在更新時disable cache, req灌進db 那就失去用cache緩解req的用意了我覺得你的問題其實把 Scaling Memcache at Facebook看一看就自然知道惹
作者: keyut2433 (keyut2433)   2018-08-03 05:33:00
post request的同時給cookie,告訴dns這幾秒內的get會送到master拿最新的data, 等cookie過期時再轉到slave
作者: x000032001 (版廢了該走了)   2018-08-03 09:07:00
其他user因為不可能set的到他的cookie所以還是會從slave拿到old value
作者: keyut2433 (keyut2433)   2018-08-03 10:48:00
你沒錯.那只能讓slave抓masterDB的資料了.. 感謝
作者: twntwn   2018-08-05 23:26:00
若需要Strict Relication Consitency 的Query,從master拿其它的可以從Slave拿.

Links booklink

Contact Us: admin [ a t ] ucptt.com