sql >> Databáze >  >> RDS >> PostgreSQL

Konfigurace Puma Cluster na Heroku

a) Potřebuji konfiguraci before_fork / after_fork jako v Unicornu, protože pracovníci Clusteru jsou rozvětvení?.

Obvykle ne, ale protože používáte preload_app , Ano. Předběžné načtení aplikace spustí a spustí instanci a poté rozdělí paměťový prostor pro pracovníky; výsledkem je, že se vaše inicializátory spustí pouze jednou (možná alokace připojení db a podobně). V tomto případě váš on_worker_boot kód je vhodný. Pokud nepoužíváte preload_app , pak se každý pracovník sám nabootuje, v takovém případě by bylo ideální použít inicializátor pro nastavení vlastního připojení, jako to děláte vy. Ve skutečnosti bez preload_app , váš on_worker_boot blok by došlo k chybě, protože v tomto okamžiku ActiveRecord a přátelé nejsou ani načteni.

b) Jak vyladím počet vláken v závislosti na mé aplikaci – jaký by byl důvod, proč to shodit? / V jakých případech by to znamenalo rozdíl? Není 0:16 již optimalizováno?

Na Heroku (a mém testování) nejlépe odpovídáte min /max vlákna s max <=DB_POOL nastavení. min vlákna umožňují vaší aplikaci uvolňovat prostředky, když není zatížena, což je obvykle skvělé pro uvolnění prostředků na serveru, ale pravděpodobně méně potřebné na Heroku; že dyno se již věnuje poskytování webových požadavků, může je také mít připravené. Při nastavování max vlákna <=váš DB_POOL Proměnná prostředí není vyžadována, riskujete, že spotřebujete všechna svá databázová připojení ve fondu, pak máte vlákno, které chce připojení, ale nemůže ho získat, a můžete získat starý "ActiveRecord::ConnectionTimeoutError - nemohl získat připojení k databázi do 5 sekund." chyba. To však závisí na vaší aplikaci, velmi dobře můžete mít max> DB_POOL a buď v pohodě. Řekl bych, že váš DB_POOL by měla být alespoň stejná jako vaše min hodnotu vláken, i když vaše připojení nejsou dychtivě načítána (vlákna 5:5 neotevře 5 spojení, pokud vaše aplikace nikdy nenarazí do databáze).

c) Databáze Heroku umožňuje 500 spojení. Jaká by byla dobrá hodnota pro DB_POOL v závislosti na počtu vláken, pracovníků a dyno? - Vyžaduje každé vlákno na pracovníka a dyno při paralelní práci jediné DB připojení?

Produkční vrstva umožňuje 500, aby bylo jasno :)

Každé vlákno na pracovníka a dyno mohlo využívat připojení v závislosti na tom, zda se všichni pokoušejí o přístup k databázi ve stejnou dobu. Obvykle jsou připojení znovu použita, jakmile jsou hotová, ale jak jsem zmínil v b) , pokud jsou vaše vlákna větší než váš bazén, můžete mít špatný čas. Spojení budou znovu použita, to vše zvládá ActiveRecord, ale někdy ne ideálně. Někdy spojení přestanou fungovat nebo zemřou, a proto se doporučuje zapnout Reaper, aby bylo možné detekovat a obnovit mrtvá spojení.



  1. Implementace vztahu jedna ku nule nebo jedné na SQL Server

  2. Jak vytvořit soubor pro zařazování skriptů Oracle SQL

  3. Drag and Drop v MS Access a podmíněné třídění

  4. Jak spustit PL SQL Block v Oracle