Scalability and Profiling

mohamad mahendra
PPL D7 — Fasilkom UI
4 min readMay 2, 2019

Scalability dan profiling, 2 kata yang memiliki banyak makna jika diartikan kedalam bahasa indonesia. Tetapi pada dunia software engineering 2 kata ini memiliki makna yang khusus, mari kita dalami 2 arti kata ini.

Scalabilty? Apa yg mau diukur?

Dalam dunia IT, Scalability atau biasa dieja dengan Scaleability adalah sebuah kemampuan sebuah aplikasi atau produk (Hardware maupun software) untuk tetap bekerja dengan baik saat produk tersebut dirubah dalam ukuran ataupun volumenya agar dapat memenuhi keinginan user. Perubahan ini khususnya rescaling kepada ukuran ataupun volume yang lebih besar. Rescaling ini bisa terhadap produk itu sendiri atau perpindahan kedalam konteks baru (misalnya berpindah os).

Dan harapannya program yang sudah di rescale tidak hanya dapat berjalan dengan baik saja, tetapi program dapat mengambil keuntungan dari scale yang besar ini. Contohnya adalah sebuah aplikasi yang akan melakukan scaling dari Operating System yang kecil ke Operating yang lebih besar perlu mengambil keuntungan dari sisi performanya (user response time dan lain-lain) serta peningkatan jumlah user yang dapat dihandle

Profiling? Profil apa yang mau diliat?

Eits, profiling ini bukan artinya profil seseorang. Dalam dunia software engineering, Profiling (atau program profiling atau software profiling) adalah sebuah analisis suatu program yang melakukan perhitungan space (memory) atau kompleksitas waktu dari sebuah program, penggunaan instruksi khusus, atau frekuensi dan durasi dari sebuah pemanggilan fungsi. Secara umum informasi profiling berguna untuk optimisasi program.

Profiling didapatkan dari menjalankan sebuah tool bernama profiler yang akan menjalankan kode dari program. Profiler menggunakan beberapa teknik seperti event-based, statistical, instrumented dan metode simulasi. Profiler juga menggunakan beberapa teknik untuk mendapatkan data seperti hardware interrupt, code instumentation, os hooks, dan instruction set simulation.

Profiler akan memiliki beberapa tipe output. Yang pertama dapat berupa summary statistical dari sebuah event (a profile), yang kedua dapat berupa sebuah stream of recorded event (trace), yang ketiga merupakan sebuah ongoing interaction with the hypervisor (continuous or periodic monitoring via on-screen display for instance).

Implementasi Scalability

Dalam proyek ppl kami, produk yang dibuat hanyalah merupakan sebuah fitur dalam mobile web sehingga kami tidak dapat melakukan scaling terhadap user response time maupun mengingkatkan jumlah user yang dapat dihandle. Kami hanya melakukan scaling terhadap data yang masuk dan diolah pada service kami.

Pada awalnya data yang diberikan oleh Product owner hanya sejumlah 700.000 data tetapi pada perjalanannya Product owner menambahkan data menjadi 15 juta data atau sekitar 21 KALI LIPAT lebih banyak. Awalnya proses kalkulasi produk kami menjadi sedikit lambat tetapi dengan beberapa penyesuaian proses kalkulasi produk menjadi cepat kembali dan tentunya dengan jumlah data yang lebih banyak kalkulasinya juga menjadi lebih akurat

Selain itu dari segi kode, pada sprint-sprint belakangan ini kami mencoba melakukan beberapa refactor terhadap fungsi yang digunakan sebelumnya agar dapat di reuse pada sprint kedepannya sehingga tidak DRY (Don’t Repeat Yourself) dan tentunya agar kode makin teroptimisasi

Implementasi Profiling

Setelah mencari dan mencoba memilih profiler yang paling cocok untuk melakukan profiling, pilihan kami kembali ke dasar yaitu merupakan profiler bawaan dari Node.js yaitu V8 Profiler.

Runtime server.js

Pertama-tama kita melihat bahwa performance server.js mempunyai waktu 26.046 detik. Kemudian selanjutnya kita akan melihat V8 Profiler bekerja

Profiling server.js

Potongan kode diatas bertujuan untuk melakukan profiling, hasil kode tersebut merupakan sebuah log file yang berisi informasi profiling dari kode yang ingin di profile tersebut

node --prof-process isolate-0x560d382bf350-v8.log

Kemudian kita akan membaca hasil log profiler tersebut dengan command seperti diatas

Log profiling server.js

Screenshot diatas merupakan hasil informasi-informasi mengenai aplikasi server.js yang dijalankan lewat command diatas. Hasil profiling ini terbagi menjadi 6 section, yaitu Shared libraries, JavaScript, C++, Summary, C++ entry points, dan Bottom up(heavy) profile

Kita akan berfokus terhadap bagian Bottom up (heavy) profile. Dapat dilihat bahwa pada bagian tersebut hanya memiliki CPU ticks maksimal sebanyak 39. Sehingga berarti kode tersebut sudah cukup teroptimisasi dan tidak terdapat sebuah fungsi yang berat.

Demikian yang dapat saya sampaikan mengenai Scalability, Profiling beserta implementasinya. Semoga dapat berguna bagi para pembaca sekalian. Sampai jumpa di tulisan-tulisan berikutnya :)

--

--