云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

分布式存储_数据库账号_促销

小七 141 0

宽带速率_高性能_云服务器网

这是多部分系列文章的第一部分,我们将分享应用程序弹性的旅程。大多数企业应用程序运行在Java中是为了提高性能和安全性,但是这种技术有一些独特的挑战:Java需要为每个进程/服务进行自己的内存管理。当您将应用程序重新设计为服务集合时,这意味着您有更多需要内存管理的服务。很快我们就发现,脚本不可伸缩的服务是独特的和动态的,特别是在生产中。挑战像许多客户一样,云服务器设备,Turbonomic正在对其业务应用程序进行现代化改造,以利用微服务体系结构的快速上市优势。它还使我们的应用程序能够管理20倍以上的工作负载。由于许多客户正在运行200000多个工作负载,我们的应用程序在这些环境中进行扩展和自动化的能力至关重要。2009年,我们从一个单一的Java应用程序开始,bi大数据,它作为tomcatweb应用程序运行。管理内存只需根据分配给VM的内存百分比从启动脚本配置Tomcat的最大堆。但是,当我们将应用程序重新架构为微服务时,将每个功能组件封装起来,管理Java内存分配就变得复杂了30倍每个组件需要不同数量的内存,具体取决于以下内容:部署到的环境它管理的公共和/或私有云资产的规模而且,在这些环境中被管理的应用程序的数量--随着我们的客户部署越来越多的动态和弹性的应用程序,这些应用程序的数量也在不断增加最初,云服务器服务商,我们将max heap size配置为一个环境变量,该变量用作容器入口点中Java选项的一部分。我们的开发人员面临着为每个Java进程编写内存请求脚本的不幸任务。这不符合比例。而且,现在是2019年,微信淘客,我们都在努力实现应用程序资源管理的自动化。所以问题变成了:我们如何使我们的应用程序可配置,以便软件能够管理这些资源?解决方案从历史上看,和其他人一样,我们不得不硬编码我们的Java配置,但是随着最近的更新,这些配置可以更加动态。在Java11中引入了一个新的选项(后来后移植到Java8u191),它专门针对运行在容器中的Java应用程序。它允许我们使用cgroup内存进行Java堆配置(-XX:+UseCGroupMemoryLimitForHeap),并将其配置为容器限制的百分比。更多详情请参阅此处和此处。我们的应用程序的容器化版本最初是用Java8部署的,因此我们启用了实验性的VM选项(-XX:+UnlockExperimentalVMOptions),但后来当我们升级到Java11时,只需要前面的选项。由于Java应用程序是容器中唯一运行的进程,所以我们希望将大部分容器内存用于Java堆。因此,我们将用于Java堆的cgroup限制的百分比增加到75%,而不是默认的25%(-XX:MaxRAMPercentage)。到目前为止,这已经足够为JVM开销提供足够的内存,并有效地将内存用于实际应用程序。如需参考,请参阅此处将应用程序分解为微服务会带来复杂性,Java应用程序也同样如此。这里的复杂性是因为必须为每个单独的服务确定内存分配在这个例子中,30个服务取代了我们以前的一个单片应用程序。我们不想让开发人员花时间为每个单独的服务编写脚本,所以我们必须找到一种方法,根据每个服务的具体情况,云服务器哪家好,动态地、自动地调整内存分配解决方案:基于容器分配自动管理Java内存分配。现在您会问,"是的,但是开发人员不确定分配给容器的资源吗?"答:如果他们能够根据服务的实时需求自动确定正确的容器配置,则不会。底线是容器分配可以通过api进行管理。而api为自动化资源管理开辟了一个广阔的天地。我们喜欢容器,但我们也喜欢Java。这只是我们如何做到两全其美的一个例子。对于那些在企业应用程序中面临类似挑战的人,我希望这篇文章对您有所帮助。事实上,我很想听听你的一些战争故事,所以请留言!