Nginx实现Java服务API接口的开发阶段高可用

2023年 9月 26日 36.4k 0

被骂了

废话不多,不提面试那一套,我们今天简单说说。

众所周知,Java应用不像PHP/ASP/JavaScript等解释性语言一样,不会直接改动代码后代码文件即可自动更新。

图片

然而,当我兴高采烈修完一个我凭本事写的BUG

准备神不知鬼不觉的发布到开发服务器

让前端的好兄弟发现不了我刚才那有BUG的接口

图片

前端的好兄弟脸一沉。。。

”这已经是今天上班到现在第38502 了!“

图片

啊这。。。草率了,后端服务还没起来。

Nginx会因为连不上后端负载而炸掉

场面逐渐失控

算了笔帐,每次重启服务粗略花掉2分钟,

38次,也就是38*2=72分钟。。。

难怪前端的哥们又出去抽烟了,

好家伙,我直接好家伙。

想到老夫改Nginx,百度复制粘贴一把梭。

那就改造下Nginx负载吧

我们来实现Java服务重启过程中

让前端好兄弟们无感知

图片

说简单点,叫开发阶段的API接口服务高可用

本质上还是下面的

负载均衡与灾备策略

伟大且牛逼的伊戈尔·塞索耶夫

在修BUG的时候手一抖

写出了Nginx

图片
(谁在叫我?)

作为反向代理圈子里的小老弟

实现负载均衡可谓是不在话下

于是尝试在开发服务器上主服务的基础下

再起一个除了端口不同
其他一毛一样的服务

我且称之为”备胎服务“

那么 两个服务这会同时在跑了

http://127.0.0.1:8080 主服务
http://127.0.0.1:9090 备胎服务

接下来,我们改动下之前的Nginx服务配置:

改造前

server{
    listen 80;
    #***其他配置***
    location /api {
        proxy_pass http://127.0.0.1:8080;#主服务
        #***其他配置***
    }
}

改造后

upstream api_service{
    server 127.0.0.1:8080;        #主服务
    server 127.0.0.1:9090 backup; #备胎服务 backup 指定只作为其他服务炸掉后的备胎
}
server{
    listen 80;
    #***其他配置***
    location /api {
        proxy_pass http://api_service;         #指定上面定义的上游负载名称
        #***其他配置***
    }
}

好家伙,直接重载nginx服务

接下来 kill掉主服务并重启

再次访问api

好家伙,我直接好家伙,

前端的好兄弟应该不知道我重启了吧?

丝滑,Nice!

接下来,我就可以在修复BUG之后
在前端好兄弟神不知鬼不觉之中重启服务

当然,交替重启主服务和备胎服务,保证两个环境代码差异到最低也是很重要的。

第二天

前端好兄弟端来了一杯卡布奇诺。

本文首次发布于2022-01-18 00:34:00在自己的公众号上,公众号已经没动态了,目前已基于 k8s 实现了 DevOps,本文仅在这里做个分享。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论