百万并发场景下,微服务架构如何支撑?

微服务是大型架构核心,下面我详解微服务并发方案@mikechen

百万并发场景

微服务拆分,是高并发架构的基石。

首先,将业务拆分为粒度适当的微服务,尽量设计为无状态或将状态外置。

拆分应以业务边界、和数据自治为依据,确保单一服务职责明确、耦合度低且便于独立扩展。

粒度既不能过粗以致成为新的单体瓶颈,也不能过细导致分布式复杂性与通信开销激增。

通常采用领域驱动设计(DDD)识别边界上下文,结合访问频次、扩展需求及团队组织结构。

百万并发场景下,微服务架构如何支撑?-mikechen

比如:按领域边界拆(DDD:Bounded Context)。

每个服务代表一个独立业务域(订单、库存、支付、用户、搜索等)。

确定服务边界,并确保服务之间通过轻量、可靠的 API 或消息队列进行通信。

对外网关(API Gateway)做认证、限流、灰度、熔断。

跨服务调用用短超时、断路器、重试(指数退避)并实现幂等。

 

 

数据拆分

垂直拆分(按业务/表):不同功能放不同库(比如把日志/审计/统计放独立库)。

百万并发场景下,微服务架构如何支撑?-mikechen

适合:不同表之间无强事务、容量差异大。

水平分表(sharding):把某张大表按某个维度切分为多张表,多库多表。

shard = hash(user_id) % N
db = dbs[shard]
table = "orders_" + (user_id % M)
db.execute("INSERT INTO " + table + " (...) VALUES (...)")

切分键常见:user_id、order_id、地域、时间(按月/按日)。

目录表 + 时间分区:日志、审计类按时间自动分表/分区(MySQL partition 或分表)。

分片路由策略:范围分片、哈希分片(一致性哈希)或复合策略(hash+range)。

 

服务限流

限流,防止流量超出系统承受阈值(令牌桶、滑动窗口、漏桶)。

百万并发场景下,微服务架构如何支撑?-mikechen

常见算法:

令牌桶(Token Bucket):允许突发流量,平滑长期速率。

漏桶(Leaky Bucket):平滑输出速率,限制峰值。

固定窗口 / 滑动窗口(计数):简单实现,滑动窗口更平滑。

分布式限流:Redis + Lua 脚本(原子操作)、Guava RateLimiter(单节点)。

-- keys: bucket_key, timestamp_key
-- ARGV: rate, capacity, now
-- 返回是否允许

 

 

服务熔断

当下游服务失败或延迟升高时,快速断开对下游的调用,避免级联故障并给下游恢复时间。

百万并发场景下,微服务架构如何支撑?-mikechen

常见实现(Hystrix/Resilience4j/Sentinel)

状态机:CLOSED(open calls), OPEN(tripped, short-circuit), HALF-OPEN(testing).

触发条件:失败率阈值(例如 50%)且最小请求数(例如 20 请求/窗口)或延迟阈值。

恢复策略:等待时间后进入 HALF-OPEN,允许少量探测请求,成功则关闭。

 

服务降级

某些功能依赖不可用或延迟高时,提供降级结果(简化功能、缓存数据或友好提示),保证系统核心可用。

百万并发场景下,微服务架构如何支撑?-mikechen

常见降级策略

功能降级:关闭非关键功能(推荐/个性化、统计、日志写入等)。

数据降级:返回缓存数据或旧数据(接受最终一致性)。

响应降级:返回默认值/简化页面或“服务暂不可用”的友好提示。

限速降级:对低优先级用户限流或延迟处理。

比如:订单查询遇到库存服务不可用:返回缓存订单状态 + 显示“库存处理中”提示,而不是抛 500。

mikechen睿哥

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

评论交流
    说说你的看法