Introduction

ํ˜„๋Œ€์˜ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์—ฐ๋™ ๋ณต์žก์„ฑ์€ ๊ธฐํ•˜๊ธ‰์ˆ˜์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š”๋ฐ, ์นดํ”„์นด๋Š” ์‹œ์Šคํ…œ ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

์นดํ”„์นด ํ•ต์‹ฌ ๊ฐœ๋…

์นดํ”„์นด๋Š” ๋ถ„์‚ฐ ์ปค๋ฐ‹ ๋กœ๊ทธ(Distributed Commit Log)์ด์ž ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์œผ๋กœ, ์ด๋ฒคํŠธ, ์ŠคํŠธ๋ฆผ, ๊ทธ๋ฆฌ๊ณ  ๋ถ„์‚ฐ ์ปค๋ฐ‹ ๋กœ๊ทธ๋ฅผ ํ•ต์‹ฌ ๊ฐœ๋…์œผ๋กœ ํ•œ๋‹ค.

  1. ์ด๋ฒคํŠธ(Event): ๊ณผ๊ฑฐ์— ๋ฐœ์ƒํ•œ ์‚ฌ๊ฑด์— ๋Œ€ํ•œ ๋ถˆ๋ณ€(Immutable)์˜ ์‚ฌ์‹ค ๊ธฐ๋ก์œผ๋กœ, ๋น„์ฆˆ๋‹ˆ์Šค ํ˜น์€ ์‹œ์Šคํ…œ์˜ ์ƒํƒœ ๋ณ€ํ™”

  2. ์ŠคํŠธ๋ฆผ(Stream): ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์˜ ์—ฐ์†์ ์ธ ํ๋ฆ„

  3. ๋ถ„์‚ฐ ์ปค๋ฐ‹ ๋กœ๊ทธ(Distributed Commit Log): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ์ฒ˜๋Ÿผ, ๋ฐ์ดํ„ฐ๋Š” ์ถ”๊ฐ€๋งŒ ๊ฐ€๋Šฅํ•œ(Append-only) ํ˜•ํƒœ๋กœ ์ˆœ์„œ๋Œ€๋กœ ๊ธฐ๋ก(๋ถˆ๋ณ€์„ฑ

ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜ ์›์น™

  1. ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰(High Throughput)

    • OS ๋ ˆ๋ฒจ์˜ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋‹ฌ์„ฑ

    • ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋กํ•  ๋•Œ, ์ž„์˜์˜ ์œ„์น˜์— ์“ฐ๋Š” ๋žœ๋ค I/O๊ฐ€ ์•„๋‹Œ ๋””์Šคํฌ์˜ ๋์— ์ˆœ์ฐจ์ ์œผ๋กœ ์“ฐ๋Š” ์‹œํ€€์…œ I/O(Sequential I/O) ๋ฐฉ์‹ ์‚ฌ์šฉ

    • ์ปจ์Šˆ๋จธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ ์‹œ ์ปค๋„์—์„œ ๋„คํŠธ์›Œํฌ ์นด๋“œ๋กœ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋Š” ์ œ๋กœ ์นดํ”ผ(Zero-Copy) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉ์œผ๋กœ, ์ „์†ก ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”

  2. ํ™•์žฅ์„ฑ๊ณผ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ(Scalability & Parallelism)

    • ํ•˜๋‚˜์˜ ํ† ํ”ฝ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๋‚˜๋‰  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ํŒŒํ‹ฐ์…˜์ด ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„

    • ํ”„๋กœ๋“€์„œ๋Š” ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์— ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์“ธ ์ˆ˜ ์žˆ๊ณ , ์ปจ์Šˆ๋จธ ๊ทธ๋ฃน ๋‚ด์˜ ์ปจ์Šˆ๋จธ๋“ค์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ํŒŒํ‹ฐ์…˜์„ ํ• ๋‹น๋ฐ›์•„ ๋™์‹œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด๊ฐˆ ์ˆ˜ ์žˆdma

    • ์ฒ˜๋ฆฌ๋Ÿ‰์„ ๋†’์ด๊ณ  ์‹ถ์„ ๋•Œ ํŒŒํ‹ฐ์…˜ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๊ณ  ๊ทธ์— ๋งž์ถฐ ์ปจ์Šˆ๋จธ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ‰์  ํ™•์žฅ ๊ฐ€๋Šฅ

  3. ๋‚ด๊ตฌ์„ฑ๊ณผ ๊ณ ๊ฐ€์šฉ์„ฑ(Durability & Fault Tolerance)

    • ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜(Replication)์„ ํ†ตํ•ด ๋‚ด๊ตฌ์„ฑ ๋ณด์žฅ

    • ๊ฐ ํŒŒํ‹ฐ์…˜์€ ๋ฆฌ๋”(Leader)์™€ ์—ฌ๋Ÿฌ ํŒ”๋กœ์›Œ(Follower) ๋ฆฌํ”Œ๋ฆฌ์นด๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํŒ”๋กœ์›Œ๋Š” ๋ฆฌ๋”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ณต์ œ

    • ํ”„๋กœ๋“€์„œ๊ฐ€ acks=all ์˜ต์…˜์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋ฉด, ๋ฆฌ๋”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŒ”๋กœ์›Œ๊นŒ์ง€ ๋ฐ์ดํ„ฐ ์ €์žฅ์„ ์™„๋ฃŒํ–ˆ์Œ์„ ํ™•์ธํ•œ ํ›„์—์•ผ ์ „์†ก ์„ฑ๊ณต ๊ฐ„์ฃผ

๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ฐจ์ด

์นดํ”„์นด๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ(์˜ˆ: RabbitMQ)๊ณผ ๊ทผ๋ณธ์ ์ธ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ์ฐจ์ด๋ฅผ ๊ฐ€์ง„๋‹ค.

  • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์€ ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ปจ์Šˆ๋จธ์—๊ฒŒ ๋Šฅ๋™์ ์œผ๋กœ ์ „๋‹ฌ(Push)ํ•˜๊ณ , ์†Œ๋น„๋œ ๋ฉ”์‹œ์ง€๋Š” ํ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ตฌ์กฐ

  • ์นดํ”„์นด๋Š” ๋ธŒ๋กœ์ปค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ๋งŒ ํ•˜๊ณ , ์ปจ์Šˆ๋จธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋Š”(Pull) ๊ตฌ์กฐ

    • ๋ธŒ๋กœ์ปค๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ปค๋ฐ‹ ๋กœ๊ทธ์— ์ €์žฅํ•˜๋Š” ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์Œ(์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)

    • ์ปจ์Šˆ๋จธ๊ฐ€ ์ž์‹ ์˜ ํ•„์š”์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ณ , ์–ด๋””๊นŒ์ง€ ์ฝ์—ˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์˜คํ”„์…‹(Offset)์„ ์Šค์Šค๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ปค๋ฐ‹

Last updated

Was this helpful?