2017-07-21 65 views
5

Bir AWS Lambda işlevini Amazon RDS'ye (MySQL) bağladım. Lambda fonksiyonu aynı anda 100 kez çağrıldığında, RDS'de yaklaşık 400 bağlantı açılır (RDS konsolunda gösterildiği gibi). Bu neden?AWS Lambda RDS çok fazla bağlantı var

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE DB = "MYDB"; 

Tüm bağlantılar Lambda kaplardan şunlardır:

kullanıyorum etkin bağlantıları kontrol etti. Lambda konteynırların eşzamanlı isteklerde nasıl davrandığını bilen var mı? Kaplar neden tekrar kullanılmıyor?

Güncel Yapılandırma: Bir bağlantı isteği başına açıldığında

var sequelize = new Sequelize('DB','username', 'password' ,{ dialect: 'mysql', port: port, host: host, pool: { max: 20, min: 0, idle: 300000 } });

bile olsa 400 bağlantıların nasıl açılır 100. olmalıdır?

Sequelize kullanıyorum. Düğüm JS Not 6.9.1

: Bağlantı Lambda Handler yönteminin dışında sadece bir kez olur

+0

Aynı isteklerin bir çoğundan dolayı DB bağlantılarını bu kadar fazla yükün geleceğini bekleyecek şekilde ölçeklendirmesi mümkün olabilir. Bağlantıyı tutmayı ve bir sonraki isteği –

+0

'dan sonra biraz zamanlamayı deneyebilirsiniz. Bu kapsayıcıyı yeniden kullanabilir, ancak bu bir web uygulaması için gerekli değildir? Eşzamanlılık, bir web uygulamasının temel ilkesidir. Neden Lambda 100 istekte bulunmak için bu kadar çok konteynere ihtiyaç duyuyor? –

cevap

0

varsayılan tarafından Sequelize bir bağlantı havuzu oluşturur, nedenle uzun süren bir hizmet olarak çalışacak şekilde tasarlanmış çünkü o 4 bağlantıları yaratıyor . Bu ayarı options.pool - false olarak ayarlayarak devre dışı bırakabilirsiniz bkz. the API reference

Ancak, uygulamanız ölçeklendiğinde bu, Lambda'nın gitmeyeceği temel bir sorundur. Db bağlantılarınızı sonlandırmak için EC2'de bir DB proxy katmanı oluşturmanızı öneririz (yani ProxySQL kullanarak). Daha sonra rds db bir bağlantı havuzu olacak.

Bunun etrafındaki tek yol, arka plan mağazanız olarak dynamodb kullanmaktır.

+0

DynamoDb ile olan sınırlamalar problemdir. Bunun için gidemeyiz. DB proxy katmanı nasıl oluşturulur? Herhangi bir referans? –

+0

Yorumum, Sequelize'de bağlantı havuzunu nasıl devre dışı bırakacağım konusunda güncelledim. Ayrıca kullanabileceğiniz bir DB proxy örneği ekledim. – Robo

+0

almadı. Önbelleğe alma ve performansın iyileştirildiği söylenir. Bağlantı sorunumu nasıl çözer? –