本地模拟启动分布式遇到问题

使用maven打包后端

image-20220906094343937

target目录下右键jar包打开控制台

 java -jar .\partner_matching_backend-0.0.1-SNAPSHOT.jar --server.port=8081

一个端口只能启动一个应用,指定8081就可以覆盖默认参数了

8081端口启动成功

image-20220906094844868

用户的登录态是记录到服务器上的

用swagger+Knife4j登录

image-20220906105314110

前端在向后端发请求的时候带了一个JSESSIONID

image-20220906105603476

后端打个断点

image-20220906105715501

image-20220906105815025

与JSESSIONID一样

然后用8081端口的swagger调试,getCurent,诶,怎么取不到,然后8080的也取不到了

image-20220906110448416

应该是由于同一个前端,JSESSIONID被覆盖掉了

8080端口登录一下image-20220906112447837

8081端口登录一下image-20220906112535267

为什么JSESSIONID会变,因为是同一个域名

Session 共享

种 session 的时候注意范围,cookie.domain

比如两个域名:

aaa.abc.com

bbb.abc.com

如果要共享 cookie,可以种一个更高层的公共域名,比如 abc.com

为什么服务器 A 登录后,请求发到服务器 B,不认识该用户?

用户在 A 登录,所以 session(用户登录信息)存在了 A 上

结果请求 B 时,B 没有用户信息,所以不认识。

image-20220906113624176

解决方案:共享存储 ,而不是把数据放到单台服务器的内存中

image-20220906113639856

如何共享存储?

  1. Redis(基于内存的 K / V 数据库),Redis 基于内存,读写性能很高,简单的数据单机 qps 5w - 10w
  2. MySQL
  3. 文件服务器 ceph

解决方法点这里

Q.E.D.


春风亦有春风愁,不劳春风为我忧