springcloud线上发布超时方案之终极杀招:预热(测试用例)
springcloud线上发布超时系列文章:
springcloud线上发布超时之feign(ribbon饥饿加载)
springcloud线上发布超时方案之终极杀招:预热(测试用例)
前言
经过上面两章的优化,超时报错有所减少,但是只是得到了缓解但是当流量切换时还是会有大量超时。
方案
这里又增加了一个启动后预热,即在程序启动后执行测试用例n次,让hystrix、web容器线程池等资源初始化。在测试用例执行完成之前,为了保证服务不对外提供服务,这里可以分两种。
延迟注册到注册中心
如果时使用注册中心来进行服务发现等,这里可以采用延迟注册来保证测试用例的成功执行,
如果时eureka为注册中心可以配置initial-instance-info-replication-interval-seconds参数,默认是40s,可以将其改为1分钟
如果是consul或者zk,可以修改响应的延时注册时间,或者修改服务端有效时间
kubernetes中增加服务ready延时时间
这里再deploy.yml中配置如下:
spec:
replicas: 1
template:
spec:
containers:
- args:
livenessProbe:
failureThreshold: 5
httpGet:
path: /health
port: 8080
scheme: HTTP
initialDelaySeconds: 60 //延迟时间s
案例
这里测试用例不建议使用spring的 @PostConstruct注解,最好是等web容器启动就绪后再执行测试用例,这里给一个我的demo
@Slf4j
public class WebContextInit {
private RestTemplate restTemplate = new RestTemplate();
private static WebContextInit webContextInit = new WebContextInit();
private WebContextInit(){}
public static WebContextInit getInstance() {
return webContextInit;
}
public void init() {
if (isTestEnabled()) {
for(int i=0;i<10;i++){
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
String url = "http://localhost:8080/srch-recommend-plt/re-sort";
log.warn("WebContextInit.testResort start");
String body = "xxxbody";
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
HttpEntity<string> entity = new HttpEntity<>(body, headers);
for (int i = 0; i < appConfig.getTestCount(); i++) {
try {
restTemplate.postForObject(url, entity, String.class);
} catch (Exception e) {
log.error("WebContextInit.testDemo error" + e.getMessage());
}
}
log.warn("WebContextInit.testDemo end");
}
});
thread.start();
}
}
}
然后在启动类中初始化:
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
WebContextInit.getInstance().init();
}
}
</string>
springcloud线上发布超时方案之终极杀招:预热(测试用例)的更多相关文章
- Arthas - Java 线上问题定位处理的终极利器
前言 在使用 Arthas 之前,当遇到 Java 线上问题时,如 CPU 飙升.负载突高.内存溢出等问题,你需要查命令,查网络,然后 jps.jstack.jmap.jhat.jstat.hprof ...
- kafka线上滚动升级方案记录
kafka升级方案 为什么进行kafka升级 一.修改unclean.leader.election.enabled默认值Kafka社区终于下定决心要把这个参数的默认值改成false,即不再允许出现u ...
- 今天,你遇到redis线上连接超时了吗?
一封报警邮件,大量服务节点 redis 响应超时. 又来,好烦. redis 响应变慢,查看日志,发现大量 TimeoutException. 大量TimeoutException,说明当前redis ...
- Jenkins集成Docker实现镜像构建和线上发布
原文地址:http://www.cnblogs.com/keithtt/p/6410229.html 大概过程如下图: 由于需要用到docker打包镜像,jenkins宿主机上需要安装docker,原 ...
- 在windows环境下部署nuxt项目(线上发布部署)
因为公司项目需要兼容SEO,同时我们也一直希望能够真正的实现前后端分离,于是毫不犹豫的选择了nuxt. 话说要重构前后端分离真是一个大工程,由于各种原因我们团队花了近两年时间都没有完成,最近才又重启把 ...
- 线上 CPU100% 排查方案
问题:生产服务器上部署了几个java程序,突然出现了CPU100%的异常告警,你如何定位出问题呢? 下面给出两种系统下的排查步骤,都是一模一样的,只是命令稍有区别! 查消耗cpu最高的进程PID 根据 ...
- TFS线上生成环境发布历程
继前文 TFS在项目中Devops落地进程(上) TFS在项目中DevOps落地进程(下) 自从之前将开发环境使用TFS进行了自动化之后,就享受在此成果中,其他后续进度就停顿了好一段时间. 毕竟在我们 ...
- Java线上问题排查神器Arthas快速上手与原理浅谈
前言 当你兴冲冲地开始运行自己的Java项目时,你是否遇到过如下问题: 程序在稳定运行了,可是实现的功能点了没反应. 为了修复Bug而上线的新版本,上线后发现Bug依然在,却想不通哪里有问题? 想到可 ...
- 线上SpringCloud网关调用微服务跨机房了,咋整?
1.前言 公司内考虑到服务器资源成本的问题,目前业务上还在进行服务的容器化改造和迁移,计划将容器化后的服务,以及一些中间件(MQ.DB.ES.Redis等)尽量都迁移到其他机房. 那你们为什么不用阿里 ...
- Springcloud及Git线上配置详解
SpringCloud 这个阶段该如何学? 三层架构 + MVC 框架: Spring IOC AOP SpringBoot,新一代的JavaEE开发标准,自动装配 模块化~ all in one,代 ...
随机推荐
- Python中multiprocessing.Pool进程池实现守护进程的方法
前言 在multiprocessing.Process中可以使用p.daemon=True将子进程p设置为守护进程. 那么在multiprocessing.Pool进程池中怎么实现这个功能呢? 什么是 ...
- Linux上快速安装 RabbitMQ
1.默认安装最新版,安装erlang apt-get install erlang 2.安装最新版 rabbitmq sudo apt-get update sudo apt-get install ...
- 树莓派4B-控制直流电机
树莓派4B-控制直流电机 一.硬件介绍 树莓派 L298N电机驱动模块 直流电机 外接电源 杜邦线 二.硬件连接 原理图: 注意:ENA和ENB的跳冒必须安上去,如果没有拿杜邦线连通! 三.代码编写 ...
- [无线隔离]同一WIFI下两主机无法互联
问题描述 在公司WIFI下想进行两台主机之间的数据传输,却发现虽在同一网段且防火墙关闭也无法ping通. 在一台主机下查看ARP表,发现没有对方的IP与MAC记录. 使用Wireshark抓包,发现虽 ...
- 关联的巧妙用法limit_choices_to
sa_no = models.ForeignKey(CU004HModel, verbose_name='销货单', on_delete=models.PROTECT, related_name='C ...
- [oeasy]python021_赛博宝剑铭文大赏_宝剑上的铭文_特殊符号和宝物
继续运行 回忆上次内容 上次修改了 程序 将 石中剑 变成了 红色 爱之大剑 添加图片注释,不超过 140 字(可选) 可以 让宝剑 具有 更多 铭文符号 和 颜色 吗? 铭文 亚 ...
- [oeasy]python0132_变量含义_meaning_声明_declaration_赋值_assignment
变量定义 回忆上次内容 上次回顾了一下历史 python 是如何从无到有的 看到 Guido 长期的坚持和努力 编程语言的基础都是变量声明 python是如何声明变量的呢? 变量 想要定义变量 ...
- [oeasy]python0072_修改字体前景颜色_foreground_color_font
修改颜色 回忆上次内容 m 可以改变字体样式 0-9 之间设置的都是字体效果 0 重置为默认 1 变亮 2 变暗 3 斜体 4 下划线 5 慢闪 6 快闪 7 前景背景互换 8 隐藏 9 中划线 叠加 ...
- oeasy教您玩转vim - 41 - # 各寄存器
各寄存器 回忆上节课内容 上次是复制粘贴 y就是把东西yank到寄存器里,就是复制 d就是把东西delete到寄存器里,就是剪切 yank也可以配合motion 不管是yank.delete都是把 ...
- 使用ollama本地部署gemma记录
1.官网https://ollama.com/安装ollama 2.先配置一下环境变量 不然下载的东西会默认丢在C盘里 3.cmd执行ollama run gemma:2b (使用后推荐直接下7b,2 ...