利用Redis+Nginx实现Sping-Boot应用的负载均衡部署
来源:互联网 发布:简单bbs论坛源码php 编辑:程序博客网 时间:2024/06/18 14:49
利用Redis+Nginx实现Sping-Boot应用的负载均衡部署
@(个人博客)
众所周知,通过Nginx可以简单高效的实现对web后台服务负载均衡的需求。Nginx中内置权重等策略可动态配置实际连接每个后台进程的策略。
Spring-Boot是时下最为流行的web后台框架,其开箱即用的特性、与外部组件良好的集成性,越来越受到程序员们的青睐。
要实现多个Spring-Boot程序共同向外提供相同的web服务能力(每个进程拥有相同的能力,横向扩展),需要解决三个主要的问题:1、多进程间共享用户Session;2、每个进程需要无状态,特殊情况下需要共享的状态,需要集中化管理;3、对于某些一致性要求较高的场景,需要使用分布式锁进行相关逻辑控制。Spring-Boot提供与Redis无缝集成的能力来解决第一个问题,第二和第三个问题,需要读者自己根据自己应用的特点有针对性的解决。
1、Spring-Boot结合Redis实现外部用户Session
直接上干货,首先,我们需要在pom文件中引入redis和spring-Session的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId></dependency><dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId></dependency>
然后,我们需要在application.yml文件中配置一个redis,比如这样:
spring: redis: host: redis-session port: 6379
这边作的配置比较简单,只设置了host和port,并且没有设置密码。实际上,spring-data-redis中会使用jedis连接池,而jedis连接池底层使用了comoms-pools2来管理连接对象,commons-pool2的配置,都可以在这边配置。
接着,需要新增一个配置类:
@Configuration@EnableRedisHttpSessionpublic class RedisSessionConfig {}
好吧,要做的事情已经做完了,使用spring-boot世界就是这么简单,这个时候不用修改原来的代码,所有的httpsession信息就会保存到redis中了,如下图所示:
2、配置Nginx连接多个Spring-Boot进程
Spring-Boot应用启动后,每个应用实例会对应一个端口,假设我们要对两个完全相同的应用实例进行负载均衡,其端口分别为8888和9999,那么Nginx可以如下配置:
upstream 127.0.0.1 { server 192.168.1.180:8888 weight=1; server 192.168.1.180:9999 weight=1; }server { listen 8080; server_name 127.0.0.1; location / { proxy_pass http://127.0.0.1; proxy_set_header X-Real-IP $remote_addr; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
这个配置已经是支持websocket协议的标准配置了。Ngnix的配置还是比较复杂的,后面可以单独写一篇博文来说明。在配置负载均衡时,需要特别注意配置好http响应的超时时间,当一个应用实例宕机时,假如请求被分发到这个实例中,那么需要超时时间长度,原请求才会被转发到仍工作的应用实例中。那么,如果设置了一个很长的超时时间,那就有可能会导致某些请求响应非常慢的情况出现,这一点要特别注意。
3、总结
使用Spring-Boot+Ngnix+Redis实现后端的负载均衡,是比较清晰易懂的,对于应用实例不是特别多,又有一定负载均衡需求的场景,是一套性价比较高的解决方案。假如应用实例特别多,服务治理难度很大,就可以考虑使用微服务框架了,推介Spring-Cloud是一个不错的选择。
- 利用Redis+Nginx实现Sping-Boot应用的负载均衡部署
- 利用nginx实现数据库的负载均衡
- nginx:利用负载均衡原理实现代码的热部署和灰度发布
- nginx负载均衡+docker部署应用
- 用Nginx+Redis实现session共享的均衡负载
- Nginx+ISS+Redis实现完美负载均衡
- 负载均衡NGINX+redis实现SESSION共享
- 利用nginx的upstream实现负载均衡(带安装脚本)
- 负载均衡之Nginx+tomcat+redis实现session共享的负载均衡
- nginx负载均衡部署
- 利用Nginx+Keepalived实现web负载均衡
- 利用Nginx + tomcat实现负载均衡
- Nginx负载均衡的实现
- nginx负载均衡的实现
- 实现nginx的负载均衡
- 实现nginx的负载均衡
- nginx+tomcat实现应用服务器负载均衡
- Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- 2. OpenMAX系列 —— SoftOMXPlugin
- xml和Json的优缺点
- multi-paxos和raft区别
- MySQL-help
- Construct2 ——— 零基础也能自己做游戏
- 利用Redis+Nginx实现Sping-Boot应用的负载均衡部署
- 2017 JUST Programming Contest 3.0 B. Linear Algebra Test
- 笔试_java基础综合题
- 什么是XML?
- 模拟SPI实现和调试流程
- Python 数据批量插入 MySQL
- python网络数据采集实例-在一个网站上随机地从一个链接跳到另一个链接&采集整个网站
- .XML
- 机器学习十大算法之扫盲