apache 2.2에 epoll이 조금 확장되었다고 해서 소스를 봤지만 제성능 반도 못내고 잇다.
예전부터 짜오던 소스를 조금 손보게됬다.
httpd의 커넥션은 4만5천개에서 더이상 증가하지 않던것을 6만개까지 컨트롤링 할 수 있게 늘어났다.
1개의 ip당 최대 6만개의 커넥션과 5000개 가량의 waiting queue를 운영할 수 있게된다.
하지만 fin timeout을 1초 이하로 강제클로징하도록 변경하지 않으면 안된다.
이를위해 커널소스의 수정이 필요로 한다.
또한 epoll 관련 패치를 추가적으로 처리해주었다.
kqueue에 비해 epoll의 처리능력은 월등히 높다.
아파치 2.4가 나올때쯤이면 이 삽질을 하지 않아도 될까?
epoll에 대한 정보는 매우 제한적이며.. 사실 없다.
내가 참고한것도 epoll에 대한 man 페이지의 소스코딩형식 일부가 전부다.
libevent를 처음에 써왔으나 그다지 효율이 좋지 못하다는 점을 알게되었다.
이에 커널형식으로 변경하고 사용중이다.
현재 apache 이외에도 이녀석을 쓰는 서비스가 또 있다.
리얼타임 소켓으로 멀티밴드 브로드 캐스팅을 6만5천 커넥션까지 컨트롤링할 수 있다.
이녀석은 wait_timeout이 존재하지 않는다. 즉시 커넥션을 해제하도록 프로그래밍하였다.
64비트 시스템으로 업그레이드를 하고나서 aes 와 자체제작한 비트아스키 알고리즘을 올려
시스템단과 연동을 시키는 작업을 추가로 진행했다.
요녀석은 mysqlclient 를 사용하여 디비서버와도 통신한다.
초반에 이놈에 클라이언트때문에 한스레드에서 동작하는바람에 epoll이 아닌 poll을 사용하는 버그가 생겼다.
따라서 스레드 분리를 했고 db커넥션 스레드와 실시간 전송 스레드가 개별로 스레드 통신하는식으로 프로세싱을 한다. 여기서 알아낸사실은. epoll과 poll은 한데 엉키면 poll이 되버린다. 왠지는 모른다.
남이짠소스 디버깅할 시간은 나에게 없다.
이제 암호화된 정보로 커넥션에 대한 정보를 분석하고, 사용자를 특정할 수 있도록 변경됬다.
다만 실시간 소켓을 이용하는 클라이언트인 플래시도 업데이트를 해야한다.
근데 귀찮아 죽겠다 -_- 플래시는 사실 전문이 아니라 그런지 시행착오가 너무 심하다.
뭐하나 고치면 뭐하나 터진다. 액션스크립은 참 불안정한 언어고 컴포넌트는 참 그지같다.
될것같으며 불가능한것들도 여러개 있었다. flex 를 삽질하고 있는 유명 플래시 액션스크립터의 도움으로 -_-
현재의 클라이언트도 만들게 될 수 있었다.
젠장 이거.. 어떻게 뜯어고치지??
Posted by LeCieL



