
여러 서버에서 실행될 웹 앱이 있습니다. 동일한 세션(값이 JSESSIONID=x인 HTTP 쿠키 헤더)을 사용하는 요청이 항상 동일한 서버와 통신하는지 확인하고 싶습니다. 즉, 특정 상황(서버에 장애가 발생한 경우뿐만 아니라 일부 서버 측 캐싱 및 성능 전략으로 인해)에서 세션이 다른 서버로 "이동"할 때까지입니다.
내 웹 앱은 해당 시나리오에서 잘 작동하지만 어떤 종류의로드 밸런서사용해야 하나요? 분명히 애플리케이션 수준에서 로드 밸런싱을 수행할 수 있지만 더 효율적인 것을 찾고 있습니다. 아마도 특수 하드웨어일까요? (아마도 아닐 수도 있습니다) 돈은 많이 못쓰는데...
업데이트
지금까지 답변해 주셔서 감사합니다. 이제 알았습니다.파운드그리고HAProxy특정 쿠키를 찾도록 구성할 수 있습니다. 매핑을 동적으로 업데이트할 수 있는지(세션이 다른 앱 서버로 "이동"할 때) 아직 알 수 없습니까?
그리고 그렇게 할 수 있는 (저렴한) 하드웨어 솔루션이 있습니까? (추가 로드 밸런싱 서버보다 비용이 저렴할까요?)
답변1
"를 사용하여고정(지속) 세션"는 일반적으로 권장되지 않습니다. 이렇게 하면 로드 밸런싱의 많은 이점을 잃게 됩니다. 로드 밸런싱이 이루어지지 않고 장애 발생 시 특정 클라이언트가 애플리케이션에 액세스할 수 없기 때문에 고가용성을 잃게 됩니다.
세션이 동적이기를 원합니다. Java를 사용하면 일반적으로 메모리에 저장되고 멀티캐스트를 통해 모든 서버에 클러스터링됩니다. 보다 일반적으로 세션은 데이터베이스에 저장됩니다.
웹 애플리케이션에 고정 세션이 필요한 경우 아키텍처를 개선해야 할 수 있습니다.
로드 밸런서 솔루션에 관한 한 많은 솔루션이 있으며 여기서는 해당 주제를 광범위하게 다루었습니다. 좋아요LVS. 다른 사람들은 좋아한다nginx. 파운드리 네트워크Brocade가 인수한 는 견고한 상용 제품을 만들고 있습니다. 이는 하드웨어 부하 분산 장치를 위한 주요 상용 솔루션입니다. 바라쿠다또한 로드 밸런싱에 사용할 수 있는 Linux/OSS 기반 "어플라이언스"도 있습니다.
답변2
그렇다면 몇 가지 솔루션이 있습니다.
데이터베이스를 사용하여 세션 정보를 저장하는 세션 저장 방법을 작성하고 여러 서버에 있는 경우 db를 클러스터링할 수 있습니다. 이는 실제로 사물을 구성하기로 결정한 방법에 따라 달라지며 다른 아이디어는 웹 서버 뒤에 Memcache가 있는 서버를 사용하고 거기에 세션을 저장하는 것입니다.
이렇게 하면 한 곳에서 세션을 가질 수 있으며 클라이언트가 어떤 웹 서버로 연결되는지는 더 이상 중요하지 않습니다.
답변3
답변4
파운드 - 역방향 프록시 및 로드 밸런서
Pound 프로그램은 웹 서버용 역방향 프록시, 로드 밸런서 및 HTTPS 프런트 엔드입니다. Pound는 여러 웹 서버 간에 로드를 분산시키고 이를 기본적으로 제공하지 않는 웹 서버에 대해 편리한 SSL 래퍼를 허용하기 위해 개발되었습니다. 파운드는 GPL에 따라 배포됩니다. 보증이 없으며 무료로 사용, 복사 및 양도할 수 있습니다.
당신이 찾고 있는 사람이 바로 이 사람일 수도 있습니다.