A Grain of Salt

Memahami scale cube sebagai salah satu pendekatan scaling pada sebuah aplikasi

A solved Rubik's cube with yellow, blue, and red faces visible, representing the concept of a three-dimensional cube Photo by Kenny Eliason / Unsplash

Jika kita beruntung, sebuah aplikasi yang kita kembangkan akan bekerja dengan baik, dan dipakai oleh banyak sekali pengguna. Saat ini terjadi, kita akan mempunyai sebuah happy problem — melakukan scale pada aplikasi tersebut untuk mengakomodasi jumlah pengguna yang semakin meningkat.

Pada tulisan kali ini, kita akan membahas tentang scale cube sebagai salah satu pendekatan untuk memutuskan bagaimana kita akan melakukan scaling.

Disarikan dan diterjemahkan dari The Art of Scalability (Abbot, et al.), scale cube adalah sebuah konsep untuk membantu kita memutuskan tentang bagaimana melakukan pemisahan layanan, data dan transaksi, sehingga kita dapat melakukan scale pada aplikasi. Chris Richardson, melalui Microservice Patterns mengilustrasikan scale cube sebagai berikut.

Scale cube diagram showing three axes of scaling: X-axis (horizontal duplication/cloning), Y-axis (functional decomposition into microservices), and Z-axis (data partitioning by customer ID)

Sebuah kubus di atas terdiri dari 3 sumbu — X, Y dan Z — yang masing-masing mewakili pendekatan scaling yang akan kita lakukan.

Scaling pada Sumbu X — Melakukan Load Balance pada Request

Pendekatan ini adalah cara yang paling mudah untuk melakukan scaling pada aplikasi. Kita hanya perlu meletakkan server aplikasi di belakang load balancer, dan load balancer yang akan membagi traffic ke semua instances yang ada. Pendekatan ini biasanya dilakukan untuk melakukan scaling pada aplikasi monolith.

X-axis scaling diagram showing a client sending requests to a load balancer which distributes traffic across multiple identical application instances

Scaling pada Sumbu Y — Melakukan Dekomposisi Monolith menjadi Microservices

Pada pendekatan ini, setiap fungsionalitas (domain bisnis) pada aplikasi akan berdiri secara independen (terjadi dekomposisi aplikasi menjadi service yang lebih kecil).

Pendekatan ini tidak hanya menyelesaikan masalah capacity dan availability sebuah aplikasi, tetapi juga melakukan scaling sebuah tim (organisasi). Setelah kita melakukan scaling dengan pendekatan sumbu Y, kita masih bisa melakukan scaling lebih lanjut dengan melakukan pendekatan scaling sumbu X dan Z seperti pada ilustrasi berikut.

Y-axis scaling diagram showing an application decomposed into separate services (Order, Customer, Review), with each service further scaled using X-axis load balancing

Scaling pada Sumbu Z — Membagi Traffic Berdasarkan Request Attributes

Pendekatan ini dilakukan dengan cara meletakkan router (misalnya, proxy server) untuk mengidentifikasi atribut pada setiap request yang datang. Atribut yang digunakan misalnya segmen pengguna, lokasi pengguna, dsb.

Router akan membagi traffic ke setiap server berdasarkan atribut yang telah ditentukan. Setiap server hanya bertanggung jawab untuk sebagian traffic yang mengandung atribut miliknya.

Pada ilustrasi di bawah, atribut yang diidentifikasi adalah userId. Server 1 hanya bertanggung jawab untuk user A hingga H, server 2 hanya bertanggung jawab untuk user I hingga P, dan server 3 bertanggung jawab untuk user R hingga Z.

Z-axis scaling diagram showing a router using userId to partition requests across multiple identical application instances, each responsible for a subset of users

#architecture #id #swe