Apache Pinot์ ๊ณต์ ๋ฌธ์๋ฅผ ์์ฝํ ๊ธ์ ๋๋ค.
https://docs.pinot.apache.org/
"Apache Pinot์ ๋น ๋ฅธ ์๋ต์๋๋ก ๋ง์ ๋ถ์์ ์ ๊ณตํ ์ ์๋, ์ค์๊ฐ ๋ถ์ฐ OLAP ๋ฐ์ดํฐ ์ ์ฅ์"
Kafka, Kinesis ๊ฐ์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์์ค๋ค์์ ๋ค์ด๋ ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๊ณ , ์ฆ์ ์ฟผ๋ฆฌ ์คํ์ ์ํ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ์คํธ๋ฆฌ๋ฐ ๋ฟ ์๋๋ผ Hadoop, S3, ADLS, GCS์ ๊ฐ์ ๋ฐฐ์น ๋ฐ์ดํฐ ์์ค์์๋ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด ์์คํ ์ ์ค์ฌ ๋ถ์๋, ๋น ๋ฅธ ์๋ต ์๋๋ฅผ ์ํ ์ค๋งํธ ์ธ๋ฑ์ฑ, ๋ฐ์ดํฐ ์ฌ์ ์ง๊ณ ๊ธฐ๋ฅ์ '๊ณ๋ค์ธ' ์ปฌ๋ผ ์งํฅ ์ ์ฅ์๊ฐ ์๋ค. ์ด ์ ์ด Pinot์ ์ค์๊ฐ ๋ถ์ ์ ๊ณต์ ์๋ฒฝํ ๋๊ตฌ๋ก ๋ง๋ค์ด์ค๋ค. ๋ฟ๋ง ์๋๋ผ, Pinot์ ๋ด๋ถ ๋์๋ณด๋, ์ด์ ํ์ง, ์ ๋ํน ๋ฐ์ดํฐ ํ์๊ณผ ๊ฐ์ ๋ถ์ ๋๋ฉ์ธ์ ๋ค์ํ ์ฌ๋ก์ ์ ํฉํ๋ค.
Pinot์ LinkedIn๊ณผ Uber์ ์์ง๋์ด๋ค์ ์ํด ๋ง๋ค์ด์ก๊ณ , ๋ฌดํํ scale-up, scale-out ํ ์ ์๋๋ก ์ค๊ณ ๋์๋ค. ๋, ํญ์ ํด๋ฌ์คํฐ์ ์ฌ์ด์ฆ์ ์์ QPS ๊ธฐ์ค๊ฐ์ ์ํด ์ผ์ ํ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค๋ค.
What is Apache Pinot?
[๋ด์ฉ ์์ฝ]
1. ๋ถ์ ์์์ ๋์คํ
- ์์ ์๋ ์ฌ์ฅ๋๋ง ๋ถ์๋ ๋ณด๊ณ ์๋ฃ๋ฅผ ๋ฐ์๋ณด์๋ค.
- ๊ธฐ์
๋ด๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฌ ๊ฒฐ์ ์ ํ๊ธฐ ์์ํ๋ฉฐ ๋ง์ ์ธ์์ด ๋ถ์ ์๋ฃ๊ฐ ํ์ํด์ก๋ค.
- ์ด์ ๋ ๋์ค๋ค์ด ๋๋์ ๋ฐ์ดํฐ์ ๋ํ ๋ถ์ ์๋ฃ๋ฅผ ์๊ตฌํ๊ณ ์ด์ฉํ๋ค.
2. User-Facing
- ๊ธฐ์
๋ด๋ถ ๋ ๋ฒจ์์๋ ์ด๋ฏธ ์ฌ์ฉํ ์ ์๋ ํด๋ค์ด ๋ง์ด ์๋ค.(BigQuery, SnowFlake, Presto ๋ฑ)
- ํ์ง๋ง ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ๋ ์ ๋์๋ ๋ฏธ์น์ง ๋ชปํ๋ค.
- ๋ณด๋ค ๋ง์ ์ฌ๋๋ค์ด ๋ฐ์ดํฐ์ ๋ถ์ ์๋ฃ๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ ๋ค์๊ณผ ๊ฐ์ ์ฌํญ๋ค์ด ์ถฉ์กฑ๋์ด์ผ ํ๋ค.
"๋์(Concurrency)์ ๋ค์ด์ค๋ ์ฌ๋ฌ ์์ฒญ์ ๋ํด,
์ต์ (Freshness)์ ์ ๋ณด๊ฐ ๋ฐ์๋ ๋ถ์ ์๋ฃ๋ฅผ,
๋น ๋ฅด๊ฒ(Latency) ์ ๋ฌํด์ผ ํ๋ค."
3. Apache Pinot
- Pinot์ ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ํด๊ฒฐํ๋ค.
๋์์ฑ -> ๋์ ๋ฐฉ๋ฒ์ ๋ ๋ด์ผํ ๋ฏ
์ต์ -> ๋ค์ํ ๋ฐ์ดํฐ ์์ค(์คํธ๋ฆฌ๋ฐ, ๋ฐฐ์น, ๋ฐ์ดํฐ ๋ ์ดํฌ ๋ฑ)์์ ์ง์ ๊ฐ์ ธ์จ๋ค.
๋น ๋ฅด๊ฒ -> ์ค๋งํธ ์ธ๋ฑ์ฑ, ์ฌ์ ์ง๊ณ(pre-aggregation) + ์ ๋ฌ(SQL Query๋ก ์ ๋ณด ์ ๊ณต)
Building Latency Sensitive User Facing Analytics via Apache Pinot
[๋ด์ฉ ์์ฝ]
1. Apache Pinot
- ์ค์๊ฐ ๋ถ์ ์์ ์ฆ๊ฐ ex) LinkedIn ํผ๋๋ญํน, UberEats ์์์ ์ฃผ ๊ด๋ฆฌ์ ํ์ด์ง
- LinkedIn, Uber, Teams, Slack, Weibo ๋ฑ ๋ค์ํ ํ์ฌ์์ ์ ์ฉ์ค
- ์ด๋น 100m ์ด์์ ์ด๋ฒคํธ ์ฒ๋ฆฌ, Peak QPS 120k์ด์ ms ๋จ์์ Query Latency
2. Pinot์ ์ํคํ ์ณ
<Pipelines>
- Realtime pipeline์ Kafka ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์์ค์์ ์ง์ ๋ฐ์์ฌ ์ ์๋ค.
- Batch pipeline์ hdfs, s3์ ๊ฐ์ raw-data์์ ๋๋์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
์ด ๋ ํ์ดํ๋ผ์ธ์ ๊ฐ์ ํ
์ด๋ธ์ ๋๊ณ ๋ค๋ฃฐ ์ ์๊ณ ์ด๊ฒ์ ๊ฝค ํธ๋ฆฌํ๋ค.
๊ฒฐ๊ตญ User์๊ฒ ์ด๊ฒ์ด ํ๋์ ํตํฉ๋ view๋ก ์ ๊ณต๋๋ค.
<Controll plane>
- Apache helix๋ก ํด๋ฌ์คํฐ ๋ช
๋ น(ํํฐ์
๋, ๋ณต์ , ๋ก๋๋ฐธ๋ฐ์ฑ, ์ธ์คํด์ค ํ ๋น ๋ฑ)์ ์กฐ์ ํ๋ค.
- Controller๊ฐ ๋ฐ๋ก ์์ด์, ์ฑ๋ฅ ํ์ฅ์ ์ํด์๋ machine๋ง ์ถ๊ฐํ๋ฉด ๋๋ ํ์ฅ์ ์ฉ์ดํ ๊ตฌ์กฐ์ด๋ค.
<Data plane>
๋ค์ด์ค๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ์ปฌ๋ผ ์งํฅ ํฌ๋งท์ผ๋ก ์กฐ์งํํด ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค์ด ๋๋๋ค.
3. Pinot์ ์ฒ๋ฆฌ ๊ณผ์
(1) kafka ๋ฉํ๋ฐ์ดํฐ๋ฅผ fetch ํ๋ค
-> "4๊ฐ์ ํํฐ์
์ด ์๊ตฌ๋, 4๊ฐ์ segment๋ฅผ ์์ฑํด์ผ ๊ฒ ๋ค"
(2) 4๊ฐ์ segment๋ฅผ 4๊ฐ์ ์๋ฒ์ ํ ๋นํ๋ค.
-> Apache helix๋ก ํด๋น ์์
์ด ์ด๋ฃจ์ด์ง๋ฉฐ, Zookeeper์ ideal state๋ฅผ ๊ธฐ๋กํ๋ค.
(3) ์๋ฒ๋ค์ Kafka์ ์์ํ๋ ํํฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ณ , ๋ก์ปฌ segment๋ฅผ ์์ฑํ๋ค.
(4) segment๊ฐ ์๊ฐ์ด ์ง๋์ ์๋ฃ๋๋ฉด controller๊ฐ ๋ค์ segment๋ค์ ์์ฑํ๊ณ , ์ด๊ฒ์ด ๋ฐ๋ณต๋๋ค.
ํ๋์ฉ ๋๋ ๊ฐ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์๋ค. replication์ด ์ผ์ด๋๋ค.
<segment>
- raw-data๋ segment๋ก ๋ณํ๋๋ค.
- segment๋ ์ปฌ๋ผ ํ์ ํฌ๋งท์ผ๋ก ๋ก๋ํ ๋ฐ์ดํฐ๋ฅผ ์ค์ฌ์ค๋ค.
- Inverted, Sorted, Star-Tree ๋ฑ์ ๋ฏธ๋ฆฌ ์ง๊ณ๋ ๋ฐ์ดํฐ๋ค์ ํตํด key-value ๊ธ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋ค.
4. p99th ๋ฌธ์
- p99๋ ํด๋น ๊ฐ ์๋์ ์ ์ฒด ํ๋ณธ ์ค 99%๊ฐ ํด๋น๋จ์ ์๋ฏธํ๋ ๊ฐ์ด๋ค.
- p50๊ฐ ๋๋น p99๊ฐ์ด ์ง๋์น๊ฒ ๋๋ค๋ฉด, ์ ์ฒด ์ค ๋ช ๋ช
๋๋ฌธ์ ์๊ฐ์ด ํ์ ์ด์์ผ๋ก ๋ง์ด ๊ฑธ๋ฆฐ๋ค๋ ๊ฒ์ด๋ค.
<pinot ๋ฐ์ดํฐ ๋ ์ด์์ ์ต์ ํ>
- query span์ ์ ํํ๋ค.
replica group์ config๋ก ์ง์ ๊ฐ๋ฅํ๋ค. replica group์ ํ
์ด๋ธ์ segement๋ค์ด ์ ๋ถ ํฌํจ๋์ด ์๋ ๊ทธ๋ฃน
- ์ฒ๋ฆฌํด์ผํ๋ ๊ฒ๋ค์ ์๋ฅผ ์ค์ธ๋ค.
์๋ฒ์ ํํฐ์
์ด ๋งค์นญ๋๋ ์ค๋ฉํจ์๋ฅผ ์ด์ฉํด, ํด๋น ์ธ๊ทธ๋จผํธ๊ฐ ์ด๋ ์๋ฒ๋ก ๊ฐ์ผ ์์ ์ง ๋ฏธ๋ฆฌ ๋ชฉ๋ก์ ์ถ์ํ ์ ์๋ค.
ํน์ง
- ๋ค์ํ ์์ถ ๊ธฐ๋ฅ(run length, fixed bit length)์ ๊ฐ์ง ์ปฌ๋ผ ์งํฅ ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฅํ ๋ค์ํ ์ธ๋ฑ์ฑ(Sorted, Bitmap, Inverted, StarTree, BloomFilter, Range, TextSearch, JSON, Geospatial, ...)
- ์ฟผ๋ฆฌ์ ์ธ๊ทธ๋จผํธ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ ์ฟผ๋ฆฌ ๋ฐ ์คํ ์ต์ ํ
- ๊ฑฐ์ ์ค์๊ฐ์ ๊ฐ๊น์ด ์คํธ๋ฆผ ๋ฐ์ดํฐ ๋ถ๋ฌ์ค๊ธฐ(Kafka ๋ฑ)์, ๋ฐฐ์น ๋ฐ์ดํฐ(Hadoop, Azure ๋ฑ) ๋ถ๋ฌ์ค๊ธฐ
- select, groupby, orderby, ์ง๊ณ ํจ์ ๋ฑ SQL ๋ฅ์ ์ธ์ด๋ก ๋ฐ์ดํฐ ์กฐํ
- ๋ค์ค๊ฐ ์์ฑ ์ง์
- ์ํ์ ํ์ฅ์ฑ ๋ฐ fault-tolerant
์ธ์ ์ฌ์ฉํด์ผํ ๊น?
Pinot์ OLAP ์ฟผ๋ฆฌ๋ฅผ ๋น ๋ฅธ ์๋ต ์๋๋ก ์คํํ๊ธฐ ์ํด ์ค๊ณ ๋์๋ค. ์ ์ ๋ฐ์ดํฐ์ ๋ํ ๋น ๋ฅธ ๋ถ์(aggregation) ๋๋ ์ค์๊ฐ ๋ฐ์ดํฐ ์ ๋ ฅ์ด ํ์ํ ์ํฉ์ ์ ํฉํ๋ค.
- User-Facing ๋ถ์ ์ ๊ณต
์ ์ด์ Who Viewed Profile, Company Analytics, Talent Insights ์ ๊ฐ์ user-facing ์๋น์ค๋ค์ ์ํด ๊ฐ๋ฐ๋์๋ค. LinkedIn์์ ์ด๋ฏธ 50๊ฐ๊ฐ ๋๋ ์ฌ์ฉ์ ์๋น์ค์ ์ฌ์ฉ๋๊ณ ์์ผ๋ฉฐ, ์ด๋น ์๋ฐฑ๋ง๊ฐ์ ์ด๋ฒคํธ๋ฅผ ์์งํ๊ณ ์ด๋น 10๋ง๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ๋ฆฌ์ธ์ปจ๋ ์์ค์ ์๋ต์๋๋ก ์ฒ๋ฆฌํ๊ณ ์๋ค.
- ๋น์ฆ๋์ค metric์ ์ํ ์ค์๊ฐ ๋์๋ณด๋
slice, dice, drill down, roll up, pivot ๋ฑ ๋์ฉ๋ ๋ค ์ฐจ์์ ๋ฐ์ดํฐ์ ๋ํด ์ ํ์ ์ธ ๋ถ์์ ์ํํ๋ ๋ฐ์๋ ์ฌ์ฉ๋ ์ ์๋ค. Pinot์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ Superset, Tableau, PowerBI ๋ฑ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- Anomaly Detection
๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด pinot์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ํด ์ด์ ํ์ง๋ฅผ ์ํํ ์ ์๋ค. ThirdEye๊ฐ ๊ทธ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์์ฃผ ๋ฐ๋ ์ง๋ฌธ
- Pinot์ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ธ๊ฐ์, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ๊ฐ์?
Pinot์ ๊ธฐ์กด์ ํ์์ ์์ ํ ๋ฒ์ด๋ ์ ํ์ด๊ธฐ ๋๋ฌธ์, ์ค๋ช
ํ๊ธฐ ์ด๋ ต๋ค.
- ๊ธฐ์
์ฉ BI
๋ฐ์ดํฐ ๋ถ์๊ฐ, ์ฌ์ด์ธํฐ์คํธ๋ค์๊ฒ, Pinot์ BI(Business Intelligence)๋ฅผ ์ํ ํ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋งค๋ ฅ์ผ ๊ฒ์ด๋ค. Pinot์ ๋น
๋ฐ์ดํฐ ํ๋ซํผ๋ค์ ํตํฉํ๋ฉด์๋ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค์ ์ญํ ์ ์ํํ์ฌ, ๋ถ์๊ณผ ๋ณด๊ณ ๋ฅผ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค.
- ๊ธฐ์
์ฉ ์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ
์ดํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์์๊ฒ, Pinot๋ Kafka์ ๊ฐ์ ์คํธ๋ฆฌ๋ฐ ๋ฐ์ดํฐ ์์ค์ ๋ํ์ฌ immutableํ ๋ฐ์ดํฐ์ ์ง๊ณ, ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ SQL๋ก ์ฟผ๋ฆฌํ๋ ์ ์ด ๋งค๋ ฅ์ผ๋ก ๋ค๊ฐ์ฌ ๊ฒ์
๋๋ค. MSA์ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฐ์ดํฐ ์บก์ํ๋ ํ๋์ OLTP ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์์ -> ๊ฐ ์ดํ๋ฆฌ์ผ์ด์
์ด ๊ฐ๊ฐ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๊ฐ๋ ๊ฒ์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์ ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฉ์ด์ ธ์๊ธฐ ๋๋ฌธ์, ํผ์ ์ ๊ฒช์ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ฑ๋ฅ์ ์ธก๋ฉด์์๋, ๋ง์ดํฌ๋ก ์๋น์ค๋ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ธํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ข์ง ์์ต๋๋ค. ํ์ง๋ง Pinot์ MSA์ ๋ฐ์ดํฐ๋ฅผ ํตํฉํ์ฌ SQL ๋ก ์ฝ๊ฒ ์ฟผ๋ฆฌํ ์ ์์ต๋๋ค.
pinot tenants๋ ๋ง์ดํฌ๋ก ์๋น์ค ํ์ ์์ด์, ์์ ๊ถ์ ๊ณต์ ํ๋ ๊ทธ ์ด๋ค ๊ฐ๋ฅ์ฑ๋ ๋ง์์ค๋๋ค. ์ฟผ๋ฆฌ ๋ชจ๋ธ์ ํญ์ ๋ถ๋ณ์ ์์์ ๋๋ค.
์ฐธ๊ณ
- - Replication : https://www.joinc.co.kr/w/man/12/replication
- Replication Transparency : https://yeonduing.tistory.com/6
- Scatter & Getter : https://swalloow.github.io/container-patterns2/
- p50, p99 : https://readosapien.com/what-is-p50-p90-p99-latency/
'๐ป > MLOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
stern : ๋ถ์ฐ ์ฒ๋ฆฌ ํ๋ซํผ ๋ชจ๋ํฐ๋ง (0) | 2024.02.23 |
---|---|
[k8s] `kubectl top` (0) | 2024.01.02 |
Apache Cassandra (0) | 2023.07.31 |
[Pinot] ์คํ์์ค ๊ธฐ์ฌ ํ๋ก์ธ์ค (0) | 2023.03.05 |
[Pinot] Apache Pinot ๊ฐ๋ฐ ํ๊ฒฝ (0) | 2023.03.05 |