현재로드 밸런싱을 위해 DNS 라운드 로빈을 사용하고 있습니다. 기록은 다음과 같습니다 (120 초의 TTL이 있습니다)
;; ANSWER SECTION:
orion.2x.to. 116 IN A 80.237.201.41
orion.2x.to. 116 IN A 87.230.54.12
orion.2x.to. 116 IN A 87.230.100.10
orion.2x.to. 116 IN A 87.230.51.65
모든 ISP / 장치가 이러한 응답을 동일한 방식으로 처리하는 것은 아닙니다. 예를 들어 일부 DNS 서버는 주소를 임의로 회전 시키거나 항상 순환합니다. 일부는 첫 번째 항목을 전파하고 다른 일부는 IP 주소를보고 가장 가까운 (지역에 가까운) 항목을 결정하려고합니다.
그러나 사용자 기반이 충분히 크면 (여러 ISP에 퍼짐 등) 균형이 잘 맞습니다. 로드 량이 가장 많은 서버에서 가장 낮은 서버로의 차이는 거의 15 %를 초과하지 않습니다.
그러나 이제 더 많은 서버를 시스템에 도입하고 있으며 모두 동일한 용량을 가질 수 없다는 문제가 있습니다.
현재 1Gbps 서버 만 있지만 100Mbps 및 10Gbps 서버로 작업하고 싶습니다.
그래서 내가 원하는 것은 무게가 100 인 10Gbps 서버, 무게가 10 인 1Gbps 서버 및 무게가 1 인 100Mbps 서버를 소개하는 것입니다.
이전에 서버를 두 번 추가하여 더 많은 트래픽을 가져 왔습니다 (대역폭이 거의 두 배로 늘었습니다). 그러나 10Gbps 서버를 DNS에 100 번 추가하는 것은 약간 어리 석습니다.
그래서 TTL 사용에 대해 생각했습니다.
서버 A에 240 초의 TTL과 서버 B를 120 초만 주면 (낮은 TTL이 지정되면 많은 DNS 서버가 120으로 설정되므로 라운드 로빈에 사용하는 최소값입니다). 이상적인 시나리오에서 이와 같은 것이 발생해야한다고 생각합니다.
First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds
Second 120 seconds
50% of requests still have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds
Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B (from the 50% of Server A that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec
Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...
보시다시피, 이것은 예측하기가 매우 복잡하고 실제로 실제로 이와 같이 작동하지 않을 것입니다. 그러나 배포에 확실히 영향을 미칩니다!
가중 라운드 로빈이 존재하고 루트 서버에 의해 제어된다는 것을 알고 있습니다. 응답 할 때 DNS 레코드를 순환하고 가중치에 해당하는 설정된 확률로 DNS 레코드를 반환합니다. 내 DNS 서버는이를 지원하지 않으며 요구 사항이 정확하지 않습니다. 그것이 완벽하게 무게가 맞지 않으면 올바른 방향으로 가야합니다.
TTL 필드를 사용하는 것이 더 우아하고 쉬운 솔루션 일 수 있다고 생각합니다.이를 동적으로 제어하여 리소스를 절약하는 DNS 서버가 필요하지 않습니다. 이는 DNS로드 밸런싱과 하드웨어로드 밸런서의 요점입니다.
내 질문은 지금이다 : DNS 레코드의 TTL 속성을 사용하는 모범 사례 / 방법 / 규칙 대 가중치 라운드 로빈 분포가 있습니까?
편집하다:
시스템은 정방향 프록시 서버 시스템입니다. 대역폭 (요청 아님)의 양이 이더넷이있는 단일 서버 하나가 처리 할 수있는 양을 초과합니다. 따라서 대역폭을 여러 서버에 분산시키는 밸런싱 솔루션이 필요합니다. DNS를 사용하는 것보다 다른 방법이 있습니까? 물론 파이버 채널 등이있는로드 밸런서를 사용할 수 있지만 비용은 엄청 나며 병목 현상의 폭만 증가시키고 제거하지는 않습니다. 내가 생각할 수있는 유일한 것은 애니 캐스트 (애니 캐스트 또는 멀티 캐스트입니까?) IP 주소이지만 그러한 시스템을 설정할 수단이 없습니다.