BAB 9 MEMELIHARA DAN MENINGKATKAN PERANGKAT LUNAK ANDA
9.5 Penskalaan
Di EdEra, seperti yang telah kami tunjukkan, kami menjalankan platform kursus online. Sejak awal, telah menggunakan satu instans EC2 di AWS.
AWS EC2 adalah Layanan web amazon yang memungkinkan Anda untuk menjalankan instans tujuan umum yang dapat dengan mudah sesuai dengan kebutuhan komputasi Anda.
Memiliki satu contoh untuk itu benar-benar baik-baik saja selama 3 tahun. Pada bulan Desember 2017, kami memutuskan untuk meluncurkan kursus untuk guru. Beruntung bagi kami, kursus ini dianggap oleh Kementerian Pendidikan sebagai kursus wajib bagi para guru yang akan mengajar di sekolah dasar selama tahun ajaran 2018 hingga 2019. Kami kira-kira berbicara tentang 20.000 guru. Solikhan ingat saat kakaknya Joseph menelepon dengan
panik. Dia telah menghadiri pertemuan di Kementerian dan orang-orang skeptis; mereka bertanya-tanya apakah server kami akan bertahan dengan 20.000 pengguna. Joseph memberi tahu mereka bahwa EdEra memiliki insinyur terbaik di dunia, dan tidak ada yang salah. Tapi dia panik. Dia bertanya kepada Solikhan apakah mungkin jumlah guru itu akan mematikan server EdEra atau tidak. Solikhan berpikir, "Yah, kursus tersedia 24/7, tidak akan pernah ada 20.000 pengguna secara bersamaan di platform." Seperti yang dikatakan Joseph di rapat, tidak ada yang salah (Gambar 9-2)!
Ternyata kami tidak memikirkan karakteristik yang sangat spesifik dari target audiens kami. Kita berbicara tentang guru yang dididik selama rezim Soviet. Kami sudah membicarakan kasus ini sebelumnya dalam buku ini, tetapi izinkan kami mengingatkan Anda.
Apa yang terjadi adalah bahwa kata "wajib" dalam kombinasi dengan tanggal dan waktu mulai spesifik kursus menghasilkan ajakan bertindak. Semua guru Ukraina berpikir bahwa kursus itu wajib, bukan hanya guru yang memenuhi syarat untuk mengajar sekolah dasar di tahun berikutnya. Jadi, 1 Desember, pada waktu tertentu, hampir 100.000 guru mencoba mendaftar di platform kami.
Gambar 9-2. Gambar ini diambil sekitar 5 detik sebelum anak kucing itu jatuh
Tentu saja Kami tidak siap untuk itu. Kami harus menemukan solusi penskalaan dengan cepat. Kami beruntung, karena cukup mudah untuk dicapai jika Anda menggunakan AWS. Selama kursus itu, kami mengalami pelambatan besar pada server kami selama hari-hari ketika modul baru diterbitkan dan ketika tes terakhir keluar. Kami memiliki beberapa puncak ketika kami memiliki 50 instans yang secara bersamaan melayani permintaan pengguna. Dari 1 server menjadi 50 tanpa persiapan. Tentu saja, itu menyebabkan banyak stres, saraf, dan kepanikan. Tidak hanya kami tidak siap untuk menangani beban semacam itu, kami juga tidak siap dalam hal penyimpanan. Awalnya kami hanya bertahan dengan penyimpanan 50 gigabyte! Bisakah Anda bayangkan itu? Ponsel kami memiliki lima kali lebih banyak dari itu!
Solikhan ingat berada di acara bowling perusahaan, dan tiba-tiba, server EdEra kehabisan ruang dan server mati. Beruntung bagi Solikhan, salah satu rekannya membawa
laptopnya. Dia terhubung ke server kami dan selama 10 menit, semua rekannya membantu mengosongkan beberapa ruang di server—membersihkan log, file cadangan lama, dll. Tak perlu dikatakan, kami harus meningkatkan jumlah ini dan memasang alat pemantauan dan peringatan di tempat untuk kejadian semacam ini. Kami menulis semua ini bukan untuk Anda tertawakan dan memikirkan betapa bodohnya kami saat itu; kami menulis ini agar Anda menyadari pentingnya bersiap untuk skala. Perlu disebutkan bahwa bagaimana Anda mendesain arsitektur Anda adalah yang paling penting.
Di EdEra kami menggunakan sistem sumber terbuka pihak ketiga yang sulit untuk diukur. Kami harus menempatkan 50 server untuk dapat menangani beban. Beban permintaan yang sama di Gymondo (tempat Lawrence bekerja) hanya ditangani oleh dua contoh, karena aplikasi dirancang sedemikian rupa sehingga tidak macet dengan beban.
Itulah mengapa penting untuk menjalankan semua jenis pengujian pada sistem Anda, termasuk pengujian beban berat. Jika Anda menggunakan platform cloud hosting, biasanya mereka menyediakan alat yang tepat agar Anda dapat menskalakan sesuai beban Anda (penskalaan otomatis). Lihat Google Kubernetes. Ini adalah sistem sumber terbuka yang dikembangkan oleh Google yang memungkinkan Anda menyimpan perangkat lunak dan mengonfigurasinya untuk penerapan otomatis, penskalaan otomatis, dan pengelolaan.
Kembali ke platform pembelajaran baru kami, ketika kami mulai mengembangkannya, kami menyederhanakan beberapa aspeknya. Implementasi saat ini tidak dapat menskala secara horizontal. Ini sebagian benar; sebenarnya itu bisa berskala tetapi tidak seperti yang kita inginkan.
Masalahnya adalah mekanisme otentikasi kami menggunakan database dalam memori untuk menyimpan informasi sesi (token akses dan penyegaran). Ini berarti bahwa jika kita menyeimbangkan beban antara beberapa node aplikasi, pengguna yang menyentuh node otentikasi A dan membuat permintaan berikutnya ke node B tidak akan memenuhi permintaan tersebut, karena node B tidak tahu tentang otentikasi yang telah dilakukan.
dilakukan oleh node A. Hal ini dapat diselesaikan dengan mudah dengan menyimpan informasi autentikasi di tempat yang dapat diakses oleh semua node yang melayani permintaan. Ini dapat berupa, misalnya, dalam database relasional, elasticsearch, atau jenis penyimpanan lainnya, seperti memcached.
Jika strategi kami adalah untuk terus melayani situs web dari node server juga, tidak masuk akal jika kami selalu menyajikan konten statis yang sama dan membuang waktu dan sumber daya komputasi. Dalam hal ini, sebaiknya kita meletakkan beberapa mekanisme caching di depan aplikasi untuk menyajikan konten semacam ini. Di AWS, ini akan dilakukan dengan membuat distribusi cloudfront dan menentukan perilaku cache berdasarkan jalur permintaan—misalnya, - men-cache semuanya kecuali /oauth* dan /api*. Dengan cara ini kami akan membebaskan server dari menghitung permintaan yang tidak perlu. Namun, jangan terlalu antusias dengan penskalaan.
Baru-baru ini Solikhan berbincang dengan seorang pria yang bekerja sebagai konsultan CTO. Dia diundang oleh perusahaan yang terjebak dalam beberapa masalah arsitektur atau manajemen teknik. Solikhan bertanya kepadanya apa masalah teknis paling umum di perusahaan rintisan. Dan ternyata over-engineering terkadang menjadi masalah.
Insinyur menjadi terlalu bersemangat dengan alat-alat seperti Kubernetes dan containerization dan solusi cloud lainnya serta merancang arsitektur yang akan menskalakan untuk miliaran pengguna. Mempertahankan dan mengembangkan arsitektur semacam itu menjadi proses yang rumit dan rumit yang memperlambat pengembangan dan pengiriman.
Dan, yang mengejutkan, perusahaan-perusahaan ini tidak pernah mencapai jumlah pengguna yang telah mereka rancang arsitekturnya yang kompleks. Artinya, bersiaplah untuk penskalaan, gunakan alat pemantauan dan analitik untuk mengawasi pengguna Anda, tetapi jangan menjadikannya satu-satunya tujuan. Tujuan perangkat lunak Anda adalah untuk memecahkan masalah pengguna akhir Anda dan membuat hidup mereka lebih mudah.