我正在构建一个将被荒谬加载的Web服务(每秒数千到数万个查询).我的正常堆栈的apache,PHP,memcache和一些数据库将能够使用一个很好的负载均衡器和很多机器来处理它,但我想知道是否有更好的解决方案.
端点将被信标击中(通过客户端上的javascript),我将读取用户的cookie,从数据库中提取一些小信息,缓存它,做一些小计算,发送响应,如果需要写入数据库并使缓存无效.
良好的技术选择和/或硬件建议?
除了广泛的概述之外,这不是可以在这里回答的问题.一些一般指示:
硬件:这两个选择基本上是很多小而便宜的盒子或更少数量更强大的盒子.更便宜的盒子更便宜,但通常比相同的CPU或内存消耗更多的电量(对你来说重要),而不是更大的盒子.人们经常忘记有时耗电的巨大成本;
后端:从大城市(Oracle,SQL Server)到商品化端(MySQL),你有一些选择.MySQL显然更便宜,你可以在MySQL上走得很远,但毫无疑问,Oracle(我比SQL Server更熟悉)拥有更好的优化器,功能更强大,并且比MySQL更强大.然而,你会支付它;
预算:这是一个重要因素,因为它可能值得为优质商业软件付费而不是支付使用"免费"软件的开发成本.软件开发是最昂贵的成本之一;
垂直和水平可扩展性:你在这里基本上想要回答的问题是你是建立(更大的盒子等)还是构建(集群环境).最具可扩展性的解决方案具有接近线性的水平可扩展性,但在短期内,垂直可扩展性可能更便宜.
至于你的正常堆栈,我会坚持使用它,除非你有一个你没有提到的禁止它的特殊要求.毕竟PHP是一种经过验证的技术,可运行互联网上排名前20的网站中的4个左右(Facebook,维基百科,Flickr和我认为雅虎).如果它对他们来说足够好,那对你来说已经足够了.
更重要的是,你知道.技术堆栈你知道几乎在每种情况下你都不会使用特朗普技术堆栈.谨防最新炒作技术堆栈的"绿色牧场"陷阱.
Memcache很好.您可能要考虑添加到混合中的另一件事是beanstalkd作为分布式工作队列处理器.
需要回答的一个重要问题是:您对应用程序的划分有多好?容易进行分区的应用程序更容易扩展.那些不倾向于以某种方式进行修改以使它们更容易分区.
一个很好的例子是一个简单的共享应用程序.您可以根据股票代码划分市场信息(一台服务器上的AC,另一台服务器上的DF等).对于许多这样的应用程序,将运作良好.
http://highscalability.com/这里有很多值得学习的地方,你可能会找到你的答案.