我的公司有一个web服务api,开始得到很多的使用。 最近我们遇到了一些内存不足的问题。 我们优化了一些低效的代码并解决了这个问题。
我们知道我们会进一步扩张,我们希望有一个很好的方式来应对激烈的交通。
一个已经出现的想法是为我们一些较重的客户提供不同的url。 这只是跳出来对我来说是错误的事情。 在某些情况下,这个url会指向孤立的服务器,但是有些也会指向更多的虚拟目录。
在这两种情况下,这是一个很好的解决scheme吗? 我担心可怕的可维护性问题,并导致更多的问题,然后解决。 请给我双方的利弊。
这已经在负载均衡的服务器场中。
如果它已经在一个负载均衡的农场上,而且负担过重,而且你已经尽可能多地进行了优化,那么自然而然的下一步似乎就是扩大你的农场以满足需求。
如果您达到负载均衡器的最大容量,并且您有空闲的服务器,则可以尝试使用某种反馈(如mod_cluster等平衡器)进行更均衡的平衡。 如果您仍然达到极限,则可以尝试使用循环法DNS来替代分发多个url。 这样,您可以将负载平衡卸载到客户端。 您可以使用lbnamed向此解决scheme添加反馈。 一个更大的负载平衡器是另一种方法,当然这需要更多的$。
您的API可以利用caching吗?
如果API的特定部分经常被调用,并返回相同的结果,像memcached可能会帮助你显着。
我不认为有不同的客户具体的网站的优势。 在我看来,要么你需要更多的服务器和/或你的负载平衡不能正常工作。
第7层负载平衡器将允许您将被视为“高成本”的那些客户端隔离到设置为处理其特定查询的群集/机器。 我假设这是一个“忙碌”的客户端,它正在做请求的狮子分享,并分裂他们自己的服务器是为什么你考虑给他们一个单独的url。 使用第7层负载均衡器linuxvirtualserver.org,您可以过滤特定的URL,并且具有相当容易维护的系统。
当你最终想用正确的方式解决问题时,使用这样的东西可能会给你足够的时间。
我现在正在考虑那些用量较大的客户。 你可以收费吗? 他们的使用比应该多吗? 你能帮助他们优化他们的系统,使他们不需要这么大的用量? 你可以添加限速到你的API吗? 他们的使用足以能够提供他们自己的服务器,并相应地收费吗?
下一步是看你的架构。 你的Web服务器前面是否有caching代理? 你有独立的数据库服务器吗? 你所有的服务器和你的代码都被优化了吗? 你是否可以绝对caching? 你有好的硬件吗?
一旦你确定你的体系结构尽可能优化,那么只要你开始达到极限(无论是额外的caching,额外的web服务器或额外的后端服务器将取决于你的限制),你只需要添加额外的盒子到负载平衡设置重新点击)。
您是否尝试过运行插件到Firebug的http://developer.yahoo.com/yslow/和http://code.google.com/speed/page-speed/ ,尝试分析页面生成时的请求数被加载?