Lompat ke konten
dokumentasi.id
Commit ecba1e8
v2
Star2,8 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

1

Ringkasan Proyek

Heimdall adalah HTTP client untuk Go yang membantu aplikasi mengirim request dalam jumlah besar. Modul ini bernama github.com/gojek/heimdall/v8, menargetkan go 1.25, dan hanya bergantung pada github.com/gojek/hystrix-go/hystrix serta github.com/stretchr/testify untuk pengujian (go.mod:1-8).

Tiga kemampuan utama yang dijanjikan README adalah circuit breaker bergaya hystrix untuk menahan request yang gagal, retry in-memory yang berjalan sinkron dengan strategi retrier yang bisa diganti, serta client dengan timeout berbeda untuk setiap request. Semua HTTP method tersedia lewat fluent interface (README.md:26-31).

Peta modul

Struktur repository mengikuti satu gagasan: kontrak tinggal di paket akar heimdall, lalu dua implementasi client membangun di atasnya.

graph TD
  subgraph core["paket heimdall (akar)"]
    Client["Client & Doer"]
    Backoff["Backoff"]
    Retriable["Retriable"]
    Plugin["Plugin"]
  end
  HTTP["httpclient.Client"] --> Client
  HTTP --> Backoff
  HTTP --> Retriable
  HTTP --> Plugin
  HTTP --> EB["internal.ErrorBudget"]
  Hystrix["hystrix.Client"] --> HTTP
  Hystrix --> HX["hystrix-go"]
  RL["plugins.NewRequestLogger"] --> Plugin
  style Client fill:#f59e0b,color:#000
  style Backoff fill:#f59e0b,color:#000
  style Retriable fill:#f59e0b,color:#000
  style Plugin fill:#f59e0b,color:#000
  style HTTP fill:#2d7d46,color:#fff
  style Hystrix fill:#dc2626,color:#fff
  style HX fill:#dc2626,color:#fff
  style EB fill:#8b5cf6,color:#fff
  style RL fill:#8b5cf6,color:#fff
%% fig: Ketergantungan modul Heimdall
%% desc: Paket akar menyediakan kontrak, httpclient mengimplementasikannya dengan retry, dan hystrix membungkus httpclient dengan circuit breaker dari hystrix-go.
Fig. 1: Ketergantungan modul HeimdallPaket akar menyediakan kontrak, httpclient mengimplementasikannya dengan retry, dan hystrix membungkus httpclient dengan circuit breaker dari hystrix-go.

Paket akar mendefinisikan Doer dan Client. Doer cukup memiliki metode Do(*http.Request) (*http.Response, error), sehingga tipe seperti net/http.Client bisa dipakai sebagai client kustom. Client menyatukan Get, Post, Put, Patch, Delete, Do, dan AddPlugin dalam satu antarmuka (client.go:8-23).

Dua kontrak lain mengatur perilaku retry. Backoff hanya menuntut Next(retry int) time.Duration (backoff.go:9-12), sedangkan Retriable menuntut NextInterval(retry int) time.Duration (retry.go:5-8). Pemisahan ini membuat strategi jeda dan mekanisme retry bisa diganti secara terpisah, dan heimdall.NewRetrier menjembatani keduanya.

Kontrak ketiga adalah Plugin, yang menerima tiga callback selama siklus hidup request: OnRequestStart, OnRequestEnd, dan OnError (plugin.go:7-13). Ringkasan pemakaian plugin ada di Plugin dan Request Logger.

Dua implementasi client

httpclient.Client adalah implementasi dasar. Struct-nya menyimpan heimdall.Doer, daftar plugins, timeout, retrier, retryCount, retryableCodes, dan retryErrorBudget (httpclient/client.go:15-32). Nilai bawaannya adalah defaultRetryCount = 0 dan defaultHTTPTimeout = 30 * time.Second, dengan retrier awal heimdall.NewNoRetrier() (httpclient/client.go:34-49). Artinya client tanpa option tidak melakukan retry sama sekali.

hystrix.Client membungkus client tersebut. Struct-nya memegang *httpclient.Client ditambah parameter circuit breaker: hystrixTimeout, hystrixCommandName, maxConcurrentRequests, requestVolumeThreshold, sleepWindow, errorPercentThreshold, dan fallbackFunc (hystrix/hystrix_client.go:21-37). hystrix.NewClient membuat httpclient.NewClient() lebih dulu, menjalankan semua Option, lalu mendaftarkan konfigurasi ke hystrix.ConfigureCommand (hystrix/hystrix_client.go:54-80). Detail pemakaiannya ada di Klien Circuit Breaker.

PathPeranIdentifier kunci
akar (package heimdall)kontrak dan utilitas retry/backoffDoer, Client, Backoff, Retriable, Plugin (client.go:8-23)
httpclient/client dengan retry, timeout, dan pluginClient, NewClient, Option (httpclient/client.go:15-32)
hystrix/client dengan circuit breaker dan fallbackClient, NewClient (hystrix/hystrix_client.go:21-37)
internal/helper internal, termasuk pengendali budget retryErrorBudget, NewTokenErrorBudget, NewPercentErrorBudget (internal/error_budget.go:11-19)
plugins/plugin siap pakaiNewRequestLogger (plugins/request_logger.go:27-38)
examples/contoh pemakaian httpclient dan hystrixhttpClientUsage, hystrixClientUsage (examples/client.go:18-25)

Batas versi dan riwayat

Repository sudah memakai module path berversi v8 (go.mod:1), tetapi CHANGELOG.md hanya memuat satu entri, yaitu v0.0.1 (2018-JAN-19) dengan catatan "initial fork commit" dan "open-source stepping stones" (CHANGELOG.md:3-6).

⚠️ Jangan memakai CHANGELOG.md sebagai sumber nomor versi. Untuk memastikan versi yang dipakai, baca module path di go.mod dan tag repository.

Ke mana harus membaca selanjutnya