MySQL数据库异地访问速度优化~

2012-08-13 22:19:34 +08:00
 xatest
不清楚这个问题是否适合发在Velocity这个节点,本意是想对数据库服务的访问速度优化。
我有一个服务,对中国和美国的用户都提供服务,其中美国是主要市场。分别在一台国内的VPS和AWS美国东区节点的EC2上部署相同的服务。之前是没有数据库的服务,最近增加了MySQL数据库设计,需要支持用户在两地都可以快速地访问服务(读写数据)。请教一下要怎么做才能保证两地都可以快速访问?

先说下我目前想到的几个方案,抛砖引玉:
1. MySQL在两地都部署,互为主备,进行热备,保持数据一致。好处是两边用户都能很快访问到数据,缺点是这之间的数据同步感觉不可靠,速度也慢,一致性很容易出问题。
2. 只在AWS美国东部节点部署数据库,中国服务器与美国服务器之间加一台代理(保证传输速度很快),中国的数据操作通过代理透传(就像翻墙)到美国服务器。优点是一致性好解决,缺点是中国用户的访问速度有一点影响。
3007 次点击
所在节点    Velocity
32 条回复
xatest
2012-08-13 22:24:42 +08:00
补充一下现在的几个延时数据。
我ping中国服务器是150ms;
我ping美国服务器是400ms;
美国服务器ping中国服务器430ms;
美国服务器ping youtube.com 3ms。
我希望是有种方案能把访问时延控制在200ms以内。
eric_q
2012-08-13 22:29:00 +08:00
你 ping 中国服务器都能 150ms? 服务器是托管在哪里的...
KiseXu
2012-08-13 22:48:40 +08:00
我ping东京的vps才一、二百延迟
kingwkb
2012-08-13 23:04:50 +08:00
和我们情况差不多,我们把网站及数据库都放ec2,在国内只放个squid或者nginx代理,国内访客解析到国内的代理上面,国外访客直接访问ec2
xatest
2012-08-13 23:14:39 +08:00
@eric_q 中国服务器托管在西部数码。
xatest
2012-08-13 23:15:36 +08:00
@KiseXu 我现在的主要问题倒不是选择在哪里部署,而是在已有的2个部署节点上怎么做可以让数据访问更快~
HowardMei
2012-08-13 23:48:54 +08:00
我早先问过一次同样问题: /t/43356 好久么人解答,研究了一圈,还是觉得这个网络延迟问题很难搞,用Memcached分布式缓存是一条路子,原来感觉好复杂的样子。不过最新发布的MySQL 5.6.6已内置对Memcached支持,据说解决了缓存和数据库不一致的问题,值得试下。
HowardMei
2012-08-13 23:56:07 +08:00
@kingwkb 这个好,国内访问性能有影响么?网站动态程度咋样,会不会比较适合静态资源?
Livid
2012-08-14 05:55:44 +08:00
可以考虑在一个地方部署 DB,然后在 DB 的上层实现 http 的 API,最终让美国和中国的用户访问这个 API,而不是直接访问数据库。
Livid
2012-08-14 05:56:45 +08:00
@xatest
@HowardMei

这类关于网络服务性能优化的主题非常适合 /go/velocity ,期待能够在 V2EX 见到更多此类话题的讨论。
ElmerZhang
2012-08-14 07:53:49 +08:00
@HowardMei MySQL 的 Memcached 不是解决楼主这问题的。
楼主还是把数据库放国外,然后在国内架一个比较快一点的代理好。
把代理放在离国际出口较近的机房。
HowardMei
2012-08-14 11:34:28 +08:00
@ElmerZhang 传统Memcached缓存方式对纯动态网站确实没啥改善,可是最新Feature支持直接访问InnoDB,把Mysql当NoSQL用,等于@Livid所说的API,现在没有Benchmarking数据,但理论上,简单K-V省去SQL查询,复杂关系查询可并行SQL,缓存与数据库内生一致,都会大幅提高性能。

http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html

用反向代理缓存页面,让APP和DB服务器处于相同Datacenter,只是避开问题并没有解决问题,我不清楚反代对动态网站性能有多少影响,但不觉得更有优势。
HowardMei
2012-08-14 11:54:38 +08:00
直接用Memcached Cluster,不用转成HTTP API,挺好的,就是1MB限制比较那个。
ElmerZhang
2012-08-14 11:57:26 +08:00
@HowardMei 楼主需要解决的是跨国的网络问题,根本不是数据库内部的数据一致性问题,如果网络没问题,完全可以两个 IDC 做双主。这和什么动态静态用什么数据库没一毛钱关系。
MySQL 5.6 的 Memcached 插件主要是把协议改为简单的 Memcached 协议,省去 SQL 分析优化等复杂步骤实现更高效的读写,跟缓存神马的关系不大。
xatest
2012-08-14 12:13:49 +08:00
@kingwkb @ElmerZhang 国内代理有没有推荐?
zbgzao
2012-08-14 12:19:17 +08:00
这个问题主要还是国外访问国际网络常会抽风, 这才是最头疼的问题.
不知你们是什么样的一个场景, 如果实时性不高的话, 那是很好解决的.
kingwkb
2012-08-14 12:35:07 +08:00
@xatest
@HowardMei 我们只是这样规划,网站大概要1个月后上线,1周后会做测试
coagent
2012-08-14 13:11:12 +08:00
内容缓存上,Memcached 和反向代理都对性能有帮助。

HK 到美国的速度比较不错,国内到 HK 速度又很好,可以考虑 HK 和 USA 同步
eric_q
2012-08-14 13:24:03 +08:00
Linode Tokyo
或者……上海电信
ElmerZhang
2012-08-14 13:48:40 +08:00
@xatest 国内的顶级机房据说都被各大公司抢光了,小公司有钱也买不到机位。
新浪微博主机房用的北京永丰电信机房,到国外速度还不错,但是网上搜了一下貌似没有这个机房的服务器托管信息。
@coagent 的方案可以考虑。

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

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

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

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

© 2021 V2EX