服务 API 全球访问应该怎么部署

2019-09-04 11:42:00 +08:00
 lllllliu

目前有一款应用的 API 是面向全球的

我自己想的部署方案是

  1. 国内外主机服务数据都分离,通过 DNS 智能区分海内外。

  2. 国内外多节点部署,DNS 解析,但是数据中心实时同步。

  3. 国内外只用一个香港或其他地区的国外主机。

第一个感觉有时候会出问题,因为用户在国内注册的话在国外就用不了,不符合本应用的需求。

第二个感觉同步起来会慢,虽然读>写。

第三个感觉对很多地区的用户不友好比较慢。

emmmm,好纠结呀,大家还有没有其他的方案呀。

文件上传下载因为用了云存储可以部署多节点和 CDN 加速所以很方便。。。 就是 API 这边和数据同步这边比较脑袋大。

问题就在 UC 同步这里,不知道现有的方案全球多点 MySQL 实时同步的可行性和速度上面问题大不大。

也想过用云数据库,貌似木有找到自己配置从服务器在国外的这个功能。

CDN 也想过,可是只能缓存一些 GET 的,其他请求还是慢呀。

ps:虽然目前应用使用人数预估的很少,但是要打好招牌呀~~~要让国际友人也用的虚浮。

4410 次点击
所在节点    程序员
22 条回复
upday7
2019-09-04 12:02:42 +08:00
关注 ....
swulling
2019-09-04 12:13:35 +08:00
不存在全球多点 MySQL 实时同步这个东西。

你可以全球都放满从库,读请求可以读从库,有同步延迟(秒级别往上,看你能不能保障同步的链路)
写请求只能写一个地点的主库
opengps
2019-09-04 12:13:54 +08:00
套用全球加速的 cdn
msg7086
2019-09-04 12:41:03 +08:00
@swulling 姑且是有 Galera 集群这样一个东西的。

@lllllliu 建议先考虑:预算和期望延迟。
比如说中国到美西延迟可以控制在 180ms 内,美西到欧洲大多也能在 180ms 内。
如果不考虑非洲的话,放在美西是个折中的方案。
预算好的话弄条 CN2 岂不美哉。

然后两者可以双管齐下,比如美西和美东双主集群,美西管国内,美东管欧美。
swulling
2019-09-04 12:56:38 +08:00
@msg7086 Galera 解决不了全球多点实时同步,全球 200ms 起的延时他扛不住。如果真放全球,还要实时强一致,性能就弱到根本没法用了.

Galera 一般是在同城搭建多活集群用
swulling
2019-09-04 13:07:49 +08:00
理论上,全球多点实时( ms 级)同步是违反物理学规律的,物理延迟就在哪里放着,咋个突破?

这方面做的最好的关系数据库是 Google 的 Spanner,目前还没有相媲美的开源实现。但是 Spanner 的写事务也无法突破光速,也是比较慢的,当然 Spanner 有批量事务来缓解这种速度
lllllliu
2019-09-04 13:09:36 +08:00
@swulling 双主多从可以嘛。国外一个写入节点,国内一个写入节点,其他地域的都是从。
@msg7086 CN2 前期预算是不可能的啦。
lllllliu
2019-09-04 13:10:28 +08:00
@swulling 木有事务关系,可以存在一定的延迟,只要保证 UC 是一套就行
swulling
2019-09-04 13:15:49 +08:00
@lllllliu 能接受延迟就找一个网络质量最好的地方做单主呗。

Google 的 Spanner 叼一方面是别人架构 NB,另一方面也是 Google 有全球多冗余专线保证跨洲的链路质量。

你只要在国内到国外租一根专线,就不受公网的质量低下影响,单主也是很好的

不过专线很贵就是了,而且国内使用有很严格的政策要求
lllllliu
2019-09-04 13:19:41 +08:00
@swulling 好的,我前期先试验一下单主多从,公司绑定 HuaWeiYun
mornlight
2019-09-04 13:25:48 +08:00
个人想法,「全球加速」从 API 层入手,而不要在后端服务上做同步,小应用后端只在一个地方就行。想办法加速跨境回源的过程。
V2EX 本身就是你说的这种场景。
msg7086
2019-09-04 13:38:40 +08:00
@msg7086 不需要全球集群,只需要减少部分延迟即可。
200ms 的距离不需要把 200ms 全压在集群上,也是有集群解决 100ms,剩下 100ms 让用户吃掉的选择的。
lllllliu
2019-09-04 13:40:01 +08:00
@mornlight 好的。我去研究下 CDN 和代理
Moker
2019-09-04 13:42:12 +08:00
平均响应时间 现在是多少 敏感吗?不敏感的话直接可以套层国内厂商 CDN (预防被 Q ),海外再用一层 CDN,比如 Cloudflare 或者 GCP,用户进入第一跳网络之后全部会走他们自身的内部网络回到源站(海外),当然也可以直接第一步,具体看测试结果和应用场景。
lllllliu
2019-09-04 14:57:34 +08:00
@mornlight 哎,大锅,有木有 V2 后端架构的相关文章和资料呀,搜了一下木有找到哎。
@Livid 大大锅~~求助一哈,请问 v2 的后端是怎么部署的呀。
rxzxf1993
2019-09-04 14:59:49 +08:00
一般来说 国外比如新加坡一个节点 然后 和国内同步 双方互通
Livid
2019-09-04 17:09:44 +08:00
如果你要找可以全球同步的边缘数据库,还真有类似这个概念的产品:

https://azure.microsoft.com/en-us/services/cosmos-db/
vveexx
2019-09-04 17:25:11 +08:00
如果这些服务不是高度中心化的,多放几个节点,这几个节点都是 master,然后自己做数据同步应该就够用了吧。毕竟用户不可能 200ms 出国...
shixinyu
2019-09-04 17:26:20 +08:00
AWS Global Accelerator 了解下。
MMMMMMMMMMMMMMMM
2019-09-04 17:27:25 +08:00
不太清楚楼主的调用场景;

如果仅有部分数据为高频调用
可以买各大厂带全球加速的对象存储服务,一般比数据库便宜不少。
缓存一下这些高频调用的结果,剩下低频调用的就直接走直连,慢点就慢点把。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/597805

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX