作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
SpringCloud实现百万级,千万级高并发
包含内容: 源码,全套工具
作者QQ549710689
详情描述

如遇视频不清晰,请最大化观看演示

官网:http://www.ckplayer.com,版本号:X

以下仅列出部分功能,全部功能请至官网 《手册》查看

单独监听功能:


播放状态:
跳转状态:无
缓冲:100
当前音量:0.8
是否全屏:否
控制栏:显示
还未结束
当前播放时间(秒):0
前置广告状态:
鼠标位置
切换清晰度:
点击监听:
监听截图功能

Custom Tab

    今天我们一起聊聊如何使用SpringCloud来实现百万级以及千万级的并发, 一开始我们讲解一些理论上的知识,后面我们结合一个实例进行讲解

    有一定开发经验的程序员是如何实现高并发的呢, 大家脱口而出的一定是apache, nginx实现动态代理和负载均衡, 也就是在nginx后面部署多台tomcat应用程序,所有用户的访问请求先到达nginx,然后再由nginx根据一定的算法将请求转给tomcat应用程序, 也就是说一个用户的多次请求可能被不同的tomcat处理, 用户在一台tomcat登录后,后面的访问都是跟用户相关联的, 那其它tomcat是如何得知这个用户已经登录的呢, 原理就是tomcat集群使用session共享机制, 一个tomcat创建session并且修改session中的数据,这个session及相应的数据都会被同步到其它所有tomcat上,当请求访问其它tomcat中,便能找到相应的session信息

    当用户越来越多,访问频率变大时, 一台nginx是无法支撑百万级的并发(一个nginx的并数是几十万), 这个时候怎么办呢,  我们可以再次部署一套nginx + tomcat集群(我们记为B服务, 之前记为A服务), 刚才所有请求都是到达A服务,那如何让请求到达B服务呢,  可以采用DNS分流技术, 用户通过域名访问资源, 在请求到达nginx前, DNS采用算法决定访问对应的nginx服务, 这一步实现的话, 那最后只要保证A,B二套服务的tomcat的所有session是共享的, 便能实现服务的扩容

    思路介绍完, 下面我们使用SpringCloud结合eureka(注册中心), 网关, 业务服务来做一个简单的实现


项目对应的实例代码可以通过右侧【下载实例】按钮获取 

开发工具:  IntelliJ IDEA2017    JDK1.8    Redis3.2    Maven3.0.2

【项目包含内容】(见下图): 

image.png

1. 准备两台机器(A, B), 分别在这二台机器按照下面步骤部署服务, 下面讲解A机器上的部署, B机器同理

         A机器ip:  192.168.1.4            B机器ip:  192.168.1.2

2. 在A上启动注册中心服务eureka, 监听端口8761     启动命令:  java -jar eureka.jar --server.port=8761

3. 启动网关服务api-gateway, 监听端口9000            启动命令:  java -jar api-gateway.jar --server.port=9000

4. 启动二个业务服务 sessionshare, 监听端口分别为 8080, 8090

     启动命令: java -jar sessionshare.jar --server.port=8080    java -jar sessionshare.jar --server.port=8090

   注意: 在启动sessionshare时,需要提前安装并且启动一个redis服务  (设置redis访问密码:  config set requirepass 123456)


在地址栏中输入 192.168.1.4:8761, 看到下图即说明所有服务启动成功

image.png


5. 通过网关访问业务接口:   http://192.168.1.4:9000/service-session-redis/getUser

           9000为网关监听端口, service-session-redis为业务在注册中心上的名字,   getUser为 service-session-redis中接口

  image.png


6. 同理我们在B机器上访问

image.png


比较5,6二个步骤中的strRandom是不一样的,说明他们的session没有共享

那这是什么原因呢, 地址栏中访问服务的ip不一样, 如果采用域名访问, dns分流的话,A, B中的session值是一样的

那有没有办法验证我们的思路呢, 我们可以将 A机器的cookie值拷贝到B机器上,然后再访问相应的接口,这一次AB中的session数据就一样了


image.png

Home