2018.3-2019.6 工做總結


服務端工做:前端

1. 文件上傳模塊FileServer。有狀態的,會有本地緩存。mysql

線程分片處理。同一個資源的請求,一定分配到同一個線程中,避免了線程的加鎖。
Java實現Promise的實現。對於RocksDB本地緩存沒有此文件的狀況,若是有多個請求同時到達,加入到Pending等到隊列中,只有第一個請求引發的操做纔會去請求數據庫。算法

使用mysql存儲文件索引。用來標記每一個文件存儲在哪臺mongoDb服務器上。sql

本身實現的RpcClient。 基於長連接,記錄ReqId,超時機制。數據庫


2. 文件上傳模塊FileGate。無狀態的,客戶端能夠任意鏈接api

上傳過程:
經過FileGate對上傳請求作分片路由到FileServer中。保證同一個文件到多個分片可以落盤在同一個FileServer中。
考慮到用戶可能取消文件發送到狀況。因此不能直接將文件分片直接傳入文件服務器。緩存

下載過程:
由於FileServer會有本地RocksDB緩存,因此經過FileGate路由,能夠提升緩存命中率。服務器

 

3. Spring Cloud系統的搭建架構

客戶端H5頁面請求。客戶端打開H5頁面時候,在URL上拼接jwtToken。頁面會將它寫到本身本地的Cookie中。同時,對於有權限的請求,爲了防止CSRF攻擊,後續的Ajax請求,須要攜帶CsrfTokenui

使用zuul實現restapi gate 攔截全部請求,解開jwtToken,還原成用戶信息。

使用長鏈接JwtToken生產者。JwtToken使用非對稱加密。使用私鑰簽名,公鑰驗證簽名。JwtToken中不存儲敏感數據,只明文存儲UID信息。

使用eurake實現服務的註冊和發現。

 

4. 服務端架構

Access -- 隨機鏈接上來。Netty qps 5000

Session -- (uid,access_server_id,connection_id) 使用UID作分片,一致性哈希算法

P2PChatServer -- 使用from_uid,to_uid作分片。

OffMsgServer -- 離線消息服務。

GroupServer -- 使用group_id作分片。

HistoryMsgServer -- 歷史消息服務器 。存儲到MySQL

FileGate -- 隨機鏈接上來。

FileServer -- 使用 storage_file_id 或 client_file_id 作分片

消息發送前,客戶端生成一個client_msg_id . 發送到服務器後,服務端返回一個 storage_msg_id


前端工做:

 


WebIM

WebSocket,Protobuf,React,Redux,高階組件,DH密鑰交換算法,

emoji 表情庫 , 文本輸入框contentEditable, 頭像編輯框。

ECC 加密算法

相關文章
相關標籤/搜索