HA 를 위한 N+ 서버간 상태정보 복제 방안

sanha777의 이미지

상기 제목과 같이 HA (Hight Availability) 구성된 시스템간 상태 정보 복제를 효과적으로 하는 방안을 생각중인데요.

첫번째로는, 멀티캐스트를 이용하는 방법입니다.
각 서버들은 특정 멀티캐스트 그룹에 Join 하고 sender 및 receiver 가 되어 상태정보를 주고 받는데.
이를 구현해놓은 프로젝트로는 http://www.jboss.org/infinispan 를 예로 들 수 있겠습니다.
infinispan 은 신뢰성 있는 UDP 통신을 할 수 있도록 구조가 갖춰져 있는데요.
현재 서버가 netty 기반이라서..실제로는 netty API 를 이용해서 간단히 구현하고자 합니다.

헌데, 여기서 두가지 생각이 듭니다.

첫째. UDP 패킷을 1450byte 가량 이하의 크기로 보낸다고 하였을때
- 패킷 loss
- 패킷 순서 바뀜
의 가능성이 얼마나 될까요?
만약, 가능성이 충분히 존재한다면.. 결국 신뢰성 있는 UDP 통신이 되도록 ACK 구조와, 재전송, 조립 구조등을 갖춰야 할텐데요.

둘째. 그렇다면 굳이 UDP 기반으로 갈 필요 없이 persistance TCP 접속을 이용해서 상태 정보 주고받는것과 성능상 그리 큰 차이 안나지 않을까요.
물론, 서버가 수백, 수천대라면 멀티캐스팅 기반 복제가 훌륭한 방안이겠지만.. 만약 서버가 많아도 5대 미만 정도라면?

가장 적절한 상황을 생각해본다면..
LAN 환경에서 1450 byte 이하의 UDP 패킷이 순서는 바뀔 수 있지만 로스는 없다고 가정해봤을때.
상태 정보를 1450byte 크기로 분할하고 헤더에 상태정보ID, 전체 chunk 갯수, chunk 인덱스 3개 항목을 넣고 바디에 분할된 상태정보를 넣어서.
멀티캐스팅으로 보내기만 하고. 받은 쪽에서는 조립은 하되 ACK 는 안하는걸로 하는건데요.

이렇게 했을때 충분히 안정적이다고 생각할 수 있을까요?
ACK 까지 들어가면 로직이 훨씬 복잡해지고 timeout 처리와 재전송, 중복 판단 등.. 여러가지 고려되어야 하고 그럴바에야 그냥 TCP 기반으로 접속해놓고 주고받아도 서버 몇대 기반에서는 큰 차이 없을것 같다는 생각도 드네요.

댓글 달기

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