用户 → CDN(静态资源命中直接返回) → WAF(防火墙-拦截注入攻击) → 负载均衡 SLB → API 网关 → 风控拦截(风险打分、下发验证) → 分层微服务业务集群 → MQ/Redis/ 数据库
一、分层服务架构
把一个庞大的单体系统,按照业务域、职责边界拆分成多个独立、松耦合的微服务,并且按纵向分层(接入层、网关层、业务服务层、数据层、基础能力层)组织。
1、常见分层:
接入层:负载均衡、CDN、WAF、风控拦截
网关层:统一鉴权、路由转发、限流、日志、跨域(比如 Spring Cloud Gateway)
业务微服务层:按业务拆分独立服务(用户服务、核验服务、风控服务、文件服务、验证服务等),每个服务独立开发、独立发布、独立扩容
公共基础层:短信、文件存储、OCR、消息队列、Redis 等中间件能力
数据层:MySQL、ES 等存储
2、核心特点
高内聚低耦合:修改验证码服务,不需要重启整个平台
独立迭代:不同模块可以分开版本上线
故障隔离:单个服务宕机,不会整体雪崩
适配场景:风控、多种验证拆成独立服务,风险引擎单独一个服务
3、一句话总结
纵向分层管控流量与权限,横向拆成独立业务微服务,各司其职,互不锁死。
二、负载均衡(Load Balance)
把用户流量分发到多台服务实例,均分压力 + 故障自动转移
集群部署配套组件,常见:Nginx、SpringCloud Gateway、云厂商 SLB。
1、核心能力
流量分发:将外部请求按照策略(轮询、权重、最小连接数)分配给后端多个服务节点,避免单台服务器被打满;
健康检查:持续探测后端实例状态,如果某个服务实例宕机,自动把流量剔除,不再转发过去,保障高可用;
会话保持(可选):同一个用户请求固定打到同一台节点(很多微服务场景不需要);
四层 / 七层:四层是网络层转发(TCP),七层可以识别 HTTP、小程序请求路径、Header。
和集群关系:集群是多实例部署,负载均衡是流量调度器,没有负载均衡,集群没法对外统一入口。
示例:风控服务 3 个节点,负载均衡收到请求,轮流分给 3 台机器。
一句话摘要:统一入口,分流流量,自动避开故障节点。
三、集群化部署
同一个服务实例,部署多份副本,跑在多台服务器 / 容器节点上,组成一个集群,前面通过负载均衡(Nginx / 网关)统一调度请求。
例:风控服务部署 3 个实例,验证码识别服务部署 5 个实例
1、能力收益
高可用(容灾):其中一台机器 / 一个实例挂了,负载均衡自动把流量切到其他正常实例,服务不中断
弹性扩容:流量上涨时,直接增加实例数量扛流量;流量低谷减少实例节省资源
负载分担:大量并发请求分散到多个节点,不会单实例压垮
容器化场景:K8s 就是典型的集群编排工具
2、一句话总结
同一个服务跑多份副本,抱团对外提供服务,抗故障、扛并发、支持弹性扩缩容。
区分:集群 ≠ 微服务;微服务是 “怎么拆业务”,集群是 “同一个服务怎么多实例部署”。
四、消息队列削锋(流量销锋)
消息队列(RabbitMQ、RocketMQ、Kafka 等)作为流量缓冲中间件,瞬时突增的请求不直接打进后端业务库 / 核心服务,先丢进队列排队,后端服务按自己的处理能力匀速消费。
登录高峰期大量用户触发验证、OCR 识别请求,瞬时 QPS 暴增,如果全部直接压给 OCR 服务、数据库,会直接打挂; 请求先投递 MQ,消费端设置固定消费速率,慢慢处理,把陡峭的流量尖峰 “拉平”。
1、额外附带能力:
异步解耦:发起验证和识别处理不需要同步等待
可靠投递:消息持久化,服务短暂重启不会丢失待处理任务
流量隔离:非实时任务走队列,保障登录、风控判定这类核心同步链路优先
2、一句话总结
把突发洪峰流量放进队列蓄水池排队,后端按自身最大承载力匀速消费,避免瞬时流量冲垮核心服务。
注意:削峰只解决流量冲击,不加快整体处理速度,只是保护系统不雪崩。
五、Redis 名额控制(限流 / 配额控制)
利用 Redis 高性能、原子计数、过期 key 的特性,做名额、配额、频率控制,常见两种用法:
频率限流(频次控制):比如同一个 IP / 账号,1 分钟最多发起 5 次验证请求;Redis 记录访问计数,超时自动清零(滑动窗口、固定窗口限流),就是你前面风控体系里的请求频率风控。
名额配额控制(资源名额):总并发名额控制,例如 OCR 识别服务同时最多支持 200 路并发,Redis 存全局计数器,拿到名额才允许进入下游识别逻辑;名额耗尽直接返回 “当前验证繁忙,请稍后重试”。
1、优势:
Redis 内存操作,性能极高,适合网关层、入口层快速拦截
支持分布式全局计数:集群多实例共享同一份配额数据,不会出现单机限流不准
支持自动过期,规则配置灵活
2、和 MQ 削峰区别(非常容易混淆):
Redis 名额控制:入口拦截,超过配额直接拒绝请求(拦在最前面,不给进)
MQ 削峰:允许请求进来排队,不拒绝,只是延后处理(收进来慢慢消化)
3、一句话总结
借助 Redis 高速计数能力,在入口层管控请求名额 / 访问频次,实现分布式限流、配额抢占,提前挡住超限请求。