๋ณธ ๊ธฐ๊ณ ๋ฌธ์€ ์˜คํ”ˆ์†Œ์Šค ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์ธ Apache OpenWhisk ๋ฅผ ์†Œ๊ฐœํ•œ๋‹ค. ๋จผ์ € ์„œ๋ฒ„๋ฆฌ์Šค์™€ OpenWhisk ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ  OpenWhisk ์ด ์–ด๋–ป๊ฒŒ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณธ๋‹ค. ๊ทธ ๋‹ค์Œ OpenWhisk ์˜ ๊ตฌ์ฒด์ ์ธ ๋™์ž‘๋ฐฉ์‹์„ ํ†ตํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ถ„์„ํ•˜๊ณ , ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์„ ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ตœ์ ํ™”ํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณธ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ์˜คํ”ˆ์†Œ์Šค ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์œผ๋กœ Apache OpenWhisk ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐœ์ „ํ–ˆ๋Š”์ง€, ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ๋Š”๊ฐ€ ํ™•์ธํ•œ๋‹ค.

  1. Apache OpenWhisk – ์†Œ๊ฐœ ๋ฐ ์•„ํ‚คํ…์ณ
  2. Apache OpenWhisk – ์‹คํ–‰ ๊ณผ์ •
  3. Apache OpenWhisk – ๋” ์•Œ์•„๋ณด๊ธฐ

Apache OpenWhisk ๋Š” ๋ฌด์—‡์ธ๊ฐ€?

Apache OpenWhisk ๋Š” ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ์˜คํ”ˆ์†Œ์Šค ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์œผ๋กœ, ๊ฐœ๋ฐœ์ž๋ฅผ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ๊ด€๋ฆฌ๋‚˜ ์šด์˜์œผ๋กœ๋ถ€ํ„ฐ ์ž์œ ๋กญ๊ฒŒ ํ•ด ์ค€๋‹ค. Github ์— ๊ณต๊ฐœ๋œ์ง€ 1๋…„ ๋ฐ˜ ๋งŒ์— 400์—ฌ๋ฒˆ ํฌํฌ๋˜๊ณ , 1100์—ฌ๊ฐœ์˜ ์ด์Šˆ์™€ 1500์—ฌ๊ฐœ์˜ PR (Pull requests) ์ด ์˜ฌ๋ผ์˜ค๋Š” ํ™œ๊ธฐ์ฐฌ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์ด๋‹ค. IBM ์˜ ์„œ๋ฒ„๋ฆฌ์Šค ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ๋กœ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ํ›„ 2016๋…„ 2์›” ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœ๋˜์—ˆ๊ณ , 11์›”๋ถ€ํ„ฐ ์•„ํŒŒ์น˜ ์ธํ๋ฒ ์ด์…˜์„ ์‹œ์ž‘ํ•˜์˜€๋‹ค.

์„œ๋ฒ„๋ฆฌ์Šค (Serverless)๋ž€?

์„œ๋ฒ„๋ฆฌ์Šค๋Š” ์„œ๋ฒ„ ์—†์ด ๋ชจ๋“  ๊ทœ๋ชจ์˜ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‘๋‹ตํ•˜๋Š” ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ๋ฐฉ์‹์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ ์—†๋‹ค๋Š” ํ‘œํ˜„์ด ์•ฝ๊ฐ„ ๋ชจํ˜ธํ•œ๋ฐ, ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๋ณ„๋„๋กœ ํ• ๋‹น๋œ ์„œ๋ฒ„๊ฐ€ ์—†์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ”„๋ผ ๋ฐ ํ”Œ๋žซํผ ๊ด€๋ฆฌ๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๊ฐ€์ƒ๋จธ์‹ ์ด๋‚˜ ๋ฒ ์–ด๋ฉ”ํƒˆ ์ฒ˜๋Ÿผ ์„œ๋ฒ„๋‚˜ ๋„คํŠธ์›Œํฌ, ์Šคํ† ๋ฆฌ์ง€ ๋“ฑ ์ธํ”„๋ผ๋ฅผ ์„œ๋น„์Šค๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด IaaS (Infrastructure as a Service), ์›น ์„œ๋น„์Šค๋ฅผ ์ฝ”๋“œ๋งŒ ์˜ฌ๋ฆฌ๋ฉด ํ”Œ๋žซํผ์œผ๋กœ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๊ฒƒ์ด PaaS (Platform as a Service) ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์„œ๋ฒ„๋ฆฌ์Šค๋Š” FaaS (Function as a service) ๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค. ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ€์ƒํ™”์— ๋”ฐ๋ฅธ IaaS ์˜ ๋ฐœ์ „์œผ๋กœ ๋ฌผ๋ฆฌ ์„œ๋ฒ„๋“ค์ด ๊ฐ€์ƒ ์„œ๋ฒ„๋กœ ์˜ฎ๊ฒจ์˜ค๋ฉด์„œ ์ปดํ“จํŒ… ์ž์›์˜ ์‚ฌ์šฉ์œจ (Utilization) ์€ ๊ธ‰๊ฒฉํžˆ ๋†’์•„์งˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ธํ”„๋ผ์™€ ํ”Œ๋žซํผ์„ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” PaaS ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ธํ”„๋ผ ๋ฐ ํ”Œ๋žซํผ ๊ด€๋ฆฌ์— ๋“ค์ด๋Š” ์ˆ˜๊ณ ๊นŒ์ง€ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•˜๋ฃจ์— ๋ช‡ ๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ์›นํŽ˜์ด์ง€ ์„œ๋ฒ„๋‚˜ ์•ฑ๋„ 365์ผ 24์‹œ๊ฐ„ ๋Œ€๊ธฐํ•˜๋ฉด์„œ ํ•„์š” ์—†๋Š” ์ž์›์„ ์ ์œ ํ•˜๊ณ  ์žˆ๊ณ , ๋ฐ˜๋Œ€๋กœ ๊ธ‰๊ฒฉํžˆ ๋Š˜์–ด๋‚˜๋Š” ์š”์ฒญ์— ๋Œ€ํ•ด์„œ๋Š” ์˜คํ† ์Šค์ผ€์ผ๋ง (Auto-scaling) ์„ค์ • ๋“ฑ ๋Œ€์‘ ๋ฐฉ๋ฒ•์„ ๋งˆ๋ จํ•ด์•ผ ํ•œ๋‹ค. ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์—์„œ๋Š” ์š”์ฒญ์ด ์žˆ์„ ๋•Œ๋งŒ ํ•„์š”ํ•œ ํ•ด๋‹น๋˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐ€๋ฆฌ์ดˆ(ms) ๋‹จ์œ„๋กœ ์‹คํ–‰ํ•˜๊ณ , ์š”์ฒญ์ด ๋งŽ์€ ๊ฒฝ์šฐ๋Š” ๊ทธ์— ๋น„๋ก€ํ•˜๋Š” ์ž์›์„ ํ• ๋‹นํ•˜์—ฌ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉ์œจ๊ณผ ํ™•์žฅ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค.

์•„ํŒŒ์น˜ ์ธํ๋ฒ ์ดํ„ฐ (Apache Incubator)

ํ˜„์žฌ Apache OpenWhisk ๋Š” ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ (Apache Software Foundation) ์˜ ์ธํ๋ฒ ์ดํ„ฐ ํ”„๋กœ์ ํŠธ๋กœ ์Šน์ธ์„ ๋ฐ›์€ ์ƒํƒœ์ด๋‹ค. ์•„ํŒŒ์น˜ ์›น์„œ๋ฒ„ (Apache httpd), Tomcat, Hadoop, Spark ์ฒ˜๋Ÿผ ์•„ํŒŒ์น˜ ํ”„๋กœ์ ํŠธ๋กœ ์Šน์ธ ๋ฐ›์€ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋Š” ํŠน์ • ํšŒ์‚ฌ์— ์†ํ•œ ์˜คํ”ˆ์†Œ์Šค๋ณด๋‹ค ๊ฐœ๋ฐœ์ž๋ฅผ ๋ชจ์•„ ์ƒํƒœ๊ณ„๋ฅผ ๋งŒ๋“ค๊ธฐ ์šฉ์ดํ•˜๋‹ค. IBM ์€ OpenWhisk ๋ฅผ Apache ํ”„๋กœ์ ํŠธ๋กœ ์ œ์•ˆํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์˜์†์„ฑ, ํˆฌ๋ช…ํ•จ, ๊ณต์ •์„ฑ์„ ์•Œ๋ ค ๋ณด๋‹ค ๋„“์€ ๊ฐœ๋ฐœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๋งŒ๋“ค๊ณ  ์„œ๋ฒ„๋ฆฌ์Šค๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ์•ˆ์„ ํƒํ–ˆ๋‹ค. ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด์„ผ์Šค ๊ฒ€์ฆ์ด๋‚˜ ์ปค๋ฏธํ„ฐ ํ™•์ถฉ ๋“ฑ์˜ ์•„ํŒŒ์น˜ ์ธํ๋ฒ ์ดํŒ…์ด ์™„๋ฃŒ๋˜์–ด Apache OpenWhisk ๊ฐ€ ์ •์‹ ์•„ํŒŒ์น˜ ์†Œํ”„ํŠธ์›จ์–ด ์žฌ๋‹จ์˜ Top-Level ํ”„๋กœ์ ํŠธ๋กœ ๋“ฑ๋ก๋˜๋ฉด, ๋ณด๋‹ค ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ Apache OpenWhisk ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐœ๋ฐœ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•œ๋‹ค.

apache_podling.png

<๊ทธ๋ฆผ> ์•„ํŒŒ์น˜ ์ธํ๋ฒ ์ดํ„ฐ์—์„œ ์„ฑ์žฅ์ค‘์ธ Apache OpenWhisk

OpenWhisk ์šฉ์–ด

์–ด๋–ค ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ฃผ๋Š” ๊ฒƒ์ด ์„œ๋ฒ„๋ฆฌ์Šค์˜ ๊ธฐ๋ณธ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค. ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๊ณผ์ •์—์„œ ํ”Œ๋žซํผ๋งˆ๋‹ค ์กฐ๊ธˆ ๋‹ค๋ฅธ ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— OpenWhisk ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์šฉ์–ด๋“ค์„ ๋จผ์ € ์ •๋ฆฌํ•ด๋ณธ๋‹ค.

openwhisk_overview.png

<๊ทธ๋ฆผ> OpenWhisk ์šฉ์–ด

ํŠธ๋ฆฌ๊ฑฐ (Triggers)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์žฅ์น˜, ์›น ๋“ฑ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ๋ผ๊ณ  ํ•œ๋‹ค.

์•ก์…˜ (Actions)

์•ก์…˜์€ ์ง€์›๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๋‹จ์ผ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„๋œ ์ฝ”๋“œ๋กœ, ํŠธ๋ฆฌ๊ฑฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜์–ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฃฐ (Rules)

๋ฃฐ์€ ํŠธ๋ฆฌ๊ฑฐ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ ๋Œ€ํ•ด ์–ด๋–ค ์•ก์…˜์ด ์‹คํ–‰๋ ์ง€ ์ •์˜ํ•œ๋‹ค.

์‹œํ€ธ์Šค (Sequences)

์•ก์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์‹œํ€ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค.

ํŒจํ‚ค์ง€ (Packages)

ํŠธ๋ฆฌ๊ฑฐ์™€ ์•ก์…˜์„ ๋ชจ์•„ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๋กœ ๊ณต๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค. ํŒจํ‚ค์ง€๋กœ ์ •์˜๋œ ์™ธ๋ถ€ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์ง์ ‘ ๋งŒ๋“  ํŒจํ‚ค์ง€๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

OpehWhisk ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์•ก์…˜์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์–ธ์–ด๋กœ๋Š” Node.js v6, Swift v3, Python, Java, PHP ๊ฐ€ ๊ธฐ๋ณธ ์ง€์›๋œ๋‹ค. ์‹ค์ œ ์•ก์…˜์ด ์ปจํ…Œ์ด๋„ˆ์—์„œ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋„์ปค (Docker) ์ด๋ฏธ์ง€๋„ ์•ก์…˜์œผ๋กœ ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ˆ, ์‚ฌ์‹ค์ƒ Linux ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ง€์›๋œ๋‹ค. Go, Haskell, Scala, Kotlin ๋“ฑ์„ OpenWhisk ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์‰ฝ๊ฒŒ ์žง์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.
Node.js ์™€ Express.js ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ต์ˆ™ํ•˜๋‹ค๋ฉด openwhisk-expressjs npm ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Express.js ๊ธฐ๋ฐ˜์œผ๋กœ OpenWhisk ์•ก์…˜์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜, ๊ธฐ์กด Express.js ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•œ ์•ฑ์„ OpenWhisk ์—์„œ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

Apache OpenWhisk ์•„ํ‚คํ…์ฒ˜

OpenWhisk ๋Š” ์˜คํ”ˆ์†Œ์Šค ํ”Œ๋žซํผ๋‹ต๊ฒŒ ์˜คํ”ˆ์†Œ์Šค ์ปดํฌ๋„ŒํŠธ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค. OpenWhisk ๋Š” ๋™๊ธฐ (Sync), ๋น„๋™๊ธฐ(Async) ์‹คํ–‰๋ฐฉ์‹์„ ๋ชจ๋‘ ์ง€์›ํ•˜๋Š”๋ฐ, HTTP ๋กœ ๊ฐ„๋‹จํ•œ ๋น„๋™๊ธฐ ์š”์ฒญ์„ ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์š”์ฒญ์ด ์ง„ํ–‰๋œ๋‹ค.

openwhisk_execution_architecture.png

<๊ทธ๋ฆผ> OpenWhisk ์‹คํ–‰ ์•„ํ‚คํ…์ฒ˜

  1. ์‹œ์Šคํ…œ์˜ ์ฒซ ๊ด€๋ฌธ: nginx
    OpenWhisk ๋Š” REST API ๋กœ ๋™์ž‘ํ•œ๋‹ค. wsk-CLI ๋กœ ๋ช…๋ น์„ ๋‚ด๋ ธ์„ ๋•Œ ๋„ HTTP ์š”์ฒญ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜จ REST HTTP ์š”์ฒญ์€ nginx ์—์„œ ๋ฐ›์•„ SSL ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ค์ œ ์š”์ฒญ์„ ๋‹ค์Œ ๋‹จ๊ณ„์ธ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค.
  2. ์‹ค์ œ ์‹œ์Šคํ…œ์˜ ์‹œ์ž‘: ์ปจํŠธ๋กค๋Ÿฌ
    ์‹ค์ œ REST ์š”์ฒญ์„ ๋‹ค๋ฃจ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋Š” Scala ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”๋ฐ, Spray ์™€ Akka ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ์„ฑ๋Šฅ ๋น„๋™๊ธฐ REST ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์žˆ๋‹ค.
  3. ์ธ์ฆ๊ณผ ๊ถŒํ•œ: CouchDB
    ์‚ฌ์šฉ์ž ์ธ์ฆ๊ณผ ์‚ฌ์šฉ ๊ถŒํ•œ ํ™•์ธ์„ ์œ„ํ•ด OpenWhisk ๋Š” NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ CouchDB ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. OpenWhisk ์•ก์…˜์„ ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ ์กด์žฌํ•˜๋Š”์ง€, ํ•ด๋‹น ์•ก์…˜์— ๋Œ€ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ CouchDB ์—์„œ ํ™•์ธํ•œ๋‹ค.
  4. ์•ก์…˜ ๊ฐ€์ ธ์˜ค๊ธฐ: CouchDB
    ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ์•ก์…˜์„ ์‹คํ–‰ํ•  ๊ถŒํ•œ์ด ์žˆ๋‹ค๋ฉด, ์‹ค์ œ ์‹คํ–‰ํ•  ์•ก์…˜์˜ ์ฝ”๋“œ์™€ ๊ธฐ๋ณธ ํŒŒ๋ผ๋ฉ”ํ„ฐ๋ฅผ CouchDB ์—์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
  5. ์•ก์…˜ ์‹คํ–‰ํ•  ๋Œ€์ƒ ์ฐพ๊ธฐ: Consul
    ์•ก์…˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ์ค€๋น„๋˜์—ˆ์œผ๋‹ˆ ์•ก์…˜์„ ์ˆ˜ํ–‰ํ•  ๋Œ€์ƒ์ธ ์ธ๋ณด์ปค(Invoker)๋ฅผ ์ฐพ์•„์•ผ ํ•œ๋‹ค. OpenWhisk ๋Š” Consul ์„ ํ†ตํ•ด ์šด์˜์ค‘์ธ ์ธ๋ณด์ปค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ •์ƒ ์ƒํƒœ์ธ์ง€ ํŒŒ์•…ํ•œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋Š” Consul ์— ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ธ๋ณด์ปค ๋ชฉ๋ก์„ ๋ฐ›์•„ ์‹คํ–‰ํ•  ๋Œ€์ƒ์„ ๊ฒฐ์ •ํ•œ๋‹ค.
  6. ์ค„ ์„ธ์šฐ๊ธฐ: Kafka
    ํด๋ผ์šฐ๋“œ ์„ค๊ณ„์—์„œ๋Š” ์–ธ์ œ๋‚˜ ์žฅ์• ์— ๋Œ€๋น„ํ•ด์•ผ ํ•œ๋‹ค. OpenWhisk ๋Š” ํ(Queue) ์‹œ์Šคํ…œ์œผ๋กœ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์ธ Kafka ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ˜„์žฌ ์˜ˆ์ œ๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— Kafka ๊ฐ€ ์‹คํ–‰ ์š”์ฒญ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋ฐ›์•˜๋‹ค๋ฉด, ๋งˆ์น˜ ๋ฒˆํ˜ธํ‘œ์ฒ˜๋Ÿผ ActivationId ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋Œ๋ ค์ฃผ๊ณ  HTTP ์„ธ์…˜์„ ๋๋‚ธ๋‹ค.
  7. ์•ก์…˜์„ ์‹ค์ œ๋กœ ์‹คํ–‰: ์ธ๋ณด์ปค (Invoker)
    ์ค€๋น„๋œ ์•ก์…˜์˜ ์ฝ”๋“œ๋ฅผ ์ธ๋ณด์ปค๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•œ๋‹ค. ์ธ๋ณด์ปค๋Š” ์Šค์นผ๋ผ๋กœ ์งœ์—ฌ ์žˆ์œผ๋ฉฐ, ๋„์ปค ์ปจํ…Œ์ด๋„ˆ์— ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.
  8. ๊ฒฐ๊ณผ ์ €์žฅํ•˜๊ธฐ: CouchDB
    ์ธ๋ณด์ปค๋Š” ์•ก์…˜์„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ์™€ ๋„์ปค ๋กœ๊ทธ๋ฅผ CouchDB ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ๋ ค์ค€๋‹ค. ์‚ฌ์šฉ์ž๋Š” 6๋ฒˆ์—์„œ ๋ฐ›์€ ActivationId ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ๊ธ€: Apache OpenWhisk – ์‹คํ–‰ ๊ณผ์ •


๋ณธ ๊ธ€์€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์›จ์–ด 390ํ˜ธ์— ๊ธฐ๊ณ ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค.

์— ๋Œ€ํ•œ ๋Œ“๊ธ€์ด 1๊ฑด ์žˆ์Šต๋‹ˆ๋‹ค"Apache OpenWhisk – ์†Œ๊ฐœ ๋ฐ ์•„ํ‚คํ…์ณ"

  1. […] ์›๋ฌธ๋ณด๊ธฐ :ย ย Apache OpenWhisk โ€“ ์†Œ๊ฐœ ๋ฐ ์•„ํ‚คํ…์ณ […]

ํ† ๋ก  ์ฐธ๊ฐ€

์ด๋ฉ”์ผ์€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์ž…๋ ฅ์ฐฝ์€ * ๋กœ ํ‘œ์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.