51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计一个银行微服务架构下的API网关,需要处理哪些功能?请说明认证授权、限流、请求路由、日志监控等模块的设计思路。

交通银行后端开发工程师难度:中等

答案

1) 【一句话结论】
银行微服务架构下的API网关需作为统一安全入口,整合多因素认证(MFA)、基于角色的访问控制(RBAC)、分布式限流、智能路由及合规日志模块,通过模块化设计保障服务解耦、业务安全与高并发下的性能稳定,同时满足银行数据安全与业务合规要求。

2) 【原理/概念讲解】
老师口吻解释各模块核心逻辑:

  • 认证授权:银行场景需多因素认证(MFA),如短信验证码、生物识别(指纹/人脸),用户登录后,先通过短信验证码验证手机号,再通过生物识别验证身份,生成JWT令牌。网关验证令牌签名,解析用户角色(管理员、普通用户),结合RBAC模型,检查用户权限(如管理员可访问所有账户,普通用户仅自身账户)。跨服务调用时,需额外验证服务间权限,确保权限一致性。
  • 限流:高并发下用Redis实现的分布式令牌桶算法,允许突发流量但限制总调用次数。令牌生成速率(如实时交易每秒10个令牌,查询API每秒50个令牌),桶大小(如100个令牌)。漏桶用于严格限速场景(如API调用频率不超过每秒5次)。根据业务负载动态调整速率(如通过监控服务负载,自动增加令牌生成速率)。
  • 请求路由:根据请求路径(如/account/{id})或服务名,结合Consul/ Eureka服务注册中心,动态选择服务实例。服务实例需定期健康检查(如HTTP 200或心跳检测),故障时自动剔除,流量切换到健康实例。故障切换策略:快速失败(故障实例直接丢弃请求),降级(故障时返回默认值或缓存结果)。
  • 日志监控:记录链路ID(Trace ID)、请求时间、响应时间、敏感信息(用户ID、金额)脱敏(如用户ID替换为“用户ID-XXX”)。日志存储在加密的合规系统(如银行指定的日志平台),数据保留期限(如30天),支持审计与故障排查。监控指标:请求成功率、响应时间、限流次数、错误率。

3) 【对比与适用场景】

  • 认证授权方式对比
    | 方式 | 定义 | 特性 | 银行场景适用 | 注意点 |
    |---|---|---|---|---|
    | OAuth2.0 | 授权框架,通过令牌授权资源访问 | 需服务器端存储令牌,支持刷新 | 复杂授权(如管理员权限),适合资源级控制 | 处理令牌刷新与过期 |
    | JWT | 自包含令牌,包含用户信息与签名 | 无需服务器端存储,轻量 | 用户认证(登录后返回JWT) | 签名验证需安全密钥,防止篡改 |
    | MFA集成 | 多因素认证(短信/生物识别)+ 令牌 | 增强安全性,符合银行安全要求 | 高风险操作(如转账) | 集成成本较高,需用户设备支持 |
  • 限流算法对比
    | 算法 | 定义 | 特性 | 银行场景适用 | 注意点 |
    |---|---|---|---|---|
    | 令牌桶 | 维持固定大小桶,按速率生成令牌,请求消耗 | 允许突发流量,需等待令牌补充 | 实时交易(登录、转账) | 需计算令牌生成速率(如每秒10个令牌) |
    | 漏桶 | 桶以固定速率“漏”水,请求放入桶中,超容量丢弃 | 限制最大速率,匀速流出 | 查询类API(账户信息查询) | 可能导致突发流量时响应延迟 |
    | 滑动窗口计数器 | 统计固定时间窗口内的请求数 | 简单高效,适合短时间限流 | 热点API(如首页查询) | 需处理窗口滑动问题,避免计数偏差 |

4) 【示例】
请求示例:用户调用转账API,路径/api/v1/transfer,携带JWT令牌(用户ID=1001,角色=普通用户,手机号=138****1234)。处理流程:

  1. 认证授权:网关验证JWT签名,检查用户角色(普通用户)是否可执行转账操作(需权限“transfer:all”),通过。
  2. MFA验证:触发短信验证码(发送到138****1234),用户输入验证码,验证通过。
  3. 限流:检查Redis分布式令牌桶(key=transfer:1001),当前令牌数>0,通过(实时交易限流阈值高)。
  4. 路由:根据路径匹配服务名“transfer-service”,结合Consul健康检查(实例IP:8082健康),选择该实例。
  5. 日志:记录链路ID(trace-abc123),请求时间,响应时间,敏感信息(用户ID=1001,转账金额=1000元)脱敏为“用户ID-1001,金额-1000元”,写入加密日志系统。

伪代码(核心逻辑):

def handle_request(request):
    # 1. 认证授权
    token = extract_token(request.headers)
    if not validate_token(token):
        return 401, "Unauthorized"
    user_role, user_id = parse_token(token)
    if not check_resource_permission(user_role, user_id, request.path, "transfer"):
        return 403, "Forbidden"
    
    # 2. MFA验证(转账等高风险操作)
    if request.path == "/api/v1/transfer":
        sms_code = request.body.get("sms_code")
        if not verify_sms_code(user_id, sms_code):
            return 401, "MFA验证失败"
    
    # 3. 限流
    bucket_key = f"transfer:{user_id}"
    if not check_token_bucket(bucket_key, request.method):
        return 429, "Rate limit exceeded"
    
    # 4. 路由
    service = determine_service(request.path)
    forward_to(service, request)
    
    # 5. 日志
    log_entry = {
        "trace_id": request.headers.get("x-trace-id"),
        "user_id": user_id,
        "path": request.path,
        "method": request.method,
        "response_time": response_time,
        "status": response.status_code,
        "amount": "脱敏金额"
    }
    log_to_elk(log_entry)

5) 【面试口播版答案】
“面试官您好,设计银行微服务架构下的API网关,核心是作为统一安全入口,整合多因素认证(MFA)、基于角色的访问控制(RBAC)、分布式限流、智能路由及合规日志模块。首先,认证授权方面,银行场景需多因素认证,比如用户登录后,先短信验证码验证手机号,再生物识别验证身份,生成JWT令牌,网关验证签名和用户角色(管理员可访问所有账户,普通用户仅自身账户),确保资源访问安全;然后限流,用Redis实现的分布式令牌桶算法,允许实时交易等突发流量但限制总调用次数(比如实时交易每秒10次,查询API每秒50次),动态调整速率防止服务过载;请求路由则根据请求路径结合Consul健康检查,故障时自动切换到健康实例;日志监控方面,记录链路ID、响应时间,敏感信息脱敏后存储在加密的合规日志系统,满足数据安全与审计要求。整体通过模块化设计,保障服务解耦、业务安全与高并发下的性能稳定。”

6) 【追问清单】

  • 问:如何处理管理员与普通用户的资源权限差异?
    答:采用RBAC模型,管理员角色拥有所有账户的访问权限,普通用户仅能访问自身账户,网关在认证后根据角色动态检查资源权限。
  • 问:高并发下如何优化限流算法?
    答:使用分布式令牌桶(Redis),根据服务负载动态调整令牌生成速率(如通过监控服务CPU、内存,自动增加速率),避免固定速率导致突发流量时服务崩溃。
  • 问:网关自身故障时如何保证服务可用?
    答:通过主备部署(如主网关故障时自动切换到备用网关),结合熔断器(如Hystrix)和健康检查,确保网关高可用;同时监控链路状态,故障时自动切换。
  • 问:日志中的敏感信息如何脱敏?
    答:在日志记录前对用户ID、交易金额等敏感字段进行脱敏处理(如替换为“用户ID-XXX”),存储在合规的日志系统,满足银行数据安全要求。
  • 问:多因素认证(MFA)如何集成到认证流程?
    答:对于高风险操作(如转账),在限流后触发短信验证码或生物识别,验证通过后再执行业务逻辑,增强安全性。

7) 【常见坑/雷区】

  • 忽略多因素认证(MFA),仅做用户认证,导致高风险操作安全风险。
  • 限流参数配置不当,如令牌生成速率过低导致服务过载,或过高导致限流失效。
  • 路由不结合健康检查,导致流量分发到故障服务实例,影响用户体验。
  • 日志不记录链路ID或敏感信息脱敏,导致故障排查困难或违反数据安全规定。
  • 忽略网关自身的性能瓶颈,如处理能力不足成为系统瓶颈,影响整体服务响应。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1