我有我的django应用程序的3个示例托管在谷歌计算引擎上,分布在世界各地的3个不同的地方。我正在自动缩放我的应用程序,以便在cpu为70%时设置更多示例。我还设置了一个负载均衡器,将流量路由到一个关闭且正常工作的示例。这一切都很好,但我不知道我的数据库是如何随着我的应用程序扩展的,在我的情况下,我有一个mysql示例存储所有示例的所有数据,但我不知道如何扩展它,因为我希望相同的数据可用于所有示例。只有一个示例会带来很多问题,比如从世界的另一个地方访问它的示例会有很高的延迟,所有的请求都会发送到这个mysql示例。
如何改进我的架构?
2条答案
按热度按时间nnt7mjpx1#
除非您计划设置异步复制并在同步和异步请求之间仔细划分代码,否则您可能会发现在单个区域中运行示例要容易得多。
虽然在多个区域中运行无状态web服务器很容易,但像mysql集群这样的解决方案假设数据库示例都非常接近,或者提交延迟开始增加。在这种情况下,将示例放在不同的区域意味着每次提交都会遇到大于100ms的光速延迟。任何写入请求到数据库区域中的Web服务器的速度都可能更快,除非您可以在区域之间清晰地划分数据。
如果您特别关心延迟,可以将读取请求发送到本地示例,而只将写入请求路由到中心服务,但设置起来可能更复杂。如果要执行此操作,可能需要为读/写数据库连接使用不同的用户和密码,并禁止读用户执行写操作。这可以防止在使用语句级复制时,在对副本而不是主副本意外执行写操作时出现许多令人兴奋的mysql故障模式。
qyuhtwio2#
在生产环境中,数据库通常存储在不同的服务器上,这些服务器可以独立地进行负载平衡。你考虑过建立一个mysql集群吗?
https://dev.mysql.com/downloads/cluster/
干杯,
纪