《大型系统应用架构实践》笔记:全球区域化部署与多层路由设计
书籍链接:https://book.douban.com/subject/34782232/ 主要针对第二章的全球区域化部署技术 1 总体架构 基本原则 问题 解决方案 总体架构 2 路由服务 2.1 路由服务架构 透传技术优势: 1、无需在每一层维护一个路由表,不用过多关注路由数据一致性问题。 2、无需每次都调用路由表RPC服务,对RPC服务的依赖过大,调用量过高。 2.2 路由表设计 1、基本模型 类似位图,通过用户id将bitmap对应的位置置为1。但是我们不仅需要存储用户是否存在的信息,还需要存储用户到机房的路由,所以用4个二进制位来存储用户到机房的映射。 前三位:机房标识 最后一位:用户状态 2、分段存储 为了解决ID分布不均匀,存储浪费的问题,采取分段模式进行存储。用户没命中的段为null,不会占用内存。 3、逻辑机房 1、路由信息巨大,机房迁移成本很高。 2、使流量均匀分布。 4、一致性保障 定期MD5进行对比 2.3 路由表更新机制 基于Zookeeper实现,引入“禁写”状态,即用户的路由表更新时,该用户无法进行业务写入,从而确保业务数据的全局一致性。架构如下: 整体流程 2.4 用户路由更新方案 1、确定用户归属机房 通过对各个机房的访问统计,将延迟最少的机房确认为最近的机房。 2.5 多层路由实现 1、统一接入层路由技术 为所有网站用户提供统一的接入点,对多区域进行对等部署,并将用户归属到不同的区域。 方案:Openresty + Lua共享内存 + Redis + ProxyServer 2、服务层路由技术 业务相关,处理不同类型的数据,如:独享数据、共享数据。 1)用户优先级原则,如买家 > 卖家 > 平台运营人员。 2)数据类型及处理方法 只读类型:不需要实时一致;处理:数据异步复制 独享类型:只有一个用户可以对数据进行变更。处理:本地读写 共享数据:多个用户需要共同变更同一条数据。处理:优先级最高的用户区域作为Master,可进行本地读写。非Master区域的用户需要区分情况决定是本地读写还是跨区域读写。 全局共享数据:所有用户的行为都可以改变的数据,对一致性要求较高。处理:使用网络质量最好的机房存放数据,所有用户对全局共享数据的变更都被路由到这个机房。 3、消息层路由 异步调用时,如使用MQ进行调用,需要将消息路由到指定的机房。 ...