Saya terus melihat dalam posting pekerjaan bahwa pelamar harus memiliki pengalaman menulis aplikasi "scalable". Apa yang membuat aplikasi dapat diskalakan, dan bagaimana saya tahu bahwa kode saya dapat menskala ke jutaan pengguna?
Saya kira cara yang lebih baik untuk mengungkapkan pertanyaan ini adalah: Bagaimana saya bisa menulis kode saya dengan skalabilitas dalam pikiran? Sehingga kodenya bisa diskalakan dari get-go sebagai kebalikan dari renungan. Apakah ada metodologi desain tertentu? Atau itu hanya masalah memilih algoritma yang tepat untuk pekerjaan itu?
sumber
Skalabilitas diukur dalam hal throughput berdasarkan pada beberapa variabel. Misalnya, jumlah permintaan / detik dengan pengguna X. Cara paling sederhana untuk menggambarkan skalabilitas adalah:
Hal pertama yang perlu Anda pahami dalam mendesain skalabilitas adalah pengukuran apa yang paling penting untuk aplikasi Anda? Ada beberapa cara untuk mengukur efisiensi yang merupakan komponen utama skalabilitas:
Ada lebih banyak pengukuran efisiensi yang dapat digunakan, tetapi ini umum untuk sistem berbasis web atau sistem pemrosesan batch.
Aspek skalabilitas berikutnya adalah mengukur apa yang terjadi pada efisiensi Anda saat beban meningkat. Cara umum untuk menambah beban adalah:
Tujuan untuk aplikasi yang dapat diskalakan adalah untuk mempertahankan atau meningkatkan efisiensi karena kami menangani masalah beban. Singkatnya, jika waktu respons terlalu lama, dapatkah kita menambahkan server lain untuk mendistribusikan beban secara merata? Pendekatan ini mengurangi jumlah pekerjaan yang harus dilakukan oleh satu server, dan membuat server beroperasi di "sweet spot" untuk efisiensi.
Aplikasi Anda harus dirancang khusus untuk mengukur. Itu berarti Anda harus berhati-hati dengan data sesi, merutekan permintaan ke server yang tepat, mengurangi kemacetan yang membatasi kemampuan aplikasi untuk berkembang.
sumber
Anda pada dasarnya ingin menghindari hambatan kinerja ketika Anda meningkatkan jumlah pengguna, dan / atau memproses kumpulan data yang lebih besar, dan / atau menawarkan antarmuka Anda dalam lebih banyak bahasa, dll.
Anda pada dasarnya melihat skema database Anda, algoritma Anda, dan proses pengembangan perangkat lunak Anda dan mencoba untuk memprediksi masalah di masa depan. Anda juga ingin mengatur pemantauan kinerja untuk mengidentifikasi masalah ketika mereka mulai membangun.
Saya mengambil kiat-kiat ini ketika saya membaca Membangun Situs Web yang Scalable (tautan ke amazon).
Semoga ini membantu!
sumber
Satu-satunya cara agar aplikasi dapat benar-benar terukur, adalah dengan tidak memiliki batasan yang tidak dapat disahkan (atau hanya sangat mahal).
Contoh tipikal adalah apa yang terjadi ketika Anda kehabisan siklus CPU yang tersedia? Jika program Anda multi-tapak, Anda dapat berjalan di kotak dengan banyak inti tetapi apa yang terjadi ketika Anda tidak bisa membeli kotak yang lebih besar lagi? Aplikasi Anda tidak bisa tumbuh lagi, dan karenanya tidak dapat diskalakan.
Aplikasi apa pun yang benar-benar dapat diskalakan harus dapat tersebar di beberapa komputer secara transparan dan melakukannya tanpa ada benjolan yang terlihat. Ini tidak mudah, dan itulah salah satu alasan mengapa Google begitu sukses.
sumber
Ada masalah unik yang datang dengan mendukung aplikasi berskala besar. Posting pekerjaan mencari pelamar yang telah bekerja di lingkungan itu dan harus menyelesaikan masalah seperti itu.
Dari aplikasi tingkat tinggi dibuat scalable dengan terus-menerus mengajukan pertanyaan apa yang akan terjadi jika potongan kode ini diminta untuk dijalankan ribuan kali dalam periode yang sangat kecil. Ini berarti mengelola jejak kaki memori Anda, memanfaatkan caching total dan data, menggunakan sumber data yang dapat diskalakan sendiri, dll.
sumber
Jika Anda sedang membangun fitur pencarian yang berkinerja baik ketika memiliki 100 baris dalam DB untuk mencari dan 10 pengguna menggunakannya sekaligus. Seberapa baik kinerjanya saat 100 pengguna menggunakannya secara bersamaan dan ada 100 ribu baris yang harus dicari.
Jika ia melakukan hal yang sama tidak peduli apa maka sangat bagus. jika kinerjanya proporsional dengan jumlah pengguna / data (artinya 10x lebih banyak data == 10x lebih lama untuk diproses) itu bagus. Jika kinerjanya jauh lebih rendah, semakin banyak data yang dimilikinya (data mode 10x == 10x ^ 10 lebih lama untuk diproses) maka itu tidak skala dengan baik.
Contoh-contoh saya harus benar-benar ditampilkan dalam notasi O Besar tetapi saat ini saya tidak cukup tahu untuk menuliskan contoh-contoh dalam O Besar.
Anda dapat mensimulasikan lebih banyak data dengan membuang data dummy ke dalam DB Anda, dan ada alat untuk mensimulasikan lebih banyak pengguna seperti Apache AB.
sumber