高负载应用程序的数据库可扩展性?

DB Scalability for a high load application?

我看到应用程序具有集群 Web 服务器(例如 10 到 20 个服务器)以具有可扩展性,他们可以在其中分发 在网络服务器之间加载。但我一直看到所有网络服务器都使用单个数据库。

现在考虑任何电子商务或铁路 Web 应用程序,其中数百万用户在任何时间点访问该应用程序。 为了在网络服务器端扩展,我们可以有服务器集群,但我们如何扩展数据库?因为我们不能像多个网络服务器那样拥有多个数据库,因为一个 dB 的状态与另一个不同 :)

更新:- 在关系 DBMS 中缩放数据库是不可能的,但只能在 NO SQL 数据库中进行,例如 mongo 数据库等?

数据库端有两种不同的可伸缩性。一种是读取可扩展性,另一种是写入可扩展性。您可以通过垂直缩放来做到这两项,这意味着在某种程度上添加更多 CPU 和 RAM。但是,如果您需要扩展超过单台机器限制的非常大的数据,您应该使用只读副本来满足读取可扩展性的需要,并使用分片来实现写入可扩展性。

分片不像将一些实体(鞋子)放到一台服务器上,而将其他实体(T 恤)放到另一台服务器上那样工作。它的工作原理就像将一些鞋子和一些 T 恤放到一台机器上,然后对其他实体也这样做。

大容量数据管理的另一种解决方案是使用与您的示例更相似的微服务。我的意思是为鞋子提供另一种服务,为 T 恤提供服务。使用微服务,您可以将代码和数据分配给不同的项目以及不同的应用程序和数据库服务器。因此,您可以以不同方式处理数据不同部分的可伸缩性。