Mysql 用于扩展后端的正确体系结构

Mysql 用于扩展后端的正确体系结构,mysql,django,google-cloud-platform,cloud,google-compute-engine,Mysql,Django,Google Cloud Platform,Cloud,Google Compute Engine,我有3个django应用程序的实例,托管在谷歌计算引擎上,分布在全球3个不同的地方。我正在自动调整我的应用程序,以便在cpu为70%时设置更多实例。我还设置了一个loadbalancer,将流量路由到一个关闭且运行正常的实例。这一切都很好,但我不知道我的数据库是如何随着我的应用程序一起扩展的,在我的例子中,我有一个mysql实例,它存储了所有实例中的所有数据,但我不确定如何扩展它,因为我希望所有实例都可以使用相同的数据。只有一个会带来很多问题,比如从世界另一个地方访问它的实例的延迟很高,以及所有

我有3个django应用程序的实例,托管在谷歌计算引擎上,分布在全球3个不同的地方。我正在自动调整我的应用程序,以便在cpu为70%时设置更多实例。我还设置了一个loadbalancer,将流量路由到一个关闭且运行正常的实例。这一切都很好,但我不知道我的数据库是如何随着我的应用程序一起扩展的,在我的例子中,我有一个mysql实例,它存储了所有实例中的所有数据,但我不确定如何扩展它,因为我希望所有实例都可以使用相同的数据。只有一个会带来很多问题,比如从世界另一个地方访问它的实例的延迟很高,以及所有到这个mysql实例的请求


如何改进我的架构

在生产环境中,数据库通常存储在不同的服务器上,这些服务器可以独立进行负载平衡。您是否考虑过建立MySQL集群

干杯


ji

除非您计划设置异步复制并仔细地在同步和异步请求之间划分代码,否则您可能会发现在单个区域中运行实例要容易得多

虽然在多个区域中运行无状态Web服务器很容易,但像MySQL集群这样的解决方案假设数据库实例都非常接近,或者提交延迟开始增加。在这种情况下,将实例放在不同的区域意味着您将面临每一次提交都大于100ms的光速延迟。除非您可以在区域之间清晰地划分数据,否则任何写入请求都可能更快地进入数据库区域中的Web服务器


如果您特别关心延迟,那么可以将读取请求发送到本地实例,而只将写入请求路由到中心服务,但设置起来可能更复杂。如果要执行此操作,可能需要为读/写数据库连接使用不同的用户和密码,并禁止读用户执行写操作。这可以防止在使用语句级复制时出现许多令人兴奋的MySQL故障模式,因为写入操作意外地针对副本而不是主副本执行。

上述场景的一个额外改进是将所有静态资产(图像、css、js)存储在CDN中。通过这种方式,网站的很大一部分将存储在用户附近,并且比等待从后端检索它们更快地得到服务。