对于具有大量大规模部署实践经验的 DBA 来说,这是一个问题。
我们正在尝试构建一个延迟非常低的应用程序。(我们真的想创造最好的用户体验,在这种情况下延迟很重要。)
该应用程序基本上是一个查询数据库 (OrientDB) 的 RESTful Node.js 服务器。静态内容/文件托管在其他地方。对象主要在客户端转换为 UI。
我们计划使用 Amazon EC2 来托管 Web 服务器和数据库。
高可用性也很重要。
目前,成本不是主要的决定因素。
你会推荐什么架构?
这里有2个选项,也许还有更多:
将 Web 服务器(在本例中为 Node.js)放在与数据库相同的 EC2 实例上。我们将有多个这样的实例来实现可用性和负载平衡。过去,我用它来减少大容量的延迟,但这些系统不必大幅扩展。也是在安置组之前。
或者,在与 REST Web 服务器不同的实例上拥有数据库。
背景
数据库大小约为 50 GB,我们需要更好的解决方案。预计流量将在 8 个月内达到该数量的 10 倍(500 GB 数据库)。
它大约是 20% 的写入和 80% 的读取。现在每秒大约有 1000 个查询,而且这个速度还在增加。
“将网络服务器(在本例中为 Node.js)放在与数据库相同的 EC2 实例上”
永远不要把你的应用服务器和数据库服务器放在一台机器上。由于您使用的是 EC2,因此亚马逊上有一些名为“Architecting on AWS”的白皮书,其中有一个部分称为可扩展性。你所有的应用服务器都应该是无状态的。这意味着它不应该是任何机器上存储的数据,因此您可以根据您的自动扩展组轻松启动虚拟机(从您的 AMI),或者在流量下降时摆脱它。
数据库服务器通常有自己的可扩展方式,如主从或副本集。因此,它们不应该在您的应用服务器(自动扩展或 ELB)的同一组中。
现在是网络延迟,实际上最近我在 AWS VPC 上测试内部网络速度检查,并没有那么糟糕。根据您的 EC2 类型,网络具有低中型和高级网络类型,但在内部网络方面,它的速度非常快。它将在 DNS 解析时间、HTTP 请求时间、HTTP 响应时间等范围内。您应该更担心 EC2 机器上的查询时间,方法是选择 SSD 卷(可能是配置您的 EBS 卷)并可能 RAID 您的 EBS 卷以加快速度读/写。当涉及到架构中的数据库时,瓶颈通常是 I/O,而不是网络延迟(除非您正在使用所有带宽,因此您需要更多的辅助服务器,以便您的应用服务器可以直接从中读取)。
有问题可以私信我,祝你好运