Efisiensi dalam Skala: Kisah Pengoptimalan Biaya AWS
Diterbitkan: 2022-07-22Saya baru-baru ini meluncurkan platform analisis cryptocurrency, mengharapkan sejumlah kecil pengguna harian. Namun, ketika beberapa YouTuber populer menganggap situs tersebut bermanfaat dan menerbitkan ulasan, lalu lintas tumbuh begitu cepat sehingga membebani server, dan platform (Scalper.AI) menjadi tidak dapat diakses. Lingkungan AWS EC2 asli saya membutuhkan dukungan ekstra. Setelah mempertimbangkan beberapa solusi, saya memutuskan untuk menggunakan AWS Elastic Beanstalk untuk menskalakan aplikasi saya. Segalanya terlihat baik dan berjalan lancar, tetapi saya terkejut dengan biaya di dasbor penagihan.
Ini bukan masalah yang tidak biasa. Sebuah survei dari tahun 2021 menemukan bahwa 82% pembuat keputusan TI dan cloud menghadapi biaya cloud yang tidak perlu, dan 86% merasa tidak dapat memperoleh gambaran menyeluruh tentang semua pengeluaran cloud mereka. Meskipun Amazon menawarkan ikhtisar terperinci tentang biaya tambahan dalam dokumentasinya, model penetapan harga rumit untuk proyek yang sedang berkembang. Agar lebih mudah dipahami, saya akan menguraikan beberapa pengoptimalan yang relevan untuk mengurangi biaya cloud Anda.
Mengapa Saya Memilih AWS
Tujuan Scalper.AI adalah untuk mengumpulkan informasi tentang pasangan mata uang kripto (aset yang ditukar saat berdagang di bursa), menjalankan analisis statistik, dan memberikan wawasan kepada pedagang kripto tentang keadaan pasar. Struktur teknis platform terdiri dari tiga bagian:
- Skrip penyerapan data
- Sebuah server web
- Sebuah database
Skrip penyerapan mengumpulkan data dari berbagai sumber dan memuatnya ke database. Saya memiliki pengalaman bekerja dengan layanan AWS, jadi saya memutuskan untuk menerapkan skrip ini dengan menyiapkan instans EC2. EC2 menawarkan banyak jenis instans dan memungkinkan Anda memilih prosesor, penyimpanan, jaringan, dan sistem operasi instans.
Saya memilih Elastic Beanstalk untuk fungsionalitas yang tersisa karena menjanjikan manajemen aplikasi yang lancar. Penyeimbang beban mendistribusikan beban dengan benar di antara instans server saya, sementara fitur penskalaan otomatis menangani penambahan instans baru untuk peningkatan beban. Menyebarkan pembaruan menjadi sangat mudah, hanya membutuhkan beberapa menit.
Scalper.AI bekerja dengan stabil, dan pengguna saya tidak lagi menghadapi waktu henti. Tentu saja, saya mengharapkan peningkatan pengeluaran karena saya menambahkan layanan tambahan, tetapi jumlahnya jauh lebih besar dari yang saya perkirakan.
Bagaimana Saya Dapat Mengurangi Biaya Cloud
Melihat ke belakang, ada banyak area kompleksitas dalam penggunaan layanan AWS proyek saya. Kami akan memeriksa pengoptimalan anggaran yang saya temukan saat bekerja dengan fitur umum AWS EC2: instans kinerja yang dapat meledak, transfer data keluar, alamat IP elastis, dan status penghentian dan penghentian.
Instance Performa Meledak
Tantangan pertama saya adalah mendukung konsumsi daya CPU untuk proyek saya yang sedang berkembang. Skrip penyerapan data Scalper.AI memberi pengguna analisis informasi waktu nyata; skrip berjalan setiap beberapa detik dan memberi makan platform dengan pembaruan terbaru dari pertukaran crypto. Setiap iterasi dari proses ini menghasilkan ratusan pekerjaan asinkron, sehingga peningkatan lalu lintas situs memerlukan lebih banyak daya CPU untuk mengurangi waktu pemrosesan.
Instans termurah yang ditawarkan oleh AWS dengan empat vCPU, a1.xlarge, akan menelan biaya ~$75 per bulan pada saat itu. Sebagai gantinya, saya memutuskan untuk menyebarkan beban antara dua instans t3.micro dengan masing-masing dua vCPU dan 1GB RAM. Instans t3.micro menawarkan kecepatan dan memori yang cukup untuk pekerjaan yang saya butuhkan dengan seperlima dari biaya a1.xlarge. Namun demikian, tagihan saya masih lebih besar dari yang saya harapkan di akhir bulan.
Dalam upaya untuk memahami alasannya, saya mencari dokumentasi Amazon dan menemukan jawabannya: Ketika penggunaan CPU instans turun di bawah garis dasar yang ditentukan, ia mengumpulkan kredit, tetapi ketika instans meledak di atas penggunaan dasar, ia menghabiskan kredit yang diperoleh sebelumnya. Jika tidak ada kredit yang tersedia, instans akan menggunakan “surplus credits” yang disediakan Amazon. Kemampuan untuk mendapatkan dan membelanjakan kredit ini menyebabkan Amazon EC2 rata-rata menggunakan CPU instans selama 24 jam. Jika penggunaan rata-rata melampaui garis dasar, instans akan ditagih ekstra dengan tarif tetap per jam vCPU.
Saya memantau contoh penyerapan data selama beberapa hari dan menemukan bahwa pengaturan CPU saya, yang dimaksudkan untuk memangkas biaya, melakukan hal yang sebaliknya. Sebagian besar waktu, penggunaan CPU rata-rata saya lebih tinggi dari baseline.
Saya awalnya menganalisis penggunaan CPU untuk beberapa pasangan kripto; bebannya kecil, jadi saya pikir saya punya banyak ruang untuk pertumbuhan. (Saya hanya menggunakan satu mikro-instance untuk penyerapan data karena lebih sedikit pasangan kripto tidak memerlukan banyak daya CPU.) Namun, saya menyadari keterbatasan analisis asli saya setelah saya memutuskan untuk membuat wawasan saya lebih komprehensif dan mendukung penyerapan data untuk ratusan pasangan kripto—analisis layanan cloud tidak berarti apa-apa kecuali dilakukan pada skala yang benar.
Transfer Data Keluar
Hasil lain dari perluasan situs saya adalah peningkatan transfer data dari aplikasi saya karena bug kecil. Dengan lalu lintas yang terus meningkat dan tidak ada lagi waktu henti, saya perlu menambahkan fitur untuk menarik dan mempertahankan perhatian pengguna sesegera mungkin. Pembaruan terbaru saya adalah peringatan audio yang dipicu ketika kondisi pasar pasangan kripto cocok dengan parameter yang telah ditentukan pengguna. Sayangnya, saya membuat kesalahan dalam kode, dan file audio dimuat ke browser pengguna ratusan kali setiap beberapa detik.
Dampaknya sangat besar. Bug saya menghasilkan unduhan audio dari server web saya, menyebabkan transfer data keluar tambahan. Kesalahan kecil dalam kode saya mengakibatkan tagihan hampir lima kali lebih besar dari yang sebelumnya. (Ini bukan satu-satunya konsekuensi: Bug dapat menyebabkan kebocoran memori di komputer pengguna, sehingga banyak pengguna berhenti kembali.)
Biaya transfer data dapat mencapai hingga 30% dari lonjakan harga AWS. Transfer masuk EC2 gratis, tetapi biaya transfer keluar ditagih per GB ($0,09 per GB saat saya membuat Scalper.AI). Seperti yang saya pelajari dengan cara yang sulit, penting untuk berhati-hati dengan kode yang memengaruhi data keluar; mengurangi unduhan atau pemuatan file jika memungkinkan (atau dengan hati-hati memantau area ini) akan melindungi Anda dari biaya yang lebih tinggi. Uang ini bertambah dengan cepat karena biaya untuk mentransfer data dari EC2 ke internet bergantung pada beban kerja dan tarif khusus Wilayah AWS. Peringatan terakhir yang tidak diketahui oleh banyak pelanggan AWS baru: Transfer data menjadi lebih mahal di antara lokasi yang berbeda. Namun, menggunakan alamat IP pribadi dapat mencegah biaya transfer data tambahan antara zona ketersediaan yang berbeda di wilayah yang sama.
Alamat IP Elastis
Bahkan saat menggunakan alamat publik seperti alamat IP Elastis (EIP), adalah mungkin untuk menurunkan biaya EC2 Anda. EIP adalah alamat IPv4 statis yang digunakan untuk komputasi awan dinamis. Bagian "elastis" berarti Anda dapat menetapkan EIP ke instans EC2 mana pun dan menggunakannya hingga Anda memilih untuk berhenti. Alamat ini memungkinkan Anda menukar instans yang tidak sehat dengan yang sehat dengan mulus dengan memetakan ulang alamat ke instans yang berbeda di akun Anda. Anda juga dapat menggunakan EIP untuk menentukan data DNS untuk domain sehingga mengarah ke instans EC2.
AWS hanya menyediakan lima EIP per akun per wilayah, menjadikannya sumber daya yang terbatas dan mahal dengan penggunaan yang tidak efisien. AWS mengenakan tarif per jam yang rendah untuk setiap EIP tambahan dan menagih ekstra jika Anda memetakan ulang EIP lebih dari 100 kali dalam sebulan; tinggal di bawah batas-batas ini akan menurunkan biaya.
Hentikan dan Hentikan Status
AWS menyediakan dua opsi untuk mengelola status menjalankan instans EC2: hentikan atau hentikan. Mengakhiri akan mematikan instance, dan mesin virtual yang disediakan untuk itu tidak akan tersedia lagi. Volume Elastic Block Store (EBS) yang terpasang akan terlepas dan dihapus, dan semua data yang disimpan secara lokal di instans akan hilang. Anda tidak akan dikenakan biaya lagi untuk instans tersebut.
Menghentikan sebuah instance serupa, dengan satu perbedaan kecil. Volume EBS terlampir tidak dihapus, sehingga datanya dipertahankan, dan Anda dapat memulai ulang instans kapan saja. Dalam kedua kasus, Amazon tidak lagi mengenakan biaya untuk menggunakan instans, tetapi jika Anda memilih untuk berhenti daripada menghentikan, volume EBS akan menghasilkan biaya selama ada. AWS merekomendasikan untuk menghentikan instans hanya jika Anda berharap untuk segera mengaktifkannya kembali.
Namun ada fitur yang dapat memperbesar tagihan AWS Anda di akhir bulan bahkan jika Anda menghentikan instans alih-alih menghentikannya: snapshot EBS. Ini adalah cadangan tambahan dari volume EBS Anda yang disimpan di Simple Storage Service (S3) Amazon. Setiap snapshot menyimpan informasi yang Anda butuhkan untuk membuat volume EBS baru dengan data Anda sebelumnya. Jika Anda menghentikan instans, volume EBS yang terkait akan dihapus secara otomatis, tetapi snapshotnya akan tetap ada. Karena S3 mengisi berdasarkan volume data yang disimpan, saya sarankan Anda menghapus snapshot ini jika Anda tidak akan segera menggunakannya. AWS memiliki kemampuan untuk memantau aktivitas penyimpanan per volume menggunakan layanan CloudWatch:
- Saat masuk ke AWS Console, dari menu Layanan di kiri atas, temukan dan buka layanan CloudWatch.
- Di sisi kiri halaman, di bawah menu Metrik yang dapat diciutkan, klik Semua Metrik .
- Halaman tersebut menampilkan daftar layanan dengan metrik yang tersedia, termasuk EBS, EC2, S3, dan lainnya. Klik pada EBS dan kemudian pada Metrik Per-volume . (Catatan: Opsi EBS hanya akan terlihat jika Anda memiliki volume EBS yang dikonfigurasi di akun Anda.)
- Klik pada tab Kueri . Pada tampilan Editor , salin dan tempel perintah
SELECT AVG(VolumeReadBytes) FROM "AWS/EBS" GROUP BY VolumeId
lalu klik Run . (Catatan: CloudWatch menggunakan dialek SQL dengan sintaks yang unik.)
CloudWatch menawarkan berbagai format visualisasi untuk menganalisis aktivitas penyimpanan, seperti diagram lingkaran, garis, batang, diagram area bertumpuk, dan angka. Menggunakan CloudWatch untuk mengidentifikasi volume dan snapshot EBS yang tidak aktif adalah langkah mudah untuk mengoptimalkan biaya cloud.
Uang Ekstra di Saku Anda
Meskipun alat AWS seperti CloudWatch menawarkan solusi yang layak untuk pemantauan biaya cloud, berbagai platform eksternal terintegrasi dengan AWS untuk analisis yang lebih komprehensif. Misalnya, platform manajemen cloud seperti VMWare's CloudHealth menunjukkan perincian terperinci dari area pengeluaran teratas yang dapat digunakan untuk analisis tren, deteksi anomali, dan pemantauan biaya dan kinerja. Saya juga menyarankan Anda mengatur alarm penagihan CloudWatch untuk mendeteksi lonjakan tagihan sebelum menjadi berlebihan.
Amazon menyediakan banyak layanan cloud hebat yang dapat membantu Anda mendelegasikan pekerjaan pemeliharaan server, database, dan perangkat keras ke tim AWS. Meskipun biaya platform cloud dapat dengan mudah bertambah karena bug atau kesalahan pengguna, alat pemantauan AWS membekali pengembang dengan pengetahuan untuk mempertahankan diri dari biaya tambahan.
Dengan mempertimbangkan pengoptimalan biaya ini, Anda siap untuk memulai proyek Anda—dan menghemat ratusan dolar dalam prosesnya.