应该考虑哪些因素来处理可伸缩性

时间:2012-01-31 15:13:16

标签: java scalability

在编程语言中,尤其是Java,应该考虑哪些因素来确保应用程序可扩展?让我们举一个Web应用程序的例子,该应用程序同时为1000个用户提供服务,预计用户可能会增长到100,000。还假设目前只提供特定的功能,将来我们可能需要添加更多功能,如报告等。我们是否需要确保不会发生某些类型的瓶颈,或者我们应该避免某些类型的设计,这可能会限制可扩展性?

4 个答案:

答案 0 :(得分:3)

  1. 尽可能避免锁定,尤其是全局锁定。
  2. 静态通常会导致锁定似乎是一个好主意的情况,尽可能避免静态。它们也使测试更加困难。
  3. 您的数据是如何存储的?你在使用Sql数据库吗?这个规模怎么样?您可以使用NoSql数据存储区吗?会计类型应用的提示答案是否定的,我们需要Sql的交易。
  4. 请注意拉式订阅,具体取决于您的加载推送类型订阅可以更好地扩展。例如10个消费者每秒检查状态变化一次是好的,10000个消费者每秒检查状态变化一次更具挑战性。如果数据每分钟更改一次,则发布效率会更高,如果更频繁地更改,则每秒发送1次,发布者可以选择批量更改。
  5. 在您的架构图中查找星形,当星形中心的机器过载时会发生什么?在很多情况下,这将是您的数据存储,并且大多数Sql数据库都很昂贵/难以扩展到具有大量只读副本的一个读/写主机。如果情况确实如此,并且你知道你将会变得更大,那就考虑早期分区(在多个读/写主服务器上拆分数据)。
  6. 缓存 - 像Memcached这样的共享缓存会帮助你吗? (通常不需要粘性会话)
  7. 尽早聘请专家至少审查设计。

答案 1 :(得分:1)

瓶颈是IO(磁盘,数据库,...)和网络。编程语言不是一个大问题。

答案 2 :(得分:1)

决定可扩展性对您意味着什么。

每个应用程序都在某种意义上扩展,但“可伸缩性”似乎只适用于在特定问题域中缺乏扩展能力的应用程序。您的问题域与我的不同,因此如果我提供可伸缩性建议,则与针对您的应用程序中未实际观察到的用例进行优化的情况相同。您现在将其视为过早优化(许多非常糟糕的系统设计选择的根源)。

弄清楚什么可能会成长,什么可能不会增长,把你的钱(和时间)放在痛苦的地方。基准吧。测量它。

一旦您了解了应用程序可能无法扩展的程度,请在尝试解决问题时进行一些研究。这样你就不能完全靠自己,你可以利用大量的可扩展性工作,但是针对你的特殊情况。

请记住,为了获得更好的可扩展性,您必须在某处进行权衡。您的程序将在时间,内存,硬件要求或其他方面增长。如果您没有关于处理时间,内存利用率等的性能指标,则您无法满足担心可伸缩性的先决条件要求。

答案 3 :(得分:0)

我想这里浪费时间和空间来写这些。我强烈建议阅读Scalability Rules,它便宜,篇幅简短且写得很好

相关问题