全国直销电话:4006-854-568
IT-technology
以人为本,众志成城,以“用户至上”.“服务上乘”为原则,
追求产品和服务高质量,努力实现与客户之间真诚有效的沟通,
不断地圆梦、奔跑与腾飞。
新闻动态   NEWS
ES+Redis+MySQL的高可用架构设计-北京赛维博信科技发展有限公司
来源:本人摘自网络,如有侵权请联系删除 | 作者:毛豆 | 发布时间: 2023-09-25 | 858 次浏览 | 分享到:


双中心 MySQL 集群搭建好后,我们进行了压测,测试下来,秒并发能达到 2 万多,平均耗时在 10 毫秒内,性能达标。

| 会员主库平滑迁移方案

接下来的工作,就是把会员系统的底层存储从 SqlServer 切到 MySQL 上,这是个风险极高的工作。


主要有以下几个难点:

  • 会员系统是一刻都不能停机的,要在不停机的情况下完成 SqlServer 到 MySQL 的切换,就像是在给高速行驶的汽车换轮子。

  • 会员系统是由很多个系统和接口组成的,毕竟发展了 10 多年,由于历史原因,遗留了大量老接口,逻辑错综复杂。这么多系统,必须一个不落的全部梳理清楚,DAL 层代码必须重写,而且不能出任何问题,否则将是灾难性的。

  • 数据的迁移要做到无缝迁移,不仅是存量 10 多亿数据的迁移,实时产生的数据也要无缝同步到 MySQL。另外,除了要保障数据同步的实时性,还要保证数据的正确性,以及 SqlServer 和 MySQL 数据的一致性。


基于以上痛点,我们设计了“全量同步、增量同步、实时流量灰度切换”的技术方案。


首先,为了保证数据的无缝切换,采用实时双写的方案。因为业务逻辑的复杂,以及 SqlServer 和 MySQL 的技术差异性,在双写 MySQL 的过程中,不一定会写成功,而一旦写失败,就会导致 SqlServer 和 MySQL 的数据不一致,这是绝不允许的。


所以,我们采取的策略是,在试运行期间,主写 SqlServer,然后通过线程池异步写 MySQL,如果写失败了,重试三次,如果依然失败,则记日志,然后人工排查原因,解决后,继续双写,直到运行一段时间,没有双写失败的情况。


通过上述策略,可以确保在绝大部分情况下,双写操作的正确性和稳定性,即使在试运行期间出现了 SqlServer 和 MySQL 的数据不一致的情况,也可以基于 SqlServer 再次全量构建出 MySQL 的数据。


因为我们在设计双写策略时,会确保 SqlServer 一定能写成功,也就是说,SqlServer 中的数据是全量最完整、最正确的。


如下图所示:

 讲完了双写,接下来我们看一下“读数据”如何灰度。整体思路是,通过 A/B 平台逐步灰度流量,刚开始 100% 的流量读取 SqlServer 数据库,然后逐步切流量读取 MySQL 数据库,先 1%,如果没有问题,再逐步放流量,最终 100% 的流量都走 MySQL数据库。


在逐步灰度流量的过程中,需要有验证机制,只有验证没问题了,才能进一步放大流量。

 

服务热线

1391-024-6332