500 ABD doları tutarında bir ders olan Google App Engine Esnek ortam fiyatlandırması


116

App Engine Esnek ortam eğiticisinde Nodejs'yi takip ettim @: https://cloud.google.com/nodejs/getting-started/hello-world

Öğreticiyi başarıyla uygulayıp test ettikten sonra, biraz deneme yapmak için kodu değiştirdim ve başarıyla uyguladım ... ve sonra bu bir test ortamı olduğu için (herkese açık değil) çalışır durumda bıraktım.

Bir ay sonra Google'dan 370 doların üzerinde bir fatura alıyorum!

İşlem detaylarında aşağıdakileri görüyorum:

1 - 31 Ekim 2017 App Engine Flex Örnek RAM'i: 5948.774 Gibibayt-saat ([MYPROJECT]) 42,24 ABD doları

1 - 31 Ekim 2017 App Engine Flex Örneği Çekirdek Saatleri: 5948,774 Saat ([MYPROJECT]) 312,91 ABD doları

Neredeyse 0 istek içeren bu test ortamı, yaklaşık 6.000 saatlik kaynak gerektirdi? En kötüsü, saatte 0,05 dolarla bir ay boyunca 720 saat tam zamanlı çalışmanın bana ~ 40 dolara mal olacağını varsayardım. https://cloud.google.com/appengine/pricing

Birisi buna ışık tutabilir mi? Neden bu kadar çok kaynağa ihtiyaç duyulduğunu bulamadım?

Yardım için teşekkürler!

Daha fazla veri için, bu geçen ayın trafiğidir (temelde 0): Trafik Verileri

Ve örnek verileriÖrnek Verileri

GÜNCELLEME: package.json'a bir değişiklik getirdiğime dikkat edin: Bağımlılık olarak nodemon ekledim ve "nmp start" betiğimin bir parçası olarak ekledim. Bunun 6000 saatlik kaynakları açıkladığından şüpheliyim:

  "scripts": {
    "deploy": "gcloud app deploy",
    "start": "nodemon app.js",
    "dev": "nodemon app js",
    "lint": "samples lint",
    "pretest": "npm run lint",
    "system-test": "samples test app",
    "test": "npm run system-test",
    "e2e-test": "samples test deploy"
  },

App.yaml (varsayılan-öğreticide değişiklik yok)

runtime: nodejs
env: flex

Faturalandırmayla ilgili yardım için GCP desteğiyle iletişime
geçmelisiniz

5
@BrettJ cevabınız için teşekkürler, onlarla zaten iletişime geçtim ve bana şunu söylediler: "Daha önce de belirtildiği gibi, kullanımın ayrıntılı raporunu görüntüleme imkanımız yok, bu yüzden de gönderebilmeniz için bağlantıları verdim topluluk forumunda ve yine deneyimli geliştiriciler teknik sorularınızda size yardımcı olacak. "
ddallala

2
Beklentileriniz, standart ortam fiyatlandırmasına (ve yalnızca bir B1 sınıfı örneğine) göre görünür. Ancak esnek env - farklı fiyatlandırma kullanıyorsunuz. App.yaml dosyanızı CPU'lar ve GB bellek yapılandırmaları için kontrol edin - bunlar örnek başına saatlik çarpanlarınızdır. Sonra 2 ile çarparsınız - çalıştırdığınız örnek sayısı.
Dan Cornilescu

Merhaba @DanCornilescu fiyatlandırması, esnek ortamlar için bile hala ~ 0,0,5 ABD doları ... çekirdek saat başına vCPU 0,0526 ABD doları (Iowa). App.yaml'ımı yapıştırdım ... kısaca, öğreticiden değiştirmedim.
ddallala

1
Tamam, artık GCP faturalandırma desteğiyle iletişim kurmak için daha iyi veri noktalarına sahipsiniz.
Dan Cornilescu

Yanıtlar:


193

Google ile defalarca gidip geldikten ve saatlerce blogları okuduktan ve raporlara baktıktan sonra, nihayet (bir şekilde) olanlarla ilgili bir açıklama buldum. Diğer insanların da bu soruna kurban gitmemesi için önerilerimle birlikte buraya göndereceğim.

Unutmayın, bu bazılarına açık görünebilir, ancak yeni bir GAE kullanıcısı olarak bunların hepsi benim için yepyeni oldu.

Kısacası, GAE'ye dağıtılırken ve aşağıdaki " $ gcloud app deploy " komutunu kullanırken, yeni bir sürüm oluşturur ve bunu varsayılan olarak ayarlar, ancak aynı zamanda ve daha da önemlisi, dağıtılan önceki sürümü KALDIRMAZ.

Sürümler ve örnekler hakkında daha fazla bilgi burada bulunabilir: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine

Yani benim durumumda, bilmeden, basit düğüm uygulamamın birden çok sürümünü oluşturmuştum. Bu sürümler, bir hatanın ardından geçiş yapılması gerektiğinde hala çalışıyor. Ancak bu sürümler aynı zamanda örnekler gerektirir ve app.yaml dosyasında belirtilmediği sürece varsayılan 2 örnektir.

Google diyor ki:

App Engine, yük ile eşleşecek şekilde çalışmakta olan örneklerin sayısını varsayılan olarak ölçeklendirir, böylece uygulamanız için her zaman tutarlı performans sağlarken boş örnekleri en aza indirir ve böylece maliyeti düşürür.

Ancak deneyimlerime göre durum bu değildi. Daha önce de söylediğim gibi, düğüm uygulamamı hatalara neden olduğu görülen nodemon ile ittim.

Sonunda, öğreticiyi izleyerek ve projeyi kapatmadan, her biri 1.5 ay boyunca tam zamanlı çalışan 2 örnekle 0 istek sunan ve çok sayıda hata mesajı üreten 4 sürümüm vardı ve bana 500 $ 'a mal oldu.

HALA GAE FLEX ENV KULLANMAK İSTİYORSANIZ ÖNERİLER:

  1. Öncelikle ve en önemlisi, CC'nizden otomatik olarak tahsil edilen pahalı bir faturaya şaşırmamak için bir faturalandırma bütçesi ve uyarılar ayarlayın: https://cloud.google.com/billing/docs/how-to/budgets

  2. Bir test ortamında, büyük olasılıkla birden çok sürüme ihtiyacınız yoktur, bu nedenle dağıtım sırasında aşağıdaki komutu kullanın:
    $ gcloud app deploy --version v1

  3. App.yaml dosyanızı minimum kaynakla yalnızca 1 örneği zorlayacak şekilde güncelleyin :

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
  1. Günlük harcama limiti belirleyin

görüntü açıklamasını buraya girin

Daha fazla bilgi için bu blog gönderisine bakın: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-f Elastic-environment-104fc6736495

Öğrenmeye ve denemeye çalışan kişileri korumak için bu adımlardan bazılarının eğitime dahil edilmesini isterdim, ama olmadı.

Google App Engine Flex ortamı, tüm bu ayrıntıların bilinmemesi durumunda yanıltıcı olabilir. Bir arkadaşım beni hem fiyatlandırması hem de Ücretsiz / Hobi teklifleri olan Heroku'ya yönlendirdi. Orada yeni bir node uygulamasını hızla itmeyi başardım ve büyüleyici bir şekilde çalıştı! https://www.heroku.com/pricing

Bu dersi öğrenmek "sadece" bana 500 dolara mal oldu, ancak umarım bu, diğerlerinin Google App Engine Flex Env'e bakmasına yardımcı olur.


69
Google, piyasayı gerçekten berbat belgelerde köşeye sıkıştırmış görünüyor. 500 dolarlık bir banknotla tokatlanmış olmanız talihsiz bir durum, ama eminim ki diğer birçok kişi için kurşunu almışsınızdır.
Drazen Bjelovuk

13
başka bir olasılık "gcloud app deploy app.yaml --stop-previous-version"
DeividasV

3
Teşekkürler, çok yardımcı. Fatura uyarıları / limitleri bir zorunluluktur. Yakın zamanda benzer bir sorunla karşılaştı
Kartik

1
bu kesinlikle en ucuz yol değildir, çünkü sürekli olarak tek bir örnek çalıştırırdı. lütfen
cevabıma

AppEngine standart ortamıyla aynı kötü sürprizi bekleyebilir miyiz? Veya OP'de bahsedilen sorunlar yalnızca esnek ortamda mı ortaya çıkıyor?
John Doe

21

Eğer memnun senin GAE'nin maliyetleri azaltmak istiyorsanız YAPMAYIN kullanmak manual_scalingönerildiği üzere bu makalede veya kabul cevap!

Google App Engine ile ilgili güzel olan şey, talebe bağlı olarak milisaniyeler içinde yüzlerce makineye ölçeklenebilmesidir. Ve yalnızca çalışan örnekler için ödeme yaparsınız.

Maliyetlerinizi optimize edebilmek için farklı ölçeklendirme seçeneklerini ve örnek türlerini anlamanız gerekir:

1. Uygulama motoru esnekliği ile standart karşılaştırması:

Farklılıklar hakkındaki ayrıntılar burada bulunabilir , ancak bu soruyla ilgili önemli bir fark şudur:

[Standart] Ücretsiz veya çok düşük maliyetle çalıştırılmak üzere tasarlanmıştır, burada yalnızca ihtiyacınız olan şey için ve ihtiyacınız olduğunda ödeme yaparsınız. Örneğin, uygulamanız trafik olmadığında 0 örneğe ölçeklenebilir.

2. Ölçeklendirme Seçenekleri:

  • Otomatik ölçeklendirme: Google, sağladığınız talebe ve yapılandırmaya bağlı olarak uygulamanızı ölçeklendirir.
  • Manuel ölçeklendirme: Hiç ölçeklendirme yok, GAE her zaman istediğiniz örnek sayısını tam olarak çalıştıracaktır (çok yanıltıcı adlandırma)
  • Temel ölçeklendirme: Belirlediğinizi sınırlandırmak için ölçeklenir ve belirli bir süre sonra ölçeği küçülür

3. Örnek Türleri: 2 bulut sunucusu tipi vardır ve temelde yeni bir bulut sunucusunu döndürmek için geçen süre bakımından farklılık gösterirler. F sınıfı örnekleri (otomatik ölçeklendirmede kullanılır), ihtiyaç olduğunda ~ 0,1 saniye içinde ve B sınıfı örnekleri (manuel ölçeklendirmede / temelde kullanılır) ~ 0,7 saniye içinde oluşturulabilir: görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin

Artık temelleri anladığınıza göre, kabul edilen yanıta geri dönelim:

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

Bunun GAE'ye verdiği talimat , her zaman özel bir örnek sınıfı ( daha maliyetli ) çalıştırmasıdır . Açıkçası bu en ucuz seçenek değildir çünkü bunun yerine B1 / F1 bulut sunucusu tipi kullanılabilir (daha düşük özelliklere sahiptir) ve aynı zamanda sürekli bir bulut sunucusu çalıştırır.

En ucuzu trafik olmadığında örneği kapatmaktır. ~ 0,1 saniyelik dönüş süresine aldırmazsanız, bunun yerine bununla devam edebilirsiniz:

instance_class: F1
automatic_scaling:
  max_instances: 1 (--> you can adjust this as you wish)
  min_instances: 0 (--> will scale to 0 when there is no traffic so won't incur costs)

Bu, Google'ın sağladığı ücretsiz kotalar dahilinde olacaktır ve gerçek trafiğiniz yoksa size hiçbir maliyeti olmayacaktır.

Not: da son derece kurmak önerilir sınırı harcama günlük çalışan bir şey unuttunuz durumunda veya (günlük harcama limitleri artık kullanılmamaktadır ama 24 Temmuz 2021 yılına kadar mevcut olacak yerde bazı masraflı ayarlara sahip kaynak ).


3
min_instances0'a ayarlayamazsınız . Belgelere göre :The minimum number of instances given to your service. When a service is deployed, it is given this many instances and scales according to traffic. Must be 1 or greater, default is 2 to reduce latency.
yorbro

5
@yorbro, bunu belirttiğiniz için teşekkürler, min_instances standart ortam içindir, bağladığınız belge min_num_instances , esnek ortam için olan farklı parametreyi ifade eder . Cevabımı bunu açıkça yansıtacak şekilde güncelleyeceğim.
Caner

Ah benim hatam. Hızlı cevap için teşekkürler!
yorbro

Min_instances belgesinde Uyarı: Bu özelliğin düzgün çalışması için ısınma isteklerinin etkinleştirildiğinden ve uygulamanızın ısınma isteklerini işlediğinden emin olmalısınız. Bunun etkinleştirilmesi gerekiyor mu? Bu uygulanmazsa gecikmeyi nasıl etkiler? Yaklaşık 600 kullanıcısı olan bir uygulamanın çalıştırma maliyetlerini düşürmeye çalışıyorum, bu nedenle en iyi ölçeklendirme ayarlarının ne olduğunu bulmaya çalışıyorum.
Pete Nice

1
Günlük harcama limitleri kullanımdan kaldırıldı ¯_ (ツ) _ / ¯
JW

18

GAE FE'ye dağıtılan kod, kademeli, üstel bir hata (geri dönen e-postalar, geri dönen e-postalar vb.) Nedeniyle kesinlikle çıldırdı ve izlenen GAE örneklerini KAPATAMADIK. 4+ saat ve 1 milyondan fazla e-posta gönderildikten sonra (Mailgun, hesabı devre dışı bırakmamıza izin VERMEZ. "Lütfen şifre değişikliğinin yürürlüğe girmesi için 24 saate kadar bekleyin" dedi ve API anahtarlarının iptal edilmesi hiçbir şey yapmadı), redis sanal makinesi durduruldu, DB çöktü ve tüm sitenin kodu tek bir "Bakım İçin Kapalı" statik 503 sayfasına indirildi, e-postalar gönderilmeye devam etti.

GAE FE'nin CPU yükü altındaki docker sanal makinelerini veya Cloud Compute sanal makinelerini (redis) sonlandırmadığını belirledim. Belki asla! Hesaplama sanal makinesini gerçekten sildikten sonra ("yalnızca" durdurmak yerine), e-postalar anında durdu.

Ancak, GAE uygulaması sürümlerin ve örneklerin% 100'ünün "Durdurulduğunu" bildirmesine rağmen DB'miz 2 saate kadar daha "e-posta gönderilemedi" bildirimleriyle dolmaya devam etti. Google Cloud SQL şifresini değiştirmek zorunda kaldım.

Faturayı kontrol etmeye devam ettik ve 7 haydut örnek CPU'yu kullanmaya devam etti ve bu nedenle o hesapta kullanılan kartı iptal ettik ve site, faturanın vadesi geçtikten sonra kapatıldı, ancak sahte örnekler de öyle. GAE e-posta desteğiyle durumu hiçbir zaman çözemedik.


Güncelleme (30 Eylül 2020): Bu hala 22 yıllık kariyerimin en kötü anı !! 15 crack dahi geliştiriciden oluşan bir şirketin tamamı, GAE'yi nasıl kapatacağını çözemedi. Geliştiricilerimden biri GMail hesabına erişemediğinde müşterilerin MİLYONLARCA e-posta aldığını biliyorduk. Çıkarılamadı, kapatılamadı. Oldukça "Terminatör" anıydı!

MailGun API erişimini fiilen devre dışı bırakmamıza veya şifreyi değiştirmemize izin verseydi, masraflar dışında bu kadar kötü olmazdı. Ancak GAE için yine de masraf açısından kötü olurdu.

Artık sorun yapamayacağım sunuculara güvenmiyorum reboot.

Sonunda, MailGun bizden yalnızca yaklaşık 50 $ tahsil etti. Ancak GAE ... "Tamam, postalar durdu, durabiliriz" diye düşünseydim, 20.000 $ fazla fatura çıkarabilirdik! Olduğu gibi, "yalnızca" 1500 dolara mal oldu . Ve buna itiraz etmek için asla kimseyle temas kuramadık. Yani CEO onu yedi.


Artık bu şirketten uzun zaman önce ayrıldığıma göre, size aylık faturanın 5.000 dolar, normalde 300 dolar civarında olduğunu söyleyebilirim.
Theodore R. Smith

Son birkaç yıldır GCP ve AWS'yi kullanıyorum ve bunun gibi hikayeler beni AWS'nin kollarına tam zamanlı olarak çığlık atarak koşma isteği uyandırıyor. GCP'nin dokümantasyonundaki ve hata kontrolündeki boşluklar sefil durumda - gelişiyor, ancak yine de sefil durumda. Bir sebepten dolayı ucuz. Bununla birlikte,
GAE'ye

GCP ile ilgili CİDDİ bir Sorununuz varsa, Google'daki herhangi biriyle iletişime geçmek tam anlamıyla imkansızdır. Büyük istikrarsızlık sorunları hakkında onlarla iletişim kurmaya aylarca denedik. Gitme.
Theodore R. Smith

Teknik destekleri konusunda şansım yaver gitti, ancak şirketim de bir destek hesabı için para ödüyor, soooo
ingernet

1
Bu hala 22 yıllık kariyerimin en kötü anı !! 15 crack dahi geliştiriciden oluşan bir şirketin tamamı, GAE'yi nasıl kapatacağını çözemedi. Geliştiricilerimden biri GMail hesabına erişemediğinde müşterilerin MİLYONLARCA e-posta aldığını biliyorduk. Fiş çıkarılamadı
Theodore R. Smith

4

Ayrıca, uygulamanızda yine de otomatik ölçeklendirmenin olmasını istiyorsanız, ancak her zaman varsayılan minimum 2 örneğinin çalışmasını istemiyorsanız, app.yaml dosyanızı şu şekilde yapılandırabileceğinizi unutmayın:

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1

Sanırım demek istiyorsun max_num_instances?
Dominic

4
Örnekleri sınırlama seçeneği kesinlikle yoktur. Bir DDoS saldırısı sırasında 1000 örnek oluşturmak ve müşteriye 1000 $ 'lık faturalandırmak, GCP'nin bir iş stratejisidir.
Theodore R. Smith

2
@ TheodoreR.Smith aslında max ile yapabilir ve ayrıca bir günlük limit belirleme
zardilior

3
@Dominic min_num_instances, artıklık pahasına boşta iken paradan tasarruf etmek istiyorsanız burada doğrudur. @Theodore Örnekleri sınırlamak için ayrıca max_num_instances vardır , ancak App Engine esnek için günlük harcama sınırı ayarlayamazsınız (ancak standart olarak yapabilirsiniz). Bununla birlikte, bütçeler ve uyarılar ayarlayabilirsiniz.
jon_wu

4

Kimseden bahsedilmediği için, işte sürümlerle ilgili gcloud komutları

# List all versions
$ gcloud app versions list

SERVICE  VERSION.ID       TRAFFIC_SPLIT  LAST_DEPLOYED              SERVING_STATUS
default  20200620t174631  0.00           2020-06-20T17:46:56+03:00  SERVING
default  20200620t174746  0.00           2020-06-20T17:48:12+03:00  SERVING
default  prod             1.00           2020-06-20T17:54:51+03:00  SERVING

# Delete these 2 versions (you can't delete all versions, you have to have at least one remaining)
$ gcloud app versions delete 20200620t174631 20200620t174746

# Help
$ gcloud app versions --help

1

biraz gecikmeyi önemsemediğim geliştirme ortamları için aşağıdaki ayarları kullanıyorum:

instance_class: B1
basic_scaling:
  max_instances: 1
  idle_timeout: 1m

Örneğinizi ücretsiz arka uç örnek ödeneğinden daha fazla kullanıyorsanız şunu deneyin:

instance_class: F1
automatic_scaling:
  max_instances: 1

AppEngine kontrol panelidir, Örnekleri izleyin, başlangıç ​​zamanını not edin ve idle_timeout süresi geçtikten sonra Örnek sayımının sıfıra düştüğünden ve "Bu sürümde dağıtılmış örnek yok" mesajını gördüğünüzden emin olmak için izleyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.