我想从使用过大规模生产系统的经验丰富的Java专业人员那里了解到,需要做些什么才能构建能够处理每天1000多万个请求的规模的web应用程序?
例如,如果需要进行某种缓存,那么使用什么产品质量库进行缓存?
发布于 2011-10-10 16:09:49
这是一个很大的话题,不容易回答--超大规模的应用程序通常需要针对它们期望处理的特定类型的负载进行仔细的设计。
例如:如果您的体系结构主要处理只读页面视图(通过复制大量廉价的应用程序服务器来轻松扩展)与处理复杂的金融事务(您需要一种协调大量并发事务的方法),那么您的体系结构将非常不同。
一些一般性的提示:
顺便说一句,每天1000万次请求实际上并不是很大。也就是说每秒只有115个请求。通过相当紧凑的编码,一台现代服务器就可以处理这件事......
发布于 2011-10-10 15:52:01
最重要的是,您的应用程序应该具有一定的可预测性。至于“如何”,如果不对需求和架构进行更深入的分析,就不可能说出这一点。缓存通常是某种形式的关键组件。根据几个因素,例如数据的波动性和变化率,可以采取不同的方法。最简单的做法是只使用本地缓存,请记住,除非添加一些缓存同步,否则对缓存数据所做的更改不会立即反映在所有节点上。在另一端,您有一个完全分布式的缓存,如Terracotta BigMemory或其他分布式/集群缓存解决方案。
我建议您尽早建立性能测试基准。这将允许您测试正在开发的系统的可伸缩性。针对一个、两个、三个etc负载均衡节点运行基准测试,并测量吞吐量。还要确定必须在所有节点之间共享的任何资源或数据,以及如何正确地同步这些资源或数据以实现最佳可伸缩性。
发布于 2011-10-10 16:02:57
很难将通常通过编写和维护大规模应用程序所获得的内容压缩成论坛帖子形式的答案。通常,人们会花很多钱给其他有这种专业知识的人。
您需要对应用程序的想法有所了解。一些陷阱在分析阶段出现,特别是关于基础设施(在哪里服务于什么?),另一些是通过数据处理(同步如何工作?)。
其他的将在以后出现,比如“当X崩溃时我们会做什么”(插入X的基础设施的任何部分)。您可以根据这些场景反复检查您的恢复时间。
然后你写出整个想法的部分,并针对它测试失败的场景和用例。
最后,如果你认为一切都已经被考虑过了,你把它交给和你一样有经验的人,甚至更多,然后写下他们认为是问题的一切,测试他们的抱怨,并改变应用程序和/或基础设施的结构,以适应所有用例。
https://stackoverflow.com/questions/7709790
复制相似问题