Linux / Apache 에서 FastCgi 사용에 대해서...

headfirst의 이미지

최근에 Fastcgi기술에 관심이 생겨서 리눅스에 아파치 mod_fastcgi를 구성하고 테스트를 해보고 있습니다.

fcgi-2.4.0의 소스를 보면 pthread를 사용하는것 같은데...

리눅스에서 pthread의 지원이 완벽하지 않다고 들었습니다.
http://kltp.kldp.org/stories.php?story=01/07/05/2982955

기존의 웹서비스(게시판 : c로 작성) 를 fastcgi로 대체하려 할때

리눅스상에서 fastcgi가 성능향상에 도움이 될지 어떻지 궁급합니다.

fastcgi 경험이 있으신 분들의 조언을 부탁드립니다.

progcom의 이미지

mod_fastcgi 자체는 아파치 모듈인지라, 특별히 쓰레드를 사용하지 않는 것으로 압니다.

사용자 프로그램은 자유입니다. 다중 쓰레드 모델을 채용하건, 다중 프로세스를 채용하건, 혹은 단일 프로세스로 작업해두고 여러개를 동시에 띄우건 전혀 상관 없습니다. '소켓' 대신에 'FCGI 인터페이스'를 사용하는 네트워크 데몬을 만든다고 생각하시면 편합니다. (HTTP의 처리를 아파치에게 넘겼다고만 생각해도 됩니다)

기존에 C로 작성한걸 사용하고 계셨다면, 간단한 변경으로 줄어드는 부분은 구동 시간 정도입니다. 물론 느린 하드디스크에 엑세스가 줄어드므로 성능 향상은 꽤 됩니다.

FastCGI 전용으로 다시 구축을 한다면 최근 글에 대한 메모리 캐쉬 (개인적으로 하나 만드는 중입니다) 등도 가능합니다. 읽기가 많은 게시판이라면 비약적인 성능 향상 효과를 끌어낼수도 있겠지요.

하하의 이미지

cgi 와 fastcgi의 가장 큰 차이점은

cgi는 stdin, stdout을 이용해 fcgi는

socket을 사용해 데이터를 주고 받는 것입니다.

음...

지금 딱 하고 생각나는건...

fcgi는 소켓 통신으로 인해 웹서버와 트랜젝션 서버

간 물리적으로 뛰워 놓을 수 있어 보안에 강점이 있고

....

또한 빠르다고 합니다.

음... 빠르다는 건 .. 잘 모르겠고... 각종 페이지

작성시 fcgi api를 사용하여 좀더 나은 개발을 할 수

있다는 겁니다. .. ....

생각보다 fcgi에 관한 자료가 없고 있는 자료 또한

영문이 많은 걸로 알고 있습니다. 접근하시기엔

쉽진 않을 듯 합니다.

www.fastcgi.com

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

하하의 이미지

아.. 또한 웹서버 트랜젹션 서버간 소켓통신으로 인해

트랜잭션 서버를 스레드로도 구현 할 수 있습니다.

“바람에게도 길은 있다. 나는 비로소 나의 길을 가느니. 길은 언제나 어디에나 있다.”

maddie의 이미지

Risapapa님이 이부분에 정평이 있다고 들었는데요.
아마 제가 phpschool에서 그분 글을 본적이 있는거 같네요...

URL은 귀차니즘으로 스읍~ ㅡ.ㅡ

이 부분도 관심이 있는데 생각보다 자료가 눈에 들어오지 않는군요. Risapapa님의 경우 perl을 fcgi로 사용하시는 거 같더군요.(perl밖에 안되는 지도...무식이 탈이라 ㅡ.ㅡ)

힘없는자의 슬픔

choissi의 이미지

fastcgi환경은 cgi프로그램의 포크를 없에는 가장 큰 장점일 것입니다. 아파치에 cgi를 연동하게 되면, 급격한 사용자 증가시 아파치와 cgi프로그램의 포크도 덩달아 증가하여 포크를 처리하는 자원 소모가 많아집니다.

아무튼 저는 아래와 같은 판단을 거쳐 fast-cgi보다는
다른 방법을 선택했는데, 자료중에 fast-cgi관련된 내용도 있습니다.

http://www.ezdoum.com/search.php?query=fast-cgi

울랄라~ 호기심 천국~!!
http://www.ezdoum.com

RisaPapa의 이미지

많은 향상이 있는 것은 사실입니다.

C로 작성할경우 적어도 3배 이상의 퍼포먼스가 나옵니다.
바이너리 사이즈가 클 경우의 CGI는 그 만큼 오버헤드가 발생하는데
이 때에 FastCGI를 사용하면 아주 효과가 큽니다.

이전의 크레이지보드를 FastCGI로 수정해서 테스트해본 경험이
있는데 4,5배 정도 레스폰스가 빨랐던 것을 기억합니다. 다시 말하면
4,5배 정도 퍼포먼스를 내는 장비를 구입하는 비용을 절감할 수 있다는
내용이기도 합니다.

또 cgi-fcgi를 사용하여 구닥다리 장비를 랜으로 연결하여 사용하면
이전의 구장비들을 모두 활용할 수도 있습니다. 로드 밸런서등의
고급 장비를 도입하지 않아도 프론트에 어느정도 견딜수 있는 하드를
배치하고 그 뒤에 오래된 구 장비들을 여러대 연결하여 사용함으로서
분산시스템을 쉽게 구축할 수도 있습니다.

물론 쉽게 프록서버로도 구축할 수도 있습니다만 저의 경우에는
FastCGI로 구축하는 것을 더 선호합니다. 이유는 아주 큰 네트웍을
구성할 때에 직감적으로 더 쉽게 구성할수가 있기 때문이고 미국등
다른 나라에 서버를 두더라도 쉽게 FastCGI로 네트웍을 구축할 수도
있기 때문입니다.

펄의 경우에는 현재의 버전은 유니코드가 펄 코어에 함께 들어가버려
퍼포먼스면에서 이전의 5.005_03계열의 펄과는 많은 차이가 있습니다.
5.005_03 버전의 펄을 My_Malloc옵션으로 컴파일해서 사용하면
C언어로 작성한것과 비슷한 스피드가 나옵니다.

저는 PHP도 FastCGI로 사용하는데 이것의 잇점은 한대의 컴퓨터로
운영하기에 부하가 많이 걸릴때 일부 애플리케이션을 외부로 빼내어
분산시키기가 쉬어집니다. 그러면서도 마치 한대에서 운영하는 것처럼
가능하여 쉽게 확장이 가능해지는 점입니다. 퍼포면스 면에서는 아파치
모듈로 운영하는것과 별차이는 없습니다.

펄의 경우에 저희 회사에서는 FastCGI와 모드펄을 사용하는데
용도에 따라서 운영을 합니다. 예를 들어 접속이 집중하는 부분에는
라이브러리를 거의 사용하지 않는 퓨어펄로 작성하고 그 외의 부분은
모드펄을 이용합니다. 이 이유는 모드펄의 경우에는 로드되는
라이브러리가 많아서 리소스를 많이 소모하기 때문에 접속이 집중되는
부분에서 부하가 많이 걸리기 때문입니다. 모드펄을 사용하는 이유는
개발의 생산성 때문입니다. 아직도 PHP로는 펄의 오브젝트 프로그래밍의
생산성을 따라잡지 못하리라고 생각합니다. 그만큼 라이브러리의
숫자적인 면에서 펄을 따라잡을 수 있는 언어는 거의 없는것 같습니다.
또 많은 사람들이 아직도 PHP와 펄의 스피드에 대해서 논하는 사람이
있는데 FastCGI를 사용할 경우에는 아직도 펄의 스피드와는 상대적으로
게임이 되지 않습니다.

포퍼먼스나 서버의 확장 분산 분야에서는 아직도 FastCGI의 입지는 확고한
것 같습니다. 자바가 분산시스템을 구현하기가 쉬운점도 자바서블렛이
FastCGI와 같은 원리이기 때문입니다.

제가 FastCGI를 계속해서 연구하고 이 분야를 고집하는 이유도 이러한
퍼포먼스와 확장과 분산의 용이성입니다. 현재의 스피드로 간다면 점점
더 서버의 부하가 집중이 되어 가는데 이것을 해결할 수 있는 가장 효과적인
방법은 FastCGI의 활용이라고 생각됩니다.

이런 면에서 앞으로 FastCGI의 기술은 오래전에 나왔지만 지금부터 더욱더
힘을 발휘할 수 있는 분야라고 생각됩니다.

kiseok7 wrote:
최근에 Fastcgi기술에 관심이 생겨서 리눅스에 아파치 mod_fastcgi를 구성하고 테스트를 해보고 있습니다.

fcgi-2.4.0의 소스를 보면 pthread를 사용하는것 같은데...

리눅스에서 pthread의 지원이 완벽하지 않다고 들었습니다.
http://kltp.kldp.org/stories.php?story=01/07/05/2982955

기존의 웹서비스(게시판 : c로 작성) 를 fastcgi로 대체하려 할때

리눅스상에서 fastcgi가 성능향상에 도움이 될지 어떻지 궁급합니다.

fastcgi 경험이 있으신 분들의 조언을 부탁드립니다.

nohmad의 이미지

파이썬 진영에서는 fastcgi를 조금 더 경량화한 scgi가 유명한데, 아파치 모듈로 돌아가는 것보다 큰 성능향상이 있습니다.

LinuxWeeklyNews(lwn.net)를 mod_python에서 scgi로 이전 후 성능향상이 이루어진 원인에 대해 간략하게 핵심만 설명한 다음 URL을 참조하시면 좋을 것 같습니다.
http://www.amk.ca/diary/2003/07/15#2003-07-15-1

간단히 요약하자면, 프로세스 포킹 환경에서 각 아파치 프로세스마다 별개의 인스턴스로 내장된 파이썬 인터프리터들의 공간 오버헤드에 비하면 프로세스 생성이 필요없고, 캐쉬 적중율이 높은 TCP 클라이언트/서버 모델이 낫다는 겁니다.

갑자기 몇 년 사이에 수없이 많은 웹 프레임웍들이 생겨나서 뭘 써야 할지 정말로 고민스러운데, 그냥 CGI 가지고 해오던 대로 작업할 수 있게 해주는 fastcgi나 scgi 같은 것이 고민 안하게 해줘서 좋은 것 같습니다. :)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.