Part 1: Membangun Microservice Sederhana Menggunakan GO - GO Micro

Part 1: Membangun Microservice Sederhana Menggunakan GO - GO Micro

Thu, Jun 20, 2019 12:47 PM
Engineering by Silvester Yacoubus take

Ada baiknya sebelum memulai ngoding (mohon bersabar ya..) kita mengenal dahulu apa yang akan kita bikin.

Pada bagian pertama ini saya akan membagikan beberapa topik yaitu pengenalan microservice, GO, Go Micro, dan Protobuf.

Microservice termasuk dalam salah satu arsitektur perangkat lunak (software architecture).

Apa itu arsitektur perangkat lunak (software architecture)?

Arsitektur perangkat lunak mengacu pada struktur dasar dan disiplin dalam menciptakan struktur dan sistem tersebut. Setiap struktur terdiri dari elemen perangkat lunak, hubungan di antara mereka, properti di antara keduanya dan hubungannya. Arsitektur perangkat lunak berfungsi sebagai cetak biru dari perangkat lunak yang dikembangkan dan menjabarkan tugas-tugas yang perlu dikerjakan oleh tim. Penjelasan singkatnya segitu dulu ya min, hehe.. untuk lebih lengkapnya akan bahas di artikel tersendiri.

Nah, untuk saat ini ada banyak pola dan gaya arsitektur perangkat lunak yang diakui tapi kita gak bahas satu per satu ya karena akan memakan banyak waktu. Kita akan membahas pola yang umum dan banyak digunakan di kalangan software developer, di antaranya:

Layered (n-tier) architecture Event-driven architecture Monolithic architecture Microservices architecture Space-based architecture dan masih banyak lagi.

Penggunaan masing-masing style ini menyesuaikan dengan kebutuhan pengembangan.

Untuk artikel ini mimin akan khusus membahas arsitektur microservice dan implementasinya menggunakan GO.

Untuk mempermudah teman-teman mengerti apa itu microservice mimin akan membuat perbandingannya dengan arsitektur Monolithic. Mengapa sih min membandingkan keduanya? Karena menurut mimin keduanya yang umum digunakan dan mudah dipahami.

Monolithic vs Microservice?

Pola Monolithic arsitektur termasuk pola yang umum digunakan.

Contohnya sebagai berikut:

Sebuah online store yang mempunyai banyak fitur:

  1. Product catalog
  2. Shopping cart
  3. My order
  4. Product Search
  5. Special promo

MONOLITHIC

Pada gaya Monolithic fitur-fitur ini dibangun dalam single apps dan single database.

enter image description here a pict by mike jones

Lalu apa kekurangan dan kelebihan pada monolithic?

Kelebihannya:

  1. Mudah dibangun.
  2. Mudah diuji.
  3. Mudah di-deploy di server dan cloud.

Kekurangannya:

  1. Ketika aplikasi menjadi besar (banyak yang akses) performa akan menurun.
  2. Ketika akan merubah teknologi pada aplikasi maka akan merubah secara keseluruhan aplikasi.
  3. Jika terjadi error pada salah satu fungsi maka akan mempengaruhi keseluruhan aplikasi.

MICROSERVICE

Lalu bagaimana dengan microservice?

Pada microservice setiap fitur dibangun terpisah dan independen dari semua fitur lainnya. Untuk komunikasi antar service menggunakan HTTP rest atau message bus. Terlihat jauh lebih kompleks dan lebih banyak usaha dalam pengembangannya bukan? Lalu mengapa memilih microservice?

enter image description here a pict by mike jones

Memecah kompleksitas fitur menjadi layanan-layanan berukuran kecil (microservices) memungkinkan pengembang untuk membagi kode manjadi bagian-bagian kecil. Pada monolith setiap fitur berkaitan erat dan saling mempengaruhi. Membuatnya menjadi lebih resiko, proses update yang lebih rumit, berpotensi memunculkan banyak bugs dan integrasi yang lebih susah.

Dengan microservice, fitur yang telah dipisah memungkinkan untuk mengembangkan fitur secara individu dan tidak terkait dengan seluruh codebase. Yang berarti lebih efisien apabila horizontal-scaling ()

Why Golang?

Golang (atau biasa disebut dengan Go) adalah bahasa pemrograman baru yang dikembangkan di Google oleh Robert Griesemer, Rob Pike, dan Ken Thompson pada tahun 2007 dan mulai diperkenalkan di publik tahun 2009.

Penciptaan bahasa Golang didasari bahasa C dan C++, oleh karena itu gaya syntax-nya mirip.

Golang memiliki kelebihan dibanding bahasa lainnya, beberapa di antaranya:

  • Mendukung konkurensi di level bahasa dengan pengaplikasian cukup mudah.
  • Mendukung pemrosesan data dengan banyak prosesor dalam waktu yang bersamaan (pararel processing).
  • Memiliki garbage collector.
  • Proses kompilasi sangat cepat.
  • Bukan bahasa pemrograman yang hirarkial, menjadikan developer tidak perlu ribet memikirkan segmen OOP-nya.
  • Package/modul yang disediakan terbilang lengkap. Karena bahasa ini open source, banyak sekali developer yang juga mengembangkan modul-modul lain yang bisa dimanfaatkan.

Untuk lebih lengkapnya teman-teman bisa baca dari link di bawah ini:

A.1. Berkenalan Dengan Golang - Dasar Pemrograman Golang

Microservice telah di-support oleh hampir seluruh bahasa pemrograman. Microservice lebih menekankan pada konsep daripada framework atau tool yang spesifik. Dikatakan bahwa beberapa bahasa memiliki dukungan microservice yang lebih baik dari bahasa lainnya. Salah satu bahasa yang memiliki dukungan yang bagus adalah Golang.

enter image description here a pict by rubygarage.org

Apa itu Go Micro?

Go Micro adalah sebuah framework yang mendukung pengembangan microservice. Go micro telah mengabstraksi detail-detail kebutuhan untuk membangun sistem terdistribusi.

Berikut adalah fitur utamanya:

  1. Service discovery
  2. Load balancing
  3. Message encoding
  4. Request/Response
  5. Async messaging
  6. Plugable interface

More about Go Micro: https://micro.mu/docs/go-micro.html

Mengapa menggunakan framework?

Mungkin teman ada yang bertanya demikian.

Berikut ada beberapa alasan mengapa developer menggunakan framework:

  1. Menghemat waktu pembangunan. Dengan memanfaatkan library yang telah disediakan developer cukup berfokus ke proses bisnis yang dikerjakan.
  2. Reuse of code. Menggunakan framework maka project kita mempunyai struktur yang baku sehingga kita dapat menggunakannya kembali pada proyek-proyek selanjutnya.

Yang perlu diingat adalah, framework bukanlah tools untuk memecahkan sebuah masalah, tetapi hanya sebagai ALAT BANTU. Framework hanya menjadi sebuah konstruksi dasar yang menopang sebuah konsep atau sistem yang bersifat “essential support” (penting tapi bukan komponen utama).

PENGENALAN PROTOBUF

Karena layanan microservice dibagi menjadi baris kode yang terpisah salah satu hal yang perlu diperhatikan adalah komunikasi antar service. Dalam pola monolith, komunikasi bukan masalah karena code dipanggil langsung dari tempat kode berasal. Microservice tidak memiliki kemampuan tersebut karena masing-masing service di tempat terpisah.

Kita dapat saja menggunakan REST seperti JSON atau XML melalui http. Namun masalah dengan pendekatan ini adalah service A harus menyediakan datanya ke JSON/XML. Mengirim string ke service B yang kemudian harus men-decode pesan ini dari JSON. Ini dapat berpotensi sebagai masalah di kemudian hari.

Protokol buffer, biasanya disebut Protobuf, adalah protokol yang dikembangkan oleh Google untuk memungkinkan serialisasi dan deserialisasi data terstruktur. Google mengembangkannya dengan tujuan untuk menyediakan cara yang lebih baik, dibandingkan dengan XML, untuk membuat sistem berkomunikasi. Jadi mereka fokus untuk membuatnya lebih sederhana, lebih kecil, lebih cepat, dan lebih mudah dikelola daripada XML.

 1  syntax = "proto3";
 2  package tutorial;
 3
 4  import "google/protobuf/timestamp.proto";
 5
 6  message Person {
 7    string name = 1;
 8    int32 id = 2;  // Unique ID number for this person.
 9    string email = 3;
10
11    enum PhoneType {
12      MOBILE = 0;
13      HOME = 1;
14      WORK = 2;
15    }
16
17    message PhoneNumber {
18      string number = 1;
19      PhoneType type = 2;
20    }
21
22    repeated PhoneNumber phones = 4;
23
24    google.protobuf.Timestamp last_updated = 5;
25  }
26
27  // Our address book file is just one of these.
28  message AddressBook {
29    repeated Person people = 1;

sample.proto hosted with ❤ by GitHub - view raw

Selanjutnya bagaimana men-define proto yang kita perlukan?

Bahasa yang digunakan dalam proto cukup mudah untuk dipahami.

statement

 syntax = “proto3”;

artinya versi proto yang digunakan adalah proto3.

package tutorial;

digunakan untuk set nama file yang nantinya akan di-generate.

Selanjutnya kita menambahkan message untuk setiap struktur data yang ingin kita serialize, kemudian tentukan nama dan tipe data masing-masing field dalam message.

Kita juga dapat manambahkan struktur data lain ke dalam message dengan menggunakan tipe data dari message lain sebagai tipe field seperti di bawah ini.

message PhoneNumber {
    string number = 1;
    PhoneType type = 2;
  }

Untuk petunjuk lengkap bagaimana menulis proto bisa lihat di sini.

Language Guide (proto3) | Protocol Buffers | Google Developers

Pada BAGIAN 2 kita akan memulai membuat sebuah microservice yang sederhana.

Semoga membantu…!