분산 시스템의 일반적인 문제 및 솔루션

https://blog.csdn.net/Be_Pretty_Better/article/details/82732908

1. 분산 세션 문제 : 분산 시스템, 서버 클러스터에서, 동일한 서비스가 여러 다른 서버에 일반적이기 때문에 처음으로 브라우저에 오류가 원래 요청 또는 세션을 보낼 때, 서버 측에있을 것입니다 쿠키에 저장된 브라우저에 응답 헤더 뒤에 세션을 생성하고, sessionId가. 브라우저에 두 번째 방문, 그것은 sessionId가이 같은 URL에 액세스 할 수 있지만 두 번 서버에서 세션을 찾습니다 걸리지 만 요청하기 전에 두 번째 세션을 찾을 수 없습니다 수 있도록 요청은 두 개의 서로 다른 바람둥이에 히트에 가능성이있는 경우 . 이 문제의 해결책은 다음과 같은 다섯 가지 방법이 있습니다 :
데이터베이스 공유 세션 사용
sessionId가이 springboot에 통합되어, 세션, 레디 스 구성 클래스에 @EnableRedisHttpSession를 추가하는 레디 스 세션, K, V 사용을
토큰 사용 플러스 세션 토큰 세션은 V 토큰, 세션이며, K의 레디 스, 일시적이고 고유 한
바람둥이를 사용하여 세션 동기화 도구로 제공하지만 지연 효과가 좋은이되지 않는 것입니다
동일한 IP에서 재생할 수에 대한 그 요청을 보장하기 위해, 게이트웨이 수준에서 해시 작업을 IP 할 같은 tocmat에
2. 분산 도메인 간 질문 : 액세스 서비스 인터페이스 시스템의 첫 페이지가 현재 페이지가 아무 문제없이, 위치 아약스 요청하지만, 액세스 페이지 시스템이, 요청이 성공적으로 발송 될 수있을 때, 성공적으로 반환 할 수 있지만, 브라우저 표시를 허용하지 않습니다,이 문제는 네 가지 솔루션을 제공 :
추가 "액세스 제어-기원을 허용 " 에 응답 헤더에서
, nginx를 또는 zuul와 역방향 프록시는 모두 역방향 프록시를 명중 요청 서버에서, 서버는 역방향 프록시를 통해 요청을 전송하고, AJAX로 복귀 브라우저 동일한 시스템이 나타나지
에 j를 sonp, 아약스 형 설정 JSONP는하지만, JSONP 만 지원 요청을 얻을 수 있습니다
아약스는 시스템의 인터페이스를 명중,이 인터페이스는 HttpClient를 재전송 요청 프레임 또는 다른 RPC에 의해 캡슐화
3. 분산 스케줄링 : 시스템은 정기적으로 작업을해야합니다, 동일한 서비스가 동일한 타이밍 작업에 여러 개의 서로 다른 서버에 배포 할 때 그런 다음 백업 레디 스 사본을 여러 개있을 것이다, 이것은 분명히 잘못된 백업입니다 레디 스 타이밍으로 여러 번 수행 할 것입니다.
XXL-작업 통합 파견 센터를 사용하여 같은 시간에 같은 작업이 하나가 실행되어 있는지 확인합니다.
4. 단계적 것들 : 방법 A를 변화 자신의 데이터베이스, 성공, 또한 성공적인 RPC에 의해 수정 다른 데이터베이스 B의 B에 대한 서비스 요청을 보내, true를 돌려, 깨진 네트워크의 결과 A B가 수신되지 이에, 타임 아웃 후, 데이터베이스 롤백, B는 이동 때문에 일관성 위반이되지 않습니다.
주소 LCN 프레임 워크로, LCN은 LCN 신호를 줄 것이다, 사람들 개발, 핵심 아이디어는 두 개의 데이터베이스 작업이 성공적으로 완료 될 때, 2PC 프로토콜을 사용하여, "하지 생산 일 만 로컬 포터 것들"이다 인 동시에 커밋 LCN에, 그렇지 않으면 LCN ROLLBACK 통합
5. 분산 멱등을 : 예를 들어, 다시 형태, 여러 장의 사진이 통합 된 인터페이스를 칠 것이다, 질문을 제출하는 기존의 시스템에서, 한 번에 여러 작품을 제출해야하고 인터페이스 무거운 내부 요청하지만, 분산 시스템에 여러 장의 사진이 다른 서버를 공격 할 수있다, 더 이상 다시 이전 방법에 따라 수 없다
이상 앞 통지 AOP 요격 할 수있는 요청, 판사와 요청 : 솔루션 UUID + 소인 방식을 사용하지 않고 릴리스 경우 토큰 헤더가 존재하고, 생성 된 토큰, 요청 헤더를 분리 레디 스에 저장된 토큰을 첨가 고유 글로벌 분산 로크 기반. 서라운드 통지 요구는 요구 먼저 헤더 판정 도착
토큰 그렇다면 토큰 레디 스, 실행 요구 인터페이스를 삭제 레디 스에서 찾을 수있다. 해당하는 레디 스 토큰이없는 경우, 요청은 초 이상 통화 차단임을 나타낸다.
여러 스레드가 동시에 읽고 변수에 대한 쓰기, 보안 스레드가 언제,하지만 다른 시스템과 동기화 기존의 스레드가 표시되지 모두 필요하므로 스레드가 모든 서비스를 볼 수 있습니다 : 6. 잠금을 분산 잠 깁니다.
III 솔루션 : redission에 따라 데이터베이스를 기반으로 기반 사육사. 경로 노드에 임시 약속에 따라 내장 사육사 노드가 동시에 하나 개의 스레드가 성공적으로 구축 할 수 있어야하고, 적시에 알림을받을 수있는 다른 노드를 삭제 한 후, 삭제하기 전에, 같은 경로를 만들 시계의 정의는 노드를 모니터링 할 수 삭제할 수 없습니다
및 폴링의 잠금을 만들려고하지 않습니다. 이것은 자바, 동기화 및 잠금의 기초가 설정된 tryLock 방법, 당신은 잠금을 생성하고 반환 값을 얻기 위해이 시도 할 수 있습니다 잠금 방식의 차이이며,이 현재 잠금을 알 수있는 잠금 장치가 없으며, 처리 및 잠금 장치에 동기화 할 수 없습니다 당신이 잠글 수있을 때까지 때, 라이브 차단. 사육사
성공과 반환 값을 갖게됩니다 실패를 생성하는 임시 노드의 생성, 배포 잠금 유사한 잠금을.
redission 방식 : redission의 ReentantLock 두 개의 인터페이스 잠금, reentantlock의 재진입 잠금 redission가 배포 잠금을 구현하고, 같은 사용을 잠 그려면 두 클래스입니다 기반 레디 스를 달성했다.

 

분산 시스템 자주 묻는 질문 요약

https://blog.csdn.net/moranzi1/article/details/78572219

몇 가지 일반적인 문제와 해결 방법 분산 시스템

추천

출처www.cnblogs.com/Andrew520/p/12142860.html