์คํ์์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ๋ฅด๋ ์ํ ๋ฐ์ดํฐ์ ๋นจ๋๋ฅผ ๊ฝ์๋ณด๋ค.
์ฑ๋์ฐฌ๋ - ์นด์นด์ค ๋ฑ ํฌ
- ์นด์นด์ค๋ฑ
ํฌ๋?
- ๊ธ์ต ํ์ ์ด ์์ ์๋น์ค
- ํญ๋ฐ์ ์ผ๋ก ๋์ด๋๋ ๋ฐ์ดํฐ
๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ฌ๋ฐฐ์น๋ฅผ ํด๋ณด์
- SQL๋ก ๋ฐ์ดํฐ ํผ๊ฐ๊ธฐ
- CDC ๋ณ๊ฒฝ๋ถ ํผ๊ฐ๊ธฐ
์ ํ์ดํ ๋ ธ๊ฐ๋คํด์ ํผ๊ฐ๊ธฐ
SQL๋ก ๋ฐ์ดํฐ ํผ๊ฐ๊ธฐ
- ์ฅ์
- SQL๋ก ๋ฐ์ดํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ด
- ๋ก์ง์ ํฌํจ๋๋ฉฐ, ์๋์ ์ผ๋ก ๊ตฌ์กฐ๊ฐ ๊ฐ๊ฒฐ
- ๋จ์
- ์์คDB์ ๋ถํ(Select / Index)
- ์ง์ฐ๋ ์ปค๋ฐ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๋๋ฝ ๋ฐ์ ๊ฐ๋ฅ
What is Uldra?
- Source DB โ Target DB ์ฌ์ด์ ์กด์ฌํ์ฌ Sharding ์ง์๊ฐ๋ฅํ ์ํํธ์จ์ด
- Java๋ก ์์ฑ
Uldraman
์ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์์๊น?- BinaryLog Parser๋ก ๋ณ๊ฒฝ๋ถ์ ํ์ ํด์
- Task Worker๋ฅผ ํตํด ์ํ๋ DB์ ์ ์ฅํ๋ ๋ฐฉ์
- Goals
- ์ฝ๊ณ ์ ํํ๊ณ ๋นจ๋ผ์ผ ํ๋ค.
What is BinaryLog in MySQL?
-
DB ์์์ ์ ๋ฐ์ดํธ๊ฐ ๋๋ ๋ชจ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ฅํ๋ ๋ก๊ทธ
- ํธ๋์ญ์ ์ปค๋ฐ ์ ๊ธฐ๋ก
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์๋ฅผ ๋ณด์ฅ
- ์ ๋ขฐํ ์ ์๋ ํ์ ๋ ๋ณ๊ฒฝ ์ด๋ ฅ
- ๊ต์ฅํ ๋ง์ ์ด๋ฒคํธ๋ค์ด ์๋ค.
-
Uldraman์ Row Event ๋จ์๋ก ํ์ฑ
- Query Event Start
- Table Map Event
- ๋ณ๊ฒฝ์ ๊ฐํ ํ ์ด๋ธ ์ ๋ณด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค / ํ ์ด๋ธ / ํ ์ด๋ธ ์ปฌ๋ผ ํ์
- Row Event (Write, Delete, Update)
Write
- ์ถ๊ฐ ๋ฐ์ดํฐUpdate
- ๋ณ๊ฒฝ ์ด์ / ์ดํ ๋ฐ์ดํฐDelete
- ์ญ์ ์ด์ ๋ฐ์ดํฐ
- Table Map Event
- Query Event End
- Query Event Start
Uldraman ์ด์ ๋ชจ์ต์?
- Kakao ADT๋ ์ฃผ๋ก ๋ฐฐ์น ํ๋ก์ธ์ค์ ์ด์
- ํ๊ฒ์ชฝ์ ๊ตฌ์กฐ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋
- ์ค์ ๋ก ์๋น์ค์๋ ๋ ธ์ถํ์ง ์๋๋ค.
ํ์ง๋ง Uldraman์?
- ์ค์ ๋ก ์๋น์คํ๋ ์จ๋ผ์ธ ์๋น์ค์ ํฌ์ปค์ฑ์ ๋ง์ถ ํ๋ก์ ํธ
- ํน๊ธ ์๋น์ค
Uldraman์ ์ฌ์ฉํ๊ธฐ ์ํด์๋?
- Binary Log format์?
Row Format
์ผ๋ก ๊ธฐ๋ก๋๋ ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ฌ์ผ๋ง ํ๋ค.
- Binary Log Full Image
- ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ์ ๋ณ๊ฒฝ ์ / ํ ์ด๋ฏธ์ง๊ฐ ๋ชจ๋ ํฌํจ๋์ด์ผ ํ๋ค.
Kakao ADT & Uldraman์ ๊ณตํต ๋ชฉํ
- ๋ณต์ ๊ฐ ์์คํ
์ด ์ด์์ด ์๊ธฐ๋ ๊ฒฝ์ฐ?
- ์คํจํ ์ง์ ๋ถํฐ ๋ค์ ์์์ ํด์ผํ๋๋ฐ..
- ์ด๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?
- Overwrite
- ๋ฎ์ด์ฐ๋ค๋ณด๋ฉด ์ธ์ ๊ฐ ๋ง์ถฐ์ง๋ค.
- ๋๋ฝ๋๊ฑด ์๋์ง..
- ์ฑ๊ณตํ๋ ํฌ์ง์ ๋ถํฐ ๋ค์ ๋ณต์ฌํ์!
- Update Row Event์ธ ๊ฒฝ์ฐ ํญ์ Delete๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ์๋๋ค.
- ์ค๋ํค ํน์ PK ๋ณ๊ฒฝ (์ค๋ํค๋ ๊ตญ์ , PK๋ ์ง์ฃผ์)
- YES
- Delete
- No
- Replace
- Sequential
- ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ
- ๋์ผํ ๊ทธ๋ฃน์ ์๋ ๋ฐ์ดํฐ๋ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌํ์.
- ๋ณ๋ ฌ ์ฒ๋ฆฌ
- ์ฐ๊ด์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ฉด ๋น ๋ฅด์ง ์์๊น?
- 1์ฐจ ์ค๋ฉ ๋ฃฐ
- 2์ฐจ ์ค๋ฉ ๋ฃฐ
- ๋ช๋ฒ์งธ Thread์์ ์งํํ ์ง ๊ฒฐ์
Uldraman์ ๊ฐ์ง Feature
-
Recover Mode
- ๋ฐ์ดํฐ ๋ฒ์ ผ ์ฒดํฌ๋ฅผ ํด๋ณด์.
- ์ธ์ ๊ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ต์ ์ ๋์ง๋ง.. ์ ํฉ์ฑ์ ์๊ตฌํ๋ ์ํฉ์ด๋ผ๋ฉด?
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฐ์ดํฐ ๋ด์ฉ์ ๋ฒ์ ผ์ ๋ฃ๊ณ
- ๋ฐ์ดํฐ ๋ฒ์ ผ์ด ๋ฎ๊ฑฐ๋ ๊ฐ์ผ๋ฉด Overwriteํ๋ ๋ชจ์ต
- ๋งค๋ฒ ๋ฐ์ํ๋ ์ํฉ์ ์๋
-
Generate Sharding Key
- ์ค๋ฉํค๋ฅผ ๋ง๋ค๊ฑฐ๋ ๋ณํํด์, ๊ทธ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐํ์.
-
Performance๋?
์ค์ผ์ผ ์์
์ธ ๊ฒฝ์ฐ- 1 Node โ Uldraman โ 8 Shard
- 30,000 rows/sec
์ค์ผ์ผ์ธ
์ธ ๊ฒฝ์ฐ- 4 Shard โ Uldraman โ 1 Node
- 1 Node์ ๋ด์ฅ DB๋ tokudb ์ฌ์ฉํ๋ ์ํฉ
- ๋์ ์์ถ์จ โ I/O ๋น์ฉ ๊ฐ์
Shard DB
: innodb โ1 Node
: tokudb๋ก ์งํํ ๊ฒฝ์ฐ- ์๋๊ฐ ๋ฐ๋ฆฌ์ง ์์
-
Alerting & Monitoring
๋ค์ ๋ชฉํ๋?
- ์๋ณธ ๋ฐ์ดํฐ๋ MySQL์ ์ ์ฅํ์ง๋ง?
- Sharding์ ๋ค์ํ Database์ ์ ์ฅํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๊ฒ์ ์ง์ํ์
- Redis
- Oracle
- MySQL
- PostgreSQL
- Sharding์ ๋ค์ํ Database์ ์ ์ฅํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณํํ๋ ๊ฒ์ ์ง์ํ์
Reference
- OLTP ์๋น์ค ์ฉ๋
- https://tech.kakao.com/2016/06/27/opensource-5-adt/
- MariaDB Binlog์ ์ด์ฉํ ๋ณ๊ฒฝ์ฌํญ ์ถ์ - RidiCorp
์ด๋น์ฅ์์์ ์ทจ์๋ฅผ ๋ง์๋ผ! : ์๋ง ๊ฑด์ ์ฃผ๋ฌธ์ 1์ด๋ด์ ์ฒ๋ฆฌํ๋ ๊ธฐ์
๊ณ ํฌ๊ฒฝ๋, ๋งํ์ผ๋ - ์นด์นด์ค ์ปค๋จธ์ค
์ด๋น ์ฅ์์์ ๋น๋ฐ
- ์ด๋น ์ฅ์์๋ ์์ฒญ ๋ฌ๋ฌํ ์ฅ์์๋ฅผ ๋งํฉ๋๋ค :)
- ํ๋ก์ธ์ค๋?
- ๊ตฌ๋งค์ โ ์ฃผ๋ฌธ โ ํ๋งค์ ํ์ธ โ ๋ฌผ๊ฑด ์ค๋น โ ๋ฐฐ์ก
- ์๋น์๊ฐ ์ ์ฃผ๋ฌธ โ ์ฅ์์๋ฅผ ์ฌ๋ฐฐ ํ ๋ฐ์ก
- ๋ฐฐ์ก์ง์ฐ์ด ๋๋ ๊ฒฝ์ฐ๋?
- ํ๋งค์๊ฐ ๋ฐฐ์ก ์ง์ฐ ๊ณต์ง
์ฐ๋ฆฌ์ ๋ชฉํ๋?
ํด๋น ๊ณต์ง๋ฅผ ๋น ๋ฅด๊ฒ ์๋น์์๊ฒ ์ ๋ฌํด์ผ ํ๋ ๊ฒ์ด ๋ชฉํ.
Legacy ์์คํ ์ ๋ฌธ์ ๋ ๋ฌด์์ผ๊น?
๋ฐฐ์ก์ง์ฐ ์๋ด๋ ์ด๋ป๊ฒ ์ ์กํ ๊น?
- TMS(์นด์นด์คํก Message Service)ํตํด ๋ฐฐ์น ์ํ
- ์ค์๊ฐ์ด ์๋๋ผ ๋ฐฐ์น ์ฒ๋ฆฌ
- ๋ฐฐ์น ์ฃผ๊ธฐ๋ฅผ ์ค์ด๋ฉด ๋น ๋ฅด๊ฒ ์ ๋ฌ์ด ๊ฐ๋ฅํ์ง๋ง?
- ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ํด๊ฒฐ์ด ์๋๋ผ๊ณ ์๊ฐ
๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง
- ๋๋ฌด ๋ณต์กํด์ ์ค์๊ฐ์ผ๋ก ํ๊ธฐ ์ด๋ ค์
- ์ฝ๋๊ฐ ์คํ๊ฒํฐ ์ฝ๋์ฒ๋ผ ๊ตฌ์ฑ
๋๋ฆฐ ์ฒ๋ฆฌ ์๋
- ํ๋์ ์์ฒญ์ - ํ๋์ ์ค๋ ๋
- ๋จ์ผ ์ค๋ ๋์์ ๋ฐ๋ณต๋๋ Task ์ํํ๋ ์ .
- ์์ฒญ ๋ฐ์ ๋๋์ ์ฃผ๋ฌธ ๋ฆฌ์คํธ ๋์
๊ทธ๋์ ์ฐ๋ฆฌ์ ์ด๋ป๊ฒ ํด๊ฒฐํ์๊น?
- ์ค์๊ฐ TMS ๋ฐ์ก์ ์ํ Worker ๊ตฌ์ฑํ์
- ๋ค์ํ ์ธ๋ถ API
- ๋น๋๊ธฐ ์์ปค๋ฅผ ๊ตฌ์ฑํ์ฌ ์ฒ๋ฆฌํด๋ณด์.
- ๊ธฐ์กด์ ๋ฐฐ์น๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ์ค์๊ฐ์ผ๋ก ๊ฐ๋ฅํด์ก๋ค.
- ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์?
- ์ฝ๋ ๋ฆฌํฉํ ๋ง์ ํตํด ๋ณต์ก๋๋ฅผ ๋ฎ์ท๋ค.
- ๊ณตํต์ ์ธ Validation ์ฒดํฌ๋ ValidatorUtil๋ก ์งํ
- ์ฒ๋ฆฌ์๋ ๊ฐ์ ์?
- ๋ถํ์ํ / ์ค๋ณตํ๋ ๋ก์ง์ ๋ชจ์ผ๊ณ
- Validation ๋จ์ผํ
- ๋น์ฆ๋์ค ์ฒ๋ฆฌ - ๋น๋๊ธฐ ์์ปค๋ฅผ ํตํด
- TMS ๋ฐ์ก - ๋น๋๊ธฐ ์์ปค๋ฅผ ํตํด
Actor๊ฐ ๋ ๋น๋๊ธฐ ์์ปค
- ๋ถ์ฐ์ฒ๋ฆฌ
- ๋จ ํ๋์ Queue๋ฅผ ํตํด ์๋น
- Consumer๋ง ๋๋ฆฌ๋ฉด ์ฑ๋ฅ์ด ์ฌ๋ผ๊ฐ๊น?
- Atomicํ ๋จ์๋ก Event๋ฅผ ๋ง๋ค์ด์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๊ฒ ๋ง๋ค์.
- Spring SimpleRabbitListenerContainerFactory์ ๊ฐ์ผ Custom ๋ฆฌ์ค๋ ์ ์
- ์ต์ Concurrent : 5
- ์ต๋ ConCurrent : 20
- ๊ฐ๊ฐ์ Consumer ๋ง๋ค ๋ค๋ฅด๊ฒ ์ค์
- ์๋ ์ฌ์ฒ๋ฆฌ ๋ฐ ์คํจ ๊ฐ์ง
- Rabbit MQ์ Queue์ Message header๋ฅผ ํตํด ๊ตฌ์ฑ
- Queue - Queue.retriable ๋ก ๊ตฌ์ฑ
- ์๋น์๊ฐ ์ฌ์ํํ์์ง๋ง ์คํจํด์ nack๋ฅผ ๋ฐํํ๋ค๋ฉด?
- x-death.cnt++
- x-dead-letter-*
- x-message-ttl๋ฅผ ์ค์ ํ๊ณ
- ๋ค์ Queue์ ์ฌ์ง์ ํ์ฌ ์ํํ๋ค.
- https://www.rabbitmq.com/dlx.html
- ์๋น์๊ฐ ์ฌ์ํํ์์ง๋ง ์คํจํด์ nack๋ฅผ ๋ฐํํ๋ค๋ฉด?
- ํ์ง๋ง ๊ฒ์ํด์ ์คํจํ๋ฉด?
- ์ต๋ Count๊ฐ ๋์ด๊ฐ๋ค๋ฉด?
- DB์ ์ ์ฅํ๊ณ / Noti๋ฐ๊ณ
- ์ด๋๋ฏผ์ด๋ ๋ฐฐ์น ์คํํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ
- ๊ตฌํ์ ์ด๋ป๊ฒ ํ์๊น?
- Method Interceptor๋ฅผ ํตํด ๊ฐ์งํ๊ณ
- ์ํ์ ๋ฐ๋ผ ์ฑ๊ณต / ์ฌ์ฒ๋ฆฌ / ์คํจ๋ฅผ ์ํํ์ฌ ์ ๋ขฐ์ฑ์ ๋ํ๋ค.
๋ ํ๊ณ ์ถ์ ๊ฒ?
- Actor Model
- ์กํฐ ๋ฉ์์ง๋ฅผ Tracingํ๊ณ ์ถ๋ค.
- tracing ID๋ฅผ ์ถ๊ฐํ์ฌ ์ง๊ณํ๊ณ ์ถ๋ค.
- ์กํฐ ๋ฉ์์ง๋ฅผ Tracingํ๊ณ ์ถ๋ค.
๋ฐฐํฌ์์ด ๋น ๋ฅด๊ฒ ๋กค๋ฐฑํ๋ ์ ๋ต
- ๋ฐฐํฌ์์ด ์ด๋ป๊ฒ ํ๋ฉด ๋น ๋ฅด๊ฒ ๋กค๋ฐฑํ ์ ์์๊น?
- SwitchManager๋ฅผ ํตํด on/off๋ก ์กฐ์ ๊ฐ๋ฅ
- ํด๋น ์ค์ ์ Zookeeper๋ก ๊ด๋ฆฌ
- LocalCache๋ก ์ ์ฅํ๊ณ Zookeeper Watcher๋ฅผ ํตํด ๊ฐฑ์
Practical Microservices in gRPC Go feat. GraphQL, Kafka(์ํฌํฐ์ฆ ๊ธฐ์ฌ ๊ฐ๋ฐ๊ธฐ)
๊ฐํํ๋, ๊น๋ฏผ์๋, ๋ฌธ์ฃผ์ฑ๋, ์์ง์ ๋, ์ดํ๊ฑด๋ - ์นด์นด์ค ๋ชจ๋น๋ฆฌํฐ
์ํฌํฐ์ฆ ๊ธฐ์ฌ ์๋น์ค - ์๊ตฌ ์ฌํญ
- ๊ธฐ๊ณํ์ต์ ๊ธฐ๋ฐํ ๋์ฑ ์ง๋ฅ์ ์ธ ๋ฐฐ์ ์ ๋์์ด ๋์ด์ผ ํ๋ค.
- ์๋ ๋ฐฐ์ ๋์ด์ผ ํ๋ค.
- ๊ฑด๋น ์ง๊ธ์์ - ์๊ฐ์ ๋ก ๋ณ๊ฒฝ๋๋ค. ๋ฑ๋ฑ ๋ค์ํ ์๊ตฌ์ฌํญ์ด ์กด์ฌ
๊ฐ๋ฐํํธ ์ํฉ์ ์ด๋ค์ํฉ์ด์์๊น?
- ์ธ๋ถ ์์ ์ผ๋ก ๋ค์ด์จ ์๋ก์ด ์ธ์ฌ
- ํํธ ์ฃผ์ ๊ธฐ์ ์คํ์?
- Rails
- Vert.x
- Java
- Groovy
- JRuby
- ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋์
- ํ์ต ๋น์ฉ ์ฆ๊ฐ
- ๊ธ๊ฒฉํ ๋ณต์กํด์ง๋ ์์คํ ์ ๋ํ ์ดํด
๊ฐ๋ฐ ๋ณต์ก๋์ ์๊ด ๊ด๊ณ
- ์ ํ ๊ฐ๋ฐ ๋ณต์ก๋์ ์ธ๊ฐ์ง ์์
- ์๊ตฌ์ฌํญ
- ์ฌ๋
- ๊ธฐ์
๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๊ฐ์ ์ ๋ฆฌ๋ถํฐ ํ๊ธฐ๋ก
- ์๋ก์ด ๊ฒ์ ๊ฐ๋ฐํ๊ธฐ ์์ ์๊ฐ์ ์ ๋ฆฌํ๊ณ
- ๋ฌธ์์ ์์ฑํ๊ณ ๊ณต์ ํ์.
- RFC๊ณผ ๋น์ทํ ํํ๋ก ์์ฑํด๋ณด์.
- ์์ฑ์ ๋ชฉ๋ก
- ์น์ธ์ ๋ชฉ๋ก
- ์์ฝ
- ๋ฐฐ๊ฒฝ
- ๊ตฌ์กฐ
- ๊ณ ๋ คํ๋ ๋์
- ๊ตฌํ
- ์๋น์ค SLA
- ์๋น์ค ์์กด์ฑ
- ๋ถํ ๋ฐ ์ฑ๋ฅ ํ ์คํธ
- ๋ณด์ ๊ณ ๋ ค ์ฌํญ
- ํ ์คํธ ๋ฐ ์ถ์ ๊ณํ
- ์งํ ๊ด๋ จ ๋ด์ฉ ๋ฑ๋ฑ
ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
Java์ ์ฅ๋จ์ ์ ๋ฌด์์ด ์์๊น?
- ์ฅ์
- ์ต์ํ๋ค.
- Spring Framework๊ฐ ์ ํด์ค๋ค.
- ๊ฐ๋ฐ์ ๊ตฌ์ธ์ด ์ฝ๋ค.
- OS์ ๋ ๋ฆฝ์ ์ธ ์ธ์ด์ด๋ค.
- ๋จ์
- Spring Framework ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด๊ธฐ ์ด๋ ต๋ค.
- ๊ฐ๋ฐ์์ ํธ์ฐจ๊ฐ ํฌ๋ค.
- JVM ํ๋์ ํด์ผํ๋ ์ด์๊ฐ ์๋ค.
- OS ๋ ๋ฆฝ์ ์ธ๊ฒ ๊ณผ์ฐ ์ข์๊ฒ์ธ๊ฐ?
ํํธ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ ํธ๋
- Java ๊ทนํํ๋ ์ฌ๋๋ค / Java ์ต์ํ ์ฌ๋๋ค
- ์ค์ฌ์์ ์ฐพ๋ค๋ณด๋..
- Go Lang์ผ๋ก ๊ฒฐ์
- ์ธ์ด๋ณ HTTP ์๋ฒ ์ฑ๋ฅ
- Go๊ฐ Java๋ณด๋ค 2๋ฐฐ์ ๋ ๋น ๋ฅธ ๊ฒ์ ํ์ธ
25 / 56
- go ์ธ์ด์ keyword ์ซ์ / Java ์ธ์ด์ keyword ์ซ์
- ๊ทธ๋งํผ go ์ธ์ด๋ ๋จ์ํจ.
Go
- ๋ฐฐ์ฐ๊ธฐ ์ฝ๋ค
- ์์ ๋ ๋ฎ์ Coding Style
- ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ
- JVM๊ฐ์ ๋ฌด๊ฑฐ์ด VM์ด ์์
- Compile์ธ์ด ๊ฒฝ๋์ ์ ์ Compile ๊ฒฐ๊ณผ๋ฌผ
- No magic ๋ชจ๋ ๋ค์ฌ๋ค ๋ณผ ์ ์์
- 500๋ฐฐ ๊ฒฝ๋์ Thread์ Queue = Gorutine๊ณผ Channel ์ค์์ ์ฌ์ง๊ฐ ์ ๊ณ ๊ณ ์ฑ๋ฅ
- ์ง๊ด์ ์ธ ์ค๋ฅ ์กฐ์. ์์ธ ๋์ง๊ธฐ ์์
์์กด์ฑ ์ฃผ์ ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ๊น?
- ์คํ๋ง ํ๋ ์์ํฌ ๊ฐ์ฅ ํฐ ์ฅ์ ์์กด์ฑ ์ฃผ์
- ์์กด ๊ด๊ณ ์ค์ ์ด ์คํ์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ๋ชจ๋๊ฐ์ ๊ฒฐํฉ๋ ๋ฎ์ถค
- Go - FX
- ๋จ์
- ์ด๋ ธํ ์ด์ ์ด ์๋ค.
- ๋จ์
์๋น์ค ๊ตฌ์กฐ ์ํฉ์?
- ์ฌ์ฉ์ ๊ธฐ์ฌ, ์ด์ ๊ด๋ จ๋ฑ๋ฑ ์์ฒญ ๋ณต์ก
- Line์๋ 269878
- ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ 35%์ ๋..
์ MSA?
- ๊ณ ๋ฆฝ๋ ๊ธฐ๋ฅ
- ๊ณ ๋ฆฝ๋ ๋ฐ์ดํฐ / ์ํ
- ๋ณ๋ ฌ์ ์ผ๋ก ๊ฐ์ญ์์ด ๊ฐ๋ฐํ๊ณ ์ถ๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํ๊ณ ์ถ๋ค.
- ์๋น์ค๋ณ๋ก ํ์ฅ์ ์ ์ฐํ๊ฒ ํ๊ณ ์ถ๋ค.
- ์์ฃผ ์์ ๋ฐฐํฌ๋ฅผ ํ๊ณ ์ถ๋ค.
- ์ ์ฌ ์ฐจ์์ DKOS๋ผ๋ Cloud ์ง์ ์ด๋ฅผ ์ ํ์ฉํ๋ ค๋ฉด MSA๊ฐ ์ ์
- ์ ํ์ ๊ฐ ๋ถ๋ถ์ด ๋จ์ํ ๋์ด ์์ฌ์ํต์ด ์ํ
- ๋ทํ๋ฆญ์ค, ํธ์ํฐ, ์ฐ๋ฒ๊ฐ์ ํ์ฌ์์ ๋ฏธ๋ฆฌ ๊ฒ์ฆ
- ๋จ์ ์ ์์๊น?
- ๊ธฐ์กด ํ๋์ APIํธ์ถ์ด MicroService์์๋ ๋ค์๋ก ๋์ด๋ ์ ์์
- API Gateway
- ๋คํธ์ํฌ ํต์ ๋น์ฉ
- DC๋ด๋ถ ๋น์ฉ, ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ผ๋์ ๋๊ณ ๊ฐ๋ฐ
- ์๋น์ค ๋ฐ๊ฒฌ์ด ๋ณต์กํจ
- DNS๋ฅผ ์ฌ์ฉํ๋๋ฐ etcd, consil๋ฑ์ผ๋ก ํจ์จ์ ๊ฐ์ ํ์
- ๊ณตํต ๊ธฐ๋ฅ์ ๋ํ ์ค๋ณต ๋ฐ์
- ์ค๋ณต๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ
- ํ
์คํ
๋ฐ ์ด์ ๋ณต์ก
- Testing strategies in a Microservice
- ๊ธฐ์กด ํ๋์ APIํธ์ถ์ด MicroService์์๋ ๋ค์๋ก ๋์ด๋ ์ ์์
์ํฌํฐ์ฆ ์๋น์ค ๊ตฌ์กฐ
- graphql gateway
- routing service gRPC go
- ์๋น์ค ๊ณ์ธต
- RESTful vs gRPC
- gRPC๊ฐ ์๋ฑํ๊ฒ ๋น ๋ฅด๊ณ ๊ฐ๋ณ๋ค.
- Stubby์ ์คํ ์์ค ๊ตฌํ์ฒด - gRPC
- ๊ตฌ๊ธ์์ 1์ฃผ์ผ์ 20์ต๊ฐ์ ์ปจํ ์ด๋๊ฐ ์คํ
- 1์ด์ 100์ต๊ฑด์ RPC๋ฅผ ์ฒ๋ฆฌ
- gRPC๋ ์ด๋ป๊ฒ ํ
์คํธํ ๊น?
- https://github.com/fullstorydev/grpcui
- Postman๊ณผ ์ ์ฌํ๋ gRPC ํ ์คํธ ์ฉ
- ํญ์ RPC๋ง ๋
ธ์ถํด์ผํ ๊น?
- REST ๋ณํํด์ฃผ๋ ์คํ์์ค๊ฐ ์์.
- https://github.com/grpc-ecosystem/grpc-gateway
- IDL Registry
- gRPC Proto ํ์ผ๋ค์ ์ค์ํํด์ ๊ด๋ฆฌ
- RESTful vs gRPC
ํ ์คํธ๋ ์ด๋ป๊ฒ?
- ghz - gRPC Load Test
- nGrinder - HTTP Load Test
- ํตํฉ ํ
์คํธ
- Docker Compose๋ก ๋ฌถ์ด์ ์งํ
- Postman์ ํตํ์ฌ ํตํฉ ํ ์คํธ ์คํ
๋จ์ ๋์ ๋ค?
- ํ์ ์ ๋ํ ๋ฌธ์ ๋ฅผ
- Api Gateway - ์ธ์ฆ, ๋ก๊น
kafka
- kafka๊ฐ ์๋ค๋ฉด?
- ๋ชจ๋ ์๋น์ค๋ฅผ ํธ์ถํด์ ์งํํด์ผ ํ๋ค.
- ๋ฐ์ดํฐ๋ ETL์ ํตํด ๋๊ธฐํ
- kafka๋ฅผ ์ฌ์ฉํ๋ฉด?
- ๋น๋๊ธฐ์ ์ผ๋ก ์งํ๊ฐ๋ฅ
- ์ฌ์ฉ์ผ๋ก ์ป์ ์ด์
- ์๋น์ค ๊ฐ ๋ฉ์์ง ํ๋ฆ ๋จ์ํ
- ๋ฉ์์ง์ ์์์ฑ์ ๋ณด์ฅ, ์ ์ค ๋ฐฉ์ง
- ํจํท ์ค๋ฒํค๋ ๊ฐ์
- ์์ ๋ก์ด ๋ฉ์์ง ์ฒ๋ฆฌ
- ํ๋์ ์ด๋ฒคํธ ๋ฉ์์ง๋ฅผ ๋์์ ์ฌ๋ฌ ์๋น์ค์์ ์๋น
- ๋ฉ์์ง ๋ฒ์ ๋
API Gateway
-
API ๋ฒ์ ธ๋์ ์ด๋ป๊ฒ ํ ๊น?
- GraphQL
- No Versioning
- GraphQL
-
GraphQL ๊ตฌํ์ฒด
- Node๊ฐ ์์ฒญ๋ Library ์ง์
- Go
- Java
-
Middleware
- ์ํ๋ ์ธ์ฆ ๊ด๋ จ ๋ด์ฉ์ Middleware์ ์ถ๊ฐํด์ ์งํ
- ์ธ์ฆ / ๊ฒ์ฆ ์ถ๊ฐ ๊ฐ๋ฅ
-
gRPC Interceptor๋ก ์ถ๊ฐ ๊ฐ๋ฅ
- Zipkin Tracer
- New Relic
-
Monitoring
- ์์ ์ฌํญ์ผ๋ก ์ธํด ์๋น์ค ์ ์ฒด์ ์ง์ฐ ๋ฐ์
- ์ถ์์ผ์ด ๊ฐ๋ฐ ์๋ฃ ์ด์ ์ ํ์ ๋ ์ํฉ
- ๋น ๋ฅธ ์ ์ฉ์ด ๊ด๊ฑด์ธ ์ํฉ
- Prometheus
- Pull ๋ฐฉ์์ ๋ฉํธ๋ฆญ ์์ง
- ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๊ฒ์ด ์๋ ์ผ์ ์ฃผ๊ธฐ๋ก ๋ฐ์ํ๋ ๋ฉํธ๋ฆญ ์์ง
- ๋์ปค ๊ธฐ๋ฐ์ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ณด๋๋ฐ ์ข์
- Grafana
- ๊ณ ์ ์ Query Language๊ฐ ์กด์ฌ
- ์ฅ์ ์ ์์ธ
- ์์ ์๋น์ค์ ์ฌ์ํ ์ค์๊ฐ ์ ์ฒด ์ ํ์ ์ํฅ
- ๋ถ์ฐ ๋ก๊ทธ ์ถ์ ์์คํ ์ด ํ์
-
Legacies
- ๋๋ฌด๋ ์ ๋์ํ๊ณ ์๋ ๋ ๊ฑฐ์์ ๋ณํ๋ฅผ ์ต์ํํ๊ณ ์ถ๋ค.
- feature flag
- traffic throttling ๊ธฐ๋ฅ์ ์ถ๊ฐ
- ์ค์ ์๋ฒ
- nginx ์ค์
- kubernates
Airflow๋ฅผ ํ์ฉํ์ฌ ์๋ฆ๋ค์ด ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ๊ตฌ์ฑํ๊ธฐ - R2
์ต์ฃผ์๋ - ์นด์นด์คํ์ด์ง
์นด์นด์คํ์ด์ง์ ๋ฐ์ดํฐ ๋ถ์ ๋ฌธ์
์นด์นด์ค ํ์ด์ง์ ์ฑ์ฅ
- 2014๋ ๋ณด๋ค 100๋ฐฐ
- 2015๋ ๋ณด๋ค 10๋ฐฐ
- ์ง์์ ์ธ ์ฑ์ฅ์ ์ํด ๋ ธ๋ ฅ
์นด์นด์ค ํ์ด์ง & ๋ค์ ์นํฐ๋ MSA๋ก ๊ตฌ์ฑ
- MSA์ผ๋ก ์ธํด DB๋ ๋ถํ
- ๊ทธ๋ผ ๋ฐ์ดํฐ ๋ถ์์?
- ๋ฐ์ดํฐ ๋ถ์๊ฐ ์ ์ฅ์์๋ DB๊ฐ ๋๋ฌด ๋ง์์ ใ ใ
- ์๋ก ๋ค๋ฅธ DB๊ฐ์ JOIN์ด ํ์ํ ๊ฒฝ์ฐ์๋?
- Data Lake (Data warehouse)
- ๋ถ์ฐ ํ์ผ ์์คํ
์ ์์กด
- HDFS or S3
- ์ธ๊ณ ์์ ์ฑ์ด ๋ฐ์ด๋๋ค.
- ๋ถ์ฐํ ์ฟผ๋ฆฌ / ๋ถ์ ์์ง
- Hive
- Spark
- Impala
- Presto
- ๋ชฝ๋
๋ค ๋ฐ์ด๋ฃ์ด ๋ณด์
- MySQL DB๋ก ๋ณต์
- ๋ณํ ๊ณผ์ ์ด ํ์ํ๋ค / ๋ฐ์ดํฐ ๋ถ์๊ฐ ์
์ฅ
- ์๋ณธ๋ฐ์ดํฐ์์ ๋ฐ์ดํฐ ์
์ฅ์ผ๋ก ๋ณํ
- ์ด๋ / ๊ตฌ๋งค
- ๊ด๊ณ / ์ด๋ฒคํธ
- ํ์ ๋ฑ๊ธ
- ์ํ๋ณ ์งํ
- ์๋ณธ๋ฐ์ดํฐ์์ ๋ฐ์ดํฐ ์
์ฅ์ผ๋ก ๋ณํ
- ๋ถ์๊ฐ์ ์ฅ์์๋ ๋ณํ๋ ๋ฐ์ดํฐ๋ง ๋ฐ๋ผ๋ณด๋ฉด๋๋ค.
- ์ด ๋ชจ๋ ํ๋ก์ธ์ค๋ Airflow๋ก ์งํ
- ๋ถ์ฐ ํ์ผ ์์คํ
์ ์์กด
Workflow management System
- Workflow Platform - AirFlow
- Airbnb์์ ๊ฐ๋ฐ
- Apache
- 2018๋
๋ง,
incubating -> Top->Level
- 2018๋
๋ง,
- ์์ฒญ ๋ง์ Workflow ํ๋ก์ ํธ
- ๋ค์ํ Workflow ์์คํ
Workflow๋?
- ์์
- ์์ง ์์
- ์ ์ ์์
- ์งํ ์์ฑ ์์
- ๋ฆฌํฌํ ์์
- ์์ ๊ฐ ์์กด์ฑ
- ์ด ์ ์ฒด๋ฅผ์ ํ๋ก์ฐ๋ฅผ ์ํฌํ๋ก์ฐ
- DAG(Directed Acycli Graph)
Workflow Platform์์๋?
- DAG ์์ ์์กด ๊ด๊ณ์ ๋ฐ๋ผ ์์ฐจ ์คํ
- ๋ชจ๋ ์์ ์ ASAP์ผ๋ก ์ข ๋ฃ
- ์ค๊ฐ์ ์์
์ด ์คํจํ๋ฉด?
- ์ฐ๊ด์ฑ ์๋ ์์ ์ ๊ณ์ ์คํ
- ์คํจํ ์์ ์ ์ฌ์คํ
- ์ฑ๊ณตํ๋ฉด ํ์์์ ์ด์ด์ ์คํ
Oozie vs Airflow
- First Commit
- Oozie๊ฐ ๋ ๋น ๋ฆ
- Number of Commits
- Airflow๊ฐ 3๋ฐฐ์ ๋ ์ฐจ์ด
- Contributors
- Airflow๊ฐ ๋ ๋ง์ ์ธ์
- Release ํ์
- Airflow๊ฐ ๋ ๋ง๋ค.
- DAG ํํ ๋ฐฉ์
- Oozie - XML
- Airflow - Python
- GUI
- Airflow๊ฐ ๋ ๋ง์ ์ง์
- ๊ฐ์ฉ์ฑ
- Oozie๊ฐ ๋ ์ข๋ค.
- Airflow๋ SPOF ์กด์ฌ
Airflow Architecture
- Scheduler
- ์คํ ์ฃผ๊ธฐ๊ฐ ๋๋ฉด ์์ ์ ์์ฑ
- ์์กดํ๋ ์์ ์ด ๋ชจ๋ ์ฑ๊ณตํ๋ฉด Broker์ ๋๊น
- Worker
- ์ค์ ์์ ์ ์คํํ๋ ์ฃผ์ฒด
- Broker
- ์คํ๊ฐ๋ฅํ ์์ ๋ค์ด ๋ค์ด๊ฐ๋ ๊ณต๊ฐ
- Meta DB
- DAG, Task๋ฑ์ด ์ ์ ๋์ด์์
- DAG RUN, Task RUN๋ค์ด ์กด์ฌ
Airflow - SPOF
- Scheduler
- Broker
- MetaDB
Airflow - HA
- HA Broker
- Master - Slave ํํ๋ก ๊ตฌ์ฑ
- ์ค์ผธ์ค๋ฌ๋ฅผ 2๊ฐ๋ก ๊ตฌ์ฑํ๋ฉด?
- ๋์ผํ DAG๊ฐ ๋ฐ์ํ ์ ์๋ ์ด์
- FailOver - Controller
- ๊ณต์์ ์ผ๋ก ์ง์ํ์ง๋ ์๋๋ค.
์นด์นด์ค ํ์ด์ง์ Airflow ํ์ฉ
- DAG : 100์ฌ๊ฐ
- Task : 5000์ฌ๊ฐ
- ํ๋ฃจ์ ๋์๊ฐ๋ Task ๊ฐ์
- 15000์ฌ๊ฐ
- ์๋น ์๊ฐ Spark Application
- Spark ๊ธฐ๋์ ์ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฝค ํ์ํจ
- ๋ค์์ Worker๋ฅผ ๋ฌผ๋ฆฌ ์ฅ๋น , VM ์ฅ๋น๋ ์ฌ์ฉ
- ๋ฌธ์ ๋ DB์์ ํ
์ด๋ธ ๊ฐ์๊ฐ ๋ง๋ค.
- DB์์ ํ ์ด๋ธ์ด 350๊ฐ, 160๊ฐ
- ๋ชจ๋ ํ ์ด๋ธ์ ์์๋๋ก ๋ด๋ ค๋ฐ์๋ 350๊ฐ ํ ์ด๋ธ์ ๋ถ๋น 1๊ฐ์ฉ ์ฒ๋ฆฌํด๋
- ์ฝ 6์๊ฐ?
- ๋์์ ๋ด๋ ค๋ฐ์๋ ๋ถํ ๊ฑฑ์
๊ทธ๋์ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก โ Pool and priority weight
Pool
- ๋์์ฑ์ ํ๊ณ์น๋ฅผ ์ ์ด
- ์ง์ ๋ Slot ๊ฐ์ ๋งํผ ๋์์ ์คํ
Priority weight
- Task ๋จ์๋ก Integer value๋ก ์ง์
- ์์กดํ๋ ํ ์คํฌ๊ฐ ๋ง์ผ๋ฉด ์๋์ผ๋ก ์ฆ๊ฐ
Pool ๊ด๋ฆฌ
- ์์ ํ ์ด๋ธ, ํฐ ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํด์ ๊ด๋ฆฌ
๋ง์ ํ ์ด๋ธ์ ์ ์ ํ ๋ถํ๋ฅผ ์ ์งํ๋ฉด์ ๋ณ๋ ฌ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋?
- Pool, Priority weight๋ฅผ ์ ์ ํ ์ฌ์ฉํ์
Airflow Impala, Spark ํธ์ถ
-
Worker๋ ํธ์ถํ๋ ๊ป๋ฐ๊ธฐ ์ญํ
-
์ค์ ๋ถํ๋ ํ๋ก ํด๋ฌ์คํฐ์์ ๋ฐ์
-
Worker ์ญํ ๋ถ๋ฆฌ
Queue๋ฅผ
๋ถ๋ฆฌํ์ฌ ์งํ- Spark์ฉ , R์ฉ
- ์ด๋ป๊ฒ ๋ถ๋ฆฌํ์ง?
- Celery ํ์ฉ์์๋ airflow.cfg ์์
- Worker ์คํ์์ -q ์ต์ ๊ณผ ๊ฐ์ด ์คํ
- Task ์์ฑ์ Queue ํ๋ผ๋ฏธํฐ ์ง์
-
๋ถํ ๋๋ฌธ์ ๊ผญ ๋ถ๋ฆฌํด์ผ๋ผ?
- ๋ํ์ ์ผ๋ก ๋ณด์ ๋ฌธ์ ๊ฐ ์์
- ์ธ๋ถ ๋ฐ์ดํฐ์์ ๊ฐ์ ธ์ฌ๋ (s3์ ๊ฐ์ ๋ถ๋ถ)
- ๊ณ์ ๋ถ๋ฆฌ
-
์ดํ ๋ก ๊ฑฐ๋ํ DAG ์์กด ๊ด๊ณ๋ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ๊น?
- External Task Sensor
- ํน์ ์กฐ๊ฑด์ด ์ฑ์์ง๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ Operator
- Poke_interval : ์ฒดํฌ ์ฃผ๊ธฐ
- Timeout
- ์ํ๋ ์ํ์ ๋๋ฌํ๋ฉด ์ข ๋ฃ
- execution_delta
- execution_fn
- DAG๋ฅผ ์ฐ๊ฒฐํด์ ์ถ๊ฐ Flow ์งํ
- ๋์ ๋ณต์ก๋์ DAG๋ฅผ ์์ ๋ ์ฅ์
์นด์นด์ค ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ํฐ๋ง NEO - R5
๊น์์๋ - ์นด์นด์ค
Neo๋?
- Neo๋ ์นด์นด์ค์ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ์๋น์ค
์๋น์ค์ ์ ํ๋ฆฌ์ผ์ด์
- NEO์ ์ฌ์ฉ์๋ ์ด๋ค ๊ด์ ์ผ๋ก ์ฑ๋ฅ์ ๋ณผ ๊ฒ์ธ๊ฐ?
- ์๋น์ค 1: N ์ดํ๋ฆฌ์ผ์ด์
- ์ดํ๋ฆฌ์ผ์ด์ 1 : N ์ธ์คํด์ค
- ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ด ๋ค๋ฅผ ์ ์๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์๋ - ์๋น์ค ์๋
Neo Usage
- ํธ๋ฌ๋ธ ์ํ
- ์ธ์คํด์ค ๋ณ ์ํน ์ฐ๋ ๋ ์นด์ดํธ
- ํธ๋์ญ์ ์๋์ฐ
- Method
- Map. ComputeIfAbsent
- Mutex ์ฌ์ฉ
- ์งง๊ณ ๊ฐ๋จํ ๋ด์ฉ
Neo๋ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์งํ ๊น?
- JMX๋ฅผ ํตํด ์์ง
- NeoAgent๋ฅผ ์ถ๊ฐ
- Default ํธ๋์ญ์
- HttpServlet.service()
- ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ์์ฒญ์ด ์๋๋ฉด?
- ์ฌ์ฉ์์๊ฒ ํธ๋์ญ์ ์ ์๋ฅผ ๋ง๊ธฐ์.
APM ๋ฐ์ดํฐ์ ํน์ง
- ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง๋ค.
- ๋ฐ์ดํฐ ํ๋์ ์ฌ์ด์ฆ๋ฅผ ์ต์ํ ํ์
- Protocol-buffers๋ฅผ ์ฌ์ฉ
- ์ปดํฉํธํ ๋ฉ์ธ์ง์ ์ฌ์ด์ฆ
- ํ์ ๋ฒ์ ๋ฐ์ดํฐ ํธํ
- https://developers.google.com/protocol-buffers/docs/encoding
- ๋ฐ์ดํฐ ํ๋์ ์ฌ์ด์ฆ๋ฅผ ์ต์ํ ํ์
- ์ ๋นํ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฒ๋ฆฌ์
- Metrics ๋ฐ์ดํฐ ์์นํ
- ์์นํ ๋ฐ์ดํฐ
- ์์ธก ๊ฐ๋ฅ
- ๋ก๊ทธํ ๋ฐ์ดํฐ
- ์ธ์คํด์ค ์์ ๋น๋ก
- ์์ธก ๋ถ๊ฐ๋ฅ
- ํธ๋์ญ์ ๋ฐ์ดํฐ๋ ๋ ์์ธกํ๊ธฐ ์ด๋ ต๋ค.
- ๊ทธ๋์ Agent์์ ๋ชจ๋ ๋ฐ์ดํฐ ๋์ Samplingํ์
- ํธ๋์ญ์ ์ด ๋์ ๋ฐ์ดํฐ๋ ๋ชจ๋ Sampling
- ๋ฎ์ ํธ๋์ญ์ ์ ์ ์ ๋น์จ๋ก Sampling
- ์๊ฐ ๋จ์๋ก Sampling ์๋ฅผ ๋ชจ์ง
- ์์ ์๊ฐ๋จ์๋ก Samplingํ๋ค ๋ณด๋ฉด
- ํฐ ๊ทธ๋ฆผ์ ์ ์งํ ์ ์๋ค.
- ์ ๋ฒ๋ฆฌ๋ ๊ฒ์ด๋?
- ๋ณธ๋์ ๋ชฉ์ ์ ์ ์งํ๋ฉด์ ์ฑ๋ฅ์ ์ต๋ํ ์ ์งํ์.
- Back Pressure
- Reactive Programming
- ๋ฉ์ธ ์คํ ๋ฆฌ์ง๋ ์นด์ฐ๋๋ผ์ ์ ์ฅ
์ ์นด์ฐ๋๋ผ์ธ๊ฐ?
-
High Performance writing
- ๋๋ถ๋ถ์ Read๊ฐ ๋ง์ง๋ง APM์์๋ ๋ค๋ฅธ ์ํฉ
- Write >>>>>>>>>>>> READ
- insert-mostly workload
- cassandra > couchbase > hbase > mongodb
-
Scalability
- Linear Scalability
- 2๋ฐฐ ๋๋ฆฌ๋ฉด > 2๋ฐฐ ์๋ ์ฆ๊ฐ
- Linear Scalability
-
Time Series Data Store
- Partition Key - ์ด๋ ํํฐ์
์ผ๋ก ๊ฐ์ง
- Application ID
- Cluster Key - ์ด๋ค ์์๋ก ์ ์ฅํ ์ง
- Time ๊ธฐ์ค์ผ๋ก
- ํน์ ํํฐ์
์ด ๋ง์ด ์ฐจ์ค๋ฅด๋ฉด?
- ๊ทธ ํํฐ์ ์ HotSpot!
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Partition Key์
Time Bucket
์ถ๊ฐ - Example
- Time Bucket๊ฐ์ ์ ํด Hash๊ฐ ์ง์
- Time Bucket ํฌ๊ธฐ๋ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์์กด์ ์ด๋ค.
- Time Bucket ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด?
- ์ฟผ๋ฆฌ์ ์ฉ์ด์ฑ
- Time Bucket ํฌ๊ธฐ๊ฐ ์์์ง๋ฉด?
- ๋ ธ๋์ ๊ท ํ์ฑ
- Time Bucket ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด?
- ๋ฉํฐ IDC
- cassandra.yaml
- cassandra-rackdc.properties
- Partition Key - ์ด๋ ํํฐ์
์ผ๋ก ๊ฐ์ง
-
๋์คํฌ ์ฌ์ฉ๋ ์ด์๊ฐ ๋ฐ์ํ๋๋ฐ..
- Community๊ฐ ํ์ฑํ๋์ง ์๋ ๋จ์ ใ ใ
- ๊ทธ๋์ ์ง์ Maliing List์ ๊ฐ์ ํ์ฌ ์ปค๋ฎค๋์ผ์ด์ ์งํ