这里情况复杂!
现在的情况: 我们有一个主服务器只做他的东西。 数据每秒都在变化。 我们需要一个Web小部件(html数据)与其他网站共享。 该小部件必须每隔一分钟刷新一次。 小部件数据将每秒更改一次。 所有其他网站的访问者必须看到该信息。 我们无法处理如此高的流量。服务器需要24/7在线,并且它们不会每隔一分钟连接到它。 我说的是每月有100万次展示。
我们正在努力的解决方案: 获得几个托管计划。 所有主机都将存储将向访问者显示的HTML数据。 每个主机帐户都会每隔一分钟向我们的主服务器执行一次cronjob。 获取html并将其存储到下一个cronjob。 这就是我们如何将流量从主服务器转移到其他地方。 现在是网站访问者将连接到我们托管中存储的html的部分。 代码向下与第一个托管服务器连接,如果他在一段时间内没有回答,它将连接到第二个。并循环直到其中一些返回HTML数据。 当然,如果他们100%加载,我们将获得另一个新托管。
<script>
server_1 = 'http://hostingserver_one.com/';
server_2 = 'http://hostingserver_two.com/';
wait_for_response = 5000;
one_minute = 60 * 1000;
half_minute = 30 * 1000;
right_away = 1;
current_refresh_minute = one_minute;
current_refresh_server = server_1;
function ajaxRequestInfo() {
$.ajax({
type: 'GET',
url: current_refresh_server,
timeout: wait_for_response,
data: {},
success: function(data) {
$(".data_for_refresh").html(data);
},
complete: function(data) {
window.setTimeout(ajaxRequestInfo, one_minute);
},
error: function() {
changeRefreshServer();
window.setTimeout(ajaxRequestInfo, right_away);
},
async: true
});
}
function changeRefreshServer() {
if (current_refresh_server == server_1) {
current_refresh_server = server_2;
} else if (current_refresh_server == server_2) {
current_refresh_server = server_3;
} else if (current_refresh_server == server_3) {
current_refresh_server = server_1;
}
}
$(document).ready(function() {
ajaxRequestInfo();
});
问题是: 这是最好的办法吗?! 如果不是更好。 我相信很多人已经通过了那种情况,但这是我的第一次:)
答案 0 :(得分:3)
谈论一百万个html文件对我来说很奇怪, 你可以更准确地处理它。
你需要关注的两件事是
负载平衡和消耗的内存超过一台Web服务器可提供的内容。
如果您的帐户是高负载我的意思是负载太多,那么应该去另一台服务器而不是单个服务器的速度慢。 另一方面,如果要在单个服务器上托管许多应用程序,则需要服务器可以提供更多内存
基本上,我在服务器上安装了标准wordpress 制作ProxyPass。然后我配置了网站并安装了 扩展和模板。我在这个服务器上配置了一个SQL DB case它也是代理,但理想的是将它隔离在它上面 服务器或Xeround等外部数据库服务。在我的 WordPress,apache,mysql和memcached配置,我总是 指定自iWeb上所有服务器以来的内部专用网络IP 是智能服务器。这消除了公共网络上的流量。它 使设置更安全。
我在这里阅读,你可以找到更多的想法Here
ultraking是你需要关注的s / w
现在,在你的情况下,你有多个html文件,它们逐个服务器来查找用户的特定文件。 但是在全服务器中查找并不是一个好主意。 而是制作一个json对象 将获得有关哪个服务器包含哪些信息的信息 所以现在 情景会是 用户&gt;点击您的网站(包含有关每个服务器的信息对象)&gt;&gt; 用户对文件的请求&gt; fileter json对象&gt;击中你的unquer
这会降低您服务器的流量。谢谢
<强> [编辑] 强>
这一切都取决于您为处理用户所做的规划策略。 如果您采取策略并且正确选择工具并未在基准测试中站点,则无法处理单个用户。
答案 1 :(得分:0)
您的架构对我来说很奇怪:它不应该是客户端(您的网站访问者)负载平衡&#34;服务器间。这不是他们关心的问题,最糟糕的是这不会让你的服务器端更好,因为他们会尝试创建连接,从而产生一些负载。
您应该在为(HTML)内容提供服务的Web服务器阵列前放置某种形式的负载平衡。
Web服务器也应与您的&#34; data / main&#34;服务器使用一些共享缓存来避免加载后者。例如,参见Memcached。
很难在Stackoverflow答案中详细介绍。此外,您引用的数字对我来说并不是那么高,而且我感觉(并且只有感觉)最小数量的具有正确启用缓存的合理大小的服务器应该能够轻松应对这些值。
答案 2 :(得分:0)
每月一百万不是太糟糕。即使客户端直接连接到您以获取数据,您也可以处理它。只需在外部托管大部分小部件,然后使用javascript xmlHttpRequest从主服务器下载一个小文本文件,然后将其咀嚼成用户友好的设计。 仅作比较,我的服务器每月获得600万次GET点击。每个的平均大小为15 kB。这比你需要的要多得多。这就是惊喜:这个&#34;野兽&#34;服务器是我桌下的SOHO DD-WRT路由器。 :)
编辑:你仍然可以通过启用动态gzip来管理它。对于我建议你做的低于100字节的输出,这是不合理的。
答案 3 :(得分:0)
100万次展示可能听起来像是很多流量,但实际上大多数网络服务器都可以在正常情况下处理这样的负载。如果你在共享服务器或VPS上我可以理解100万可能是太多负载,你应该考虑专用托管或增加你的VPS规格,如果这是你的情况。您的代码/数据库等也可能存在扩展问题,导致速度变慢。
虽然您的方法没有任何问题,但通过更好的设置可以更好地解决这个问题,如果您想要使用两个服务器路由,您应该查看负载均衡并使用弹性资源(如Moo推荐的AWS或Azure)托管在云上例如,而不是依靠客户端Javascript代码将流量发送到正确的服务器。