不可变的基础架构,热部署和JVM

您是否在生产中部署和取消部署基于JVM的应用程序(无论JVM容器/无容器)? 也就是说,当您拥有某个应用程序或服务的新版本时,是否通过“取消部署”和“热部署”该应用程序的新更新版本来更改正在运行的JVM? 或者,您是否尝试在运行时将应用程序的部署从一个JVM“移动”到另一个JVM?

奥斯汀

许多流行的JVM的功能使您可以执行此操作。 无论是高级Java EE容器,流行的servlet容器,甚至是OSGI容器,由于各种原因,我们都可以在运行时轻松地取消部署和部署应用程序。 但是,我问,这是一个好习惯吗? 也许只有我一个人,但是我真的认为这是绝对可怕的做法。 但是您的运营/ DevOps团队在做什么?

我想从“不可变基础架构”的角度快速撰写博客,该基础随着Linux容器格式开始的DevOps工具更改而得以保持。

James Strachan最近在他的博客中写了关于Docker对JVM生态系统的影响的文章,他在使用Docker 容器时Java应用服务器的数量下降 。 如果您还没有阅读,我鼓励您。

他谈到的一件事是当动态取消部署和热部署应用程序时,JVM对内存泄漏的敏感性。 一次重新部署后,您可能最终会遇到由于泄漏的对象,类结构,数据库连接,套接字,线程,类加载器等原因而导致不稳定或不可预测的系统。

在某些情况下,泄漏这些物体很 容易 做到

因此,也许通过热部署/重新部署破坏我们的运行时部署是一件坏事。

那么我们有什么选择呢? 如何使用新配置和部署的应用程序来启动有问题的JVM的新实例,控制我们有关启动顺序和部署配置的一切。 然后,我们可以将流量从较旧的实例定向到较新的实例,并在适当的时间终止较旧的实例。

这够了吗?

好吧,这个问题直接针对新应用程序和服务的新排列(新版本,新配置以及未更改的事物,例如,代码部署的服务等)是否经过了正确的测试。 。 我个人将要部署到生产环境中的应用程序和服务的任何组合所做出的假设是,已经对相同的排列进行了完全测试, 就像在较低环境中一样。 也就是说,确切的集合已经部署在DEV,QA,IST,UAT,产品镜像,产品等中。更改生产中服务的唯一方法是在较低的环境中正确测试它们。

这种思路是基于强大的自动化,一致的测试,以及一套将变更从最初的系统移植到生产系统的既定学科和流程。 Linxu容器和图像格式为实现此目的而对工具进行了巨大改进,但即使在今天(即,甚至在您能够使用Docker / Rocket /图像格式之前),也都可以灌输思维定势和这些最佳实践。 :

  • 不要在运行时热部署/重新部署/迁移生产中的Java服务
  • 确实非常关注您的交付管道/自动化/测试,以快速更改系统

翻译自: https://www.javacodegeeks.com/2015/05/immutable-infrastructure-hotdeploys-and-the-jvm.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端页面通过web3.eth.accounts无法获取账户信息

粉丝求助: /* 新版的方式 */var web3Provider;if (window.ethereum) {web3Provider window.ethereum;try {// 请求用户授权await window.ethereum.enable();} catch (error) {// 用户不授权时console.error("User denied account access")}} else if (wi…

arp欺骗原理

中间人攻击——ARP欺骗的原理、实战及防御 ​ 1.1 什么是网关 首先来简单解释一下什么是网关,网关工作在OSI七层模型中的传输层或者应用层,用于高层协议的不同网络之间的连接,简单地说,网关就好比是一个房间通向另一个房间的一…

bzoj 3926

后缀自动机扩展到树形结构上。 先建出大的Trie,然后我们得到了一棵Trie树,对于树上的每个节点,保存一个后缀自动机从根走它代表的字符串后到达的节点,每次其儿子就从父亲的这个节点开始扩展。 1 /*******************************…

java memcmp_memcmp,memicmp函数

函数原型:extern int memcmp(void *str1, void *str2, unsigned int n)参数说明:str1和str2为指定作比较的字符串,比较两个字符串的前n个字节。所在库名:#include 函数功能:比较字符串str1和str2在内存区域中的的前n个…

Pycharm社区版安装教程(永久免费,随时升级)

首先进入JetBrain的官网(国内正常访问): https://www.jetbrains.com/ 第一眼看到的界面如下图所示: 然后找到我们的Pycharm专题页: 进入Pycharm的专题页面之后,点击下载按钮(这里有两个按钮,点任何一个都行): 然后进入到真正的下载页面你会发现有两个版本的Pycharm,一个…

解决 invalid input detected at ‘^’ marker的问题

粉丝求助: 解决办法: Switch开不了机(机器bai黑屏,如果找很黑的房间能看到屏du幕内部有zhi点透亮光); 解决方法:这dao是假死机,按住电源键12秒强制关机,然后再按电源键能…

PyCharm社区版设置简体中文界面

点击“File”,出现的菜单中点击“Settings”, 在弹出的界面中,选“Plugins”, 然后在右边输入框中输入“chinese”, 在搜索结果中,选中Chinese(Simplified) Language Pack,点击右边的“install”即可。

JMS和AWS SQS的更多高级内容

如您所知, AWS中的SQS SQS代表“简单队列服务”。 最近,在使用它的同时,我发现了将其称为“简单”的原因之一。 在之前的两篇文章( 此处和此处 )中,我展示了结合Spring Framework将SQS用作JMS队列提供程序 …

w10家庭版安装java不_小编为你分析win10系统安装不了java的设置办法

许多win10系统用户在工作中经常会遇到win10系统安装不了java的情况,想必大家都遇到过win10系统安装不了java的情况吧,那么应该怎么处理win10系统安装不了java呢?我们依照1、查看自己的电脑是32位的还是64位的(x86代表32位的)。java安装要求比…

用C语言实现津巴布韦这道算法题?

粉丝求助: 题目内容如下: 5、津巴布韦 由于计划经济失败,津巴布韦称为世界上通胀率最高的国家。这里的物价即使在一天中也会持续上涨,所以必须实时更新物品价格。例如:1个鸡蛋的价格为35亿津巴布韦元,所以超市做了每位数字的活动标价牌。 钟旭在穆加贝超市打工,有一天遇…

dnslog盲注

dnslog盲注dnslog注入原理DNSlog工具什么情况下使用dnslog注入?Mysql DNSlog原理图DNSlog盲注利用条件DNSlog盲注操作方式实战演练查询当前数据库名:查询当前数据库的第一个表名:查询第users表一个列名:查询users表的username列的…

Python在cmd中配置虚拟环境ERROR: Command errored out with exit status 1:

粉丝求助: 解决办法: 具体步骤: 1.查看Python版本 2.Pythonlibs 中找到对应版本的whl文件,cp37代表3.7版本,win32代表Windows系统32位机,根据自己的电脑位数选择。

java sqlserver ssl_拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)...

工作准备•一台SQLSERVER 2005/SQLSERVER 2008服务•SQLSERVER jdbc驱动程序•Java开发环境eclipse jdk1.8•java反编译工具JD-Core反编译JDBC分析SQLSERVER客户端与服务器通信原理SQLServerConnection.class1、经过反编译分析SQLServerConnection.class文件我们可以看到登录时…

1-9其他数据库注入

文章目录 数据库注入access数据库判断access数据库常用函数查询语句构造联合查询布尔型盲注 mssql数据库mssql数据库判断环境---靶机-2k3_sp2常用函数查询语句构造联合查询报错注入布尔型盲注 数据库注入 access数据库 判断access数据库 根据url的后缀。ASP为后缀名…

自动化专业向往硬件方面靠,有什么好的建议?

我的建议是: 有能力考研就先考研,考不上可以选择就业,学历还是很重要的,门槛。自动化可以找一些相关的知名企业,按照他们的招聘要求要求自己,往这个方法发展,垂直领域研究很深,你就是大佬和专家。 有个帖子讲的挺全的,虽然是文章:自动化人生 下面是理论内容,我直接…

Linux下编译安装以及配置PHP环境

安装准备 依次执行下面命令,不存在的就搜差不多的就行,下面安装的都是后面安装环境可能需要用上的依赖,不管37是不是21,复制粘贴就是了 Ubuntu安装: sudo apt-get update sudo apt-get install gcc autoconf openssl libssl-dev curl libcurl4-gnutls-de…

有什么好一点的方法读jdk源码吗?

建议是: 1:找相关的书在看相关源码时应该对程序有整体了解,比如看虚拟机时至少要知道:垃圾回收算法,Java内存布局,class文件格式,加载连接的过程...很多人看源码一点头绪都没有,就是因为不了解对应的模块是干嘛的(比如Ja

给女朋友道歉的java代码_跟女朋友道歉的话,高情商的哄人句子

女朋友生气了,而且很严重。在这种情况下,不知道做什么挽回她。第一诚实的道歉可以缓和彼此紧张的气氛。重要的是,道歉完就需要说一些话语去哄她,至于怎么哄又是一个技术性的问题了,下面一起来看看跟女朋友道歉的话,高情…

使用Myeclipse完成Hibernate的逆向工程

Hibernate的开发流程一般有两种: 1、由Domain object > mapping > db 2、由db开始,用工具生成生成mapping 和Domain object。 在实际的开发过程中,涉及的表太多了,一个一个的写java实体类很费事费时的。Myeclipse提供了一个…

kali安装docker(有效详细的教程)

前记: 博主有着多次安装docker的丰富经验,曾经为了在kali成功安装docker花费不少时间。在kali2016.3一直到最新的kali2019.4都通吃!所以跟着下面的步骤走,绝对不会出错。(该机子此前没装过docker,并且配置好…