百萬并發(fā)場景下,微服務(wù)架構(gòu)如何支撐?
百萬并發(fā)場景
微服務(wù)拆分,是高并發(fā)架構(gòu)的基石。
首先,將業(yè)務(wù)拆分為粒度適當?shù)奈⒎?wù),盡量設(shè)計為無狀態(tài)或?qū)顟B(tài)外置。
拆分應(yīng)以業(yè)務(wù)邊界、和數(shù)據(jù)自治為依據(jù),確保單一服務(wù)職責明確、耦合度低且便于獨立擴展。
粒度既不能過粗以致成為新的單體瓶頸,也不能過細導(dǎo)致分布式復(fù)雜性與通信開銷激增。
通常采用領(lǐng)域驅(qū)動設(shè)計(DDD)識別邊界上下文,結(jié)合訪問頻次、擴展需求及團隊組織結(jié)構(gòu)。
百萬并發(fā)場景下,微服務(wù)架構(gòu)如何支撐?-mikechen
比如:按領(lǐng)域邊界拆(DDD:Bounded Context)。
每個服務(wù)代表一個獨立業(yè)務(wù)域(訂單、庫存、支付、用戶、搜索等)。
確定服務(wù)邊界,并確保服務(wù)之間通過輕量、可靠的 API 或消息隊列進行通信。
對外網(wǎng)關(guān)(API Gateway)做認證、限流、灰度、熔斷。
跨服務(wù)調(diào)用用短超時、斷路器、重試(指數(shù)退避)并實現(xiàn)冪等。
數(shù)據(jù)拆分
垂直拆分(按業(yè)務(wù)/表):不同功能放不同庫(比如把日志/審計/統(tǒng)計放獨立庫)。
百萬并發(fā)場景下,微服務(wù)架構(gòu)如何支撐?-mikechen
適合:不同表之間無強事務(wù)、容量差異大。
水平分表(sharding):把某張大表按某個維度切分為多張表,多庫多表。
shard = hash(user_id)% N
db = dbs[shard]
table ="orders_"+(user_id % M)
db.execute("INSERT INTO "+ table +" (...) VALUES (...)")切分鍵常見:user_id、order_id、地域、時間(按月/按日)。
目錄表 + 時間分區(qū):日志、審計類按時間自動分表/分區(qū)(MySQL partition 或分表)。
分片路由策略:范圍分片、哈希分片(一致性哈希)或復(fù)合策略(hash+range)。
服務(wù)限流
限流,防止流量超出系統(tǒng)承受閾值(令牌桶、滑動窗口、漏桶)。
百萬并發(fā)場景下,微服務(wù)架構(gòu)如何支撐?-mikechen
常見算法:
令牌桶(Token Bucket):允許突發(fā)流量,平滑長期速率。
漏桶(Leaky Bucket):平滑輸出速率,限制峰值。
固定窗口 / 滑動窗口(計數(shù)):簡單實現(xiàn),滑動窗口更平滑。
分布式限流:Redis + Lua 腳本(原子操作)、Guava RateLimiter(單節(jié)點)。
-- keys: bucket_key, timestamp_key
-- ARGV: rate, capacity, now
--返回是否允許服務(wù)熔斷
當下游服務(wù)失敗或延遲升高時,快速斷開對下游的調(diào)用,避免級聯(lián)故障并給下游恢復(fù)時間。
百萬并發(fā)場景下,微服務(wù)架構(gòu)如何支撐?-mikechen
常見實現(xiàn)(Hystrix/Resilience4j/Sentinel)
狀態(tài)機:CLOSED(open calls), OPEN(tripped, short-circuit), HALF-OPEN(testing).
觸發(fā)條件:失敗率閾值(例如 50%)且最小請求數(shù)(例如 20 請求/窗口)或延遲閾值。
恢復(fù)策略:等待時間后進入 HALF-OPEN,允許少量探測請求,成功則關(guān)閉。
服務(wù)降級
某些功能依賴不可用或延遲高時,提供降級結(jié)果(簡化功能、緩存數(shù)據(jù)或友好提示),保證系統(tǒng)核心可用。

常見降級策略
功能降級:關(guān)閉非關(guān)鍵功能(推薦/個性化、統(tǒng)計、日志寫入等)。
數(shù)據(jù)降級:返回緩存數(shù)據(jù)或舊數(shù)據(jù)(接受最終一致性)。
響應(yīng)降級:返回默認值/簡化頁面或“服務(wù)暫不可用”的友好提示。
限速降級:對低優(yōu)先級用戶限流或延遲處理。
比如:訂單查詢遇到庫存服務(wù)不可用:返回緩存訂單狀態(tài) + 顯示“庫存處理中”提示,而不是拋 500。































