首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Java开发高度可伸缩的web应用程序需要做些什么?

用Java开发高度可伸缩的web应用程序需要做些什么?
EN

Stack Overflow用户
提问于 2011-10-10 15:40:15
回答 3查看 2.5K关注 0票数 4

我想从使用过大规模生产系统的经验丰富的Java专业人员那里了解到,需要做些什么才能构建能够处理每天1000多万个请求的规模的web应用程序?

例如,如果需要进行某种缓存,那么使用什么产品质量库进行缓存?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-10 16:09:49

这是一个很大的话题,不容易回答--超大规模的应用程序通常需要针对它们期望处理的特定类型的负载进行仔细的设计。

例如:如果您的体系结构主要处理只读页面视图(通过复制大量廉价的应用程序服务器来轻松扩展)与处理复杂的金融事务(您需要一种协调大量并发事务的方法),那么您的体系结构将非常不同。

一些一般性的提示:

  • Prefer horizontal -尽可能的,你希望能够通过添加更多便宜的盒子来实现可伸缩性。您设计的应用程序越适合此模型,对可变状态的better.
  • Co-ordinated更改将最终成为可伸缩性的瓶颈,因为它是唯一不能通过廉价的盒子水平扩展到您想要的程度的东西。弄清楚这些变化是什么,并进行相应的设计。如果幸运的话,一个数据库实例就足够了。如果不是这样,您就会遇到非常昂贵的数据库群集/分层事务语义,而不是基于可以扩展territory.
  • Use的NoSQL /高度自定义的数据存储经验证的库/组件。例如,用于高吞吐量communications.
  • Don't的Netty在没有团队专业知识的情况下尝试-将应用程序扩展到“大联盟”是困难的,并且需要专业技能。如果你做错了,你可能会遇到瓶颈,需要昂贵的重写。雇佣以前做过这件事的人。

顺便说一句,每天1000万次请求实际上并不是很大。也就是说每秒只有115个请求。通过相当紧凑的编码,一台现代服务器就可以处理这件事......

票数 4
EN

Stack Overflow用户

发布于 2011-10-10 15:52:01

最重要的是,您的应用程序应该具有一定的可预测性。至于“如何”,如果不对需求和架构进行更深入的分析,就不可能说出这一点。缓存通常是某种形式的关键组件。根据几个因素,例如数据的波动性和变化率,可以采取不同的方法。最简单的做法是只使用本地缓存,请记住,除非添加一些缓存同步,否则对缓存数据所做的更改不会立即反映在所有节点上。在另一端,您有一个完全分布式的缓存,如Terracotta BigMemory或其他分布式/集群缓存解决方案。

我建议您尽早建立性能测试基准。这将允许您测试正在开发的系统的可伸缩性。针对一个、两个、三个etc负载均衡节点运行基准测试,并测量吞吐量。还要确定必须在所有节点之间共享的任何资源或数据,以及如何正确地同步这些资源或数据以实现最佳可伸缩性。

票数 2
EN

Stack Overflow用户

发布于 2011-10-10 16:02:57

很难将通常通过编写和维护大规模应用程序所获得的内容压缩成论坛帖子形式的答案。通常,人们会花很多钱给其他有这种专业知识的人。

您需要对应用程序的想法有所了解。一些陷阱在分析阶段出现,特别是关于基础设施(在哪里服务于什么?),另一些是通过数据处理(同步如何工作?)。

其他的将在以后出现,比如“当X崩溃时我们会做什么”(插入X的基础设施的任何部分)。您可以根据这些场景反复检查您的恢复时间。

然后你写出整个想法的部分,并针对它测试失败的场景和用例。

最后,如果你认为一切都已经被考虑过了,你把它交给和你一样有经验的人,甚至更多,然后写下他们认为是问题的一切,测试他们的抱怨,并改变应用程序和/或基础设施的结构,以适应所有用例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7709790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档