2 ๋ถ„ ์†Œ์š”

Elastic Load Balancer? ๐Ÿช

Elastic Load Balancer : ๋“ค์–ด์˜ค๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠธ๋ž˜ํ”ฝ์„ Amazon EC2์ธ์Šคํ„ด์Šค, ์ปจํ…Œ์ด๋„ˆ, IP์ฃผ์†Œ, Lambda ํ•จ์ˆ˜์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๋Œ€์ƒ์— ์ž๋™์œผ๋กœ ๋ถ„์‚ฐ์‹œํ‚จ๋‹ค.
  • ๋‹ค์ˆ˜์˜ ์„œ๋น„์Šค์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐ ์‹œ์ผœ์ฃผ๋Š” ์„œ๋น„์Šค

  • Health Check : ์ง์ ‘ ํŠธ๋ž˜ํ”ฝ์„ ๋ฐœ์ƒ์‹œ์ผœ ์‚ด์•„์žˆ๋Š”์ง€ ํ™•์ธํ•จ

  • Autoscaling๊ณผ ์—ฐ๋™ ๊ฐ€๋Šฅ

  • ์—ฌ๋Ÿฌ ๊ฐ€์šฉ์˜์—ญ์— ๋ถ„์‚ฐ ๊ฐ€๋Šฅ

  • ์ง€์†์ ์œผ๋กœ IP๊ฐ€ ๋ฐ”๋€Œ์–ด IP๊ณ ์ • ๋ถˆ๊ฐ€๋Šฅ : ํ•ญ์ƒ ๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ

  • Application Load Balancer : ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ๋™์ž‘ ( ๋˜‘๋˜‘ํ•จ )

  • Network Load Balaner : ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ์—์„œ ๋™์ž‘, TCP๊ธฐ๋ฐ˜, Elastic IPํ• ๋‹น ๊ฐ€๋Šฅ ( ๋น ๋ฆ„ )

  • Class Load Balaner : ์˜›๋‚ ์—์‚ฌ์šฉ

  • Gateway Load Balaner : ๋จผ์ € ํŠธ๋ž˜ํ”ฝ์„ ์ฒดํฌํ•จ, ๊ฐ€์ƒ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ/ํ™•์žฅ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์„œ๋น„์Šค




Target Group

  • ALB๊ฐ€ ๋ผ์šฐํŒ…ํ•  ๋Œ€์ƒ์˜ ์ง‘ํ•ฉ

  • Instance, IP(private), lambda, ALB




์‚ฌ์šฉํ•ด๋ณด๊ธฐ


์ด๋ฏธ ๋งŒ๋“ค์–ด๋†“์€ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ 1๋ฒˆ ์ธ์Šคํ„ด์Šค์— ๋”ํ•ด 2๋ฒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค.


alb-2


1๋ฒˆ ์ธ์Šคํ„ด์Šค : Docker[redis], Docker[nodejs-server]

2๋ฒˆ ์ธ์Šคํ„ด์Šค : Docker[nodejs-server]

์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„์—์„œ ์ฑ„ํŒ…์ด ์ž˜ ์—ฐ๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ์œ„ํ•œ

์‹คํ—˜์šฉ์œผ๋กœ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋งŒ๋“ ๊ฑฐ๋ผ ๊ตฌ์กฐ๊ฐ€ ์กฐ๊ธˆ ์ด์ƒํ•˜๋‹ค.(์ดํ•ด๋ฐ”๋žŒ)


์ถ”ํ›„ ์ œ๋Œ€๋กœ ๋ฐฐํฌ๋ฅผ ํ•œ๋‹ค๋ฉด

1๋ฒˆ ์ธ์Šคํ„ด์Šค : Docker[redis]

2๋ฒˆ ์ธ์Šคํ„ด์Šค : Docker[nodejs-server]

3๋ฒˆ ์ธ์Šคํ„ด์Šค : Docker[nodejs-server]

์ด๋ ‡๊ฒŒ ์ญ‰์ญ‰ ๋งŒ๋“ค์–ด์„œ 1๋ฒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋งŒ target group์œผ๋กœ ๋งŒ๋“ค์–ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋ฅผ ๋Œ๋ฆฌ๋Š”๊ฒŒ ๋‚˜์„๊ฒƒ๊ฐ™๋‹ค.

(๊ทธ๋Ÿฌ๋ฉด 1๋ฒˆ ์ธ์Šคํ„ด์Šค๋งŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํฌ๊ฒŒ ์„ค์ •ํ•˜๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ)


์ฑ„ํŒ…์„œ๋ฒ„๋Š” redis์˜ pub/sub๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๊ธฐ์— 2๋ฒˆ์˜ ์ธ์Šคํ„ด์Šค๋Š” 1๋ฒˆ ์ธ์Šคํ„ด์Šค์˜ redis์— ์—ฐ๊ฒฐํ•ด์ค˜์•ผํ•œ๋‹ค.!

(์ฆ‰ ๊ฐ™์€ redis์„œ๋ฒ„๋ฅผ ๊ณต์œ ํ•ด์•ผํ•จ)

์„œ๋กœ ์—ฐ๊ฒฐ์ด ๋˜๋Š”์ง€ ํ•‘์„ ์ด๋ณด์ž.

์•„๋งˆ ์•ˆ๋ ๊ฒƒ์ด๋‹ค.ใ… ใ… 

2๋ฒˆ์ธ์Šคํ„ด์Šค์—์„œ 1๋ฒˆ์ธ์Šคํ„ด์Šค์˜ redis๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์•ˆ๊ทธ๋ฃน์„ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.

2๋ฒˆ ์ธ์Šคํ„ด์Šค์˜ ๋ณด์•ˆ๊ทธ๋ฃน์— ์ธ๋ฐ”์šด๋“œ๊ทœ์น™์— 1๋ฒˆ ์ธ์Šคํ„ด์Šค์˜ ์ธ๋ฐ”์šด๋“œ๊ทœ์น™์„ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

(1 -> 2๋„ ๋™์ผํ•˜๊ฒŒ ์ธ๋ฐ”์šด๋“œ๊ทœ์น™์— ์ถ”๊ฐ€)


alb-4


์ž. ์ด์ œ ์—ฐ๊ฒฐ์ด ๋˜์—ˆ์œผ๋‹ˆ redis์„œ๋ฒ„์— ์—ฐ๊ฒฐ์„ ํ•ด์ฃผ์ž

๊ทธ๋ฆฌ๊ณ  ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ target group์— ์ธ์Šคํ„ด์Šค๋ฅผ ๋„ฃ์–ด์ฃผ์ž.


alb-6


healthy check๊ฐ€ ๋‘๊ฐœ๋‹ค ์„ฑ๊ณต์œผ๋กœ ๋œฌ๋‹ค๋ฉด

์ด์ œ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ๋งˆ๋‹ค 1,2๋ฒˆ ์„œ๋ฒ„์—์„œ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉฐ ์‘๋‹ต์„ ํ•ด์ค„๊ฒƒ์ด๋‹ค.

์„ฑ๊ณต!




*****************************์‚ฝ์งˆํ•œ๊ฒƒ*****************************


๋ถ„๋ช… ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๋Š” ์ž˜๋Œ์•„๊ฐ€๊ณ ์žˆ๊ณ 

graphql๋„ ์‘๋‹ต์„ ์ž˜ํ•˜๊ณ  ์žˆ๋‹ค..

ํ•˜์ง€๋งŒ ์ฑ„ํŒ…์„œ๋ฒ„๋งŒ message: "Session ID unknown"์„ ๋ฑ‰์–ด๋‚ด๋ฉฐ ์—ฐ๊ฒฐ์ด ๋˜์ง€์•Š์•˜๋‹ค.

๋Œ€์ฒด ๋ฌด์—‡์ด ๋ฌธ์ œ์ง€? ๋˜ ๋ฐ˜๋‚˜์ ˆ ๊ตฌ๊ธ€๋งํ•˜๋ฉฐ ์‚ฝ์งˆ์„ ํ•ด๋ณธ๋‹ค.

์‚ฌ์‹ค ์ € ์—๋Ÿฌ ๋ฉ”์„ธ์ง€๋ฅผ ์ฐพ๋Š”๋ฐ ๋ฐ˜๋‚˜์ ˆ์ด ๊ฑธ๋ ธ๋‹ค๊ณ  ๋ณด๋Š”๊ฒŒ ๋งž๋Š”๊ฑฐ๊ฐ™๋‹ค..

๊ทธ์ „๊นŒ์ง„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ๊ฐ€ ๋ฌธ์ œ์ธ๊ฐ€? ๋ณด์•ˆ๊ทธ๋ฃน์ด ๋ฌธ์ œ์ธ๊ฐ€? ๊ณ„์† ์ด๊ฒƒ์ €๊ฒƒ ๋ฐ”๊ฟ”๋ณด์•˜๋‹ค.

์—๋Ÿฌ๋ฉ”์„ธ์ง€๋กœ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ

https://github.com/socketio/socket.io/issues/1739#issuecomment-64244359

์ด๊ณณ์—์„œ ์ •๋‹ต์„ ์–ป๊ฒŒ๋˜์—ˆ๋‹ค.

 var socket = io.connect('https://www2.wecode.buzzntrend.com', {
   transports: ['websocket'],
 });

์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด์ฃผ๋‹ˆ ์ž˜ ์ž‘๋™ํ•˜์˜€๋‹ค.

์ด์ œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋˜ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด์ž.

๊ณต์‹ํ™ˆํŽ˜์ด์ง€์—์„œ ์ด์œ ๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ HTTP ๋กฑ ํด๋ง ์ „์†ก์ด Socket.IO ์„ธ์…˜์˜ ์ˆ˜๋ช… ๋™์•ˆ ์—ฌ๋Ÿฌ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ํ•œ๋‹ค.


elb-9


๋ง์ด ์กฐ๊ธˆ ์–ด๋ ค์›Œ์„œ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•œ๋Œ€๋กœ ๋‹ค์‹œ ๋งํ•ด๋ณด์ž๋ฉด ๋นจ๊ฐ„๋„ค๋ชจ์นœ์ƒ์ž๋ฅผ ๋ณด๋ฉด ์š”์ฒญ์ด ์„ฑ๊ณต,์‹คํŒจ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐ˜๋ณตํ˜•ํƒœ๋ฅผ ๋ณด์ด๋Š” ์ด์œ ๋Š” HTTP ๋กฑ ํด๋ง ์ „์†ก์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ํ•ญ์ƒ ๊ฐ™์€ ์„œ๋ฒ„์— ๋„์ฐฉํ•ด์•ผ๋˜๋Š”๋ฐ

๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ์˜ ๋ผ์šด๋“œ-๋กœ๋นˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ๋งค ์ˆœ๊ฐ„ ์‹ค์‹œ๊ฐ„ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์„œ๋ฒ„์— ๋ฟŒ๋ ค์ฃผ๊ธฐ ๋•Œ๋ฌธ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


elb-10


๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” target group์— ์žˆ๋Š” ์Šคํ‹ฐํ‚ค์„ธ์…˜์„ ํ™œ์„ฑํ™” ์‹œํ‚ค๋ฉด ๋œ๋‹ค.

์Šคํ‹ฐํ‚ค์„ธ์…˜์ด๋ž€ ์ฒซ ์š”์ฒญ์— ์‘๋‹ตํ•ด์ค€ ์„œ๋ฒ„์—๋งŒ ๊ปŒ๋”ฑ์ง€ ์ฒ˜๋Ÿผ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š”๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ถ€๋ถ„์€ ๋‚˜์˜ ํ…Œ์ŠคํŠธ ๋ชฉ์ ๊ณผ ๋งž์ง€ ์•Š๊ธฐ์— ๋ณด๋ฅ˜ํ•ด ๋‘์—ˆ๊ณ  ์œ„์ฒ˜๋Ÿผ transports:[โ€˜websocketโ€™] ์„ ์ ์–ด์คŒ์œผ๋กœ์จ ํด๋ง์š”์ฒญ์„ ๋น„ํ™œ์„ฑํ™” ์‹œ์ผœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

๋!

์—…๋ฐ์ดํŠธ: