网关模式—Gateway

功能

  • 请求路由:客户端直接调用gateway,gateway负责路由转发注册服务上。
  • 服务注册:后段无服务将API注册,gateway负责路由
  • 负载均衡:策略
    • 轮训
    • 随机
    • 一致性哈希
    • 随机均衡
    • 权重负载
    • session粘连
    • 其他
  • 安全特性:支持https,用户鉴权,其他。
  • 灰度发布:针对服务版本或租户等特性做灰度发布。
  • API聚合:将多个后端接口聚合,减少客户端调用次数。
  • API编排:通过编排串接多个API完成特定业务。

    设计要点

  • 可用性:保证高可用

  • 扩展性:灵活扩展
  • 性能:通常使用异步IO模型框架,netty,go,channel等。
  • 安全:加密通道,鉴权。
  • 运维:应用监控,包括容量,性能,异常检测等。
  • 架构:与业务解耦合;服务隔离;

    边车模式

    价值

  • 分离控制与逻辑:分离业务与路由、流控、熔断、幂等、服务发现、鉴权等组件。

  • 适用场景:老系统改造;多语言混合分布式扩展;应用由多方提供。

    分布式锁

    方案

  • redis:setnx key value px expiretime

    • value,全剧唯一,如traceID
    • expiretime,过期自动释放,保证过期内完成计算
  • 悲观锁:先获取锁,再操作,吞吐量低。
  • 乐观锁:版本号实现,适用于多读场景。
  • CAS:比较交换,修改共享资源场景可代替分布式锁。

    要点

  • 排他性、有自动释放方式如超时、高可用持久化、非阻塞可重入、避免死锁,不存在异常无法释放情况、集群容错性,部分鼓掌,容然可用。

    分布式缓存

    模式

  • Cache Aside 常用模式,应用要维护缓存的失效,命中,更新等操作。

  • Read/Write Through,缓存代理更新数据库操作,应用视角只有一份存储。
  • Write Behind Cache, IO加速方式之一,更新操作只在内侧完成,异步进行批量更新数据库。

    异步处理

  • Push模式,中心调度,复杂度高

  • Pull模式,无中心调度,复杂度低
  • Push+Pull 模型

    数据库扩展

    垂直分片

  • 字段拆分,将变化频率不同等字段拆分到不同的表。

    水平分片

  • 哈希算法分,数据离散度高,降低热点可能性。

  • 通过时间范围分片,保证数据连续性。
  • 按照业务种类划分,如数据分类,租户分离等。

    要点

  • 分片要预留足够等空间,避免重新分片。

  • 分片聚合要并行做。
  • 尽可能不做跨分片等事务。