基于EUREKA优雅发布基于EUREKA不优雅的原因如图所示:图片app1的pod启动后会向eureka注册自己的服务名、ip、端口信息。 不优雅的问题在于当app1 pod滚动更新时,新pod拉起后会直接杀掉旧版的pod。旧pod被杀掉后,30秒后eureka才会将此旧pod信息在eureka中清除。 8080ENTRYPOINT ["java","-server","-Xms2560m","-Xmx2560m", "-jar", "/opt/spring-cloud/lib/app1.jar]最终优雅完成以上步骤后 ,发布服务,第一次发布会讲脚本及生命周期钩子带上去。 当第二次发布即会成为优雅发布。原理在pod Terminating状态时通过pre_stop.sh脚本,告知eureka此pod注销,同时sleep 40秒等待,而后清除此pod。
常见的下线方式 优雅的下线方式 灰度发布 蓝绿部署 滚动部署 金丝雀部署 ---- 前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。 实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID和kill -9 PID都是暴力杀死服务,相对于kill -9 PID来说,kill PID就是优雅的。 常见的优雅解决方案,主要包括优雅下线和灰度发布。而实际上,灰度发布的范围就已经包含优雅下线了。 最后,在本文中,我们主要讲述基于 Spring Cloud 和 Euraka 的优雅下线以及灰度发布。 并不是说滚动发布不好,滚动发布也有它非常合适的场景。 金丝雀部署 金丝雀部署又称灰度部署(或者,灰度发布),英文名为 Canary Deployment,是指在黑与白之间,能够平滑过渡的一种发布方式 。
常见的下线方式 优雅的下线方式 灰度发布 蓝绿部署 滚动部署 金丝雀部署 ---- 前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题。 实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID和kill -9 PID都是暴力杀死服务,相对于kill -9 PID来说,kill PID就是优雅的。 常见的优雅解决方案,主要包括优雅下线和灰度发布。而实际上,灰度发布的范围就已经包含优雅下线了。 最后,在本文中,我们主要讲述基于 Spring Cloud 和 Euraka 的优雅下线以及灰度发布。 并不是说滚动发布不好,滚动发布也有它非常合适的场景。 金丝雀部署 金丝雀部署又称灰度部署(或者,灰度发布),英文名为 Canary Deployment,是指在黑与白之间,能够平滑过渡的一种发布方式。
基于EUREKA优雅发布 基于EUREKA不优雅的原因 如图所示: app1的pod启动后会向eureka注册自己的服务名、ip、端口信息。 不优雅的问题在于 当app1 pod滚动更新时,新pod拉起后会直接杀掉旧版的pod。 旧pod被杀掉后,30秒后eureka才会将此旧pod信息在eureka中清除。 将服务变得优雅 1.java服务暴漏端点: management: endpoints: web: exposure: include: service-registry 完成以上步骤后,发布服务,第一次发布会讲脚本及生命周期钩子带上去。 当第二次发布即会成为优雅发布。 原理 在pod Terminating状态时通过pre_stop.sh脚本,告知eureka此pod注销,同时sleep 40秒等待,而后清除此pod。
, 目前 spring boot 嵌入式支持的 web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能 * * @author Andy Wilkinson * @since 2.3.0 */ public enum Shutdown { /** * 优雅停机 (限期停机) * * o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete 4、接口请求执行完成 相关知识 关于此处执行kill -2 而不是 kill -9 doClose(); } } }; Runtime.getRuntime().addShutdownHook(this.shutdownHook); } } kill -9, 暴力美学强制杀死进程,不会执行 ShutdownHook 通过 actuate 端点实现优雅停机 POST 请求 /actuator/shutdown 即可执行优雅关机。
更智能的序列化 在 .NET 9 中,System.Text.Json 为 JSON 序列化带来了更智能的选项。 性能升级 .NET 9 的性能优化集中在 64 位 JIT 编译器 的增强上。 总结 .NET 9 带来了更丰富、更灵活的功能和更高效的编程体验。无论是在 JSON 序列化、LINQ 查询、集合操作还是加密与性能上,.NET 9 都展示了其对现代开发需求的出色响应。 在 .NET Conf 2024 上发布的新特性为 .NET 开发者提供了前所未有的便捷和效率,期待这些新功能能够为我们的开发工作带来更多灵感与可能性! 欢迎大家下载并体验 .NET 9,让我们共同见证它的强大与魅力吧!
本号已有原创文章280+篇,以软件工程为纲,DevOps为基,洞察研发效能全貌,涵盖从需求管理、应用/游戏开发、软件测试、发布部署到运营监控的完整流程。 今天,我无比激动地发现,近日:.NET 9.0.0-preview.2 已经正式发布!这一里程碑式的更新,将为开发者们带来前所未有的全新体验。 无论是推荐系统、图像识别还是自然语言处理,.NET 9都能为开发者提供强大的支持。 五、安全性增强:守护应用的坚实防线 安全性始终是开发者关注的重点。 通过引入新的加密算法、强化身份验证机制以及提升漏洞修复速度,.NET 9为开发者提供了更加坚不可摧的安全保障。 结语 .NET 9.0.0-preview.2的发布,是微软在软件开发领域迈出的又一坚实步伐。
之前的文章讲了优雅下线发布稳定性-优雅下线,今天讲优雅上线 优雅上线也叫:「无损上线」,「延迟发布」,「延迟暴露」。 与之对立的自然是:「有损上线」,「直接发布」 什么是优雅上线 先说说什么情况不是优雅上线 • 应用启动时,Service还没加载完,系统就开始对外提供服务,导致失败调用。 等到应用恢复正常后,再把流量弄回来,让应用继续提供服务,这就是优雅上线。 无论是HTTP应用还是RPC应用,在发布上线时,优雅上线逻辑都是一样的,如下图,服务发布过程中不可用,进行摘流。 待到服务发布完成,重新分配流量 Dubbo的优雅上线 Dubbo的优雅上线有2种方式:延迟发布 和 Qos命令 1.延迟发布 即延迟暴露Dubbo服务,比如你的服务需要一些初始化操作后才能对外提供服务 最佳实践 本文介绍了两种 Dubbo 优雅上线的方法: • 延迟发布(delay=5000) • 不发布 + QOS 指令发布(register=false) 在实际的企业应用中,需要结合具体场景使用
所以准备写一下关于发布稳定性的经验文章,今天先来说说优雅下线。 为什么需要优雅下线 对于线上应用,特别是高并发的应用来说,在服务更新部署发布过程中保证客户端无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求。 所以服务需要自动化机制,自动摘流量并确保处理完已经到达的请求,这也就是优雅下线。 适用场景 JVM主动关闭(System.exit(int)) 应用程序接受SIGTERM或SIGINT信号退出 Dubbo服务优雅下线 Dubbo服务的优雅下线是默认开启的,停机等待时间10秒 # Dubbo 有提供无损上下线的功能,当然可能是收费的啊,但是接入简单,适用于大型系统 图片 总结 这篇文章介绍了无损下线,主要目的是防止应用发布部署过程中产生脏数据问题,下篇文章讲无损上线
之前的文章讲了优雅下线发布稳定性-优雅下线,今天讲优雅上线 优雅上线也叫:「无损上线」,「延迟发布」,「延迟暴露」。 与之对立的自然是:「有损上线」,「直接发布」 什么是优雅上线 先说说什么情况不是优雅上线 应用启动时,Service还没加载完,系统就开始对外提供服务,导致失败调用。 等到应用恢复正常后,再把流量弄回来,让应用继续提供服务,这就是优雅上线。 无论是HTTP应用还是RPC应用,在发布上线时,优雅上线逻辑都是一样的,如下图,服务发布过程中不可用,进行摘流。 待到服务发布完成,重新分配流量 图片 Dubbo的优雅上线 Dubbo的优雅上线有2种方式:延迟发布 和 Qos命令 1.延迟发布 即延迟暴露Dubbo服务,比如你的服务需要一些初始化操作后才能对外提供服务 图片 最佳实践 本文介绍了两种 Dubbo 优雅上线的方法: 延迟发布(delay=5000) 不发布 + QOS 指令发布(register=false) 在实际的企业应用中,需要结合具体场景使用。
所以准备写一下关于发布稳定性的经验文章,今天先来说说优雅下线。 为什么需要优雅下线 对于线上应用,特别是高并发的应用来说,在服务更新部署发布过程中保证客户端无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求。 所以服务需要自动化机制,自动摘流量并确保处理完已经到达的请求,这也就是优雅下线。 适用场景 • JVM主动关闭(System.exit(int)) • 应用程序接受SIGTERM或SIGINT信号退出 Dubbo服务优雅下线 Dubbo服务的优雅下线是默认开启的,停机等待时间10秒 阿里云MSE有提供无损上下线的功能,当然可能是收费的啊,但是接入简单,适用于大型系统 MSE配置无损下线 总结 这篇文章介绍了无损下线,主要目的是防止应用发布部署过程中产生脏数据问题,下篇文章讲无损上线
在使用 SpringBoot 的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭。 applicationContext) throws BeansException { context = applicationContext; } } 好了,SpringBoot的优雅关闭方法也都实现好了 ,也有同学问,如何暴力停止呢,简单,直接kill -9 相应的PID即可。 整编:微信公众号,搜云库技术团队,ID:souyunku 在真实的工作中的时候第三种比较常用,程序中一般使用内存队列或线程池的时候最好要优雅的关机,将内存队列没有处理的保存起来或线程池中没处理完的程序处理完
实际上,优雅下线是目标,而不是手段,它是一个相对的概念,例如kill PID和kill -9 PID都是暴力杀死服务,相对于kill -9 PID来说,kill PID就是优雅的。 常见的优雅解决方案,主要包括优雅下线和灰度发布。而实际上,灰度发布的范围就已经包含优雅下线了。最后,在本文中,我们主要讲述基于 Spring Cloud 和 Euraka 的优雅下线以及灰度发布。 并不是说滚动发布不好,滚动发布也有它非常合适的场景。 金丝雀部署 金丝雀部署又称灰度部署(或者,灰度发布),英文名为 Canary Deployment,是指在黑与白之间,能够平滑过渡的一种发布方式。 Spring cloud系列20 实现服务优雅上下线 Spring Cloud 灰度发布解决方案 一文搞懂蓝绿部署和金丝雀发布 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
上一篇文章《记一次诡异的故障排查经历》中有介绍到我们的部署程序varian,文章发布后有小伙伴对varian很感兴趣,今天就简单的介绍一下我们的varian,揭开她神秘的面纱~ 什么是varian varian 编写的一套部署程序,处在整个部署系统的中心,与CMDB、Jenkins、SVN/Git、镜像仓库Harbor、Kubernetes API、通知系统等都有交互,负责将源代码经过一系列的处理后打包成Docker镜像,并发布到各个环境 这样做的好处是每个项目部署发布逻辑都比较简单,修改任何一个项目都对其他项目无影响;但缺点也很明显,各个项目脚本分散,任何项目信息变更都需要取改这个脚本,且一些公共功能的修改就需要所有项目脚本都改一遍,难免不出问题 CMDB拉取项目下的主机列表、邮件通知等从shell脚本中单独抽出来用python重构,并用python实现了一个主入口,所有项目部署都通过这个主入口进入,然后调用python或shell脚本来实现部署发布整过程
前言:关于Spring Boot、Spring Cloud应用的优雅停机,平时经常会被问到,这也是实际应用过程中,必须要掌握的点,这里简单总结下以前我们一般在实现的时候要把握的几个要点: 关闭命令方面 ,一定要杜绝 kill -9 操作 多线程采用线程池实现,保证每个异步线程都可以随Spring的生命周期完成正常关闭操作 有服务注册与发现机制下的时候,通过Spring的应用关闭事件、Java应用的ShutdownHook o.s.b.w.e.tomcat.GracefulShutdown : Graceful shutdown complete 4、接口请求执行完成 相关知识 关于此处执行kill -2 而不是 kill -9 doClose(); } } }; Runtime.getRuntime().addShutdownHook(this.shutdownHook); } } kill -9, 暴力美学强制杀死进程,不会执行 ShutdownHook 通过 actuate 端点实现优雅停机 POST 请求 /actuator/shutdown 即可执行优雅关机。
转自:开源中国, www.oschina.net/translate/java-9-new-features Java 8 发布三年多之后,即将快到2017年7月下一个版本发布的日期了。 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它的更新。 这里有九个令人兴奋的新功能将与 Java 9 一起发布。 1. Java 平台级模块系统 Java 9 的定义功能是一套全新的模块系统。当代码库越来越大,创建复杂,盘根错节的“意大利面条式代码”的几率呈指数级的增长。 这实际上意味着未来的很长一段时间,你都不能在库中运用 Java 9 所提供的新特性。 这是特别为 Java 9 准备的 class 版本,可以运用 Java 9 所提供的特性和库。
距离最终版本还有一个月的时间,Microsoft 已经交付了 .NET 9 的第二个也是最后一个候选版本。. NET 团队在公告帖子中写道[1],“当我们为 11 月的 .NET 9 正式发布 (GA) 版本做准备时,我们正在对性能、稳定性和任何其他优化进行最后的润色,使其成为 .NET 9 的最佳版本。. 您可以从 .NET 网站下载 .NET 9 Release Candidate 2[2]。 开发人员可以在 Microsoft 的“.NET 9 中的新增功能[9]”文档中查看下个月推出[10]的所有新功能的汇总,该文档已于昨天更新。 .NET 9 中的新增功能: https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-9/overview [10]下个月推出dotnetconf
随着 Debian”Stretch” 9 的正式发布和大规模部署,HardenedLinux 社区也发布了 STIG(安全技术实现指南) for Debian 9 的版本,STIG 是美国国防部对 IT 设施的安全防护合规,其中也包含了 GNU/Linux 操作系统,自 STIG for Debian 8 发布已经有两年时间【注】,Debian 9 的 STIG 实现参照 RHEL 7,相比上一版,STIG for Debian 9 和 RHEL-STIG 有更高的耦合度,除了 SELinux 和少量条目需要手工检测外,大部分都已经在 Debian 9 上实现了自动化,未来我们会继续完善 MAC/RBAC 基于 Debian 9 的替代方案以满足 STIG 的标准化合规。
02d19577ad9146a58d2558fcf0becf6c Boot ID: cb58027076c0416ba3dab9775b26d2fd Virtualization: qemu Operating System: Debian GNU/Linux 9 在 Debian 9 中,要更改系统主机名和相关设置,可以使用 hostnamectl 命令。 02d19577ad9146a58d2558fcf0becf6c Boot ID: cb58027076c0416ba3dab9775b26d2fd Virtualization: qemu Operating System: Debian GNU/Linux 9
K8S自身带有优雅终止Pod容器的机制,发送SIGTERM终止信号,在规定的terminationGracePeriodSeconds优雅时间内完成Pod优雅终止动作。 所以对于单个容器只有一个pid为1的进程来说,使用K8S默认的优雅机制就可以,只需要拉长terminationGracePeriodSeconds优雅时间,确保在规定时间内完成容器优雅终止。 容器优雅发布的配置记录: 这里以customer-services应用模块的pod容器优雅配置为例: 1)将nacos主动下线的脚本在镜像制作阶段推送到容器内部 编写customer-services volumes: - name: customerlog hostPath: path: /var/log/k8s_log/customer-services 容器发布流程 生产环境通过Jenkins配置的Pod容器部署流程:即从Gitlab拉取代码、打包、制作镜像、上传镜像到Harbor仓库、更新pod等发布流程。