Heroku: web dinamosu mu işçi dinamosu mu? Kaç / kaç orana ihtiyacım var?


82

Heroku'da web ve işçi dinozorları arasındaki farkın ne olduğunu merak ediyordum. Fiyatlandırma sayfalarında tek cümlelik bir açıklama yapıyorlar ama bu kafamı karıştırdı. Her birinden kaç tane seçeceğimi nasıl bilebilirim? Hedeflemem gereken bir oran var mı? Bu konuda oldukça yeniyim, bu yüzden birisi derinlemesine bir açıklama yapabilir veya belki kaç tane ve hangi tür dynolara ihtiyacım olacağını hesaplayabileceğim bir yol olabilir?

Ayrıca, her bir dyno için saat miktarıyla ne demek istedikleri konusunda kafam karıştı.

http://www.heroku.com/pricing

Ben de bu yazıda başardım. Önerdikleri çözümlerden biri olarak dynos miktarını artırmayı söylediler. Burada ne tür bir dinodan bahsediyorlar?

http://devcenter.heroku.com/articles/backlog-too-deep

Yanıtlar:


58

Daha fazla dynoya ihtiyacınız varsa (aka Cedar'da işlemler) en iyi göstergeniz heroku günlüklerinizdir. Günlüğünüzü takip edebilmek için genişletilmiş günlüğe (ücretsiz) yükselttiğinizden emin olun.

Heroku.router girişlerini arıyorsunuz ve en çok ilgilendiğiniz değer kuyruk değeridir - eğer bu sürekli olarak 0'dan fazlaysa, daha fazla dynos eklemeniz gerektiğinin iyi bir işaretidir. Esasen bu, işleminizin karşılayabileceğinden daha fazla istek geldiği anlamına gelir, böylece bunlar sıraya alınır. Herhangi bir veri döndürmeden çok uzun süre sıraya alınırlarsa, zaman aşımına uğrarlar.

Korkarım ideal bir oran yok, birçok web işlemine ihtiyaç duyan ancak çalışanlardan yararlanmayan saniyede 100 istek yapan bir uygulamanız olabilir. Yalnızca arka planda e-posta gönderme vb. İşlemler yapıyorsanız çalışan işlemlere ihtiyacınız vardır.

ps Backlog çok derin, buna neden olacak bir Dyno web süreci olacaktır.

GÜNCELLEME: 26 Mart 2013 tarihinde Heroku kuyruğu kaldırdı ve oturum kapatıldıktan sonra bekleme alanları çıktı.

kuyruk ve bekleme alanları yönlendirici günlük mesajlarından kaldırıldı. Ayrıca, Heroku yönlendiricisi artık gelen istekler için X-Heroku-Dynos-In-Use, X-Heroku-Queue-Depth ve X-Heroku-Queue-Wait-Time HTTP üstbilgilerini ayarlamıyor.


12
Heroku yönlendirici günlüklerine bakmak için şunu yapınheroku logs -p router --tail
Nathan Hurst

1
Bir kuyruk değeri görmüyorum dyno = web. 1 connect = 2ms servis = 4ms durum = 200 bayt = 43
Jaqx

8
Neden onları çıkardılar?
Attilio

6
Yine de Heroku Labs eklentisini etkinleştirerek bu bilgileri alabilirsiniz log-runtime-metrics. Bunu yapmak için aşağıdaki komutu çalıştırın heroku labs:enable log-runtime-metrics. Daha fazlasını buradan okuyun: devcenter.heroku.com/articles/log-runtime-metrics
Jeremy Fox

3
stackoverflow.com/a/19965981/1233555 - Heroku rastgele yönlendirmeye gitti, bu nedenle bazı dynos diğer dinozorlar serbestken yığınlanan kuyruklara sahip olabilir. Web dinamiklerinizde tüm isteklerin çok hızlı bir şekilde işlendiğinden emin olarak bunu önleyin .
ChrisPhoenix

15

Dynos, temelde örneğinizde çalışan işlemlerdir. Yeni Sedir yığınıyla, herhangi bir rasgele kabuk komutunu yürütmek için ayarlanabilirler. Web uygulamaları için, genellikle kullanıcılardan gelen HTTP isteklerine yanıt vermekten sorumlu olan "web" adlı bir işleminiz vardır. Diğer tüm süreçler daha önce "işçiler" olarak adlandırılan süreçlerdir. Bunlar, cron, işlem kuyrukları ve web işlemlerinizi bağlamak istemediğiniz herhangi bir ağır hesaplama gibi şeyler için arka planda sürekli olarak çalışır. Ayrıca, her bir işlem türünü ölçeklendirebilirsiniz, böylece her türden birden çok işlem ek eşzamanlılık için başlatılır. Kullandığınız her birinin miktarı gerçekten uygulamanızın ihtiyaçlarına ve aldığı yüke bağlıdır. Bunları izlemek için New Relic eklentisi gibi araçları kullanabilirsiniz.


1
"Dynolar temelde örneğinizde çalışan işlemlerdir." Bu yanlış bir ifadedir. Dyno, farklı durumlarda mevcuttur.
Neil Middleton

9

Bazıları bilinen bir oran olmadığını ve web çalışanlarının isteyeceğiniz 'arka plan' çalışanlarına oranının uygulamanızı nasıl tasarladığınıza bağlı olduğunu belirtti - bu doğru. Bununla birlikte, genel bir kural olarak, web çalışanlarınızın - ve dolayısıyla sundukları denetleyici eylemlerinin - tarayıcı eylemlerinden gelen yanıt sürelerindeki gecikmeyi azaltmak için ışık hızında ve çok hafif olmasını istediğinizi eklemenin yararlı olabileceğini düşündüm . Sunmak için örneğin yarım saniyeden daha fazlasını gerektiren bir tarayıcı eylemi varsa, muhtemelen bu eylemin büyük bir kısmını kuyruğa iten bir tür sistem tasarlamak isteyeceksiniz.

Daha sonra bu kuyruğa hizmet verecek bir çevrimdışı çalışan dinamosu tasarlarsınız. Çıktılarında bekleyen HTTP yanıtları olmadığı için çok daha uzun sürebilirler. Belki de eylemi başlatan ilk tarayıcı isteğinden oluşturduğunuz sayfa, isteğin her 5 saniyede bir bitip bitmediğini kontrol eden bir iş parçacığı başlatan bir Javascript veya bu satırlar boyunca bir şey sunacaktır.

Başkalarının da verdiği sebeple size hala çalışabileceğiniz bir oran veremiyorum, ancak umarım bu, uygulamanızı nasıl tasarlayacağınıza karar vermenize yardımcı olur. (Bunun birçok geçerli tasarımdan sadece biri olduğunu da belirtmeliyim.)


3

https://stackoverflow.com/a/19965981/1233555 - Heroku rastgele yönlendirmeye gitti, bu nedenle bazı dinozorlar yığınlanan kuyruklara sahip olabilir (uzun bir istek sunarken) diğer dinozorlar ücretsizdir. Web dinamiklerinizde tüm isteklerin çok hızlı bir şekilde işlendiğinden emin olarak bundan kaçının. Bu, ihtiyaç duyduğunuz web dinamosu sayısını azaltırken, daha fazla çalışan dinamosu gerektirir.

Ayrıca, yalnızca bazı Rails yapılandırmalarının yaptığı eşzamanlılığı destekleyen web uygulamanızı da önemsemeniz gerekir - Unicorn'u veya Thin ile dikkatlice yazılmış kodu (EventMachine'i engellemeyen G / Ç için) deneyin.

Muhtemelen her türden kaç dynoya ihtiyacınız olduğunu görmek için hesaplamak yerine denemelisiniz. New Relic'in dyno kuyruğunu bildirdiğinden emin olun - yukarıdaki bağlantıya bakın.


1

Kısa cevap, sıralarınızı düşük tutmak için ihtiyaç duyduğunuz kadarına ihtiyacınız olduğudur.

John'un açıkladığı gibi, günlüklerinizde bir sıra görmeye başlarsanız, o zaman daha fazla dynoya ihtiyacınız vardır. Arka plan sıralarınızın çok uzadığını görmeye başlarsanız (bu bilgiyi nasıl elde edeceğiniz, uyguladığınız uygulamaya bağlıdır), o zaman daha fazla çalışana ihtiyacınız vardır.

Uygulama tasarımınıza ve kullanımınıza çok bağlı olduğu için bir oran yoktur.


1
Tamam teşekkürler. Dynos derken web dinozorlarını kastettiğinizi varsayıyorum. Ayrıca, günlüğümdeki bir kuyruğu nasıl kontrol ederim? Daha spesifik olarak istediğim şey, günlüğümü okuduğumda işlerin birikip birikmediğini nasıl anlarım? Ben bir Rails geliştiricisiyim, bu yüzden sık sık yerel bir sunucu çalıştırmak ve bu günlükleri okumakla uğraşıyorum, ancak bir kuyruk görürsem nasıl tanımlayacağımı bilemeyeceğimden emin değilim.
varatis

1
Cevabım kuyruk boyutunu nasıl belirleyeceğinizi açıklıyor - heroku'da günlükleri takip edin ve yönlendirici girişlerini ve sıra = değerini arayın. Yerel günlükleriniz size yardımcı olmaz - heroku logs -fkomut satırından kullanmanız gerekir .
John Beynon

1
@JohnBeynon Tamam, teşekkürler. Bunu daha sonra tekrar okuyana kadar fark etmemiştim.
varatis
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.