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