Ölçekte Verimlilik: Bir AWS Maliyet Optimizasyonu Hikayesi

Yayınlanan: 2022-07-22

Kısa bir süre önce, az sayıda günlük kullanıcı bekleyen bir kripto para birimi analiz platformu başlattım. Ancak bazı popüler YouTuber'lar siteyi faydalı bulup bir inceleme yayınladığında trafik o kadar hızlı arttı ki sunucuya aşırı yüklendi ve platforma (Scalper.AI) erişilemez hale geldi. Orijinal AWS EC2 ortamımın ekstra desteğe ihtiyacı vardı. Birden fazla çözümü düşündükten sonra uygulamamı ölçeklendirmek için AWS Elastic Beanstalk kullanmaya karar verdim. İşler iyi görünüyordu ve sorunsuz ilerliyordu, ancak faturalandırma panosundaki maliyetler beni şaşırttı.

Bu nadir görülen bir sorun değildir. 2021'de yapılan bir anket, BT ve bulut karar vericilerinin %82'sinin gereksiz bulut maliyetleriyle karşılaştığını ve %86'sının tüm bulut harcamalarını kapsamlı bir şekilde göremediğini düşünüyor. Amazon, belgelerinde ek masraflara ilişkin ayrıntılı bir genel bakış sunsa da, büyüyen bir proje için fiyatlandırma modeli karmaşıktır. İşleri daha kolay anlamak için, bulut maliyetlerinizi azaltmak için birkaç alakalı optimizasyonu anlatacağım.

Neden AWS'yi Seçtim?

Scalper.AI'nin amacı, kripto para birimi çiftleri (bir borsada işlem yaparken takas edilen varlıklar) hakkında bilgi toplamak, istatistiksel analizler yapmak ve kripto tüccarlarına piyasanın durumu hakkında bilgi vermektir. Platformun teknik yapısı üç bölümden oluşmaktadır:

  • Veri alma komut dosyaları
  • bir web sunucusu
  • bir veritabanı

Alma komut dosyaları, farklı kaynaklardan veri toplar ve bunları veritabanına yükler. AWS hizmetleriyle çalışma deneyimim olduğundan, bu komut dosyalarını EC2 bulut sunucuları kurarak dağıtmaya karar verdim. EC2 birçok bulut sunucusu türü sunar ve bir bulut sunucusunun işlemcisini, depolamasını, ağını ve işletim sistemini seçmenize olanak tanır.

Sorunsuz uygulama yönetimi vaat ettiği için kalan işlevsellik için Elastic Beanstalk'ı seçtim. Yük dengeleyici, yükü sunucumun örnekleri arasında düzgün bir şekilde dağıtırken, otomatik ölçeklendirme özelliği, artan yük için yeni örnekler eklemeyi ele aldı. Güncellemeleri dağıtmak sadece birkaç dakika alarak çok kolaylaştı.

Scalper.AI kararlı bir şekilde çalıştı ve kullanıcılarım artık kesintilerle karşılaşmadı. Elbette ekstra hizmetler eklediğim için harcamalarda artış bekliyordum ama rakamlar tahmin ettiğimden çok daha fazlaydı.

Bulut Maliyetlerini Nasıl Azaltabilirim

Geriye dönüp baktığımda, projemin AWS hizmetlerini kullanmasında birçok karmaşık alan vardı. Yaygın AWS EC2 özellikleriyle çalışırken keşfettiğim bütçe optimizasyonlarını inceleyeceğiz: ani performans örnekleri, giden veri aktarımları, esnek IP adresleri ve sonlandırma ve durdurma durumları.

Hızlı Performans Örnekleri

İlk zorluğum, büyüyen projem için CPU güç tüketimini desteklemekti. Scalper.AI'nin veri alma komut dosyaları, kullanıcılara gerçek zamanlı bilgi analizi sağlar; komut dosyaları birkaç saniyede bir çalışır ve platformu kripto borsalarından en son güncellemelerle besler. Bu işlemin her yinelemesi yüzlerce eşzamansız iş üretir, bu nedenle sitenin artan trafiği, işlem süresini azaltmak için daha fazla CPU gücü gerektiriyordu.

AWS tarafından dört vCPU ile sunulan en ucuz bulut sunucusu a1.xlarge, o zaman bana ayda yaklaşık 75 ABD dolarına mal olacaktı. Bunun yerine yükü, her biri iki vCPU ve 1 GB RAM içeren iki t3.micro bulut sunucusu arasında dağıtmaya karar verdim. t3.micro bulut sunucuları, ihtiyacım olan iş için a1.xlarge maliyetinin beşte biri karşılığında yeterli hız ve bellek sağladı. Yine de faturam ay sonunda beklediğimden daha fazla geldi.

Nedenini anlamak için Amazon'un belgelerini araştırdım ve cevabı buldum: Bir bulut sunucusunun CPU kullanımı tanımlanmış bir temelin altına düştüğünde kredi toplar, ancak bulut sunucusu temel kullanımın üzerine çıktığında önceden kazanılan kredileri tüketir. Kullanılabilir kredi yoksa, bulut sunucusu Amazon tarafından sağlanan "fazla kredileri" harcar. Bu kredi kazanma ve harcama yeteneği, Amazon EC2'nin bir bulut sunucusunun CPU kullanımının 24 saat boyunca ortalamasını almasına neden olur. Ortalama kullanım taban çizgisinin üzerine çıkarsa örnek, vCPU-saat başına sabit bir ücret üzerinden fazladan faturalandırılır.

Veri alma örneklerini birkaç gün boyunca izledim ve maliyetleri düşürmeyi amaçlayan CPU kurulumumun tam tersini yaptığını gördüm. Çoğu zaman, ortalama CPU kullanımım taban çizgisinden daha yüksekti.

Bir grafik, ekranın üst kısmında seçilen üç açılır seçime sahiptir. Soldaki ilk ikisi "10 Şubat 2022 - 19 Şubat 2022" ve "Günlük", ardından küçük, daire içine alınmış "i". Üçüncüsü ekranın sağındadır ve çizgi grafiği için bir sembolle "Çizgi" yazar. Açılır seçimlerin altında, grafik filtreli iki çizgi grafiği içerir. En üstte, filtre satırında "Gruplandırma ölçütü: Kullanım Türü" (mavi arka plana sahip seçili filtre) yazar ve ardından seçilmeyen filtreler gösterilir: "Hizmet, Bağlı Hesap, Bölge, Örnek Türü, Kaynak, Maliyet Kategorisi, Etiket , Diğer", "Kaynak" gri renkte görünür ve son üçünün yanında açılır oklar bulunur. Üst çizgi grafiğinde y ekseninde 0.0 ile 2.5 arasında değişen "Maliyetler ($)" bulunur. Alt çizgi grafiğin y ekseninde 0 ile 40 arasında değişen "Kullanım (vCPU-Saatleri)" vardır. Her iki çizgi grafiği de x ekseninde 10 Şubat ile 19 Şubat arasında etiketlenmiş tarihleri ​​ve bir anahtar mor çizgilerini etiketleme: "USE2-CPUCredits:t3." Üst çizgi grafiğinde doğrusal olarak bağlantılı yaklaşık sekiz nokta vardır ve zaman içinde yukarı doğru eğilim gösterir: bir nokta (-10 Şubat, 0,3), ikinci (-11 Şubat, 0,6), üçüncü (12 Şubat, 0,5), bir dördüncüsü (14 Şubat, 2,1 $), beşincisi (15 Şubat, 2,4 $), altıncısı (16 Şubat, 2,3 $), yedincisi (18 Şubat, 2,3 $) ve sekizincisi (Şubat- 19, $2.6). Alt çizgi grafiğinde ayrıca doğrusal olarak bağlantılı yaklaşık sekiz nokta vardır ve zaman içinde yukarı doğru eğilim gösterir: bir nokta civarında (Şubat-10, 5 vCPU-Saat), bir ikinci (11 Şubat, 15 vCPU-Saat), üçüncü bir (Şubat) -12, 10 vCPU-Saati), dördüncüsü (-14 Şubat, 40 vCPU-Saati), beşincisi (-15 Şubat, 50 vCPU-Saati), altıncısı (Şubat-16, 45 vCPU-Saati) , yaklaşık yedinci (18 Şubat, 45 vCPU-Saat) ve yaklaşık sekizinci (19 Şubat, 55 vCPU-Saat).
Yukarıdaki grafik, CPU kullanımının taban çizgisinin üzerinde olduğu bir dönemde maliyet artışlarını (üstteki grafik) ve artan CPU kredi kullanımını (alttaki grafik) gösterir. Örnek, vCPU-saat başına faturalandırıldığından dolar maliyeti, harcanan fazla krediyle orantılıdır.

Başlangıçta birkaç kripto çifti için CPU kullanımını analiz etmiştim; yük küçüktü, bu yüzden büyümek için bolca alanım olduğunu düşündüm. (Daha az kripto çifti çok fazla CPU gücü gerektirmediğinden veri alımı için yalnızca bir mikro örnek kullandım.) Ancak, içgörülerimi daha kapsamlı hale getirmeye ve veri alımını desteklemeye karar verdiğimde orijinal analizimin sınırlamalarını fark ettim. yüzlerce kripto çifti için—bulut hizmeti analizi, doğru ölçekte yapılmadıkça hiçbir şey ifade etmez.

Giden Veri Aktarımları

Sitemin genişlemesinin bir başka sonucu da, küçük bir hata nedeniyle uygulamamdan veri aktarımlarının artmasıydı. Trafiğin istikrarlı bir şekilde artması ve artık kesinti olmaması nedeniyle, mümkün olan en kısa sürede kullanıcıların dikkatini çekmek ve tutmak için özellikler eklemem gerekiyordu. En yeni güncellemem, bir kripto çiftinin piyasa koşulları kullanıcının önceden tanımlanmış parametreleriyle eşleştiğinde tetiklenen sesli bir uyarıydı. Maalesef kodda bir hata yaptım ve ses dosyaları birkaç saniyede bir kullanıcının tarayıcısına yüzlerce kez yüklendi.

Etkisi çok büyüktü. Hatam, web sunucularımdan ses indirmeleri oluşturdu ve ek giden veri aktarımlarına neden oldu. Kodumdaki küçük bir hata, öncekilerden neredeyse beş kat daha büyük bir faturayla sonuçlandı. (Tek sonuç bu değildi: Hata, kullanıcının bilgisayarında bir bellek sızıntısına neden olabilir, bu nedenle birçok kullanıcı geri gelmeyi bıraktı.)

Bir öncekine benzer, ancak ilk açılır menüde "06 Ocak 2022 - 15 Ocak 2022", üst satır grafiğin "Maliyetler ($)" değeri 0 ile 30 arasında ve alt satır grafiğinde " Kullanım (GB)", y ekseninde 0 ile 300 arasında değişir. Her iki çizgi grafiği de x ekseninde, Ocak-06 ile Ocak-15 arasında etiketlenmiş tarihleri ​​ve mor çizgilerini etiketleyen bir anahtarı paylaşır: "USE2- DataTransfer-Out-Bytes." Üst çizgi grafiğinde doğrusal olarak bağlantılı yaklaşık sekiz nokta vardır ve zaman içinde yukarı doğru eğilim gösterir: bir nokta yaklaşık (06 Ocak, 2 $), bir saniye civarında (08 Ocak, 4 $), üçüncü bir civarında (09 Ocak, 7 $), bir dördüncüsü (10 Ocak, 6 $), beşincisi (12 Ocak, 15 $), altıncısı yaklaşık (-13 Ocak, 25 $), yedincisi (-14 Ocak, 24 $) ve sekizincisi (Ocak- 15, 29 $). Alt çizgi grafiğinde ayrıca doğrusal olarak bağlanmış yaklaşık sekiz nokta vardır ve zaman içinde yukarı doğru eğilim gösterir: bir nokta (06 Ocak, 10 GB), bir saniye civarında (Ocak-08, 50 GB), üçüncü bir nokta (Ocak-09, 80) GB), yaklaşık dördüncü (Ocak-10, 70 GB), yaklaşık beşinci (12 Ocak, 160 GB), yaklaşık altıncı (13 Ocak, 270 GB), yaklaşık yedinci (-14 Ocak, 260 GB) , ve yaklaşık sekizinci (Ocak-15, 320 GB).
Yukarıdaki grafik, maliyet artışlarını (üstteki grafik) ve artan giden veri aktarımlarını (alttaki grafik) göstermektedir. Giden veri aktarımları GB başına faturalandırıldığından, dolar maliyeti giden veri kullanımıyla orantılıdır.

Veri aktarım maliyetleri, AWS fiyat artışlarının %30'unu aşan bir orandan sorumlu olabilir. EC2 gelen aktarımı ücretsizdir, ancak giden aktarım ücretleri GB başına faturalandırılır (Scalper.AI oluşturduğumda GB başına 0,09 ABD doları). Zor yoldan öğrendiğim gibi, giden verileri etkileyen kod konusunda dikkatli olmak önemlidir; mümkünse indirmeleri veya dosya yüklemeyi azaltmak (veya bu alanları dikkatle izlemek) sizi daha yüksek ücretlerden koruyacaktır. EC2'den internete veri aktarma ücretleri iş yüküne ve AWS Bölgesine özgü fiyatlara bağlı olduğundan, bu kuruşlar hızla toplanır. Birçok yeni AWS müşterisinin bilmediği son bir uyarı: Farklı konumlar arasında veri aktarımı daha pahalı hale geliyor. Ancak özel IP adreslerinin kullanılması, aynı bölgenin farklı kullanılabilirlik bölgeleri arasında ekstra veri aktarım maliyetlerini önleyebilir.

Esnek IP Adresleri

Elastik IP adresleri (EIP'ler) gibi genel adresleri kullanırken bile EC2 maliyetlerinizi düşürmeniz mümkündür. EIP'ler, dinamik bulut bilişim için kullanılan statik IPv4 adresleridir. "Elastik" kısım, herhangi bir EC2 bulut sunucusuna bir EIP atayabileceğiniz ve siz durmayı seçene kadar bunu kullanabileceğiniz anlamına gelir. Bu adresler, adresi hesabınızdaki farklı bir örneğe yeniden eşleyerek sağlıksız örnekleri sağlıklı olanlarla sorunsuz bir şekilde değiştirmenize olanak tanır. EIP'leri, bir etki alanı için bir EC2 örneğine işaret edecek şekilde bir DNS kaydı belirtmek için de kullanabilirsiniz.

AWS, bölge başına hesap başına yalnızca beş EIP sağlayarak, onları sınırlı bir kaynak ve verimsiz kullanım nedeniyle maliyetli hale getirir. AWS, her ek EIP için düşük bir saatlik ücret alır ve bir EIP'yi ayda 100 defadan fazla yeniden eşlerseniz ekstra faturalandırır; bu sınırların altında kalmak maliyetleri düşürür.

Sonlandırma ve Durdurma Durumları

AWS, çalışan EC2 bulut sunucularının durumunu yönetmek için iki seçenek sunar: sonlandır veya durdur. Sonlandırma, örneği kapatacak ve bunun için sağlanan sanal makine artık kullanılamayacak. Ekli tüm Elastic Block Store (EBS) birimleri ayrılacak ve silinecek ve örnekte yerel olarak depolanan tüm veriler kaybolacak. Artık örnek için ücretlendirilmeyeceksiniz.

Bir örneği durdurmak, küçük bir farkla benzerdir. Ekli EBS birimleri silinmez, bu nedenle verileri korunur ve örneği istediğiniz zaman yeniden başlatabilirsiniz. Her iki durumda da Amazon, bulut sunucusunu kullanmak için artık ücret almaz, ancak sonlandırmak yerine durdurmayı seçerseniz EBS birimleri var oldukları sürece bir maliyet oluşturur. AWS, yalnızca yakında yeniden etkinleştirmeyi düşünüyorsanız bir bulut sunucusunu durdurmanızı önerir.

Ancak bir bulut sunucusunu durdurmak yerine sonlandırmış olsanız bile ay sonunda AWS faturanızı artırabilecek bir özellik var: EBS anlık görüntüleri. Bunlar, Amazon'un Basit Depolama Hizmetinde (S3) depolanan EBS birimlerinizin artımlı yedekleridir. Her anlık görüntü, önceki verilerinizle yeni bir EBS birimi oluşturmak için ihtiyaç duyduğunuz bilgileri içerir. Bir bulut sunucusunu sonlandırırsanız, ilişkili EBS birimleri otomatik olarak silinir, ancak anlık görüntüleri kalır. S3, depolanan veri hacmine göre ücret aldığından, kısa süre içinde kullanmayacaksanız bu anlık görüntüleri silmenizi öneririm. AWS, CloudWatch hizmetini kullanarak birim başına depolama etkinliğini izleme özelliğine sahiptir:

  1. AWS Konsolunda oturum açmış durumdayken, sol üstteki Hizmetler menüsünden CloudWatch hizmetini bulun ve açın.
  2. Sayfanın sol tarafında, daraltılabilir Metrikler menüsü altında, Tüm Metrikler 'i tıklayın.
  3. Sayfa, EBS, EC2, S3 ve daha fazlası dahil olmak üzere mevcut metriklere sahip hizmetlerin bir listesini gösterir. EBS'ye ve ardından Hacim Başına Metrikler'e tıklayın. (Not: EBS seçeneği, yalnızca hesabınızda yapılandırılmış EBS birimleriniz varsa görünür olacaktır.)
  4. Sorgu sekmesine tıklayın. Editör görünümünde, SELECT AVG(VolumeReadBytes) FROM "AWS/EBS" GROUP BY VolumeId komutunu kopyalayıp yapıştırın ve ardından Çalıştır öğesine tıklayın. (Not: CloudWatch, benzersiz bir sözdizimine sahip bir SQL lehçesi kullanır.)

Sayfanın üstünde, soldan sağa aws logosunu, "Hizmetler" açılır menüsünü, arama çubuğunu, kod simgesini, zil simgesini, soru işareti simgesini içeren koyu mavi bir başlık menüsüne sahip bir web sayfası görünür. "N. Virginia" yazan bir açılır metin ve "Toptal Test Account" yazan bir açılır metin. Altta, web sayfasının ana bölümünü beyaz olarak görüyoruz. Sayfanın solunda "CloudWatch" ve "X" başlıklı bir kaydırma menüsü bulunur. Altta, yukarıdan aşağıya menü şu şekildedir: "Favoriler ve son kullanılanlar", "Gösterge Tabloları", "Alarmlar" (kalın harflerle, üç açılır menüyle: "Alarm", "Tüm alarmlar" ve "Faturalandırma"), "Günlükler" (kalın, iki açılır menü ile: "Günlük grupları" ve "Günlük bilgileri"), "Metrikler" (kalın, üç açılır menü ile: "Tüm metrikler", parlak turuncu renkle vurgulanır, " Explorer" ve "Akışlar"), "X-Ray izleri" (kalın harflerle), "Olaylar" (kalın harflerle) ve "Uygulama izleme" (kalın harflerle). Menüdeki tüm kalın metinler, metnin solunda bir açılır menü üçgenine sahiptir. Web sayfasının ortası, sayfanın üst yarısında bir grafik ve sayfanın alt yarısında bir düzenleyici görüntüler. Grafiğin iki satır başlığı vardır. İlk satırda solda "CloudWatch > Metrikler" ("CloudWatch" metni mavi renkte) ve sağda mavi renkte "Orijinal arayüzünüze geçin" yazıyor. İkinci satır, solda bir düzenleme simgesiyle "Adsız grafik" okur ve sağda seçenekleri görüntüler: "1h, 3h, 12h, 1d, 3d, 1w, Özel" (mavi renkte "3h" ve "Özel" bir takvim simgesine sahip), "Satır" (açılır simgeli), "Eylemler" (açılır simgeli) ve açılır simgeli bir yenileme düğmesi. Grafiğin ortasında şu metin bulunur: "CloudWatch grafiğiniz boş. Burada görünecek bazı metrikler seçin." Editörün ayrıca iki satır başlığı vardır. İlk satırda "Gözat", "Sorgu" (turuncu renkle vurgulanmıştır), "Grafikli metrikler", "Seçenekler" ve solda "Kaynak" ve "Matematik ekle" (bir açılır simgeyle) ve "Ekle" yazar. sorgu" (bir açılır simgeyle) sağda. İkinci satırda solda "Metrics Insights - sorgu düzenleyici" ve "Bilgi" (mavi) ve sağda "Oluşturucu" ve "Düzenleyici" ("Düzenleyici" seçili olarak) bulunur. Editörün altında solda turuncu bir "Çalıştır" düğmesi ve sağda "Sorguyu çalıştırmak için Ctrl + Enter, otomatik tamamlama için Ctrl + Boşluk kullanın" metni bulunur. Web sayfasının sağ tarafında yukarıdan aşağıya "Sorgular" ve "Yardım" yazan beyaz bir menü vardır.
Yukarıda açıklanan CloudWatch izleme kurulumuna genel bakış (boş verilerle ve hiçbir ölçüm seçilmemiş olarak gösterilir). Hesabınızda mevcut EBS, EC2 veya S3 bulut sunucularınız varsa bunlar metrik seçenekler olarak görünecek ve CloudWatch grafiğinizi dolduracaktır.

CloudWatch, pasta grafikler, çizgiler, çubuklar, yığılmış alan grafikleri ve sayılar gibi depolama etkinliğini analiz etmek için çeşitli görselleştirme biçimleri sunar. Etkin olmayan EBS birimlerini ve anlık görüntüleri belirlemek için CloudWatch'ı kullanmak, bulut maliyetlerini optimize etmeye yönelik kolay bir adımdır.

Cebinizde Ekstra Para

CloudWatch gibi AWS araçları, bulut maliyeti izleme için uygun çözümler sunsa da, daha kapsamlı analiz için çeşitli harici platformlar AWS ile entegre olur. Örneğin, VMWare'in CloudHealth'i gibi bulut yönetim platformları, trend analizi, anormallik tespiti ve maliyet ve performans izleme için kullanılabilecek en yüksek harcama alanlarının ayrıntılı bir dökümünü gösterir. Ayrıca, ücretlerdeki artışları aşırı hale gelmeden önce algılamak için bir CloudWatch fatura alarmı kurmanızı da tavsiye ederim.

Amazon, sunucuların, veritabanlarının ve donanımın bakım işlerini AWS ekibine devretmenize yardımcı olabilecek birçok harika bulut hizmeti sunar. Bulut platformu maliyetleri, hatalar veya kullanıcı hataları nedeniyle kolayca artabilse de, AWS izleme araçları, geliştiricilere kendilerini ek masraflardan koruma bilgisini sağlar.

Bu maliyet optimizasyonlarını göz önünde bulundurarak projenizi hayata geçirmeye ve bu süreçte yüzlerce dolar tasarruf etmeye hazırsınız.

Altında "ORTAK" kelimesi ve "Gelişmiş Katman Hizmetleri" metni bulunan AWS logosu.
Amazon İş Ortağı Ağı'nda (APN) Gelişmiş Danışmanlık İş Ortağı olarak Toptal, şirketlere dünyanın her yerinden talep üzerine AWS sertifikalı uzmanlara erişim sunar.