- Wave adalah perusahaan bernilai $1.7B (2,3 triliun won) dengan 70 engineer (menyediakan layanan mobile banking untuk Afrika)
- Menggunakan arsitektur aplikasi CRUD standar berupa monolit Python berbasis Postgres
- Dengan memulai dari arsitektur sederhana dan memecahkan masalah sambil meminimalkan kompleksitas, engineer dapat fokus pada pekerjaan yang memberi nilai bagi pengguna
- Stackoverflow berhasil tumbuh dengan sukses hingga diakuisisi senilai 1,8 miliar dolar dengan menskalakan satu monolit
Meski arsitektur sederhana efisien, sebagian besar media lebih menyukai arsitektur yang kompleks
- Di konferensi teknologi ada banyak presentasi tentang arsitektur kompleks berbasis microservices, tetapi tidak ada presentasi tentang monolit sederhana
- Banyak perusahaan meniru teknologi kompleks meskipun aplikasinya masih kecil, lalu menjadi populer di konferensi dan HN karenanya
- Arsitektur yang kami gunakan begitu sederhana sehingga bahkan tidak perlu membuat diagram arsitektur
Cara mempertahankan kesederhanaan
- Wave menggunakan Python sinkron, yang berarti proses server akan terblokir saat menunggu I/O
- Mereka sempat mencoba framework asinkron seperti Eventlet, tetapi bug-nya terlalu banyak sehingga biayanya dinilai tidak sepadan dengan penderitaan operasional yang ditimbulkan
- Alih-alih menambah kompleksitas, tugas yang membutuhkan waktu eksekusi panjang dipisahkan ke antrean untuk diproses
- Untuk mematuhi regulasi residensi data, di beberapa negara mereka harus mengoperasikan data center on-premises
- Senegal/Pantai Gading menggunakan cloud, tetapi Uganda dan negara lain memerlukan on-premises karena regulasi
- Dalam situasi seperti ini, arsitektur sederhana jauh lebih mudah daripada arsitektur kompleks
Membangun alih-alih membeli
- Karena timnya kecil, pada awalnya mereka lebih memilih membeli software, tetapi ketika bug penting tidak dapat diperbaiki, mereka mengembangkan tool sendiri
- Membangun tool sendiri adalah kompleksitas yang sebenarnya tidak ingin mereka tanggung, tetapi di beberapa kategori produk, bahkan setelah riset yang cukup luas, mereka tidak dapat menemukan vendor yang mampu menyediakan produk yang cocok untuk mereka
- Di luar kompetensi inti pun, kadang perlu mengembangkan tool sendiri dan mempertahankan keahlian internal
Pilihan yang sedang dipertimbangkan ulang
- Mereka sedang meninjau ulang pilihan teknologi seperti RabbitMQ, Celery, SQLAlchemy, dan Python, karena teknologi-teknologi ini menambah kompleksitas atau meningkatkan beban pemeliharaan
- Jika memulai codebase baru, mereka akan mempertimbangkan pilihan teknologi ini dengan hati-hati
Pilihan yang memuaskan
- Mereka puas dengan pilihan seperti GraphQL, protokol transport kustom, dan Kubernetes
- GraphQL memiliki keunggulan seperti dokumentasi mandiri, code generation, dan penjelajah interaktif GraphiQL.
- Mereka menilai kelebihan GraphQL lebih besar daripada kekurangannya
- Kelebihan
- Dokumentasi mandiri untuk tipe hasil yang akurat
- Klien menjadi lebih aman berkat code generation untuk tipe hasil yang akurat
- Produktivitas meningkat dengan penjelajah interaktif GraphiQL
- Berbagai aplikasi (aplikasi pengguna, aplikasi dukungan, aplikasi agen Wave, dll.) sebagian besar dapat berbagi satu API sehingga kompleksitas berkurang
- Dengan bahasa kueri yang dapat dikonfigurasi, klien bisa mengambil data yang dibutuhkan secara tepat dalam satu packet round-trip tanpa perlu membangun banyak endpoint untuk tujuan khusus
- Menghilangkan bikeshedding tentang apa yang dianggap sebagai RESTful API (membahas hal yang kurang penting secara mendalam dan menghabiskan waktu sambil menunda agenda yang lebih penting)
- Kekurangan
- Library GraphQL tidak terlalu bagus pada saat mereka mengadopsi GraphQL
- Encoding GQL bawaan bersifat redundan, dan karena banyak pelanggan menggunakan bandwidth rendah, mereka sangat memperhatikan batas ukuran
- Kubernetes digunakan untuk memenuhi kebutuhan operasional data center per negara
Kesimpulan
- Dengan menjaga arsitektur aplikasi sesederhana mungkin, mereka bisa mengalokasikan anggaran kompleksitas (dan tenaga kerja) ke area yang kompleksitasnya benar-benar membantu bisnis
- Dengan gagasan untuk melakukan segala sesuatu sesederhana mungkin kecuali ada alasan kuat untuk menambah kompleksitas, mereka dapat membangun bisnis yang cukup besar dengan jumlah engineer yang tidak banyak, meskipun menjalankan bisnis keuangan Afrika yang umumnya dianggap sebagai bisnis yang sulit
9 komentar
Sepertinya yang tepat adalah "bangun alih-alih beli", bukan "beli alih-alih bangun".
> Another area is with software we’ve had to build (instead of buy).
Ah, saat mau menekankan sesuatu judulnya malah jadi aneh. Sudah saya perbaiki. Terima kasih.
Apakah tren berubah mengikuti siklus ekonomi? Terlepas dari tren, memulai dengan monolit lebih menguntungkan untuk mengurangi biaya tetap dan mempermudah pemeliharaan.
Arsitektur yang mudah dipahami juga lebih mudah dirawat.
Menurut saya, untuk layanan apa pun, sebaiknya mulai dengan monolitik. Kalau sejak awal langsung menetapkan MSA, itu cuma buang-buang uang.
"Ketika kompleksitas meningkat, biaya (uang, orang, waktu...) juga meningkat"
"Jangan mencoba menyelesaikan masalah yang bisa diatasi dengan arsitektur sederhana menggunakan arsitektur yang rumit."
Opini Hacker News
Saran engineer tentang microservices
Ceramah tentang microservices
Bias kognitif dan kesederhanaan
Overengineering dan kurangnya pengalaman
Perusahaan yang menghargai keseimbangan kerja dan hidup
Pengalaman pribadi tentang Dan Luu
Pentingnya arsitektur yang sederhana
Arsitektur dan struktur sosial tim engineering
Preferensi terhadap arsitektur sederhana
Bolehkah saya meminta tautan ke presentasi yang membahas tips David Schmitz tentang kegagalan microservices.
https://www.youtube.com/watch?v=r8mtXJh3hzM adalah