![높은 이탈률 규칙 세트를 사용한 고성능 라우팅. C10K 이상으로 확장할 가능성이 가장 높은 접근 방식은 무엇입니까?](https://linux55.com/image/51741/%EB%86%92%EC%9D%80%20%EC%9D%B4%ED%83%88%EB%A5%A0%20%EA%B7%9C%EC%B9%99%20%EC%84%B8%ED%8A%B8%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EA%B3%A0%EC%84%B1%EB%8A%A5%20%EB%9D%BC%EC%9A%B0%ED%8C%85.%20C10K%20%EC%9D%B4%EC%83%81%EC%9C%BC%EB%A1%9C%20%ED%99%95%EC%9E%A5%ED%95%A0%20%EA%B0%80%EB%8A%A5%EC%84%B1%EC%9D%B4%20%EA%B0%80%EC%9E%A5%20%EB%86%92%EC%9D%80%20%EC%A0%91%EA%B7%BC%20%EB%B0%A9%EC%8B%9D%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
PC/서버 하드웨어를 사용하여 처리량이 높은 라우터를 생성해 달라는 요청을 받았습니다. 저는 pf, iptables, tc에 비교적 익숙하지만 이렇게 높은 이탈률과 그렇게 많은 규칙을 본 적이 없습니다. 작동하지 않는 어리석은 해결책을 피할 수 있도록 도와주셨으면 좋겠습니다.
내 목표는 초당 최소 100개의 클라이언트를 추가하고 제거하여 최소 10,000개의 동시 클라이언트를 지원하는 것입니다. 각 클라이언트에는 다음 기능을 갖춘 간단한 양방향 라우팅 규칙이 있습니다.
- IPv6 전용
- 패킷 전달(소스 및 대상 주소 교체)
- 수신된 바이트 수를 기록합니다.
- 일정량의 데이터 수신 후 전달 중지
제가 우려하는 점은 초당 100개의 규칙 세트를 생성하고 파기하면 일부 숨겨진 뮤텍스로 인해 성능이 저하된다는 것입니다.
내 후보 솔루션은 다음과 같습니다.
- 이것이 제가 선호하는 솔루션입니다.
- iptables + tc를 갖춘 데비안.
- 사용자 정의 커널 모듈. 하고 싶지는 않지만 필요하다면 할 것입니다.
다음 중 확장성이 가장 좋은 솔루션은 무엇인가요? 최고의 성능을 얻으려면 어떤 팁을 사용해야 합니까?
답변1
나는 당신이 하고 있는 일을 시도해 본 적이 없지만 아마도 OpenBSD를 사용하여 이를 수행하는 가장 좋은 방법은 테이블을 사용하는 것입니다. 테이블에서 IP를 쉽게 추가/제거할 수 있기 때문입니다.