Linux(服務器編程):34---聊聊各種中間件的使用場景

中間件是什麼

  • 中間件是介於應用系統和系統軟件之間的一類軟件,它使用系統軟件所提供的基礎服務(功能),銜接網絡上應用系統的各個部分或不同的應用,能夠達到資源共享、功能共享的目的
  • 例如MySQL、Redis、MongoDB、ZeroMQ、dfs(分佈式文件系統)等都是中間件
  • 例如,下圖是一個軟件系統的大致框架,客戶端連接服務器,服務器通過Nginx進行負載均衡將任務分發到不同的服務器,有很多中間件對業務進行處理

  • 下面我們以微信這個軟件爲例,分析一下有哪些中間件工作在微信的後端業務處理中

一、用戶註冊登錄(MySQL+Redis)

  • 微信用戶註冊時,服務器會將用戶註冊的數據一份存到MySQL中進行持久化,一份存到Redis中進行緩存

  • 有兩種方案實現:
    • 方案①:服務器在接收到用戶註冊的數據後,調用兩個方法,一個方法將數據寫入到MySQL中,另一個方法將數據寫入Redis中
    • 方案②:服務器先將數據寫入到MySQL中進行持久化,然後再從MySQL中將數據讀入Redis作用緩存
  • 一般不存在這種情況:先將數據存入Redis中,然後再從Redis中把數據持久化到MySQL中。因爲數據可能在不確定的因素下,導致Redis中的數據丟失,從而寫入MySQL失敗

二、聊天(ZeroMQ)

  • 假設客戶端A和客戶端B連接到不同的服務器,客戶端A與客戶端B之間進行消息的發送與接收如何實現?
  • 可以使用消息隊列,例如ZeroMQ:
    • 客戶端A將數據拋給服務器A,服務器A將數據拋給消息隊列,然後消息隊列對數據進行分析將數據拋給服務器B
    • 服務器B進行處理將數據發送給客戶端B

三、聊天記錄/朋友圈動態(MongoDB)

  • MongoDB存儲數據的原則是:時間越新的數據放到內存中,越久遠的數據放到磁盤中
  • 聊天記錄和朋友圈動態會隨着時間的增加而訪問次數變少,因此MongoDB使用的比較多

四、圖片/語音/大文件傳輸(dfs分佈式文件系統)

  • 客戶端A與客戶端B進行聊天,客戶端A給客戶端B傳輸一個文件,那麼客戶端A不會直接將文件資源發送給客戶端B,而是將資源上傳到dfs中,然後將該文件在dfs中的url發送給客戶端B,讓客戶端B自己通過url去dfs中下載該文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章