概要随着业务的快速发展,对于很多公司来说,构建于单地域的技术体系架构,会面临诸如下面的多种问题:基础设施的有限性限制了业务的可扩展性;机房、城市级别的故障灾害,影响服务的可持续性 。
为解决遇到的这些问题,公司可以选择构建异地多活架构,在同城/异地构建多个单元(业务中心) 。各个业务单元可以分布在不同的地域,从而有效解决了单地域部署带来的基础设施的扩展限制、服务可持续性 。
【异地多活高可用架构设计】异地多活是近几年比较热门的一个话题,那么在实际业务中什么时候需要去做这件事?如何去做?做的时候需要考虑什么?
何时去做?
个人感觉取决于以下几个方面:
- 业务发展
- 基础设施状况
- 技术积淀
目前在网上搜索到的异地多活方案来看,基本都是阿里、饿了么、京东、微博这些互联网大厂的实践,这些大厂的方案有一个共同点就是:大量的自研组件,来做相关的数据同步,业务切分等等,那么,对于很多传统企业或者相对小一些的企业,应该如何来做这件事?
- 根据业务特性借助合适的公有云服务
做的时候,需要注意什么?
- 真正需要做异地多活的业务有哪些?
- 基础设施如何?
- 对于不可用时间的容忍程度是多少?
- 在所有的系统中用户中心都是核心业务,因为它是进入其它很多业务前提 。
- 我们这边IDC不是很稳定,之前发生过几次机房大规模故障,比如机房网络挂了,整个机房对外不可用了 。
业务梳理用户中心从整体来看,对外主要提供:注册、登陆、查询用户信息等服务 。这些服务又有以下几个特点:
- 登陆的优先级最高
- 事务性要求低
- MySQL:用户数据存储
- redis:Authorization Code、短信验证码、账号锁定、access token等的存储
- Zookeeper:Dubbo依赖
目标
一期目标
当北京机房出现故障的时候,可以一定时间内把流量切到青岛机房这边,保证用户中心核心服务的基本可用 。
二期目标
用户中心通过异地多活,实现高可用(需要集团智能DNS支持) 。
架构设计
一期架构
当北京机房发生故障的时候,可以把流量快速切换到青岛这边,以保障用户中心核心服务可用 。
具体方案如下:
- 通过otter近实时的将北京机房核心业务数据同步到青岛机房 。
- 青岛机房部署Redis、ZooKeeper等中间件 。
- 青岛机房部署用户中心的核心应用(实例正常部署、运行,只是平时不会有访问) 。
文章插图
可以达到的效果:
- 当北京机房出现故障的时候,可以在一定时间内把流量切到青岛机房这边,保证用户中心核心服务的基本可用,但此时已登录用户需要重新登录 。
- 一定时间:取决于DNS修改ip时间+DNS TTL时间,目前来看TTL是10分钟,人工修改ip应该很快,所以一定时间是10~20分钟 。
- 北京机房非故障期间,青岛机房的机器,仅做数据库同步,存在一定的资源浪费 。
- 当北京机房出现故障,流量切换到青岛机房后,只能保证登陆这一核心服务的可用 。对于注册等需要修改数据库的服务,均不支持,如果在此期间访问这类服务,会发生异常 。
二期的目的就是修正一期架构的缺点,通过异地多活,实现高可用 。
二期青岛机房会替换为阿里云机房 。
具体方案如下:
- 通过阿里云DTS服务实现两地机房数据库同步,保证北京、阿里云数据的近实时一致性 。
- 北京、阿里云两地机房均提供在线服务,提高资源利用率 。
- 梳理服务优先级,修改应用代码,支持服务降级 。
- 当某个机房(阿里云或者北京)出现故障的时候,通过DNS服务把流量切换到另一个机房 。
- 如果两地部署的时候,没有冗余一定硬件资源,则需要实施服务降级 。
推荐阅读
- 梦见自己捞到很多活鱼 梦见自己捞了好多活鱼还捞到一条蛇
- 高可用集群系统如何防止脑裂
- 谷歌地图诡异地点坐标 谷歌地图恐怖的地理坐标
- 实战异地组网 零遁智能网关使用体验
- 多晒太阳可能比同龄人多活6年!跟着这样晒效果更好
- 异地恋这么苦,你还在坚持吗?
- Soul高可用网关:配置缓存三大同步策略
- 使用 Kind 在 5 分钟内快速部署一个 Kubernetes 高可用集群
- 2022年清明节北京学生放假能去异地吗,清明节学生出北京要不要报备
- 刀具怎么快递回家 异地买的刀具怎么带回家