服务器集群后产生那些问题

分布式SESSION的整个一个原理,其实集群有集群的好处,不集群有不集群的好处,session原理讲了一下之后,

这节课我们谈到分布式session,谈到分布式session的时候,就是要谈到session服务器集群的时候,会发生哪些问题,

服务器集群之后,会出现哪些问题,分布式解决方案,服务器一旦集群以后,会出现哪些问题,这些问题其实都是属于分布式

解决方案里面的,第一个是分布式session的问题,为什么叫做分布式session的问题,因为session它是存放在服务器上面的,

这个时候一旦服务器集群的时候,sessionId可能对应找不到session


服务集群会产生那些问题
如果服务器产生了集群后,因为session是存放在服务器上,客户端会使用同一个Sessionid在多个不同的服务器
上获取对应的Session,从而会导致Session不一致问题。

服务器集群后产生那些问题_第1张图片

那么第二个问题是什么问题呢,分布式调度平台,这是一个非常重要的问题,尤其一旦你们服务器集群的时候,

肯定是会产生问题的,在这个地方我给大家画个图,最基本的我们这边叫做客户端,既然是客户端的话,我之前讲过的,

中间是会走一个nginx的服务器,反向代理,那么既然要走nginx反向代理的时候,那么在nginx反向代理的背后,

是不是有非常多的nginx集群,集群的目的是为了什么,是为了解决高并发,当你有台服务器宕机之后,比如这边我举个例子,

这边我们叫做TOMCAT01,把它在copy几个,TOMCAT02,TOMCAT03,TOMCAT04,这个时候把它pass掉,这个地方我们这样去看,

配置一些负载均衡的算法,轮询还有随机,我又不多说了,还有IP绑定,常用的就这三种,假设我们的nginx使用轮询机制的

时候,它是会访问到每一台服务器上面去,如果客户端一旦你做集群的时候,这个时候是什么样的过程我讲一下,一旦你在

这边做这么多服务器集群的时候,不一定有分布式session的问题,还有哪些问题呢,第一个是分布式session的问题,

相当于在这个时候,客户端向nginx请求的时候,我的session是存放在服务器上面去的,他发来第一个请求,第一个请求通过

nginx算法到tomcat01,是不是tomcat01这么一台服务器上面去了,他既然分到TOMCAT01服务器上去以后,这个时候就会

返回一个sessionId,给客户端,返回sessionId给客户端的时候,第二次它会轮询到TOMCAT02上面来,这个时候客户端会拿

sessionId去TOMCAT02找的时候,因为我的session是存放在TOMCAT01上面,当你第二次再轮询的时候,轮询到TOMCAT02的时候,

在我的TOMCAT02上面找就根本找不到了,就会产生什么问题呢,就会产生SESSION不同步的问题,是不是这样的,这个你们理解了没有,

你们再去看一下,分布式任务调度平台,你们现在可能没有学,如果服务器集群之后,如何保证定时Job的唯一性,因为你要知道,

我给你们举个例子,如果一旦我的服务器做了集群之后,就是TOMCAT01里面有我的定时JOB代码,因为你这个时候要把你的war包

在TOMCAT01,TOMCAT02,TOMCAT03,TOMCAT04,这四台服务器上都会导入相同war包,一旦你是相同war包的时候,是不是会导致你

四台服务器上的JOB同时执行起来,是不是这样的,想一想,是不是这样的,就是你服务器集群的时候,就是把war包打包到不同的

服务器上面去,会在四台服务器上同时运行,是不是没有唯一了,是不是这样重复了,这是我们后面会学到的,服务器集群之后

会导致定时JOB的唯一性,其实用专业术语表达是什么呢,叫做幂等性,你们后面会学到的,这是第二个问题

服务器集群后产生那些问题_第2张图片

第三个就是分布式锁的解决方案,分布式锁的解决方案,在这边我给大家讲一下,分布式锁很多听说过的,

上一节课我们已经把zookeeper讲完了,分布式锁讲了三四次,理解还是比较深的,那么我给你讲一下,有的人觉得分布式锁

使用redis性能确实不是很好,但是redis里面有一个非常好的框架,其实他还是比较好的,首先分布式素偶有哪些解决方案呢,

基于zookeeper,zookeeper实现分布式锁相对而言是比较简单的,使用临时节点,加上事件通知,还有一个是基于数据库的,

基于数据库完全没有必要说出来,因为别人都懂,还有一种版本是基于redis,基于redis setnx,这种方式它是有缺点的

不推荐的,代码复杂,他很容易产生死锁现象的,在分布式中,SpringCloud里面,对redisson,他实现分布式锁,确实比较不错,

完全可以和zookeeper进行匹配了,redis setnx这种方法不靠谱,很容易产生死锁现象,对redisson这种方式也很简单,

和zookeeper一样的,它是redis中的,提供了很多关于分布式的解决方案,比如分布式锁,这是我们后期会重点讲的,

还有分布式日志收集问题,你们自己想一下,比如我举个例子,这个时候我们客户端向nginx发起请求之后,比如正常情况下打印日志的

时候,他可能通过轮询算法的时候,他这个日志就会打印到TOMCAT01上去的,那么我讲一下,你们可能不知道,我在打印的时候发生

什么问题呢,我们的服务器他有20台节点,20多台节点,就是服务器集群有20几台节点,你们知道我们当时查询日志有多痛苦吗,

怎么查的吗,相当于我们举个例子,分配5个人,一个人查四台,真的是这样的,因为没有用到分布式日志系统,就很麻烦,

一般我们会用到分布式日志收集系统的,你们知不知道分布式日志收集系统用到什么呢,叫elk,也是在我们这边会讲的,

而且大型的电商会有自己内部的分布式日志收集系统,其实原理都是一样的,有的用KAFKA做收集日志,也有的,KAFKA,

这是第四个点

服务器集群后产生那些问题_第3张图片

第五个点是什么,就是你服务器一旦集群之后,可能会出现哪些问题,想一想,分布式事务问题,你们想想分布式事务和集群

有关系吗,分布式事务和集群有没有关系,你们想想,在这边我说一下,分布式事务记住一点,和集群是没有关系的,

是和RPC远程通讯的时候,服务和服务之间实现事务原理,你们很多人把分布式事务理解成很难,其实我可以在这里告诉大家,

分布式事务真的没有你们想的那么难,我自己对分布式事务理解的非常非常透彻,如何纯手写一个分布式事务解决框架,

因为如果你们自己能够写出来的情况下,模仿lcn,因为我看过源码的,因为写的话才能够理解的深刻些,我看过一些人写过的

分布式方案,他们讲的不是很详细,尤其底层这块,他们只讲应用层这块,用什么atomic,jdk,这些都会用,更重要的还是在一个

底层的实现,比较喜欢讲写一个框架出来,其实分布式方案里面还有很多,后面会学到的,叫做一个分布式的配置中心,

你们要了解一下,分布式的配置中心,分布式也是和集群没有关系的,它是属于分布式解决方案,但是他不属于集群关系的,

这个你们可能现在不懂没关系,在这里我大致的讲一下分布式解决方案,我在这边就大体说一下,分布式锁有点偏向于全局ID,

你在做项目的时候遇到哪些问题,那么我在这边讲一下,当问到这个东西以后,我之前在项目中报了一个错,报了一个空指针,

我想知道空指针吗,我在项目中遇到很多问题,因为我们的项目是分布式的,一旦我们的项目做了集群之后,他可能会遇到很多

问题,因为session它是存在服务器里面的,可能使用sessionId去服务器找Session的时候找不到,还有定时JOB

服务器集群后产生那些问题_第4张图片

 

你可能感兴趣的:(服务器集群后产生那些问题)