Menggunakan pelacakan terdistribusi untuk mengamati latensi microservice

Last reviewed 2023-08-11 UTC

Saat aplikasi ditulis ulang untuk menggunakan microservice, jumlah komponen dan endpoint yang terlibat dalam satu transaksi pengguna akan meningkat. Oleh karena itu, kemampuan observasi menjadi sangat penting agar dapat mengoperasikan layanan pengguna dengan andal. Arsitektur referensi ini menunjukkan cara mengambil informasi trace di aplikasi microservice menggunakan OpenTelemetry dan Cloud Trace.

Dokumen ini ditujukan bagi developer, SRE, dan engineer DevOps yang ingin memahami dasar-dasar pelacakan terdistribusi dan menerapkan prinsip-prinsip tersebut pada layanan mereka untuk meningkatkan kemampuan observasi layanan.

Arsitektur

Diagram berikut menunjukkan arsitektur aplikasi yang mengimplementasikan arsitektur ini.

Arsitektur dari contoh deployment dengan dua cluster GKE.

Seperti yang diilustrasikan dalam diagram sebelumnya, arsitektur ini mencakup dua cluster GKE. Anda men-deploy aplikasi ke setiap cluster. Traffic pengguna dikirim ke aplikasi frontend di cluster frontend. Pod frontend di cluster frontend berkomunikasi dengan pod backend di cluster backend. Pod backend memanggil endpoint API eksternal.

Data kemampuan observasi diekspor ke Cloud Trace, yang melacak cara permintaan diterapkan di seluruh aplikasi.

Pertimbangan desain

Untuk layanan yang berjalan di Kubernetes, Anda dapat menggunakan mesh layanan seperti Istio guna mengaktifkan pelacakan terdistribusi untuk traffic antar-layanan tanpa memerlukan instrumentasi khusus. Namun, Anda mungkin memenuhi persyaratan berikut:

  • Anda ingin memiliki lebih banyak kontrol atas trace dari yang disediakan oleh Istio.
  • Anda mungkin perlu mengambil internal aplikasi dalam informasi trace.
  • Anda mungkin perlu melacak kode yang tidak berjalan di Kubernetes.

Untuk kasus penggunaan ini, Anda dapat menggunakanOpenTelemetry yang merupakan library open source yang dapat menambahkan instrumentasi ke aplikasi microservice terdistribusi untuk mengumpulkan trace, metrik dan log dalam berbagai bahasa, platform, dan lingkungan.

Memahami trace, span, dan konteks

Konsep pelacakan terdistribusi dijelaskan dalam makalah riset Dapper yang dipublikasikan oleh Google. Sebagaimana dijelaskan dalam makalah, diagram berikut menunjukkan lima span dalam sebuah trace.

Pelacakan terdistribusi dengan lima span dalam sebuah trace.

Trace adalah total informasi yang menjelaskan cara sistem terdistribusi merespons permintaan pengguna. Trace terdiri dari span, dengan setiap span merepresentasikan pasangan permintaan dan respons tertentu yang terlibat dalam menyajikan permintaan pengguna. Span induk menjelaskan latensi seperti yang diamati oleh pengguna akhir. Setiap span turunan menjelaskan cara layanan tertentu dalam sistem terdistribusi dipanggil dan direspons, berikut dengan masing-masing informasi latensi yang diambil.

Diagram ini menunjukkan satu permintaan frontend yang membuat dua permintaan backend. Panggilan backend kedua memerlukan dua panggilan helper untuk diselesaikan. Setiap panggilan diberi label dengan ID span dan ID span induk.

Tantangan dalam pelacakan di sistem terdistribusi adalah bahwa informasi tentang permintaan frontend asli tidak secara otomatis atau inheren diteruskan saat permintaan berikutnya dibuat ke berbagai layanan backend.

Dengan beberapa alat (misalnya, dalam bahasa Go), Anda dapat membuat permintaan dengan konteks—alamat IP dan kredensial cluster. OpenTelemetry memperluas konsep konteks untuk menyertakan konteks span, yang berarti informasi tambahan dimuat di header HTTP. Informasi tentang span induk kemudian dapat disertakan di setiap permintaan berikutnya. Anda dapat menambahkan span turunan untuk menulis keseluruhan trace, sehingga Anda dapat melihat cara permintaan pengguna melintasi sistem dan akhirnya ditayangkan ke pengguna.

Deployment

Untuk men-deploy arsitektur ini, lihat Men-deploy pelacakan terdistribusi untuk mengamati latensi microservice.

Langkah berikutnya