【.com速递】软件性能和可扩展性是我们在谈应用开发时经常会遇到的话题。一个很大的原因是应用程序的性能和可扩展性直接影响其在市场上的成功。一个应用程序,无论它的用户界面有多好,如果它的响应时间很慢,也不会有很高的市场份额。这就是为什么随着用户群的增长,我们花费大量时间来改进应用程序的性能和可扩展性。日常测试失败在哪里?幸运的是,我们有很多工具可以测试高负载条件下的软件行为,这也可以帮助识别工具性能和可扩展性问题。其他基准测试工具也可能需要测试系统提供高负载下的系统稳定性测试。然而,当我们尝试使用这些工具来测试企业产品的性能时,却遇到了性能和规模工程的问题。通常,这些产品不是单一的应用程序,而是多个不同的应用程序相互交互以提供一致和统一的用户体验。如果我们只测试它的单个组件,我们就无法获得有关产品性能和可扩展性问题的任何有意义的数据。现实数据只能通过在真实场景中测试应用程序,将整个企业应用程序置于真实工作负载下来收集。问题是:我们如何才能在测试场景中实现这种真实的工作负载?容器-救援容器答案是容器。为了解释容器如何帮助我们测试产品的性能和可扩展性,让我们看一下软件配置管理工具puppet。Puppet使用C5架构,其中有一个或多个Puppet主机(服务器),以及一个配置有Puppet运行Puppet代理(客户端)的系统。为了了解应用程序的性能和可扩展性,我们需要在不同的系统上运行负载很重的puppet-master。为此,我们可以在一个系统上安装puppet-master,然后运行操作系统的多个容器,在这些容器中安装并运行puppet-agent。接下来,我们需要配置puppet-agent来与puppet-master交互以管理系统配置。这在服务器处理请求时给服务器带来压力,并在客户端更新软件配置时给客户端带来压力。那么,容器在这里能起到什么作用呢?我们可以通过一个脚本来模拟puppetmaster负载吗?答案是否定的。即使是模拟负载,我们也不会对产品的性能有一个客观的判断。在现实生活中,用户系统除了puppet-agent或者puppet-master之外,还会运行很多其他的进程,每个进程都会消耗一定的系统资源,所以通过限制puppet可以使用的资源直接影响puppet的性能使用。这是一个简单的示例,但是在处理由多个组件组成的产品时,企业应用程序的性能和规模工程可能会变得脆弱。这就是容器的优势所在。为什么是容器而不是其他东西?一个真正的问题是:为什么使用容器而不是虚拟机(VM)或裸机?运行容器背后的逻辑与我们可以启动的容器镜像的数量以及它们相对于替代品的成本有关。虽然VM提供了强大的机制,但它们也会占用大量系统资源,从而限制了可以在单个裸机服务器上复制的系统数量。相比之下,在同一系统上启动1000个容器相当容易,这取决于您想要实现哪种模拟,同时保持较低的开销。使用裸机服务器,可以根据需要实现性能和规模,但主要问题是成本开销。你会为了测试而购买1000台服务器吗?这就是为什么容器通常提供一种经济且可扩展的方式来测试产品在现实情况下的性能,同时保持较低的资源和间接成本。作者:SaurabhBadhwar原文链接:https://opensource.com/article/17/8/containers-software-performance-and-scale刘妮娜译
