The document discusses microservices architecture using the Go programming language and Go-kit framework. It provides an overview of microservices and some of the challenges they present. It then discusses using the Go language for microservices due to its simplicity. Go-kit is introduced as a framework for building microservices in Go that addresses transport protocols, endpoints, services, and other concerns through its modular architecture. The document dives into various aspects of the Go-kit architecture including transports, endpoints, services, and instrumentation. Code examples are provided to illustrate implementing a simple math service using Go-kit.
7. Microservices
• Ditulis dalam bahasa pemgorgraman apa pun, dan
framework apa pun.
• Independen; kode, versi, deployment, scaled.
• Berinteraksi dengan microservices lainnya melalui interfaces
atau protokol lain yang terdefinisi - kontrak.
• Mempunyai alamat/nama yang unik (URLs) untuk digunakan
dalam mengaksesnya.
• Tetap konsisten dan tersedia dimana terjadinya suatu
kegagalan.
10. Masalah
• Dibutuhkan domain bisnis yang telah terdifinisi dengan baik
untuk menghasilkan API yang stabil.
• Tidak ada lagi shared-database.
• Testing yang menjadi sangat sulit.
• Pipeline - Memerlukan kultur dev/ops yang berjalan.
• Monitoring dan instrumentasi — tail -f? Nagios & New Relic?
Ha! Distributed tracing?
• Keamanan.
16. Tinjauan Arsitektur
Source code dependencies can only point inwards. In other
words, the source code of each circle can only access code
in an inner circle but never any code in an outer circle.
33. Transport Layer
• Layer paling luar, untuk komunikasi/akses.
• Mendukung beberapa protokol komunikasi, diantaranya
HTTP, gRPC, AMQP, Thirft, NATS, dll.
• Satu microservices bisa dipasang beberapa jenis
transport.
• Decoder/Encoder
• Kirim data ke layer selanjutnya —> Endpoint Layer
37. Endpoint Layer
• Seperti handler pada sebuah controller.
• Terima interface{} sbg Request, kembalikan interface{}
Response.
• Setiap endpoint ini mengekspos service terhadap dunia
luar melalui Transport.
42. Service Layer
• Bagian dimana business logic diimplementasi.
• Biasanya dimodelkan dengan interface, dimana
implementasi konkretnya berisi business logic.
• Tidak ada knowledge terhadap layer sebelumnya,
misalnya HTTP Headers (Transport Layer).
47. Middlewares
• Bentuk konkret dari konsep separation of concern dengan
menggunakan decorator pattern.
• Membungkus endpoint atau services untuk menambah
fungsionalitas yang generik, misal logging, rate limiting
atau distributed tracing.
• Ada 2 tipe, Endpoint Middleware & Endpoint Service.
58. Sejauh ini…
• Cenderung susah dipahami diawal.
• Verbose.
• Sangat gampang ketika ada perubahan requirement.
• Banyak dukungan library.
• Pakai apa yang kita butuhkan.
59. Terus..
• Implementasi core business logic di service layer, dengan
mendefinisikan interface plus dengan implementasi konkretnya.
• Buat service middleware, disini biasanya utk beberapa fungsi
tambahan, seperti analytics atau logging - intinya yang dibutuhkan
oleh domain business.
• Untuk middleware yang agnostik terhadap domain business, misal
circuit breaker, rate limiter, dll bisa dibuat di endpoint middleware.
• Buat Transport Layer dengan semua decoder/encoder-nya.
• Satukan mereka ❤ di Endpoint Layer.