ํด๋กœ์ด์Šคํ„ฐ โ†’ ๊ฐ„ํŽธ OTP ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ

๊ฑฐ์˜ ๋ชจ๋“  ์„ฑ๊ณต์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์กฐ๋งŒ๊ฐ„ ์ˆ˜ํ‰์  ํ™•์žฅ์ด ํ•„์š”ํ•œ ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฐ„๋‹จํžˆ ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ๋กœ๋“œ ํ‰๊ท ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ๊ฐ€ ์„œ๋กœ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ž‘์—… ๋ถ€ํ•˜๋ฅผ ์‹ ์ค‘ํ•˜๊ฒŒ ๋ถ„์‚ฐํ•ด์•ผ ํ•˜๋Š” ๋œ ์‚ฌ์†Œํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋กœ์ด์Šคํ„ฐ โ†’ ๊ฐ„ํŽธ OTP ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ

๋„ˆ๋ฌด ์šด์ด ์ข‹์•„์„œ ๊ทธ๋žฌ๋‹ค. ์–ผ๋žญ์šฐ๋ฆฌ๊ฐ€ ์œ ์พŒํ•œ ๊ตฌ๋ฌธ๊ณผ ๊ทธ์— ๋Œ€ํ•œ ๊ณผ๋Œ€ ๊ด‘๊ณ ๋กœ ์„ ํƒํ•œ ๋Š” ์ผ๋ฅ˜์˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ง€์›. ์ด๋ก ์ ์œผ๋กœ ์ด๊ฒƒ์€ ์™„์ „ํžˆ ์‚ฌ์†Œํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค.

์„œ๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ํ”„๋กœ์„ธ์Šค ๊ฐ„์€ ๋ฌผ๋ก  ๋งํฌ์™€ ๋ชจ๋‹ˆํ„ฐ ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ์€ ํˆฌ๋ช…ํ•ฉ๋‹ˆ๋‹ค. [โ€ฆ

์‹ค์ œ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์–ผ๋žญ "์ปจํ…Œ์ด๋„ˆ"๊ฐ€ ๋ฐฐ์†ก์„ ์œ„ํ•œ ํฐ ์ฒ  ์ƒ์ž๋ฅผ ์˜๋ฏธํ•˜๊ณ  "๋„์ปค"๊ฐ€ ๋‹จ์ˆœํžˆ ํ•ญ๋งŒ์—…์ž์˜ ๋™์˜์–ด์ผ ๋•Œ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์— IP4 ๋น„์–ด ์žˆ๋Š” ์ฃผ์†Œ๊ฐ€ ๋งŽ์•˜๊ณ , ์ผ€์ด๋ธ”์„ ์”น๋Š” ์ฅ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ๊ฐ€ ์ค‘๋‹จ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•˜์œผ๋ฉฐ, ์ƒ์‚ฐ ์‹œ์Šคํ…œ์˜ ํ‰๊ท  ๊ฐ€๋™ ์‹œ๊ฐ„์€ ์ˆ˜์‹ญ ๋…„์— ๊ฑธ์ณ ์ธก์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๋ฏฟ์„ ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ž๊ธ‰์ž์กฑํ•˜๊ณ , ํŒจํ‚ค์ง€ํ™”๋˜์–ด ๋ถ„์‚ฐ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์–ผ๋žญ ๋™์  IP ์ฃผ์†Œ๊ฐ€ ๋ฌด์ž‘์œ„์„ฑ์˜ ์›์น™์— ๋”ฐ๋ผ ์ „๋‹ฌ๋˜๊ณ  ๋…ธ๋“œ๊ฐ€ ์Šค์ผ€์ค„๋Ÿฌ์˜ ์™ผ์ชฝ ๋ณ€๋•์— ๋”ฐ๋ผ ๋‚˜ํƒ€๋‚˜๊ณ  ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ. ๋ถ„์‚ฐ์„ ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“  ํ”„๋กœ์ ํŠธ์—์„œ ์ƒ์šฉ๊ตฌ ์ฝ”๋“œ ๋”๋ฏธ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋žญ, ์ ๋Œ€์ ์ธ ํ™˜๊ฒฝ์— ๋งž์„œ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜: ๋‚˜๋Š” ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค. libcluster. ์ •๋ง ๋ฉ‹์ง€๊ณ , ๋ณ„์ด ์ฒœ ๊ฐœ๊ฐ€ ๋„˜๊ณ , ์ž‘๊ฐ€๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์œ ๋ช…ํ•˜๋‹ค๋Š” ๊ฒƒ ๋“ฑ๋“ฑ์ด์š”. ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ด ํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ท€ํ•˜์—๊ฒŒ ์ถฉ๋ถ„ํ•˜๋‹ค๋ฉด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋” ๋งŽ์€ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ์žฌํŽธ์˜ ํ˜„์žฅ์„ ์™ธ๋ถ€์˜ ๋ฐฉ๊ด€์ž๊ฐ€ ์•„๋‹Œ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์„ค์ •์„ ์ œ์–ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์š”๊ตฌ ์‚ฌํ•ญ

๊ฐœ์ธ์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ๋ฅผ ๋Œ€์‹ ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ๊ฐ–๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ๋…ธ๋“œ ๋ชฉ๋ก๊ณผ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•œ ๋™์  ๊ฒ€์ƒ‰์„ ํ†ตํ•œ ํˆฌ๋ช…ํ•œ ์ž‘์—… ์–ผ๋žญ;
  • ๋ชจ๋“  ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ(๊ฑฐ๊ธฐ ๋…ธ๋“œ, ์—ฌ๊ธฐ ๋…ธ๋“œ, ๋„คํŠธ์›Œํฌ ๋ถˆ์•ˆ์ •, ๋ถ„ํ• )์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๊ธฐ๋Šฅ์˜ ์ฝœ๋ฐฑ;
  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ธด ์ด๋ฆ„๊ณผ ์งง์€ ์ด๋ฆ„์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํˆฌ๋ช…ํ•œ ์ธํ„ฐํŽ˜์ด์Šค :nonode@nohost;
  • ์ธํ”„๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ํ•„์š” ์—†์ด ์ฆ‰์‹œ Docker๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

ํ›„์ž๋Š” ๋กœ์ปฌ์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•œ ํ›„๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. :nonode@nohost, ๋˜๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์œ„์ ์œผ๋กœ ๋ถ„์‚ฐ๋œ ํ™˜๊ฒฝ์—์„œ test_cluster_task, ๋‚œ ๊ทธ๋ƒฅ ๋‹ฌ๋ฆฌ๊ณ  ์‹ถ์–ด docker-compose up --scale my_app=3 ์ฝ”๋“œ ๋ณ€๊ฒฝ ์—†์ด docker์—์„œ ์„ธ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด์„ธ์š”. ๋‚˜๋Š” ๋˜ํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ข…์† ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. mnesia - ํ† ํด๋กœ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ถ”๊ฐ€ ์ž‘์—… ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์žฌ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

ํšŒ๋ž‘ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์ปคํ”ผ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋  ์˜๋„๋Š” ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‚ฌ๋ก€๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๋งŒ๋Šฅ์ฑ…๋„ ์•„๋‹ˆ๊ณ , ์ถœ์‹  ์ด๋ก ๊ฐ€๋“ค์ด ๋งํ•˜๋Š” ํ•™๋ฌธ์ ์œผ๋กœ ์™„์ „ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ๋˜๋Š” ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. CS ์ด ์šฉ์–ด์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋งค์šฐ ๋ช…ํ™•ํ•œ ๋ชฉ์ ์„ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์ง€๋งŒ ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์€ ์ž‘์—…์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชฉํ‘œ๋Š” ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์ ๋Œ€์ ์ธ ์ปจํ…Œ์ด๋„ˆ๋กœ ๊ฐ€๋“ ์ฐฌ ๋ถ„์‚ฐ๋œ ํƒ„๋ ฅ์  ํ™˜๊ฒฝ ์‚ฌ์ด์— ์™„์ „ํ•œ ํˆฌ๋ช…์„ฑ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ ํƒ๋œ ์ ‘๊ทผ๋ฒ•

ํšŒ๋ž‘ ๊ณ ๊ธ‰ ์‚ฌ์šฉ์ž๋Š” ์ง์ ‘ ์‹คํ–‰ํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๊ณ ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Cloister.Manager ๋Œ€์ƒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ๋…์ž ํŠธ๋ฆฌ์—์„œ.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ์‹คํ–‰๋  ๋•Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋‹ค์Œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. config, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๊ฐ’์„ ์ฝ์Šต๋‹ˆ๋‹ค.

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

์œ„์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํšŒ๋ž‘ OTP ์‹ ์ฒญ์— ์‚ฌ์šฉ :my_app, ์šฉ๋„ ์–ผ๋žญ ์„œ๋น„์Šค ๋ฐœ๊ฒฌ ์ตœ์†Œ XNUMX๊ฐœ ์ด์ƒ์˜ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  MyApp.Listener ๋ชจ๋“ˆ(๊ตฌํ˜„ @behaviour Cloister.Listener)์€ ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›๋„๋ก ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ „์ฒด ๊ตฌ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

์ด ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํšŒ๋ž‘ ์˜์ง€ ๋‹จ๊ณ„์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋‹ค, ํ•ฉ์˜์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง€์—ฐํ•ฉ๋‹ˆ๋‹ค(์œ„์˜ ์˜ˆ์™€ ๊ฐ™์ด XNUMX๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜๊ณ  ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.) ์ด๋Š” ๊ธฐ๋ณธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹œ์ž‘๋  ๋•Œ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ† ํด๋กœ์ง€๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค(๋…ธ๋“œ๊ฐ€ ์™„์ „ํžˆ ๋™๊ธฐ์‹์œผ๋กœ ์‹œ์ž‘๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๊ฒƒ์ž„) ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. MyApp.Listener.on_state_change/2. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ƒํƒœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. %Cloister.Monitor{status: :up}, ์ด๋Š” "์•ˆ๋…•ํ•˜์„ธ์š”, ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์กฐ๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์„ค์น˜ consensus: 3 ๋” ๋งŽ์€ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๋”๋ผ๋„ ์ฝœ๋ฐฑ์€ ๊ณ„์† ์ง„ํ–‰๋˜๋ฏ€๋กœ ์ตœ์ ์ž…๋‹ˆ๋‹ค. status: :rehashing โ†’ status: :up ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ œ๊ฑฐ๋œ ๋…ธ๋“œ์—์„œ.

๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ ์‹œ์ž‘ํ•  ๋•Œ ์„ค์ •๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. consensus: 1 ะธ ํšŒ๋ž‘ ๊ทธ๊ฐ€ ๋ณผ ๋•Œ ํด๋Ÿฌ์Šคํ„ฐ ์กฐ๋ฆฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๊ธฐ๊บผ์ด ๊ฑด๋„ˆ๋›ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :nonode@nohost๋˜๋Š” :node@host๋˜๋Š” :[email protected] - ๋…ธ๋“œ๊ฐ€ ๊ตฌ์„ฑ๋œ ๋ฐฉ์‹์— ๋”ฐ๋ผ(:none | :shortnames | :longnames).

๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ

์ง„๊ณต ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ„์‚ฐ ์ข…์†์„ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. mnesia. ๋™์ผํ•œ ์ฝœ๋ฐฑ์—์„œ ์žฌ๊ตฌ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค. on_state_change/2. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์€ ์žฌ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. mnesia ์ฆ‰์„์—์„œ ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜ ํšŒ๋ž‘.

์‚ฌ์šฉ์˜ ์ฃผ์š” ์ด์  ํšŒ๋ž‘ ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ ํ›„ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์žฌ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ›„๋“œ. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ IP ์ฃผ์†Œ์™€ ๋…ธ๋“œ ์ด๋ฆ„์„ ๋ฏธ๋ฆฌ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ๋™์ ์œผ๋กœ ํ• ๋‹น/๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ด๋ฏธ ์ค€๋น„๋œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํŠน๋ณ„ํ•œ ๋„์ปค ๊ตฌ์„ฑ ์„ค์ •์ด ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž์˜ ๊ด€์ ์—์„œ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด์— ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. :nonode@nohost. ์ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜.

์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์„ ํ†ตํ•ด ํ† ํด๋กœ์ง€ ๋ณ€๊ฒฝ์˜ ๋ณต์žกํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ MyApp.Listener, ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œํ•œ ๋ฐ ๊ตฌ์„ฑ ํŽธํ–ฅ์ด ๊ตฌํ˜„์˜ ์ดˆ์„์ด ๋˜๋Š” ๊ทน๋‹จ์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ํ•ญ์ƒ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋‚ด์šฉ์„ ๋”ฐ๋ฅด์„ธ์š”. libcluster, ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ์ˆ˜์ค€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ถˆํ•„์š”ํ•œ ๊ณ ํ†ต๊ณผ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ณต์‚ฌ-๋ถ™์—ฌ๋„ฃ๊ธฐ ์—†์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ  : ์ด ์‹œ์ ์—์„œ ์›๋ณธ์—๋Š” "ํ–‰๋ณตํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง!"์ด๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ์žˆ์—ˆ๊ณ  ์ œ๊ฐ€ ๋ฒˆ์—ญํ•œ Yandex์—์„œ๋Š”(์ง์ ‘ ์‚ฌ์ „์„ ๋ณผ ํ•„์š”๊ฐ€ ์—†์Œ) "ํ–‰๋ณตํ•œ ํด๋Ÿฌ์Šคํ„ฐ๋ง!" ์˜ต์…˜์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ํ˜„์žฌ์˜ ์ง€์ •ํ•™์  ์ƒํ™ฉ์„ ๊ณ ๋ คํ•  ๋•Œ ๋” ๋‚˜์€ ๋ฒˆ์—ญ์„ ์ƒ์ƒํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€