考虑一个相当大的网站(200 万+ 页面浏览量/米,用户很多)有 2 个前端服务器:一个在美国的前端服务器,一个在欧洲。两个专用 URL 将访问者带到其中一个服务器上,一个是法语,另一个是英语。两个站点共享完全相同的数据。
什么是最具成本效益的解决方案? (我公司使用的数据库:MySQL)
1/Amazon EC2(美国)上的单个主服务器,以及前端服务器上的从属服务器?
优点:没有主-主代表,这意味着没有数据与自动增量冲突的风险和唯一列上的重复等。
缺点:滞后!在欧洲写作,在美国写作不会太滞后吗? 另一个缺点可能是在 master 死亡的情况下缺乏快速 n 肮脏的解决方案。将奴隶与前台放在同一台服务器上怎么样?
2/两个 Amazon EC2 实例,一个在美国,一个在欧洲,充当主-主复制服务器。在每个前端加上两个奴隶?
Adv:数据的速度和安全性。当然没有负载均衡器,但通过黑客攻击将主服务器切换到另一个似乎微不足道。
Drwbcks:价格。以及 DB 上的腐败风险
3/还有其他解决方案吗?
因为这是我第一次在两大洲使用服务器,我非常感谢向您学习该领域的经验,无论是否包括 MySQL,是否包括 EC2。
谢谢 编码(marshal)
最佳答案
像往常一样,我要说的内容取决于您的应用程序、它如何使用数据库等。您需要问自己:
- 如果您使用现成的软件,其他人在这种情况下做了什么?
- 应用是否需要处理整个数据集,还是可以分区?
- 您的应用是否专为处理多主复制而构建(通常意味着使用自动增量 pk)
- 更新/删除冲突的可能性有多大?费用是多少?
- 读写比率是多少?写作的本质是什么?它们通常是更新操作还是追加操作?
我假设法语服务器在欧洲,而英语服务器在美国?如果您可以对数据进行分区,以便法语站点使用一个数据库而英语站点使用另一个数据库,那么您的情况会更好。即使两个站点都访问两个数据库,因为您不必担心冲突。您甚至可以在每个主服务器上运行两个 mysql 实例,并为两者执行多主复制。
如果你不能分区,我可能会选择#2,但我会指定其中一台机器作为“真正的”主机并将所有写入发送到它以帮助避免数据困惑。这样就可以在紧要关头轻松切换。
如果您对成本很敏感并且打算在前端服务器上运行副本,那么只需在前端服务器上运行主数据库即可。你以后总是可以把它拉下来。在读取负载相同的情况下,副本通常比主服务器具有更高的 CPU/IO 成本:它们必须串行执行写入,这确实会把事情搞砸。
另外,不要为您的数据库使用 m1.small 实例。或者至少留意你的表现。 m1.smalls 的功率明显不足,如果您观看 top
,您会注意到您的 CPU 时间的很大一部分被管理程序窃取了。我推荐 c1.medium。
关于MySQL 复制 - 一个网站,许多服务器,不同的大陆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/431025/