10000개가 넘는 접속을 처리하는 서버프로그램의 구현시

MrLord의 이미지

10000세션 이상을 유지하는 서버프로그램을 만들려 합니다.

데이타가 많이 왔다 갔다 하지 않기때문에 가능하지 않을까 합니다만.

어떤 방식으로 구현을 해야 할지 감이 잡히질 않네요..

스티븐책을 참조하면 select, poll, signal을 이용, 비동기I/O등등

에.. 포크, 쓰레드, 방식등 다양한 방법이 있더군요..

처음 이렇게 많은 세션을 처리하는 프로그램을 만들다보니 쉽게 접근이

되질 않습니다. 고수님들의 조언을 부탁드리겠습니다.

사용할 머신은 제온3기가 정도에 메모리1기가 운영체제는 레드햇 리눅스

2.4버전을 사용할 생각입니다. 그럼 조언 부탁드리겠습니다.

오늘하루도 행복한 하루되시길...

이소희의 이미지

epoll . select 중 하나 선택하셔서 만드세요.
참고 자료등은 여기서 검색하셔도 마니 나와요 :oops:

내 삶속에 던져진 나.

소타의 이미지

1개의 쓰레드에서 여러개의 클라이언트를 poll을 이용한 폴링 하실 것을 추천합니다.. 아주 노멀한 방법이죵..
저라면 쓰레드 풀을 100~200개 띄우고 쓰레드당 최대 50~100개의 크라이언트을 처리하게 하겠습니다.. 뭐.. 장비나 클라이언트가 하는 작업에 따라서 조절해 주면 되겠지요..
10k의 콘넥션을 유지하고 관리하는 것은 그리 어려운 일은 아닙니다.. 대신 한 클라이언트가 사용하는 자원 * 최대 접속이 장비의 자원을 넘어서면 힘들어지겠죵..

일단 전체를 구현 후에 폴링 방법을 변경하시는 것이 좋을 듯 합니다..

MrLord의 이미지

1024개 자나용.. 그부분은 어떻게 처리해야 할까요..?
메인프로세스에서 리슨하고 있다가(select로 ) 접속이 들어오면
스레드를 생성해서 넘기는 방법은 접속이 만개면 쓰레드가 만개니 않좋을듯
하구요..
위와 같은 방법으로 하되 쓰레드마다 1000개정도의 접속을 처리하도록
하고 한쓰레드에 접속이 1000개가 되면 다른 쓰레드를 생성하는 방법은
어떨까요?
책에는 미리 쓰레드를 만들어 놓구 접속을 분배해서 처리하게 하는 방식도
있더군요.. 이런 방법은 어떤가요..?
조언부탁드리겠습니다.

mr.lee의 이미지

제 생각엔...

커널을 2.6.x 로 올리시고, (현재 2.6.9r1인가...)

1000개정도의 socket fd 를 epoll로 관리하는 쓰레드를,

10 - 15개정도 Pool로 띄워놓고 운영하심 될 듯...

각 fd마다 순차적으로 쓰레드에 분배하는 rotate방식을 쓸 수도 있겠고,

한 쓰레드가 full될때까지 다른 쓰레드는 pthread_cond_ 로 재워놓고 있다가 다음 쓰레드가 필요할때 깨워주는 방식을 쓰도 괜찮겠고...

Ps. 그정도 시스템이면, 십만도 끄떡없을듯 보이네요. 어떤 커뮤니케이션이냐에 따라 틀리겠지만... 듀얼머신이라면. 코딩시 주의해야할것들이 있을것입니다. 잘 하면 2배의 성능을 얻을것이고 못 하면 버그가 내재될수도 있을것입니다.

GjtRoql의 이미지

위 경우는 데이타 이동이 적을때 인때
만약 데이타 이동이 많으면 어떻게 해야되나요
blocking system call로 인한 쓰레드 처리 지연은 어떻게 해야할지... 궁금하네요! 초보라...

--------------
Burning Blue!
--------------

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.