在编程语言中,特别是Java中,应该考虑哪些因素以确保应用程序具有可伸缩性?我们举一个Web应用程序的例子,它可以同时为1000个用户提供服务,预计用户可能会增长到100,000。另外假设目前只提供了特定的功能,并且将来我们可能需要添加更多功能,如报告等。我们是否需要确保某些类型的瓶颈不会发生,或者是否应该避免某些类型的设计,这可能会限制可伸缩性?应该考虑怎样考虑可伸缩性
0
A
回答
1
瓶颈是IO(磁盘,数据库......)和网络。编程语言并不是什么大问题。
3
- 尽可能避免锁,尤其是全局锁。
- 静态通常会导致锁定看起来像个好主意,尽可能避免静态的情况。他们也使测试更加困难。
- 您的数据如何存储?你在使用Sql数据库吗?这将如何扩展?你可以使用NoSql数据存储吗?提示会计类型应用程序的答案是否定的,我们需要Sql的transacionality。
- 请注意拉型订阅,具体取决于您的加载推送类型订阅可以更好地扩展。例如10个消费者每秒钟检查一次状态变化是没有问题的,10000个消费者每秒检查一次状态变化更具挑战性。如果数据每分钟更改一次发布效率更高,如果更频繁地更改,则每秒1次发布者可以选择批量更改。
- 在你的架构图中寻找星形,当星星中心的机器过载时会发生什么?在很多情况下,这将是您的数据存储区,并且大多数Sql数据库的成本很高,难以扩展到只有大量只读副本的读/写主机。如果情况确实如此,并且你知道你将会变得越来越大,那么请尽早考虑分区(在多个读/写主分区上分割数据)。
- 缓存 - 是一个像Memcached一样的共享缓存可以帮助您吗? (通常不需要粘性会话)
- 尽早聘请专家来审查设计。
1
决定可扩展性对您意味着什么。
每个应用程序都在某种意义上进行扩展,但“可扩展性”似乎只适用于缺乏在特定问题域中进行扩展的应用程序。您的问题域与我的问题域不同,因此如果我提供可伸缩性建议,则与在应用程序中实际未观察到的用例优化相同。你现在认识到这是过早的优化(很多非常糟糕的系统设计选择的根源)。
因此,要弄清楚什么可能增长,什么可能不增长,并把你的钱(和时间)放在你痛苦的地方。基准。衡量它。
一旦您了解您的应用程序可能无法扩展的感觉,请在尝试解决该问题时进行一点研究。这样你就不是完全靠自己,你可以利用大量的可扩展性工作,但为你的特定情况。
请记住,要实现更好的可伸缩性,您必须在某个地方进行折衷。无论你的程序会在时间,内存,硬件要求或其他方面增长。如果您没有关于处理时间,内存利用率等的性能指标,则您未满足先决条件要求而担心可伸缩性。
0
我想这是浪费时间和空间写在这里。我强烈建议您阅读Scalability Rules,其价格便宜,写得很好,写得很好。
相关问题
- 1. WCF多线程与可伸缩性考虑
- 2. Flex性能考虑
- 3. 设计可伸缩Web架构时需要考虑什么
- 4. 选择SQL/NoSQL应该考虑什么?
- 5. 。应该考虑关键尺寸?
- 6. UISlider不考虑
- 7. 设计考虑
- 8. 设计考虑
- 9. 考虑订婚
- 10. 考虑到DST
- 11. 登录C++(性能考虑)
- 12. 性能考虑多次
- 13. 考虑到Azure的可伸缩性,ASP.NET网站是否已经多线程?
- 14. 可分凝Tuxedo服务(性能考虑)
- 15. 我怎么能把Jbuttons考虑到arraylist考虑他们的名字?
- 16. uitableviewcells,设计考虑
- 17. TimeZoneInfo.ConvertTimeFromUtc不考虑DST
- 18. 考虑DECS与SSIS?
- 19. 考虑使用NHapi
- 20. setSearchDisplayController考虑private-API?
- 21. 考虑使用PHP
- 22. VBA:QueryTables:怎么没有考虑到TextFileOtherDelimiter
- 23. sizeWithFont是否考虑到自动收缩?
- 24. 什么时候开始考虑缩放?
- 25. 正则表达式:固定长度不考虑“ - ”考虑
- 26. 转换RGBA到RGB考虑背景考虑
- 27. Webservice:考虑设计和安全考虑事项?
- 28. :考虑伪不考虑方向(rtl)后? (火狐)
- 29. 我怎样才能优先考虑一个div比另一个
- 30. 的PreparedStatement,CallableStatement的和性能考虑
这是一个非常广泛的问题,高度依赖于上下文。提供更多关于什么类型的应用程序的详细信息,可能会给你有用的答案。 – kosa 2012-01-31 15:15:04
编辑了问题陈述 – Gaurav 2012-01-31 15:22:44