【发布时间】:2014-01-24 14:42:20
【问题描述】:
我正在构建一个白板 Web 应用程序,其中包含独立的客户端“房间”,这些客户端运行 Amazon EC2 实例(目前只有一个)。命令通过 websockets 发送到 PHP 服务器,该服务器将所有命令存储在 SQL 数据库中。
到目前为止,我一直在使用 Google Cloud SQL。我的计划是学习如何使用 EC2 进行扩展并让所有实例使用相同的远程数据库。我了解到,由于远程 SQL 服务器的 200 毫秒写入延迟与本地 SQL 服务器的 0.5 毫秒写入延迟相比,这将不起作用。每次命令到达时,服务器都会进行写入。
我是可扩展性和分布式系统的新手。我的直觉告诉我,如果我的 EC2 和 RDS 实例位于同一区域,我要么需要使用 Amazon RDS 并希望有毫秒级的延迟,要么在 EC2 实例上本地使用 SQL。我倾向于后者。这是我的问题:EC2 是弹性。当我需要删除一个实例时会发生什么?
我现在所能想到的就是以某种方式将 SQL 数据从每个 EC2 实例复制到主实例(甚至可能是 Google Cloud SQL!)。换句话说,每个“房间”的所有读/写都发生在本地,并最终复制到主服务器以进行长期存储。如果一个“房间”在一周后重新打开,另一个 EC2 实例可以从主服务器获取数据,在本地使用它,并在销毁之前将更改复制回来。
我的方法听起来正确吗?这里的复制是正确的概念吗?如果是这样,对我正在尝试做的事情的支持已经存在多少?也就是说,我是否需要设置一个主服务器来管理 EC2 实例并手动分发/收集 SQL 数据(100% 自定义实施),或者是否存在用于 SQL 甚至 EC2 实例复制/管理的现有库/机制?如果我的方法是错误的,还有什么更好的方法?这是我不知道自己研究什么的时候之一。谢谢!
【问题讨论】:
-
如果您担心数据库写入,可能需要考虑使用 AWS Elasticache。您仍然可以使用 RDMS 进行存储。
标签: sql amazon-web-services amazon-ec2 scalability distributed