我在全球3个不同地点的Google Compute Engine上托管了我的django应用程序的3个实例。当cpu为70%时,我正在自动调整我的应用程序以设置更多实例。我还设置了一个负载均衡器,用于将流量路由到一个关闭且运行正常的实例。这一切都很好但是我不知道我的数据库是如何与我的应用程序一起缩放的,在我的情况下我有一个mysql实例存储来自所有实例的所有数据,但我不知道如何缩放它我希望所有实例都可以使用相同的数据。只有一个会出现许多问题,例如从世界其他地方访问它的实例的高延迟以及转发到这个单个mysql实例的所有请求。
我怎样才能改善我的架构?
答案 0 :(得分:1)
除非您计划设置异步复制并在同步和异步请求之间仔细划分代码,否则您可能会发现在单个区域中运行实例要容易得多。
虽然在多个区域中运行无状态Web服务器很容易,但像MySQL集群这样的解决方案假设数据库实例都非常接近,或者提交延迟开始上升。在这种情况下,将实例放在不同的区域意味着您将与每次提交的光延迟速度> 100毫秒竞争。除非您可以在区域之间对数据进行干净的分区,否则任何写入请求都可能更快地转到数据库区域中的Web服务器。
如果您特别关注延迟,则可以将读取请求发送到本地实例,并仅将写入请求路由到中央服务,但这可能会更复杂。如果您这样做,您可能希望为读取与写入数据库连接使用不同的用户和密码,并禁止读取用户执行写入操作。当写入意外地对副本而不是主副本执行时,这可以防止在使用语句级复制时出现许多令人兴奋的MySQL故障模式。
答案 1 :(得分:0)