2017-08-10 109 views
5

Benim API sunucum çok sınırlı bir disk alanına (500MB) ve belleğe (1GB) sahiptir. API'den biri, bir dosya almak için aldığı çağrıları çağırır. Tüketici, API'yi çağırır ve indirilecek URL'yi iletir.Bir sunucudan diğerine (curc kullanarak) dosya akışı nasıl yapılır (sınırlı sunucu kaynakları)

Sunucumun "hedefi" bu dosyayı Amazon S3'e yüklemektir. Ne yazık ki, tüketiciden dosyayı doğrudan S3'e (gereksinimlerin bir kısmı) yüklemesini istemiyorum.

Sorun bazen büyük dosyalar (10GB) ve bunları diske kaydedip S3'e yüklemek bir seçenek değil (500MB disk alanı sınırı).

Sorum şu ki, Curl Linux programını kullanarak dosyayı giriş URL'sinden S3'e nasıl "nasıl" yapabilirim?

Not: Farklı yollarla pipetleme yapabildim, ancak önce tüm dosyayı indirmeye çalışıyorum ve başarısız oluyor ya da bellek hatası veriyor ve çıkıyorum. Tahminim indirmenin yüklemeden çok daha hızlı olması, dolayısıyla 10GB'lık dosyalar aldığımda piponun/belleğin büyüdüğü ve patladığını (sunucuda 1GB bellek) patlatıyor.

Curl ve borular kullanarak yapmaya çalıştığım şeyi elde etmenin bir yolu var mı?

, teşekkür ederiz - Jack

+0

Sunucunuz nasıl uygulanır? Çoğu programlama dili, kodda bir anda çok fazla yer kalmayacak şekilde kodda "akışa/akışa" izin vermelidir. Eğer bu bir seçenek değilse, o zaman en iyi bahsinize örnek olarak orta ölçekli bir EBS hacmi (100GB demek) eklemek ve bunu geçici bir evreleme alanı olarak kullanmak olabilir. – stdunbar

+0

@stdunbar - çok fazla iç ayrıntıya girmeden, kıvırmayı ve işi yapmayı tercih ederim. Eğer uygunsa, harika! Eğer değilse, başka yollar bulmam gerekecek ve önerinizi alacağım. Ty – Joe

cevap

0

başka SO kullanıcı Stdin'den bukle yayınlarla ilgili benzer bir soru sordu. Bakınız use pipe for curl data.

Yükleme akışınızı ilk kıvrılma işleminin standart çıktısının çıktısından gönderdikten sonra, yükleyebileceğinizden daha hızlı yüklediğiniz için bellek dolduğunda, mbuffer yardımcı programına bakın. Ben kendim kullanmadım, ama tam olarak bu tür bir problem için tasarlanmış gibi görünüyor.

Son olarak, eğer hiç bir şey başarısız olursa, sanırım yükün transfer oranlarını kilitlemek ve bazı özdeş ve sürdürülebilir değerlere indirmek için curl'in - oran oranı seçeneğini kullanabilirsiniz. Bu, potansiyel olarak bant genişliğini yetersiz kullanır ve çoklu paralel indirme/yükleme akışlarıyla iyi ölçeklenmez, ancak bir kerelik toplu işlem için yeterince iyi olabilir.