2. redis
解耦比如說在這個專案中,客戶通過我們這個平台下訂單買車後,會發簡訊提示他,這個發簡訊的動作,如果不使用mq, 要在訂單支付成功時去呼叫發簡訊的介面,然後才能返回下單成功.如果以後需求改了,不要發簡訊了,那這時候又要去改動訂單這個模組,這個設計的就很耦合.但是如果使用了mq,在下單成功後,只需要向mq傳送下單成功的訊息就可以了,傳送簡訊啥的可以直接訂閱這個下單成功的訊息,在獲取到下單成功後,呼叫傳送簡訊. 以後需求更改,也不用去修改訂單這個模組.
非同步同樣,還是下單這個例子,傳送簡訊可能耗時比較長,如果寫在下單的邏輯裡面的話,下單耗時就會增加,實際上,下單成功不需要關注是否傳送簡訊通知成功.
削峰比方說如果在某個時間點突然有大量使用者訪問你這個系統,如果不使用mq,這些連線可能就直接去呼叫業務**,可能就會導致系統資料量太大,服務宕機,這個時候如果使用mq,使用者請求先進mq,業務系統根據自己的能力從mq中獲取請求,這樣就避免了系統宕機.
rabbitmq
rocketmq
kafka
總結中小型公司,技術實力一般,吞吐量也不高,推薦使用rabbitmq,功能完備,管理後台好用,開源社群活躍,基本遇到問題都能在網上找到答案.
大型公司,有研究和定製原始碼的技術,推薦使用rocketmq,設計的比rabbitmq好,吞吐量也更高.
大資料領域,實時計算或者日誌採集方面,使用kafka
rabbitmq的映象集群模式
kafka分布式集群模式
重複消費了怎麼辦
rabbitmq如何保證資料不丟失
在寫入訊息過程中確保資料不丟失,有兩種方式,開啟事務和**.
訊息的持久化,防止mq意外宕機重啟後資料丟失
消費端關閉autoack,只有當真正處理完訊息,手動傳送ack給mq
kafka如何保證資料不丟失
生產者傳送訊息後,需要確認leader和follower都寫入訊息才算傳送成功,否則會一直重試
設定每個leader下至少有乙個follower在正常工作
消費者消費成功後才手動返回消費訊息的offset
kafka中,可以把相同key的訊息傳送到同乙個partition中,保證訊息在mq中的有序性,但是消費者可能會使用多個執行緒來併發處理訊息,這樣也可能會出現訊息的順序性問題.
增加記憶體
設定redis的記憶體淘汰策略
使用redis集群
主從複製的斷點續傳
無磁碟化複製
過期key處理
通過上面兩個配置,就表示:假如有大於等於3個從redis的連線延遲大於10秒,那麼主redis就不再接受外部的寫請求
es分布式架構如何實現的?
es如何寫入和讀取的?
學習筆記 分布式鎖
分布式鎖的產生 隨著網際網路的發展,單體架構無法滿足需求,從而擴充套件成分布式架構後解決分布式情況下同步問題所產生的技術。為什麼分布式情況下要使用分布式鎖來解決同步問題呢?舉個例子 分布式鎖就是用來解決上述所發生的的問題的。分布式鎖可以通過redis和zookeeper來實現,今天我們就先聊一下re...
分布式學習筆記 分布式系統的回顧與簡介
分布式系統是乙個硬體或軟體元件分布在不同的網路計算機上,彼此之間僅僅通過訊息傳遞進行通訊和協調的系統。通俗的理解,所謂分布式系統,就是乙個業務拆分成多個子業務,分布在不同的伺服器節點,共同構成的系統稱為分布式系統,同乙個分布式系統中的伺服器節點在空間部署上是可以隨意分布的,這些伺服器可能放在不同的機...
NLP模型筆記 分布式表示
名稱 分布式表示 別名distributed representation 介紹若干元素的連續表現形式,將詞的語義分布式地儲存在各個維度中,與之相反的是獨熱向量。非分布式表示 圖形水平矩形 垂直矩形 水平橢圓 垂直橢圓 水平矩形10 00垂直矩形01 00水平橢圓00 10垂直橢圓00 01分布式表...