Java 规模和容量规划提示以及如何

Java 规模和容量规划提示以及如何,java,jakarta-ee,hardware,capacity-planning,sizing,Java,Jakarta Ee,Hardware,Capacity Planning,Sizing,我经常被要求为我们的客户进行规模和容量规划。当我们的客户购买我们的产品(基本上是J2EE web应用程序)时,他们通常会询问运行这些产品需要什么硬件。我们的建议通常会导致高成本的硬件采购 到目前为止,我开发的最佳启发式方法是将利用率预测(应用程序应参与的注册和并发用户的数量)与在现有安装中收集的数据进行比较。类似于:如果安装A使用X硬件处理100个并发用户,那么安装B将需要2*X硬件处理200个并发用户 然而,这种方法存在一些问题。客户机通常使用不同的硬件和软件平台。他们从我们这里购买的产品通常

我经常被要求为我们的客户进行规模和容量规划。当我们的客户购买我们的产品(基本上是J2EE web应用程序)时,他们通常会询问运行这些产品需要什么硬件。我们的建议通常会导致高成本的硬件采购

到目前为止,我开发的最佳启发式方法是将利用率预测(应用程序应参与的注册和并发用户的数量)与在现有安装中收集的数据进行比较。类似于:如果安装A使用X硬件处理100个并发用户,那么安装B将需要2*X硬件处理200个并发用户

然而,这种方法存在一些问题。客户机通常使用不同的硬件和软件平台。他们从我们这里购买的产品通常是不同的,通常应用程序的一部分是根据特定客户的订单构建的。考虑到软件版本正在变化等因素,并且有太多的参数可能会使调整大小的任务变得非常困难

我研究了一些关于这个主题的书,一些人建议使用复杂的数学模型。这些方法需要大量的参数作为输入(例如应用程序特性的详细分类),这让我觉得这些几乎没有什么用处。硬件通常在定义基本需求之前就已订购,更不用说这些需求在整个应用程序开发和生命周期中都会有所不同。
那么,您如何进行规模和容量规划?任何提示和方法都值得赞赏。

如果应用程序以优雅的方式水平扩展,那么粗略的初始估计可以作为起点。一旦应用程序投入生产运行,根据需要添加或删除额外的框应该很容易

在您给出的描述中,没有简单或数学公式可以预测规模,如果您(或您的公司)对此很认真,那么最好的方法是构建一个性能和可伸缩性测试环境,您可以轻松地设置和拆除各种客户端配置,并向它们发送负载,以了解它们将如何工作。因为您正在构建自定义组件,一个写得不好的组件或缺少索引可能会把一切都搞砸,所以在这样一个环境中,您可以在将这些东西提交给客户机之前解决这些问题。一旦您拥有了这种类型的环境,您就可以向应用程序服务器和数据库添加内存和cpu,以查看应用程序的扩展情况


我建议使用虚拟机环境,他们可以根据应用程序的需要轻松添加cpu和内存,并使用watchmouse或browsermob等服务进行一些实际的外部负载/规模测试。

如果必须在定义基本需求之前订购硬件,那么,您所能做的最好的事情就是通过查看一组类似项目的安装基础来大致估算容量(就像您现在所做的那样)。跟踪现有客户在扩大安装规模和容量需求方面的经验,如果您有足够大的基础,您可能可以通过将类似的项目与类似的硬件分组并查看容量需求来进行粗略的曲线拟合。观察现有客户的容量需求在增长过程中如何变化,以及其他数据点


理想情况下,最初的硬件/软件购买是为了进行试点安装,一旦试点设置完成并符合规范,您就可以对其进行基准测试。使用这些结果来预测从试点转移到生产的容量需求。当然,这需要在试生产计划中留出时间来对应用程序进行基准测试,然后订购和交付设备。但它将给出一个更准确的容量估计,而不是全部提前完成。

问题是商业性的,而不是技术性的。客户需要事先了解初始成本和TCO。此外,如果您知道所需的确切产品,那么与硬件供应商谈判会更容易。估计太大,客户被他不需要的硬件卡住;估计太少,你打乱了他的预算,没有与供应商的杠杆等。