Ölçekte Verimlilik: Bir AWS Maliyet Optimizasyonu Hikayesi
Yayınlanan: 2022-07-22Kı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.
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ı.)
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:
- AWS Konsolunda oturum açmış durumdayken, sol üstteki Hizmetler menüsünden CloudWatch hizmetini bulun ve açın.
- Sayfanın sol tarafında, daraltılabilir Metrikler menüsü altında, Tüm Metrikler 'i tıklayın.
- 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.)
- 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.)
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.