Hatchet
๐ช Run Background Tasks at Scale
Postgres์ ๊ธฐ๋ฐํ ์์ ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ
About
- Postgres ๊ธฐ๋ฐ์ ๋๊ท๋ชจ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ฒ๋ฆฌ ํ๋ซํผ ์คํ์์ค
- ๋ถ์ฐ ์์ ํ(Distributed Task Queue) ๋ฐ ์ํฌํ๋ก ์ค์ผ์คํธ๋ ์ด์ ํ๋ซํผ
- ๋ณต์กํ ์์ ์ํฌํ๋ก, ์คํจ ๋ณต๊ตฌ, ์ค์ผ์ค๋ง, ์ด๋ฒคํธ ๊ธฐ๋ฐ ํธ๋ฆฌ๊ฑฐ, ์ค์๊ฐ ๋ชจ๋ํฐ๋ง๊น์ง ์ง์
- Python, Go, TypeScript SDK ์ ๊ณต
- MIT ๋ผ์ด์ ์ค, ์ ํ ํธ์คํ ๋ฐ ํด๋ผ์ฐ๋ ๋ฒ์ ์ ๊ณต
์ฃผ์ ๊ธฐ๋ฅ ์์ฝ
- ํ ๊ด๋ฆฌ
- Postgres ๊ธฐ๋ฐ ๋ด๊ตฌ์ฑ ์๋ ํ ์์คํ
- ํค ๊ธฐ๋ฐ ํ์ (๊ณต์ ํ ์์ ๋ถ๋ฐฐ ๊ตฌํ)
- ์๋ ์ ํ(Rate limiting)
- Sticky Assignment ๋ฐ Worker Affinity
- Postgres ๊ธฐ๋ฐ ๋ด๊ตฌ์ฑ ์๋ ํ ์์คํ
- DAG ๊ธฐ๋ฐ ์ํฌํ๋ก ๊ตฌ์ฑ
- ์กฐ๊ฑด ๊ธฐ๋ฐ ์คํ (์: sleep, ์ด๋ฒคํธ ๊ธฐ๋ฐ ํธ๋ฆฌ๊ฑฐ, ๋ถ๋ชจ ์์ ์ ์ถ๋ ฅ๊ฐ ๊ธฐ๋ฐ ์กฐ๊ฑด ์คํ ๋ฑ)
- ๋ณต์กํ ๋ถ๊ธฐ ๋ก์ง ์ฒ๋ฆฌ ๊ฐ๋ฅ
- ์์ ๊ฐ ์์กด์ฑ ์ ์, ๋ค์ค ์์ ๋ณ๋ ฌ ์คํ
- Durable task๋ก ์ค๊ฐ ๊ฒฐ๊ณผ ์ ์ฅ ๋ฐ ๋ณต๊ตฌ ์ง์
- ๋ด๊ตฌ์ฑ ์๋ ํจ์ ์คํ: ์คํจ ์ ์ค๊ฐ ์ํ๋ฅผ ์บ์ํ๊ณ ์ฌ์คํ์ผ๋ก ๋ณต์
- Durable Sleep๊ณผ Durable Events๋ ์ง์
- ์ฌ์ฉ์ ๋จ์ ๋์์ฑ ์ ํ
- ๊ธ๋ก๋ฒ ๋ฐ ๋์ ์๋ ์ ํ (Rate Limiting)
- ์ ๋ต์ ์์ ๋ถ์ฐ์ ํตํ ์์คํ ์์ ์ฑ ํ๋ณด
- Cron ์์ , ์์ฝ ์คํ, durable sleep ์ง์
- ์: ๋งค์ผ ์์ ์คํ, ํน์ ์๊ฐ ์์ฝ, ์ง์ ์๊ฐ ๋๊ธฐ ๋ฑ
- Sticky Assignment: ๋์ผ ์์ปค์ ์์ ๊ณ ์
- Worker Affinity: ์ต์ ์ ์์ปค ์ ํ ๋ก์ง ์ ์ฉ
- ์ธ๋ถ ์ด๋ฒคํธ ์์ ํ ์์ ์คํ ๊ฐ๋ฅ
- ์ด๋ฒคํธ/์ฌ๋ฆฝ ์กฐ๊ฑด ๋ณํฉ ๊ฐ๋ฅ
- ์ค์๊ฐ ๋์๋ณด๋ ๋ฐ ๋ชจ๋ํฐ๋ง
- ์์ ๋ก๊ทธ ๋ณด๊ธฐ, ์๋ฆผ ์ค์ (Slack/์ด๋ฉ์ผ)
Hatchet๋ฅผ ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์๊น?
- โ DAG ๊ธฐ๋ฐ ์ํฌํ๋ก ๊ตฌ์ฑ์ด ํ์ํ ๋
- โ ์์ ์คํจ ์ ์ฌ์๋ ๋ฐ ์ํ ๋ณด์กด์ด ์ค์ํ ๋
- โ ์ฌ์ฉ์๊ฐ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ๋ถ์ฐ ์ฒ๋ฆฌ
- โ ๋น ๋ฅด๊ฒ ์ ์ ๊ฐ๋ฅํ ๊ฐ๋จํ ํ๋ง ํ์ํ ๋ (Celery/BullMQ ๋ฑ ์ถ์ฒ)
- โ ๋ค์ํ ๋ฐ์ดํฐ ์ปค๋ฅํฐ์ ํตํฉ์ด ์ค์ํ ๋ (Airflow/Prefect ๋ฑ ์ถ์ฒ)
๋น๊ต: Hatchet vs ๋ค๋ฅธ ์๋ฃจ์ ๋ค
- Hatchet vs Temporal
- Hatchet์ ํ + DAG + Durable Execution ๋ชจ๋ ์ง์
- Temporal์ Durable Execution์ ์ต์ ํ
- Hatchet์ ์ ํ ํธ์คํ ์ด ๊ฐํธ (Postgres๋ง ํ์)
- Hatchet์ ์์ ์ด๋ ฅ ์ ์ฅ + UI ์๊ฐํ + ์ค์ผ์คํธ๋ ์ด์ ๋ด์ฅ
- BullMQ/Celery๋ ๊ฒฝ๋ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ง๋ง ๋ชจ๋ํฐ๋ง ๊ธฐ๋ฅ ๋ถ์กฑ
- Hatchet์ ๊ณ ์ ์คํ, ๋ฎ์ ๋ ์ดํด์, ์์ฒด ์์ปค ๊ด๋ฆฌ
- Airflow/Prefect๋ ๋ฐ์ดํฐ ํ์ดํ๋ผ์ธ ์ค์ฌ์ผ๋ก, ํตํฉ ์ปค๋ฅํฐ์ ๊ฐ์
์์ฝ
- Hatchet์ Postgres๋ง์ผ๋ก ๋์ํ๋ ํ๋์ ์ธ ๋ถ์ฐ ์์ ์ฒ๋ฆฌ ํ๋ซํผ
- Durable, Observable, Composableํ ์์ ์์คํ ์ ๋จ์ผ ๋๊ตฌ๋ก ๊ตฌํ ๊ฐ๋ฅ
- ํด๋ผ์ฐ๋/์ ํ ํธ์คํ ๋ชจ๋ ์ง์๋๋ฉฐ, Python/Go/TypeScript๋ก ์ฝ๊ฒ ํตํฉ ๊ฐ๋ฅ