利用Redis+Nginx实现Sping-Boot应用的负载均衡部署
2017-10-08 10:53
746 查看
利用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 @EnableRedisHttpSession public class RedisSessionConfig { }
好吧,要做的事情已经做完了,使用spring
9796
-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是一个不错的选择。相关文章推荐
- 【nginx】nginx:利用负载均衡原理实现代码的热部署和灰度发布
- SpringBoot+Redis+Nginx实现负载均衡以及Session缓存共享
- Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- nginx:利用负载均衡原理实现代码的热部署和灰度发布
- Nginx反向代理Tomcat实现现负载均衡(高可用)以及利用redis+Session同步会话共享配置详解
- SpringBoot+Redis+Nginx实现负载均衡以及Session缓存共享
- Windows环境下Nginx+Tomcat+Redis实现应用服务器集群负载均衡和Session共享
- springboot整合redis使用nginx实现负载均衡实现session共享
- 负载均衡NGINX+redis实现SESSION共享
- Nginx+tomcat+redis集群共享session实现负载均衡
- 利用lvs+keepalived实现高可用负载均衡环境的部署(安装常见错误)
- nginx Win下实现简单的负载均衡(1)nginx搭建部署
- Spring Boot项目利用Redis实现集中式缓存
- springboot项目利用devtools实现热部署,改动代码自动生效
- 利用saltstack部署高可用集群及负载均衡(keepalived+haproxy+nginx)
- 利用 Nginx 负载均衡实现 Web 服务器更新不影响访问
- keepalived+nginx实现高可用负载均衡部署
- Spring boot实现应用打包部署的示例
- 【Nginx应用】3.Nginx+Tomcat实现Web服务负载均衡(上)
- 利用saltstack部署高可用集群及负载均衡(keepalived+haproxy+nginx)