Java 应考虑哪些因素来考虑可伸缩性

Java 应考虑哪些因素来考虑可伸缩性,java,scalability,Java,Scalability,在编程语言(特别是Java)中,应该考虑哪些因素来确保应用程序是可伸缩的?让我们以一个web应用程序为例,它同时为1000个用户提供服务,预计用户可能会增长到100000。另外,假设目前只提供特定功能,未来我们可能需要添加更多功能,如报告等。我们是否需要确保不会出现某些类型的瓶颈,还是应该避免可能限制可扩展性的某些类型的设计 瓶颈是IO(磁盘、数据库等)和网络。编程语言不是什么大问题。瓶颈是IO(磁盘、数据库等)和网络。编程语言不是什么大问题 尽量避免使用锁,尤其是全局锁 静态通常会导致锁定似乎

在编程语言(特别是Java)中,应该考虑哪些因素来确保应用程序是可伸缩的?让我们以一个web应用程序为例,它同时为1000个用户提供服务,预计用户可能会增长到100000。另外,假设目前只提供特定功能,未来我们可能需要添加更多功能,如报告等。我们是否需要确保不会出现某些类型的瓶颈,还是应该避免可能限制可扩展性的某些类型的设计

瓶颈是IO(磁盘、数据库等)和网络。编程语言不是什么大问题。

瓶颈是IO(磁盘、数据库等)和网络。编程语言不是什么大问题

  • 尽量避免使用锁,尤其是全局锁
  • 静态通常会导致锁定似乎是个好主意的情况,请尽可能避免静态。它们还使测试更加困难
  • 您的数据是如何存储的?您正在使用Sql数据库吗?这将如何扩展?您可以改用NoSql数据存储吗。对会计类型应用程序的提示答案是否定的,我们需要Sql的跨部门性
  • 注意拉式订阅,这取决于您的负载推式订阅可以更好地扩展。e、 g.10个消费者每秒检查一次状态变化是可以的,10000个消费者每秒检查一次状态变化更具挑战性。如果数据每分钟更改一次发布效率更高,如果更改频率更高,则发布者可以选择每秒更改一次
  • 在架构图中寻找星形,当位于星形中心的机器过载时会发生什么?在许多情况下,这将是您的数据存储,大多数Sql数据库的成本很高/很难扩展到一个具有大量只读副本的读/写主机之外。如果情况会是这样,并且您知道自己将变得越来越大,那么请尽早考虑分区(在多个读/写主机上分割数据)
  • 缓存-像Memcached这样的共享缓存对您有帮助吗?(通常不需要粘性会话)
  • 尽早聘请专家至少对设计进行审查
  • 尽量避免使用锁,尤其是全局锁
  • 静态通常会导致锁定似乎是个好主意的情况,请尽可能避免静态。它们还使测试更加困难
  • 您的数据是如何存储的?您正在使用Sql数据库吗?这将如何扩展?您可以改用NoSql数据存储吗。对会计类型应用程序的提示答案是否定的,我们需要Sql的跨部门性
  • 注意拉式订阅,这取决于您的负载推式订阅可以更好地扩展。e、 g.10个消费者每秒检查一次状态变化是可以的,10000个消费者每秒检查一次状态变化更具挑战性。如果数据每分钟更改一次发布效率更高,如果更改频率更高,则发布者可以选择每秒更改一次
  • 在架构图中寻找星形,当位于星形中心的机器过载时会发生什么?在许多情况下,这将是您的数据存储,大多数Sql数据库的成本很高/很难扩展到一个具有大量只读副本的读/写主机之外。如果情况会是这样,并且您知道自己将变得越来越大,那么请尽早考虑分区(在多个读/写主机上分割数据)
  • 缓存-像Memcached这样的共享缓存对您有帮助吗?(通常不需要粘性会话)
  • 尽早聘请专家至少对设计进行审查
    决定可伸缩性对您意味着什么

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

    所以,找出什么可能增长,什么可能不增长,把你的钱(和时间)放在你痛苦的地方。对其进行基准测试。测量一下

    一旦您感觉到应用程序可能无法扩展,请在尝试解决问题的同时进行一些研究。这样,您就不必完全依靠自己,您可以利用大量的可伸缩性工作,但要针对您的特定环境


    记住,为了获得更好的可伸缩性,您必须在某个地方进行权衡。您的程序可能会在时间、内存、硬件需求或其他方面有所增长。如果您没有处理时间、内存利用率等方面的性能指标,那么您就没有满足担心可伸缩性的先决条件要求。

    决定可伸缩性对您意味着什么

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

    所以,找出什么可能增长,什么可能不增长,把你的钱(和时间)放在你痛苦的地方。对其进行基准测试。测量一下

    一旦您感觉到应用程序可能无法扩展,请在尝试解决问题的同时进行一些研究。这样,您就不必完全依靠自己,您可以利用大量的可伸缩性工作,但要针对您的特定环境

    记住,要取得更好的成绩