이 글에서는 주로 Linux 클러스터/분산 환경에서 세션 처리를 위한 5가지 전략을 소개합니다. 이 글에서는 모든 사람의 학습이나 작업에 필요한 특정 참고 학습 가치가 있습니다. 편집자를 따라가서 함께 배워보세요.
머리말
일반적으로 클러스터 환경을 구축한 후 고려해야 할 문제 중 하나는 사용자 접속으로 인해 발생하는 세션을 어떻게 처리할 것인가이다. 처리가 이루어지지 않으면 사용자는 자주 로그인하게 됩니다. 예를 들어 클러스터에 두 개의 서버 A와 B가 있는 경우 사용자가 처음으로 웹 사이트를 방문하면 Nginx는 로드 밸런싱을 통해 사용자 요청을 서버 A로 전달합니다. 이때 서버 A는 사용자를 위한 세션을 생성합니다. 사용자가 두 번째로 요청을 보내면 Nginx는 서버 B에 요청의 로드 밸런싱을 수행합니다. 이때 서버 B에는 세션이 없으므로 사용자는 로그인 페이지로 이동됩니다. 이는 사용자 경험을 크게 감소시키고 사용자 손실로 이어질 수 있습니다. 이러한 상황은 프로젝트에서 절대 발생해서는 안 됩니다.
생성된 세션을 고정 세션, 세션 복사 또는 세션 공유를 통해 사용자 경험을 보장하기 위해 처리해야 합니다.
아래에서는 5가지 세션 처리 전략을 설명하고 각 전략의 장단점을 분석하겠습니다. 할 말이 많지 않으니, 자세한 소개를 살펴보겠습니다.
첫 번째 유형: 고정 세션
원리: 고정 세션은 사용자를 특정 서버에 고정하는 것을 의미합니다. 예를 들어 위의 예에서 사용자가 첫 번째 요청을 하면 로드 밸런서는 로드 밸런서가 됩니다. 요청은 서버 A로 전달됩니다. 로드 밸런서가 고정 세션을 설정하면 사용자의 모든 후속 요청이 서버 A로 전달됩니다. 이는 사용자와 서버 A를 함께 고정하는 것과 같습니다. 이것이 고정 세션 메커니즘입니다. .
이점: 간단하며 세션에서 어떤 처리도 할 필요가 없습니다.
단점: 내결함성 부족. 현재 액세스한 서버에 장애가 발생하여 사용자가 두 번째 서버로 이동하면 해당 세션 정보가 유효하지 않습니다.
적용 가능한 시나리오: 실패는 고객에게 작은 영향을 미칩니다. 서버 오류는 확률이 낮은 이벤트입니다.
구현 방법: Nginx를 예로 들면 업스트림 모듈에서 ip_hash 속성을 구성하여 고정 세션을 구현할 수 있습니다.
upstream mycluster{ #这里添加的是上面启动好的两台Tomcat服务器 ip_hash;#粘性Session server 192.168.22.229:8080 weight=1; server 192.168.22.230:8080 weight=1; }
두 번째: 서버 세션 복제
원리: 서버의 세션이 변경(추가, 삭제, 수정)되면 노드는 세션의 모든 내용을 직렬화한 후 다음으로 브로드캐스트합니다. 다른 서버에 세션이 필요한지 여부에 관계없이 다른 모든 노드는 세션 동기화를 보장합니다.
장점: 내결함성, 서버 간 세션이 실시간으로 응답할 수 있습니다.
단점: 세션 수가 많으면 네트워크 정체가 발생하고 서버 성능이 저하될 수 있습니다.
구현 방법:
① tomcat, server.xml을 설정하여 tomcat 클러스터 기능을 활성화합니다.
주소: 로컬 IP만 입력하고 포트 번호만 설정하면 포트 충돌을 방지할 수 있습니다.
② 애플리케이션에 정보 추가: 애플리케이션이 현재 클러스터 환경에 있고 분산을 지원함을 알립니다.
웹에서 옵션 추가 memcached 및 redis와 같은 솔루션에서는 Memcached 또는 Redis가 클러스터여야 합니다. <distributable/>
① 고정 세션 처리 방법
원리: 서로 다른 Tomcat은 서로 다른 기본 Memcached에 대한 액세스를 지정합니다. 여러 Memcached 간의 정보가 동기화되어 마스터-슬레이브 백업 및 고가용성이 가능합니다. 사용자가 액세스하면 먼저 tomcat에 세션을 만든 다음 해당 세션을 해당 memcahed에 복사합니다. Memcache는 백업 역할만 수행하며 모든 읽기 및 쓰기는 Tomcat에서 수행됩니다. 특정 Tomcat이 끊어지면 클러스터는 대기 Tomcat에 대한 사용자의 액세스를 찾은 다음 쿠키에 저장된 SessionId를 기반으로 세션을 검색합니다. 세션을 찾을 수 없으면 해당 memcached로 이동하여 세션을 찾습니다. . 그것을 찾은 후 대기 Tomcat에 복사합니다.② 고정되지 않은 세션 처리 방법
원리: memcached는 마스터-슬레이브 복제를 수행하고 세션에 대한 쓰기는 슬레이브 memcached 서비스에 기록되며 읽기는 모두 마스터 memcached 자체에서 읽습니다. 세션을 저장하지 않음
장점: 내결함성, 세션이 실시간으로 응답합니다.
구현 방법:a. 复制相关jar包到tomcat/lib 目录下
JAVA memcached客户端:spymemcached.jarmsm项目相关的jar包:1. 核心包,memcached-session-manager-{version}.jar2. Tomcat版本对应的jar包:memcached-session-manager-tc{tomcat-version}-{version}.jar序列化工具包:可选kryo,javolution,xstream等,不设置时使用jdk默认序列化。
b. 配置Context.xml ,加入处理Session的Manager
粘性模式配置:
非粘性配置:
第四种:session持久化到数据库
原理:就不用多说了吧,拿出一个数据库,专门用来存储session信息。保证session的持久化。
优点:服务器出现问题,session不会丢失
缺点:如果网站的访问量很大,把session存储到数据库中,会对数据库造成很大压力,还需要增加额外的开销维护数据库。
第五种terracotta实现session复制
原理:Terracotta的基本原理是对于集群间共享的数据,当在一个节点发生变化的时候,Terracotta只把变化的部分发送给Terracotta服务器,然后由服务器把它转发给真正需要这个数据的节点。可以看成是对第二种方案的优化。
优点:这样对网络的压力就非常小,各个节点也不必浪费CPU时间和内存进行大量的序列化操作。把这种集群间数据共享的机制应用在session同步上,既避免了对数据库的依赖,又能达到负载均衡和灾难恢复的效果。
实现方式:篇幅原因,下篇再论。
小结
以上讲述的就是集群或分布式环境下,session的5种处理策略。其中就应用广泛性而言,第三种方式,也就是基于第三方缓存框架共享session,应用的最为广泛,无论是效率还是扩展性都很好。而Terracotta作为一个JVM级的开源群集框架,不仅提供HTTP Session复制,它还能做分布式缓存,POJO群集,跨越群集的JVM来实现分布式应用程序协调等,也值得学习一下。
위 내용은 Linux 클러스터/분산 환경에서의 세션 처리 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!