Apa itu mesh layanan?
Mesh layanan adalah lapisan perangkat lunak yang menangani semua komunikasi antara berbagai layanan dalam aplikasi. Lapisan ini tersusun dari layanan mikro terkontainer. Ketika aplikasi melakukan penskalaan dan jumlah layanan mikro meningkat, memantau performa layanan menjadi sebuah tantangan tersendiri. Untuk mengelola koneksi antara berbagai layanan, mesh layanan menyediakan fitur baru seperti pemantauan, pencatatan, pelacakan, dan kontrol lalu lintas. Mesh layanan bersifat independen dari setiap kode layanan sehingga memungkinkannya bekerja di seluruh batas jaringan dan dengan beberapa sistem manajemen layanan.
Mengapa Anda membutuhkan mesh layanan?
Dalam arsitektur aplikasi modern, Anda dapat membangun aplikasi sebagai kumpulan layanan mikro kecil yang dapat dilakukan deployment secara independen. Tim yang berbeda dapat membangun layanan mikro individu dan memilih bahasa serta alat pengodean mereka. Namun, layanan mikro harus berkomunikasi agar kode aplikasi berfungsi dengan benar.
Performa aplikasi bergantung pada kecepatan dan ketahanan komunikasi antara berbagai layanan. Developer harus memantau dan mengoptimalkan aplikasi di seluruh layanan, tetapi visibilitas akan sulit didapatkan karena sifat terdistribusi yang dimiliki sistem tersebut. Saat aplikasi melakukan penskalaan, pengelolaan komunikasi menjadi lebih kompleks.
Ada dua pendorong utama dalam adopsi mesh layanan. Berikut adalah penjelasannya.
Observabilitas tingkat layanan
Dengan makin banyaknya beban kerja dan layanan yang dilakukan deployment, developer merasa kesulitan untuk memahami cara kerja semuanya. Misalnya, tim layanan ingin mengetahui dependensi hilir dan hulu mereka. Mereka menginginkan visibilitas yang lebih besar tentang cara layanan dan beban kerja berkomunikasi di lapisan aplikasi.
Kontrol tingkat layanan
Administrator ingin mengontrol layanan mana yang dapat saling berkomunikasi dan tindakan apa yang dapat lakukan. Mereka menginginkan kontrol dan tata kelola yang terperinci atas perilaku, kebijakan, serta interaksi layanan dalam arsitektur layanan mikro. Memberlakukan kebijakan keamanan sangatlah penting untuk memastikan kepatuhan terhadap peraturan.
Apa saja manfaat mesh layanan?
Mesh layanan menyediakan lapisan infrastruktur khusus dan terpusat yang menangani kerumitan komunikasi layanan-ke-layanan dalam aplikasi terdistribusi. Selanjutnya, kami akan menjelaskan beberapa manfaat mesh layanan.
Penemuan layanan
Mesh layanan menyediakan penemuan layanan otomatis yang akan mengurangi beban operasional pengelolaan titik akhir layanan. Mesh layanan menggunakan registri layanan untuk secara dinamis menemukan dan melacak semua layanan dalam mesh. Layanan dapat menemukan dan berkomunikasi satu sama lain dengan lancar, terlepas dari lokasi atau infrastruktur yang mendasarinya. Anda dapat menskalakan secara cepat dengan melakukan deployment layanan baru sesuai kebutuhan.
Penyeimbangan beban
Mesh layanan menggunakan berbagai algoritma—seperti round-robin, koneksi terkecil, atau penyeimbangan beban tertimbang—untuk mendistribusikan permintaan di beberapa instans layanan secara cerdas. Penyeimbangan beban meningkatkan pemanfaatan sumber daya dan memastikan ketersediaan serta skalabilitas yang tinggi. Anda dapat mengoptimalkan performa dan mencegah hambatan komunikasi jaringan.
Manajemen lalu lintas
Mesh layanan menawarkan fitur manajemen lalu lintas tingkat lanjut, yang memberikan kontrol terperinci atas perutean permintaan dan perilaku lalu lintas. Berikut adalah beberapa contohnya.
Pemisahan lalu lintas
Anda dapat membagi lalu lintas masuk di antara berbagai versi atau konfigurasi layanan yang berbeda. Mesh mengarahkan beberapa lalu lintas ke versi yang diperbarui sehingga memungkinkan peluncuran perubahan yang terkontrol dan bertahap. Hal ini akan memberikan transisi yang mulus dan meminimalkan dampak perubahan.
Mirroring permintaan
Anda dapat menduplikasi lalu lintas ke layanan pengujian atau pemantauan untuk analisis tanpa memengaruhi alur permintaan utama. Saat melakukan mirroring permintaan, Anda akan mendapatkan wawasan tentang cara layanan menangani permintaan tertentu tanpa memengaruhi lalu lintas produksi.
Deployment canary
Anda dapat mengarahkan subset pengguna atau lalu lintas yang berukuran kecil ke versi layanan baru sementara sebagian besar pengguna terus menggunakan versi stabil yang sudah ada. Dengan eksposur terbatas, Anda dapat bereksperimen dengan perilaku dan performa versi baru di lingkungan dunia nyata.
Keamanan
Mesh layanan menyediakan berbagai fitur komunikasi yang aman seperti enkripsi TLS (mTLS) bersama, autentikasi, dan otorisasi. TLS bersama memungkinkan verifikasi identitas dalam komunikasi layanan-ke-layanan. Hal ini membantu memastikan kerahasiaan dan integritas data dengan mengenkripsi lalu lintas. Anda juga dapat menerapkan kebijakan otorisasi untuk mengontrol layanan yang mengakses titik akhir tertentu atau melakukan tindakan tertentu.
Pemantauan
Mesh layanan menawarkan fitur pemantauan dan observabilitas yang komprehensif untuk mendapatkan wawasan tentang kondisi, performa, serta perilaku layanan Anda. Pemantauan juga mendukung pemecahan masalah dan optimisasi performa. Berikut adalah contoh fitur pemantauan yang dapat Anda gunakan:
- Mengumpulkan metrik seperti latensi, tingkat kesalahan, dan pemanfaatan sumber daya untuk menganalisis performa sistem secara keseluruhan
- Melakukan pelacakan terdistribusi untuk melihat jalur lengkap dan waktu permintaan di beberapa layanan
- Menangkap peristiwa layanan dalam log untuk tujuan audit, debug, dan kepatuhan
Bagaimana cara kerja mesh layanan?
Mesh layanan menghapus logika yang mengatur komunikasi layanan-ke-layanan dari layanan individu dan mengabstraksikan komunikasi ke lapisan infrastrukturnya sendiri. Mesh layanan menggunakan beberapa proksi jaringan untuk merutekan dan melacak komunikasi antara berbagai layanan.
Proksi bertindak sebagai gateway perantara antara jaringan organisasi Anda dan layanan mikro. Semua lalu lintas ke dan dari layanan dirutekan melalui server proksi. Proksi individu kadang kala disebut sebagai sidecar karena berjalan secara terpisah, tetapi secara logis berada di sebelah setiap layanan. Secara keseluruhan, proksi membentuk lapisan mesh layanan.
Ada dua komponen utama dalam arsitektur mesh layanan, yaitu bidang kendali dan bidang data.
Bidang data
Bidang data adalah komponen penanganan data dari mesh layanan. Bidang data mencakup semua proksi sidecar beserta fungsinya. Ketika suatu layanan ingin berkomunikasi dengan layanan lain, proksi sidecar akan melakukan tindakan berikut:
- Sidecar menghadang permintaan
- Merangkum permintaan dalam koneksi jaringan yang terpisah
- Menetapkan saluran yang aman dan terenkripsi antara proksi sumber dan proksi tujuan
Proksi sidecar menangani perpesanan tingkat rendah antara berbagai layanan. Proksi sidecar juga menerapkan berbagai fitur, seperti pemutusan sirkuit dan percobaan ulang permintaan, untuk meningkatkan ketahanan dan mencegah degradasi layanan. Fungsionalitas mesh layanan—seperti penyeimbangan beban, penemuan layanan, dan perutean lalu lintas—diimplementasikan di bidang data.
Bidang kendali
Bidang kendali bertindak sebagai manajemen pusat dan lapisan konfigurasi mesh layanan.
Dengan bidang kendali, administrator dapat menentukan dan mengonfigurasi layanan dalam mesh. Misalnya, mereka dapat menentukan parameter seperti titik akhir layanan, aturan perutean, kebijakan penyeimbangan beban, dan pengaturan keamanan. Setelah konfigurasi ditentukan, bidang kendali mendistribusikan informasi yang diperlukan ke bidang data mesh layanan.
Proksi menggunakan informasi konfigurasi untuk memutuskan cara menangani permintaan masuk. Proksi juga dapat menerima perubahan konfigurasi dan menyesuaikan perilaku secara dinamis. Anda dapat membuat perubahan waktu nyata pada konfigurasi mesh layanan tanpa memulai ulang layanan atau gangguan.
Implementasi mesh layanan biasanya mencakup kemampuan berikut di bidang kendali:
- Registri layanan yang melacak semua layanan di dalam mesh
- Penemuan otomatis atas layanan baru dan penghapusan layanan yang tidak aktif
- Pengumpulan dan agregasi data telemetri seperti metrik, log, serta informasi pelacakan terdistribusi
Apa itu Istio?
Istio adalah proyek mesh layanan sumber terbuka yang dirancang untuk bekerja khususnya dengan Kubernetes. Kubernetes adalah platform orkestrasi kontainer sumber terbuka yang digunakan untuk melakukan deployment dan mengelola aplikasi terkontainer dalam skala besar.
Komponen bidang kendali Istio berjalan saat Kubernetes menjalankan beban kerjanya sendiri. Istio menggunakan Pod Kubernetes—satu set kontainer yang digabungkan secara erat yang berbagi satu alamat IP—sebagai dasar untuk desain proksi sidecar.
Proksi lapisan 7 Istio berjalan sebagai kontainer lain dalam konteks jaringan yang sama dengan layanan utama. Dari posisi tersebut, proksi lapisan 7 Istio dapat menahan, memeriksa, dan memanipulasi semua arah lalu lintas jaringan melalui Pod. Namun, kontainer utama tidak memerlukan perubahan atau bahkan tidak perlu mengetahui bahwa ini akan terjadi.
Apa saja tantangan yang mungkin muncul dalam implementasi mesh layanan sumber terbuka?
Berikut adalah beberapa tantangan yang mungkin muncul dalam mesh layanan umum terkait platform sumber terbuka seperti Istio, Linkerd, dan Consul.
Kompleksitas
Mesh layanan memperkenalkan komponen infrastruktur, persyaratan konfigurasi, dan pertimbangan deployment tambahan. Mesh layanan memiliki kurva belajar yang curam, yang mengharuskan para developer dan operator untuk memiliki keahlian dalam menggunakan implementasi mesh layanan tertentu. Dibutuhkan waktu dan sumber daya untuk melatih tim. Organisasi harus memastikan bahwa tim memiliki pengetahuan yang diperlukan untuk memahami seluk-beluk arsitektur mesh layanan dan mengonfigurasinya secara efektif.
Overhead operasional
Mesh layanan memperkenalkan overhead tambahan untuk melakukan deployment, mengelola, dan memantau proksi bidang data serta komponen bidang kendali. Misalnya, Anda harus melakukan hal-hal berikut:
- Memastikan ketersediaan dan skalabilitas yang tinggi dari infrastruktur mesh layanan
- Memantau kondisi dan performa proksi
- Menangani peningkatan dan masalah kompatibilitas
Merancang dan mengonfigurasi mesh layanan secara hati-hati perlu dilakukan guna meminimalkan dampak performa pada keseluruhan sistem.
Tantangan integrasi
Mesh layanan harus terintegrasi secara lancar dengan infrastruktur yang sudah ada untuk menjalankan fungsi yang dibutuhkan. Ini mencakup platform orkestrasi kontainer, solusi jaringan, dan alat lain dalam tumpukan teknologi.
Memastikan kompatibilitas dan kelancaran integrasi dengan komponen lain dalam lingkungan yang kompleks dan beragam bisa menjadi sebuah tantangan tersendiri. Perencanaan dan pengujian secara berkelanjutan diperlukan untuk mengubah API, format konfigurasi, dan dependensi Anda. Hal yang sama juga berlaku jika Anda perlu meningkatkan ke versi baru di dalam tumpukan.
Bagaimana AWS dapat mendukung kebutuhan mesh layanan Anda?
AWS App Mesh adalah mesh layanan yang terkelola penuh dan sangat tersedia dari Amazon Web Service (AWS). App Mesh memudahkan untuk memantau, mengontrol, dan melakukan debug komunikasi antara berbagai layanan.
App Mesh menggunakan Envoy, sebuah proksi mesh layanan sumber terbuka yang dilakukan deployment bersama kontainer layanan mikro Anda. Anda dapat menggunakannya dengan kontainer layanan mikro yang dikelola oleh Amazon Elastic Container Service (Amazon ECS), Amazon Elastic Kubernetes Service (Amazon EKS), AWS Fargate, dan Kubernetes di AWS. Anda juga dapat menggunakannya dengan layanan di Amazon Elastic Compute Cloud (Amazon EC2).
Mulai menggunakan mesh layanan di AWS dengan membuat akun sekarang juga.