[Distributed Tracing] λ§μ΄ν¬λ‘μλΉμ€μ λΆμ° μΆμ μ΄λ 무μμΈκ°
λ³Έ κΈμ λ§μ΄ν¬λ‘μλΉμ€μ λΆμ° μΆμ μ리μ¦λ‘ μ΄λ‘ κ³Ό μ€μ΅μ΄ ν¨κ» ν¬ν¨λ μ리μ¦μ λλ€. μλ λͺ©μ°¨μ νμλ κΈμ λͺ¨λ μ°Έκ³ νλ©΄ μ’μ΅λλ€.
λͺ©μ°¨
- Distributed Tracing, λΆμ° μΆμ μ΄λ?
- Spring Cloud Sleuth μ Zipkin
- Sleuth λ‘ Http νκ²½μ λΆμ° μΆμ μ€μ΅
- Sleuth λ‘ Messaging νκ²½μ λΆμ° μΆμ μ€μ΅
μ€μ΅μ λν μμ€μ½λλ₯Ό νμΈνμκ³ μΆλ€λ©΄ μ€μ΅ githubμμ νμΈνμ€ μ μμ΅λλ€.
λΆμ° μΆμ μ΄ μ νμνκ°?
μ΄μ μ μΉ μλΉμ€λ 3-tier μν€ν μ²μ 2-tier μν€ν μ²κ° μ£Όλ₯Ό μ΄λ£¨μμλ€.
νμ§λ§ λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²κ° μΈμμ λμ€κ³ μ΄λ₯Ό μλνκ³ μ±κ³΅νλ κΈ°μ μ μ¬λ‘κ° λμ΄λ¨μ λ°λΌμ λ§μ΄ν¬λ‘μλΉμ€ νκ²½μ λν κ΄μ¬λλ κ·Έμ κ±Έλ§κ² μ¦κ°νκ³ μλ€.
λ§μ΄ν¬λ‘μλΉμ€ μν€ν μ²μ λ³κ°λ‘ μμ€ν μν€ν μ² λ΄μμ λ°μνλ issue λ€μ νμ§νλ κ²μ κ½€λ μ€μν μΌμ΄μλ€.
κ·Έλμ λ€μν APM (Application Performance Management) λꡬλ€μ μ¬μ©νλ κΈ°μ λ€μ΄ λ§μ΄ λ±μ₯νλ€.
νμ§λ§ λ§μ΄ν¬λ‘μλΉμ€λ‘ μΈν΄μ n κ³μΈ΅μ μν€ν
μ²μμλ μ»΄ν¬λνΈμ Topologyκ° λ³΅μ‘ν΄μ§μ λ°λΌμ issue λ₯Ό νμ§νλ κ² μ‘°μ°¨ μ½μ§ μμ μΌμ΄ λμ΄λ²λ Έλ€.
μ¦, λ§μ΄ν¬λ‘μλΉμ€ νκ²½μμμ λΆμ°λ μ ν리μΌμ΄μ λ©μμ§λ₯Ό μΆμ νλ κ²μ΄ μ΄λ ΅λ€.
νμ§λ§ λΆμ° μΆμ μ λν΄μ νμ΅νκ² λλ€λ©΄ n-tier μ μν€ν μ²μμλ μ½κ² λΆμ° μΆμ μ΄ κ°λ₯νλ€.
Distributed Tracing
Distributed Tracing, λΆμ° μΆμ μ μ΄λ»κ² ν κΉ?
λ§μ΄ν¬λ‘μλΉμ€λ₯Ό node λ‘ κ΅¬λΆνκ³ κ°κ°μ node 1κ³Ό node 2 μμ μλ‘ ν΅μ μ νλ€κ³ κ°μ ν΄λ³΄μ.
κ·ΈλΌ node 1 μμλΆν° μΆμ μ΄ μμλκ³ μΆμ νΈλ¦¬, distributed tracing treeκ° μ겨λλ€.
κ·Έλ¦¬κ³ node 1 μμ λ€λ₯Έ node λ‘ μμ²μ λ³΄λΌ κ²½μ° ν΄λΉ μΆμ νΈλ¦¬μ μμ node κ° append λλ ννλ‘ tracing tree λ₯Ό μμ±μν€λ λ°©λ²μ΄λ€.
μ΄λ¬ν Tracing Data λ μΌλ°μ μΌλ‘ Timing Data κ° ν¨κ» ν¬ν¨λλλ°, Timing λ°μ΄ν°λ₯Ό ν΅ν΄μ ν ν΄λ‘μ§κ°μ Latency λ₯Ό νμ§ν μ μκ² λλ κ²μ΄λ€.
μ¦, κ°λ°μλ κ°κ°μ μμ²λ€μ λν΄μ μΌλ§λ μκ°μ΄ κ±Έλ Έκ³ , μ΄λ€ λ¬Έμ κ° λ°μνλμ§ λμ± λΉ λ₯΄κ³ ν¨κ³Όμ μΌλ‘ νμ ν μ μκ² λλ€.
μ΄ λ, μ΄λ₯Ό μ€νν μ μλ λ°©λ²μ μ¬λ¬κ°μ§κ° μμ§λ§ κ°μ₯ μ λͺ ν Dapper μ λν΄μ μμ보μ
Google's Dapper
λΆμ° μΆμ νκ²½μμ μμ μ€λͺ νκΈ°λ‘λ μΆμ νΈλ¦¬λ₯Ό μ΄μ©ν΄μ λ§μ΄ν¬λ‘μλΉμ€ λ Έλκ°μ μκ΄κ΄κ³λ₯Ό λΆμνλ€κ³ νλ€.
κ·ΈλΌ μ΄ μκ΄κ΄κ³λ₯Ό μ΄λ»κ² κ·μ ν κΉ?
ꡬκΈμ μ΄ Dapper λ₯Ό μ΄μ©ν΄ μκ΄κ΄κ³λ₯Ό μμ£Ό κ°λ¨ν μκ°μΌλ‘ ν΄κ²°νλ€.
Dapper κ° κΆκΈνλ€λ©΄ Google Dapper μ Paper μμ νμΈν μ μλ€
HTTP μμ²μ΄ μ‘΄μ¬νλ μν©μ΄λΌκ³ κ°μ νλ€λ©΄, HTTP Header μ λ©ν λ°μ΄ν°λ₯Ό μΆκ°νλ λ°©λ²μΌλ‘ ν΄κ²°νμλ€.
HTTP Header μλ λΆμ° νκ²½μ λν κΈ°λ³Έμ μΈ μ 보μ κ°κ° μμ²μ μκ΄κ΄κ³λ₯Ό λΆμν μ μλλ‘ νλ μ΅μνμ μ 보λ₯Ό μΆκ°νλ€.
Node 1 μμ μμ²μ΄ μμλμμΌλ©΄ μμ : Node 1, μκ°, Endpoint μ κ°μ λ°μ΄ν°λ₯Ό ν€λμ μΆκ°νκ³ Node 2λ‘ μ λ¬νλ€
κ·Έλ¦¬κ³ Node 2 μμλ Node 2 μ μ 보λ₯Ό μΆκ°νκ³ λ€μ λ
Έλλ‘ λκ°λ€.
μλ₯Ό λ³Έλ€λ©΄ TxId λ 1λ‘ λͺ¨λ κ³ μ μ΄ λμ΄μλ€.
κ·Έλ λ€λ©΄ TxId κ° 1λ‘ λͺ μλ λͺ¨λ λ©μμ§λ νλμ νΈλμμ μ ν¬ν¨μν¨λ€.
κ·Έλ¦¬κ³ ν΄λΉ λ©μμ§μ κ³ μ ν Id κ²©μΈ SpanId λ νΈλμμ
λ΄μ μμλ₯Ό νμ
ν μ μλλ‘ λμμ μ€λ€.
SpanId μ ParentId λ₯Ό ν΅ν΄μ μ°κ²° 리μ€νΈμ λΉμ·ν ννλ‘ λ©μμ§λ₯Ό μ°κ²°μν€λ κ²μ΄λ€.
μ΄λ° λ°©μμ ν΅ν΄μ ν€λμ ν¬ν¨λμ΄μλ λ©νλ°μ΄ν°μ μ λ³΄λ‘ κ°κ° λ©μμ§κ°μ μκ΄κ΄κ³λ₯Ό λΆμνμ¬ μΆμ ν μ μλλ‘ νλ€.
λΆμ° μΆμ μ ν μ μλλ‘ λμμ£Όλ κ²λ€
Distributed Tracing μ ν μ μλλ‘ λμμ£Όλ μννΈμ¨μ΄λ€μ΄ κ½€λ λ§μ΄ μ‘΄μ¬νλ€.
μ°μ Naver μμ 2012λ λλΆν° κ°λ°νκ³ 2015λ λ μ€νμμ€λ‘ 곡κ°ν Pinpoint λ μ λͺ ν Zipkin, Jaeger λ±λ±
- Pinpoint
- λ€μ΄λ²μμ μ€νμμ€λ‘ κ°λ°νκ³ μ¬μ©λμλ€.
- Dapper λ°©μμ μ΄μ©νλ€
- Zipkin
- μ€ν μμ€ APM μΌλ‘ νΈμν°μμ κ°λ°λκ³ μ¬μ©λμλ€.
- Google μ Dapper λ°©μμ μ΄μ©νλ€
- Jaeger
- μμ μ€ν μμ€ APM μΌλ‘ μ°λ²μμ κ°λ°λκ³ CNCF μ μ’ μλμλ€.
- Zipkin κ³Ό κ°μ΄ Dapper λ°©μμ μ΄μ©νλ€
- DataDog
- κΈ°μ μ© APM ν΄λ‘ μΈνλΌμ λν λͺ¨λν°λ§μ μ 곡νλ€
- λΆμ° μΆμ μ΄μΈμλ μΈνλΌ μ 체μ λν λͺ¨λν°λ§μ΄ κ°λ₯ν μ₯μ μ΄ μλ€.
μ΄μΈμλ μ¬λ¬ λꡬλ€μ΄ μ‘΄μ¬νλ€ μ΄μ κ΄λ ¨ν΄μλ Latest top 11 distributed tracing tools λ₯Ό μ°Έκ³ ν μ μλ€
μ΄ μ€μμλ μ°λ¦¬λ Zipkin μ μ΄μ©ν΄μ λΆμ° μΆμ μ μ€μ΅ν κ²μ΄λ€.
Spring μ§μμμ Zipkin κ³Ό μ½κ² μ°λν μ μλλ‘ Spring Cloud Sleuth λ₯Ό μ 곡νλλ°, λ€μ μκ°λΆν° μμλ³΄κ³ μ€μ΅ν΄λ³΄μ
λκΈ