web-server – 如何在多个地理位置不同的服务器上托管单个网站

web-server – 如何在多个地理位置不同的服务器上托管单个网站,第1张

概述我目前有2台服务器,使用cPanel / WHM.第一个是在伦敦托管的VPS(我们称之为“国际”),第二个是位于我国的专用服务器(我们称之为“本地”). “本地”将具有无限的本地带宽,但它只有1Mbps的国际带宽. 我需要在两台服务器上托管一个网站(或者可能是多个网站),并根据其来源国家为访问者提供服务.我的意思是,当访问者来自我自己的国家时,数据将从“本地”提供,如果访问者来自任何其他国家,则数 我目前有2台服务器,使用cPanel / WHM.第一个是在伦敦托管的VPS(我们称之为“国际”),第二个是位于我国的专用服务器(我们称之为“本地”).

“本地”将具有无限的本地带宽,但它只有1Mbps的国际带宽.

我需要在两台服务器上托管一个网站(或者可能是多个网站),并根据其来源国家为访问者提供服务.我的意思是,当访问者来自我自己的国家时,数据将从“本地”提供,如果访问者来自任何其他国家,则数据将从“国际”提供.

两种类型的访问者都可以在服务器上执行读/写 *** 作,我需要在两个服务器之间同步文件和数据库,因为两个服务器都将具有更新的文件和数据库.

那么,关于DNS和同步,这怎么可能呢?或者什么是容易和可能的?谁能引导我完成我必须执行的步骤?

解决方法 第一个,简单,直接,最重要的是,强大的解决方案是放弃你有两个服务器的计划,只需从适当的中心位置运行一台机器.虽然我理解不在本地服务器上托管任何内容的原因,但由于国际带宽受限,我在您的问题中看不到需要本地服务器存在的任何内容.

如果您想要本地服务器的原因仅仅是出于性能原因,我会认真地推荐查看本地静态资产服务器,所有动态内容都将发送到伦敦.虽然geoDNS并非易事,但它比动态资产和数据库的强大实时同步更容易.许多站点(包括此站点)使用此机制来提高整体感知页面速度,并且它运行良好.

假设这不是这种情况,并且您确实需要两台服务器,我发现您的计划存在一个巨大的缺陷 – 1Mbps的国际带宽将因您的同步流量而相当饱和.你会希望你的网站不会太受欢迎,或者你将陷入痛苦的整个世界.

对于DNS,您处于相当有利的位置,因为您有一个明确定义的地址子集,您希望为其提供特定记录.据推测,您可以从您的提供商处获取一个网络列表,其中列出了“本地,带宽无限制”流量以及“国际,1Mbps上限”流量.如果您的提供商不能这样做,我会问他们他们实际上是如何进行速率限制的,因为那里必须有一个列表.最糟糕的情况是,如果他们只是基于“我们看到通过此BGP链接宣布的任何内容是本地的”,您仍然应该能够获得该链接上的前缀列表.

因此,DNS内容归结为“对于A记录请求到www.example.com,如果源地址在本地前缀列表中则为localip服务,否则为internationalip”.您为给定的DNS服务器编写脚本的方式取决于您;我会选择tinydns,因为我会尽我所能使用它,这对于这个特殊的任务来说非常棒.

但这大约占总问题的1%.你在城镇的动态资产方面有一个更大,更大的问题.

数据库实际上是(相对)简单的位. MySQL和Postgresql都支持多主复制,因此对任一数据库的写入都会自动复制到另一个(或多或少).设置并不是很简单,你需要监控它的bejesus以检测它何时中断并修复它,但它可以以相当标准化的方式进行.

另一方面,您的文件需要更多本地智能.要使其工作,您需要正确设计文件存储以允许复制工作.它更有趣,因为你说你需要支持删除.

真的,定期rsync是你最好的朋友.忽略事物的修改和删除方面一秒钟,如果你确保你的文件名不能双方碰撞(使用UUID或数据库PK作为所有文件名的基础将很好地工作)你应该能够做到每一方的定期rsyncs到另一方,并且在每一方创建的所有新文件将神奇地出现在另一方.你经常使用rsync取决于在所有内容同步之前你可以站立多少时间 – 这是你必须做的一个电话.您的应用程序还需要智能地处理(例如)DB记录已同步但文件尚未同步的情况.

删除会让事情变得更加困难,因为你不能只运行一个盲目的rsync -a –delete,因为发送者没有的任何内容都将从接收者中删除 – 这是丢失大量数据的好方法.我希望有一个删除日志,并且不时地通过它来删除另一方的内容.如果这不具有吸引力,你可以更加想象两端各有两个独立的文件系统(一个用于“本地数据”,另一个用于“另一端复制”),并且可以从你的应用程序访问它们,或者使用union文件系统层使它们看起来像Web服务器的一个文件系统.

修改只是一个完整的噩梦 – 你的风险是同时修改两台服务器,此时你只是搞砸了.在你所使用的那种“最终一致性”模型中(对于你被迫处理的地理分布式高延迟复制系统,这是唯一的选择)你根本无法在基础设施上处理这个问题级别 – 您必须在您的应用程序中做出某种妥协,以决定如何处理这些问题.您可以通过将文件系统视为仅附加存储来帮助解决问题(如果要修改文件,编写新版本并更新数据库以指向新记录),但由于您的数据库也只是最终一致,你无法完全解决问题.但是,至少如果你的数据库是单一的事实,那么你将保证一致性,如果不能保证正确性,那就是成功的一半.

我认为这几乎涵盖了一切.但重申一下,如果您不必使用地理位置分散的服务器,那么生活会变得更加简单.如果您正在实施此功能,因为它“听起来很酷”,请远离键盘.如果你想做很酷的事情,可以按照自己的时间做,或作为科学实验.你付出的代价是为你的雇主做最有效的事情,而不是给你一个怪异的阴茎异常勃起的东西.

总结

以上是内存溢出为你收集整理的web-server – 如何在多个地理位置不同的服务器上托管单个网站全部内容,希望文章能够帮你解决web-server – 如何在多个地理位置不同的服务器上托管单个网站所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1101940.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存