Efisiensi dalam Skala: Kisah Pengoptimalan Biaya AWS

Diterbitkan: 2022-07-22

Saya 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.

Bagan memiliki tiga pilihan tarik-turun yang dipilih di bagian atas layar. Dua yang pertama, di sebelah kiri, adalah "10 Februari 2022 - 19 Februari 2022" dan "Harian", diikuti oleh "i" kecil yang dilingkari. Yang ketiga ada di sebelah kanan layar dan bertuliskan "Garis" dengan simbol untuk grafik garis. Di bawah pilihan tarik-turun, bagan berisi dua grafik garis dengan filter. Di bagian atas, baris filter bertuliskan "Kelompokkan menurut: Jenis Penggunaan" (filter yang dipilih, yang memiliki latar belakang biru) dan kemudian menampilkan filter yang tidak dipilih: "Layanan, Akun Tertaut, Wilayah, Jenis Instance, Sumber Daya, Kategori Biaya, Tag , Lainnya," dengan "Sumber daya" berwarna abu-abu dan tiga yang terakhir memiliki panah tarik-turun di sampingnya. Grafik garis atas memiliki "Biaya ($)" pada sumbu y, mulai dari 0,0 hingga 2,5. Grafik garis bawah memiliki "Penggunaan (vCPU-Jam)" pada sumbu y, mulai dari 0 hingga 40. Kedua grafik garis berbagi tanggal berlabel pada sumbu x, mulai dari 10 Feb hingga 19 Feb, dan kunci memberi label garis ungu mereka: "USE2-CPUCredits:t3." Grafik garis atas memiliki kira-kira delapan titik yang terhubung secara linier dan tren naik dari waktu ke waktu: satu titik sekitar (10 Februari $0,3), sekitar kedua (11 Februari, $0,6), ketiga sekitar (12 Februari, $0,5), a keempat sekitar (14 Februari, $2,1,), kelima sekitar (15 Februari, $2,4), keenam sekitar (16 Februari, $2,3), ketujuh sekitar (18 Februari, $2,3), dan kedelapan sekitar (Feb- 19, $2,6). Grafik garis bawah juga memiliki sekitar delapan titik yang terhubung secara linier dan tren naik dari waktu ke waktu: satu titik sekitar (10 Februari, 5 vCPU-Jam), yang kedua sekitar (11 Februari, 15 vCPU-Jam), yang ketiga sekitar (Jam -12, 10 vCPU-Jam), yang keempat sekitar (14 Februari, 40 vCPU-Jam), yang kelima sekitar (15 Februari, 50 vCPU-Jam), yang keenam sekitar (16 Februari, 45 vCPU-Jam) , yang ketujuh sekitar (18 Februari, 45 vCPU-Jam), dan yang kedelapan sekitar (19 Februari, 55 vCPU-Jam).
Bagan di atas menampilkan lonjakan biaya (grafik atas) dan peningkatan penggunaan kredit CPU (grafik bawah) selama periode penggunaan CPU di atas garis dasar. Biaya dolar sebanding dengan kredit surplus yang dihabiskan, karena instans ditagih per jam vCPU.

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.)

Bagan yang mirip dengan bagan sebelumnya tetapi dengan tarik-turun pertama berbunyi "06 Jan 2022 - 15 Jan 2022", "Biaya ($)" grafik garis atas berkisar dari 0 hingga 30, dan grafik garis bawah memiliki " Penggunaan (GB)" pada sumbu y, mulai dari 0 hingga 300. Kedua grafik garis berbagi tanggal yang diberi label pada sumbu x, mulai dari 06 Januari hingga 15 Januari, dan sebuah kunci yang melabeli garis ungu mereka: "USE2- DataTransfer-Out-Byte." Grafik garis atas memiliki kira-kira delapan titik yang terhubung secara linier dan tren naik dari waktu ke waktu: satu titik di sekitar (06 Jan, $2), sekitar kedua (08 Jan, $4), yang ketiga di sekitar (09 Jan, $7), putaran keempat (10 Jan, $6), putaran kelima (12 Jan, $15), putaran keenam (13 Jan, $25), putaran ketujuh (14 Jan, $24), dan putaran kedelapan (Jan- 15, $29). Grafik garis bawah juga memiliki sekitar delapan titik yang terhubung secara linier dan tren naik dari waktu ke waktu: satu titik di sekitar (06 Januari, 10 GB), yang kedua di sekitar (08 Januari, 50 GB), yang ketiga di sekitar (09 Januari 80 GB), yang keempat sekitar (10 Jan, 70 GB), yang kelima sekitar (12 Jan, 160 GB), yang keenam sekitar (13 Jan, 270 GB), yang ketujuh sekitar (14 Jan, 260 GB) , dan yang kedelapan sekitar (15 Januari, 320 GB).
Bagan di atas menampilkan lonjakan biaya (grafik atas) dan peningkatan transfer data keluar (grafik bawah). Karena transfer data keluar ditagih per GB, biaya dolar sebanding dengan penggunaan data keluar.

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:

  1. Saat masuk ke AWS Console, dari menu Layanan di kiri atas, temukan dan buka layanan CloudWatch.
  2. Di sisi kiri halaman, di bawah menu Metrik yang dapat diciutkan, klik Semua Metrik .
  3. 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.)
  4. 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.)

Halaman web muncul dengan menu tajuk biru tua di bagian atas halaman, yang dari kiri ke kanan menyertakan logo aws, drop-down "Layanan", bilah pencarian, ikon kode, ikon lonceng, ikon tanda tanya, teks drop-down bertuliskan "N. Virginia", dan teks drop-down bertuliskan "Toptal Test Account." Di bawahnya, kita melihat bagian utama halaman web berwarna putih. Bagian kiri halaman memiliki menu gulir dengan judul "CloudWatch" dan "X." Di bawahnya, dari atas ke bawah, menu berbunyi: "Favorit dan terbaru," "Dasbor," "Alarm" (dalam huruf tebal, dengan tiga tarik-turun: "Dalam alarm," "Semua alarm," dan "Penagihan"), "Log" (dicetak tebal, dengan dua tarik-turun: "Grup log" dan "Wawasan log"), "Metrik" (dicetak tebal, dengan tiga tarik-turun: "Semua metrik", yang disorot dengan warna oranye terang, " Explorer," dan "Streams"), "X-Ray traces" (dicetak tebal), "Events" (dicetak tebal), dan "Pemantauan aplikasi" (dicetak tebal). Semua teks yang dicetak tebal dalam menu memiliki segitiga menu tarik-turun di sebelah kiri teks. Bagian tengah halaman web menampilkan grafik di bagian atas halaman, dan editor di bagian bawah halaman. Grafik memiliki dua baris header. Baris pertama bertuliskan "CloudWatch > Metrics" di sebelah kiri (dengan teks "CloudWatch" berwarna biru) dan "Beralih ke antarmuka asli Anda" berwarna biru di sebelah kanan. Baris kedua bertuliskan "Grafik tanpa judul" dengan ikon edit di sebelah kiri, dan menampilkan opsi di sebelah kanan: "1h, 3h, 12h, 1d, 3d, 1w, Custom" (dengan "3h" berwarna biru, dan "Custom" memiliki ikon kalender), "Garis" (dengan ikon tarik-turun), "Tindakan" (dengan ikon tarik-turun), dan tombol segarkan dengan ikon tarik-turun. Grafik itu sendiri memiliki teks di tengahnya yang berbunyi: "Grafik CloudWatch Anda kosong. Pilih beberapa metrik untuk muncul di sini." Editor juga memiliki dua baris header. Baris pertama bertuliskan "Jelajahi", "Kueri" (disorot dengan warna oranye), "Metrik bergrafik", "Opsi", dan "Sumber" di sebelah kiri, dan "Tambahkan matematika" (dengan ikon tarik-turun) dan "Tambahkan query" (dengan ikon tarik-turun) di sebelah kanan. Baris kedua bertuliskan "Wawasan Metrik - editor kueri" dan "Info" (berwarna biru) di sebelah kiri, dan "Pembuat" dan "Editor" (dengan "Editor" dipilih) di sebelah kanan. Di bawah editor adalah tombol oranye "Jalankan" di sebelah kiri, dan teks "Gunakan Ctrl + Enter untuk menjalankan kueri, Ctrl + Spasi untuk melengkapi otomatis" di sebelah kanan. Bagian kanan halaman web memiliki menu putih, yang bertuliskan "Permintaan" dan "Bantuan" dari atas ke bawah.
Ikhtisar penyiapan pemantauan CloudWatch yang dijelaskan di atas (ditampilkan dengan data kosong dan tidak ada metrik yang dipilih). Jika Anda memiliki instans EBS, EC2, atau S3 di akun Anda, ini akan muncul sebagai opsi metrik dan akan mengisi grafik CloudWatch Anda.

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.

Logo AWS dengan kata "PARTNER" dan teks "Advanced Tier Services" di bawahnya.
Sebagai Mitra Konsultasi Tingkat Lanjut di Jaringan Mitra Amazon (APN), Toptal menawarkan akses kepada perusahaan ke pakar bersertifikasi AWS, sesuai permintaan, di mana pun di dunia.