Movable Code

Trade, Robot, Policy

대용량 접속처리 서버

leave a comment »

문자메세지 같은 휴대단말기용 데이터처리 서버를 제작.

  • 현재 Parms 라이브러리의 구축진행정도로는 Linux 에서 ePoll 을 Multiplexer 로 활용하는 방안이 적합해보임. (FreeBSD 의 Kqueue 도 고려 대상이나 나머지 라이브러리들이 테스트되지 않았슴. Windows 계열은 현재 select 기반만이 구축되어 있으므로 고려대상에서 제외)
  • 동시다발적인 Connect 요청을 하나의 포트로 처리하는데에는 한계가 있으므로, 여러개의 포트를 가진 프로세서가 복수운용.
  • n 개의 서버프로세스가 가동중인 m 개의 box 가 필요.
  • 반드시 접속자측에 Load Balancing 을 명령할수있는 양방향 프로토콜이 전제되어야함.
  • Load Balance 시 접속자측 판단기준은 접속타켓 (IP(box), Port). 역시 최소 3 개의 접속타겟이 지정되어야하고 접속실패시 round-robin 방식으로 re-try 해야한다.
  • 확실치는 않으나 interval 을 두고 주기적으로 접속해오는 경우라면, interval 도 Load Balance 대상.
  • Persistence 를 위해 File 기반의 로컬저장소를 audit 용도로 활용해야함.
    • 로컬저장소는 어디까지나 로컬의 복구를 위한 것으로 remote 환경에 안정적인 Databas-Engine 이 존재해야함.
  • 최대접속자, 최대동시접속자, 피크시 최대데이터량을 미리 산정.
  • minimum 월 3천만건이라면 20영업일 기준으로 일일 150만건.
  • 오픈시 가용률 10%를 가정하면 최대 일일 1500만건을 처리할수있어야 한다는 계산.
  • 10개의 프로세스. 4 개의 box가 balanced 되어 운용된다면, 하나의 프로세스당…
    • 일일 : 375,000건
    • 시간당(12시간기준) : 31,000건
    • 분당 : 521 건
    • 초당 : 9 건
  • 이것은throughput 의 개선보다는 load-balancing의 문제라는 결론이 나온다.
  • 주기적인 connect 방식이 아니라 문자메세지 전송같은 어떠한 이벤트가 생겼을 경우에만 connect 하는 방식이라면 load-balancing에 다른 방법으로의 고민이 필요.
  • 시스템의 전체적인 병목지점은 DB write 가 될것이고, pending-DB-write 중인 아이템들을 로컬에 복구용 audit 로그형식으로 복사본을 유지하고, 프로세스가 재개될때 이 아이템들을 모두 처리 해낼수있어야 한다.
  • 프로세스내 처리기들은 아래와 같은 역할을 가져야 한다.
    • Socket Processor
    • Audit-log writer
    • Remote-DB writer
  • load-balancing
    • 각각의 서버들의 부하/리소스점유율을 체크/판단하는 마스터서버가 존재해야한다.
    • 접속자(Client)는 필요할때 서버가 내려주는 load-balancing-rule에 반드시 따라주어야 한다.
    • 마스터서버는 주기적으로 부하체크 및 접속자통제를 해내야 한다.
  • 1 machine (Box) 당 몇개의 서버프로세스가 가동될것인지, 1 프로세스당 몇개의 동시접속을 견디게(concurrent-tolerancy) 할것인지 사전에 결정해야한다.
  • 10% 가동률을 목표로 현재수치인 월 3천5백만건*10 =3억5천만건이라고 한다면, 박스당 10개프로세스로 4 박스정도면 충분하다고 판단됨. (현재로서는…)
  • 확장성을 위해 박스에 프로세서를 설치하고 plug-in 시키는 것으로 front-end 처리성능을 투입한 박스만큼 선형적으로 증가시킬수있어야 한다.
  • 현재로써는 Windows 보다는 Linux 가 훨씬 적합해보인다.
Advertisements

Written by soyul's papa

10월 24, 2007 , 시간: 9:33 오후

Computing에 게시됨

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: