Çalışan bir video hizmetinin hızlı gelişimi için sunucusuz yaklaşım

Çalışan bir video hizmetinin hızlı gelişimi için sunucusuz yaklaşım

Ana prensibi “çok sat, çabuk yap” deyimiyle tanımlanabilecek dış kaynak kullanımı alanında çalışıyorum. Ne kadar hızlı yaparsak o kadar çok kazanacağız. Ve her şeyin koltuk değneği ve sümük üzerinde değil, kabul edilebilir bir kalite düzeyinde çalışması arzu edilir. Kısa sürede bir tanıtım hizmeti geliştirmenin gerekli olduğu zamanlardaki deneyimimi size anlatacağım.

Verilen: AWS'de kök hesap, teknoloji yığını seçiminde herhangi bir kısıtlama yok, bir arka uç ve geliştirme için bir ay.

Sorun: Kullanıcıların bir ila dört saniye süren birden dörde kadar video yüklediği ve bunların daha sonra orijinal video serisine yerleştirildiği bir tanıtım hizmeti uygulayın.

karar

Bu kadar kısa sürede kendi bisiklet servisinizi yazmak iyi bir fikir değildir. Ayrıca hizmetin yükle başa çıkabilmesi ve herkesin imrenilen videoyu alabilmesi için altyapıya ihtiyaç duyulacak. Ve tercihen uçağın fiyat etiketiyle değil. Bu nedenle minimum özelleştirme ile hemen hazır çözümlere odaklanıyoruz.

Videoyla çalışmaya yönelik standart çözüm, argümanlar aracılığıyla sesi kesmenize ve üzerine kaydetmenize olanak tanıyan platformlar arası bir konsol yardımcı programı olan FFmpeg'dir. Geriye kalan tek şey bir paketleyici yazmak ve onu hayata geçirmek. İki videoyu birleştiren bir prototip yazıyoruz ve... eğlence başlıyor. Kitaplık .NET Core 2 tabanlıdır, herhangi bir sanal makinede çalışması gerekir, bu nedenle bir AWS EC2 örneğini alıyoruz ve her şey çalışacak

Gizli metinhayır işe yaramayacak
.
FFmpeg görevi basitleştirse de gerçekten çalışan bir çözüm için bir EC2 bulut sunucusu oluşturmanız ve bunun için Yük Dengeleyici de dahil olmak üzere bir ağ altyapısı tasarlamanız gerekir. Sıfırdan dağıtım gibi basit bir görev "biraz" daha karmaşık hale gelir ve altyapı hemen para talep etmeye başlar - çalışma süresi miktarı her saat müşteri hesabından çekilir.

Hizmetimiz Uzun Süreli süreçleri içermez, büyük ve kapsamlı bir ilişkisel veritabanı gerektirmez ve mikro hizmet çağrıları zinciriyle olay tabanlı bir mimariye mükemmel şekilde uyar. Çözüm kendini gösteriyor; EC2'yi bırakıp AWS Lambda'yı temel alan standart Image Resizer gibi gerçek sunucusuz bir uygulamayı uygulayabiliriz.

Bu arada, AWS geliştiricilerinin .NET'ten hoşlanmamalarına rağmen, tam kapsamlı geliştirme fırsatları sağlayan .NET Core 2.1'i çalışma zamanı olarak destekliyorlar.

Ve işin güzel tarafı AWS, video dosyalarıyla çalışmak için ayrı bir hizmet sunuyor - AWS Elemental MediaConvert.

İşin özü inanılmaz derecede basit: Giden videoya bir S3 bağlantısı alıyoruz, AWS Konsolu, .NET SDK veya basitçe JSON aracılığıyla videoyla ne yapmak istediğimizi yazıyoruz ve hizmeti çağırıyoruz. Gelen istekleri işlemek için kuyrukları kendisi uygular, sonucu S3'ün kendisine yükler ve en önemlisi her durum değişikliği için bir CloudWatch Etkinliği oluşturur. Bu, video işlemeyi tamamlamak için lambda tetikleyicilerini uygulamamıza olanak tanır.

Çalışan bir video hizmetinin hızlı gelişimi için sunucusuz yaklaşım
Nihai mimari şöyle görünüyor:

Arka ucun tamamı iki lambdada barındırılıyor. Bir diğeri dikey videoları döndürmek içindir, çünkü bu tür işler tek geçişte yapılamaz.

Ön kısmı JS ile yazılmış ve pug aracılığıyla derlenmiş bir SPA uygulaması şeklinde halka açık bir S3 kovasına yerleştireceğiz. Videoları indirmek için herhangi bir sunucu koduna ihtiyacımız yok; yalnızca S3'ün bize sağladığı REST uç noktalarını açmamız gerekiyor. Tek şey politikaları ve CORS'u yapılandırmayı unutmayın.

Tuzaklar

  • AWS MediaConvert, bilinmeyen bir nedenden dolayı sesi yalnızca her video parçasına ayrı ayrı uygular, ancak ekran koruyucunun tamamından neşeli bir şarkıya ihtiyacımız var.
  • Dikey videoların ayrı olarak işlenmesi gerekir. AWS siyah çubukları sevmez ve silindirleri 90°'ye yerleştirir.

Kolay buz pateni pisti

Stateless'ın tüm güzelliğine rağmen videoyla ne yapmanız gerektiğini takip etmeniz gerekiyor: bitmiş video sekansına yapıştırın veya ses ekleyin. Neyse ki MediaConvert, meta verileri İşler aracılığıyla aktarmayı destekliyor ve bu meta verileri herhangi bir aşamada ayrıştırmak için her zaman "isMasterSoundJob" biçiminde basit bir bayrak kullanabiliriz.

Sunucusuz, proje altyapısından sorumlu ayrı bir ekibin gereksizliğini varsayan bir yaklaşım olan NoOps ile çalışmaya mükemmel bir şekilde izin verir. Bu nedenle, bu küçük bir meseleydi; çözümü AWS'de, her zaman yapacak bir şeyleri olan sistem yöneticilerinin katılımı olmadan dağıtıyoruz.
Tüm bunları hızlandırmak için, doğrudan VS'den tek tuşla dağıtım yapmanıza olanak tanıyan AWS CloudFormation'da dağıtım komut dosyasını mümkün olduğunca otomatikleştiriyoruz. Sonuç olarak, 200 satırlık koddan oluşan bir dosya, hazır bir çözüm sunmanıza olanak tanır, ancak CloudFormation sözdizimi, buna alışkın değilseniz şok edici olabilir.

Toplam

Sunucusuz çözüm her derde deva değildir. Ancak üç sınırın olduğu durumlarda hayatı çok daha kolaylaştıracaktır: "sınırlı kaynaklar - kısa vadeli - az para."

Sunucusuz Kullanıma Uygun Uygulamaların Özellikleri

  • Uzun Süreli işlemler olmadan. API Gateway donanım sınırı 29 saniye, lambda donanım sınırı 5 dakikadır;
  • Olay Odaklı mimari tarafından tanımlanan;
  • SOA gibi gevşek bağlı bileşenlere ayrılıyor;
  • durumunuzla ilgili fazla çalışma gerektirmez;
  • .NET Core'da yazılmıştır. .NET Framework ile çalışmak için yine de en azından uygun çalışma zamanına sahip Docker'a ihtiyacınız olacak.

Sunucusuz yaklaşımın faydaları

  • altyapı maliyetlerini azaltır;
  • çözümü sunma maliyetini azaltır;
  • otomatik ölçeklenebilirlik;
  • Teknolojik ilerlemenin en ileri noktasında gelişme.

Belirli bir örnekle dezavantajlar

  • Dağıtılmış izleme ve günlük kaydı - kısmen AWS X-Ray ve AWS CloudWatch aracılığıyla çözüldü;
  • uygunsuz hata ayıklama;
  • Yük olmadığında Soğuk Başlatma;
  • AWS kullanıcı düşmanı arayüzü evrensel bir sorundur :)

Kaynak: habr.com

Yorum ekle