全球化部署需要解决以下几个问题:
第一,业务核心单元的梳理。这些核心单元必须可以裁剪或添加。
第二,核心单元必须可以快速部署到国防的机房,最好能够一键部署,即首先要实现单元化部署。
第三,实现全球数据连通。
第四,处于研发效率的考虑,部署在全球的业务系统要有良好的定制型和扩展性。
1.国际化的背景
国际化一般有两种类型:
一种是进口业务,像天猫国际和全球购;
一种是出口业务,像速卖通和海外。
系统建设存在的两种思路:
a、将国内的系统完整的复制过去在本地重新搭建一套,实现本地化运营,两边的系统相互独立,数据不通。
b、只在本地建设个性化的系统,当地的系统和国内数据是打通的,整体还是一套系统。
2.面临的技术挑战
业务挑战:一是它必须采用就近访问原则,必须要保证用户体验;二是它不能跨区域进行大流量的并发读写,因为延时比较大,对系统的吞吐量会有致命的影响。
达到目标:
a.单元化
b.一套代码、全球部署
c.服务本地、数据共享
d.区域容灾、全球多活
满足条件:
a.要能共享和快速复制全球化基础设施
b.基础业务数据要能互通
c.业务系统要做抽象、提升可扩展性,能快速支撑业务发展。
3.单元化
何为单元化
所谓单元化就是按照某种维度对数据进行水平拆分,拆分后数据分布在不同地域并且对数据的更新是单写的。
单元化解决什么问题
解决物理资源限制的问题
解决高可用的问题
解决国际化、全球化业务问题。
单元化数据分片方案
a.中心-多单元模式
考虑到多单元建设的成本问题,不可能也没必要把所有系统都单元化,只需要把最小的核心系统单元化就能达到目的,即大部分业务系统都放在中心单元,再对中心单元的系统做冷备。
b.多机房 A-A模式
让同一业务系统在多机房同时提供服务。
要做到这一点,必须做这两件事:
第一,按照某个维度对数据进行划分:比如是司机还是乘客;
第二,解决数据层的异地复制和一致性问题:数据库双向复制和一致性校验。
c.数据按照什么维度划分
典型的电商数据一般分为买家数据、卖家数据。
遵守的规则:
就近访问、Hash取模、对用户建路由表
数据漫游问题
4.数据路由方案
主键ID做上标识
设置路由表
trace透传
路由模式:
中心模式,所有接口都回中心单元。
单元模式,按照单元化原则进行路由的接口,都需要被路由到正确的单元完成。
混合模式,表示路由原则可以是本单元优先,如果本单元不存在回中心单元调用。
5.接入层路由
基于多域名跳转
基于CDN代理
6.服务层路由
需要解决三个问题:哪些服务需要路由;单元内服务如何路由;单元之间的服务如何路由。
7.数据层路由
包括三个部分:对数据写入DB做最后一层的正确性校验;做DB之间的数据复制;不同机房之间Cache中的数据的一致性问题。
8.Sequence ID的冲突问题
以下几种解决思路:
基于一个全局统一的Sequence生成器。
提前预设分段,比如A库用奇数,B库有偶数。
设置起始值加步长的方式,并且基于数据库表做更新。
9.异地多活
当某个单元机器发生故障时,需要把这个单元的用户数据切换到中心或者其他单元,切换过程中,最重要的是保证数据的正确性。因此,必须按照一定的步骤来实现:
禁写要切换的用户请求。
送消息的路由规则。
推送默认的路由规则。
关闭之前设定的用户禁写规则
10.多语言问题
多语言文案的解决方案
多语言的存储
实时翻译引擎
11.多时区问题
解决方案:
使用UTC时间
使用本地时间
使用同一时区
12.全球数据同步与数据路由
数据复制
各国对数据的保护政策
13.全球化部署中遇到的坑
脏数据、路由规则不一致、路由规则延迟生效、服务接口改造遗漏、应用层绕过路由规则直接写数据库、MySQL同步数据错误、数据同步故障、中心-单元网络故障
推荐阅读:
<<<《大型网站技术架构演进与性能优化》之分布式改造[一]
<<<《大型网站技术架构演进与性能优化》之无线时代下的构架演进[二]
<<<《大型网站技术架构演进与性能优化》之大中台小前台[三]
<<<《大型网站技术架构演进与性能优化》之代码级优化[五]
<<<《大型网站技术架构演进与性能优化》之合并部署[六]
<<<《大型网站技术架构演进与性能优化》之大秒系统的极致优化思路[七]
<<<《大型网站技术架构演进与性能优化》之资源调度优化[八]
<<<《大型网站技术架构演进与性能优化》之大型网站的稳定性建设[九]