Apa itu layanan mikro? Arsitektur perangkat lunak Anda berikutnya

Hampir setiap sistem komputer melakukan banyak tugas menggunakan sumber daya bersama, dan salah satu pertanyaan pemrograman komputer adalah seberapa dekat bit kode yang melakukan tugas tersebut harus diikat satu sama lain. Jawaban yang semakin populer adalah konsep layanan mikro - sebagian kecil fungsionalitas terpisah yang berinteraksi dengan layanan mikro lain untuk membuat sistem yang lebih besar.

Meskipun gagasan dasar untuk memiliki komponen terpisah tersebut bukanlah hal baru, cara layanan mikro diimplementasikan menjadikannya landasan alami untuk kedua aplikasi berbasis cloud modern. Layanan mikro juga sesuai dengan filosofi pengembang, yang mendorong peluncuran fungsi baru dengan cepat dan berkelanjutan.

Apa itu layanan mikro?

"Mikro" di layanan mikro menyiratkan bahwa ini adalah aplikasi kecil. Terkadang hal itu benar, tetapi cara yang lebih baik untuk memikirkannya adalah bahwa mereka harus sebesar yang diperlukan untuk melakukan satu hal tertentu atau memecahkan masalah tertentu. Masalah itu harus konseptual, bukan teknis. Seperti yang dikatakan Microsoft, "Layanan mikro harus dirancang berdasarkan kemampuan bisnis, bukan lapisan horizontal seperti akses data atau pengiriman pesan." Mereka berkomunikasi dengan layanan mikro lain dan pengguna luar melalui API yang relatif stabil untuk membuat aplikasi yang lebih besar.

Dengan demikian, fungsionalitas internal dari masing-masing layanan mikro dapat diubah atau ditingkatkan secara radikal tanpa mempengaruhi bagian sistem lainnya. Hal ini pada gilirannya terkait dengan bagaimana toko pengembang berusaha untuk beroperasi: Jika fungsi spesifik dari aplikasi yang lebih besar disegmentasi menjadi potongan kode yang terpisah dan beroperasi secara independen, lebih mudah untuk menjalankan mantra devops dari CI / CD (integrasi berkelanjutan dan pengiriman berkelanjutan) . Selain itu, API yang terdefinisi dengan baik membuat layanan mikro mudah untuk diuji secara otomatis.

Arsitektur layanan mikro vs. arsitektur monolitik

Anda akan sering mendengar layanan mikro dibicarakan dalam istilah "arsitektur layanan mikro ". Frasa ini tidak hanya mencakup layanan mikro itu sendiri, tetapi juga komponen untuk manajemen dan penemuan layanan, serta gateway API yang menangani komunikasi antara layanan mikro dan dunia luar.

Sebuah "aplikasi monolitik" adalah kebalikan dari layanan mikro. Ini adalah retronim untuk aplikasi di mana semua kode berada dalam satu file eksekusi biner besar. Seperti yang dijelaskan TechTarget, aplikasi monolitik lebih sulit untuk diskalakan dan lebih sulit untuk ditingkatkan. Tetapi karena itu dibangun sebagai satu aplikasi kohesif, itu tidak memerlukan banyak manajemen seperti arsitektur layanan mikro.

Konsep terikat: Bagaimana mendefinisikan layanan mikro

Mari kita mundur sejenak ke perintah sebelumnya bahwa layanan mikro harus melakukan satu hal spesifik. Itu mudah untuk dikatakan, tetapi dalam praktiknya, fungsionalitas sering kali saling terkait, dan pembagian gambar lebih sulit daripada yang terlihat. Analisis domain dan desain yang digerakkan oleh domain adalah pendekatan teoretis yang akan membantu Anda memisahkan tugas gambaran besar Anda menjadi masalah-masalah individual yang dapat diselesaikan oleh layanan mikro. Dalam proses ini, yang diuraikan dalam rangkaian posting blog yang mencerahkan dari Microsoft, Anda membuat model abstrak domain bisnis Anda, dan dalam prosesnya menemukan konteks terbatas , yang mengelompokkan fungsionalitas yang berinteraksi dengan dunia dalam cara tertentu.

Misalnya, Anda mungkin memiliki satu konteks terbatas untuk pengiriman dan satu lagi untuk akun. Objek fisik dunia nyata tentu saja memiliki harga dan tempat yang dituju, tetapi konteks yang dibatasi mewakili cara tertentu yang digunakan aplikasi Anda untuk memikirkan dan berinteraksi dengan objek tersebut. Setiap layanan mikro harus ada seluruhnya dalam satu konteks terbatas, meskipun beberapa konteks terbatas mungkin mencakup lebih dari satu layanan mikro.

Layanan mikro vs. arsitektur berorientasi layanan vs. layanan Web

Pada titik ini, jika Anda seorang profesional TI yang telah lama berkecimpung di industri ini, Anda mungkin berpikir banyak dari ini terdengar asing. Ide program individu kecil yang bekerja bersama mungkin mengingatkan Anda pada SOA (arsitektur berorientasi layanan) dan layanan Web , dua kata kunci dari Web 2.0 hari 2000-an. Meskipun di satu sisi memang tidak ada yang baru di bawah matahari, ada perbedaan penting antara konsep dan layanan mikro ini. Datamation memiliki rincian perbedaan yang bagus, tapi berikut versi singkatnya:

  • Dalam arsitektur berorientasi layanan, komponen individu secara relatif digabungkan erat, seringkali berbagi aset seperti penyimpanan, dan mereka berkomunikasi melalui perangkat lunak khusus yang disebut bus penyimpanan perusahaan . Layanan mikro lebih independen, berbagi lebih sedikit sumber daya, dan berkomunikasi melalui protokol yang lebih ringan. Perlu dicatat bahwa layanan mikro muncul dari lingkungan SOA, dan terkadang dianggap semacam SOA, atau penerus konsep tersebut.
  • Layanan Web adalah sekumpulan fungsionalitas yang dapat diakses oleh aplikasi lain melalui Web; mungkin contoh yang paling umum adalah Google Maps, yang dapat disematkan situs web restoran untuk memberikan petunjuk arah bagi pelanggan. Ini adalah koneksi yang jauh lebih longgar daripada yang Anda lihat di arsitektur layanan mikro.

Komunikasi layanan mikro

Sebuah slogan yang sering Anda dengar tentang arsitektur layanan mikro adalah bahwa mereka harus menampilkan "titik akhir cerdas dan pipa bodoh". Dengan kata lain, layanan mikro harus bertujuan untuk menggunakan metode komunikasi dasar dan mapan daripada integrasi yang rumit dan ketat. Sebagaimana dicatat, ini adalah hal lain yang membedakan layanan mikro dari SOA.

Secara umum, komunikasi antar layanan mikro harus asinkron , dalam artian rangkaian kode tidak diblokir menunggu tanggapan. (Masih boleh menggunakan protokol komunikasi sinkron seperti HTTP, meskipun protokol asinkron seperti AMQP (Advanced Message Queuing Protocol) juga umum dalam arsitektur layanan mikro.) Jenis kopling longgar ini membuat arsitektur layanan mikro lebih fleksibel dalam menghadapi kegagalan komponen individu atau bagian jaringan, yang merupakan manfaat utama.

Layanan Mikro, Java, dan Spring Boot dan Spring Cloud

Beberapa pekerjaan pertama di layanan mikro muncul di komunitas Java; Martin Fowler adalah pendukung awal. Konferensi Java 2012 di Polandia menampilkan salah satu presentasi awal terpenting tentang subjek, berjudul "Layanan Mikro - Java, Cara Unix." Ia merekomendasikan penerapan prinsip-prinsip yang memandu pengembangan aplikasi Unix pertama di tahun 1970-an ("Tulis program yang melakukan satu hal dan melakukannya dengan baik. Tulis program untuk bekerja sama ”) ke pengembangan Java.

Sebagai hasil dari riwayat ini, ada banyak kerangka kerja Java yang memungkinkan Anda membangun layanan mikro. Salah satu yang paling populer adalah Spring Boot, yang dirancang khusus untuk layanan mikro; Booting diperpanjang oleh Spring Cloud, yang seperti namanya, memungkinkan Anda menerapkan layanan tersebut ke cloud juga. Pivotal Software, pengembang Spring, memiliki tutorial bagus untuk memulai pengembangan layanan mikro menggunakan kerangka kerja ini.

Layanan mikro dan container: Docker, Kubernetes, dan lainnya

Teknologi dasar yang telah melangkah paling jauh untuk memasukkan layanan mikro ke arus utama adalah kontainer .  Penampung mirip dengan instance VM, tetapi alih-alih menyertakan seluruh OS mandiri, penampung hanyalah ruang pengguna terisolasi yang menggunakan kernel sistem operasi host tetapi sebaliknya membuat kode yang dijalankan di dalamnya berdiri sendiri. Penampung jauh lebih kecil daripada instance VM dan mudah diterapkan dengan cepat, baik secara lokal atau di cloud, dan dapat diputar ke atas atau ke bawah untuk menyesuaikan permintaan dan sumber daya yang tersedia.

Daya tarik penampung untuk layanan mikro harus jelas: Setiap layanan mikro dapat berjalan di penampungnya sendiri, yang memotong overhead pengelolaan layanan secara signifikan. Sebagian besar implementasi container memiliki alat orkestrasi pelengkap yang mengotomatiskan penerapan, pengelolaan, penskalaan, jaringan, dan ketersediaan aplikasi berbasis container. Kombinasi kecil, layanan mikro yang mudah dibuat dan wadah yang mudah diterapkan itulah yang memungkinkan filosofi pengembang. Ada beberapa implementasi dari konsep container, tetapi yang paling populer adalah Docker, yang umumnya dipasangkan dengan Kubernetes sebagai platform orkestrasi.

Spring, meski populer, terkait dengan platform Java. Sebaliknya, sistem berbasis kontainer bersifat poliglot: Bahasa pemrograman apa pun yang didukung OS dapat berjalan dalam wadah, yang memberikan lebih banyak fleksibilitas kepada pemrogram. Memang, keuntungan besar dari layanan mikro adalah bahwa setiap layanan dapat ditulis dalam bahasa apa pun yang paling masuk akal atau yang paling nyaman bagi pengembang. Memang, layanan dapat sepenuhnya dibuat ulang dalam bahasa baru tanpa memengaruhi sistem secara keseluruhan, selama API-nya tetap stabil. DZone memiliki artikel yang membahas pro dan kontra Spring Cloud vs. Kubernetes untuk layanan mikro. 

Pola desain layanan mikro

Tidak peduli bahasa apa yang Anda gunakan untuk mengembangkan layanan mikro, Anda akan menghadapi masalah yang pernah dihadapi oleh pengembang lain sebelumnya. Pola desain diformalkan, solusi abstrak untuk masalah yang berulang dalam ilmu komputer, dan beberapa di antaranya khusus untuk layanan mikro. Devopedia memiliki daftar yang bagus, yang meliputi:

  • Registri Layanan: untuk menghubungkan klien ke contoh layanan mikro yang tersedia
  • Circuit Breaker: untuk mencegah layanan yang gagal dipanggil berulang kali
  • Fallback: untuk memberikan alternatif ke layanan yang gagal
  • Sidecar: untuk menyediakan layanan tambahan ke penampung utama, seperti untuk logging, layanan sinkronisasi, atau pemantauan
  • Adaptor: untuk menstandarisasi atau menormalkan antarmuka antara wadah utama dan dunia luar
  • Duta: untuk menghubungkan penampung utama ke dunia luar, seperti untuk membuat proxy koneksi localhost ke koneksi luar

Layanan mikro dan cloud : AWS dan Azure

Seperti disebutkan di atas, salah satu keuntungan menggunakan container adalah container dapat dengan mudah diterapkan ke cloud, di mana sumber daya komputasi yang fleksibel tersedia sehingga Anda dapat memaksimalkan efisiensi aplikasi Anda. Seperti yang dapat Anda bayangkan, vendor cloud publik besar semuanya ingin Anda menggunakan platform mereka untuk menjalankan aplikasi berbasis layanan mikro Anda. Untuk informasi lebih lanjut, lihat sumber daya dari Amazon, Microsoft, dan Google.