İşləyən Video Xidmətinin Sürətli İnkişafı üçün Serversiz Yanaşma

İşləyən Video Xidmətinin Sürətli İnkişafı üçün Serversiz Yanaşma

Mən autsorsingdə işləyirəm, burada əsas prinsipi “çox sat, tez et” ifadəsi ilə təsvir etmək olar. Nə qədər sürətli etsək, bir o qədər çox qazanacağıq. Və hər şeyin qoltuq və snot üzərində deyil, məqbul keyfiyyət səviyyəsində işləməsi arzu edilir. Qısa müddət ərzində tanıtım xidmətini inkişaf etdirmək lazım olan zaman öz təcrübəmdən danışacağam.

Verilənlər: AWS-də kök hesabı, texnologiya yığınının seçimində məhdudiyyət yoxdur, bir backend və inkişaf üçün bir ay.

Vəzifə: istifadəçilərin birdən dörd saniyəyə qədər davam edən birdən dördə qədər video yüklədiyi və daha sonra orijinal video seriyasına daxil edilən tanıtım xidmətini həyata keçirin.

qərar

Öz velosiped xidmətinizi belə qısa müddətdə yazmağınız yaxşı fikir deyil. Bundan əlavə, xidmətin yükün öhdəsindən gəlməsi və hər kəsin arzu olunan videonu əldə etməsi üçün infrastruktur tələb olunacaq. Və tercihen təyyarədən qiymət etiketi ilə deyil. Buna görə də, biz dərhal minimal fərdiləşdirmə ilə hazır həllər üzərində dayanırıq.

Video ilə işləmək üçün standart həll FFmpeg, arqumentlər vasitəsilə səsi kəsməyə və əlavə etməyə imkan verən çarpaz platformalı konsol yardım proqramıdır. Ediləcək tək şey bir sarğı yazmaq və onu həyata keçirməkdir. Biz iki videonu birləşdirən prototip yazırıq və... əyləncə başlayır. Kitabxana .NET Core 2-ə əsaslanır, o, istənilən virtual maşında işləməlidir, ona görə də biz AWS EC2 nümunəsini götürürük və hər şey işləyəcək

Gizli mətnyox, işləməyəcək
.
FFmpeg tapşırığı asanlaşdırsa da, həqiqətən işlək həll üçün siz EC2 instansiyası yaratmalı və onun üçün şəbəkə infrastrukturunu, o cümlədən Load Balancer dizayn etməlisiniz. Sıfırdan yerləşdirmənin sadə tapşırığı "bir az" daha mürəkkəbləşir və infrastruktur dərhal pul tələb etməyə başlayır - hər saat müştəri hesabından iş vaxtı üçün məbləğ çıxarılır.

Xidmətimiz Uzunmüddətli prosesləri əhatə etmir, böyük və yağlı əlaqəli verilənlər bazası tələb etmir və mikroservis zəngləri zənciri ilə hadisə əsaslı arxitekturaya mükəmməl uyğunlaşır. Həll özünü göstərir - biz EC2-dən imtina edə və AWS Lambda əsasında standart Image Resizer kimi həqiqi serversiz tətbiqi həyata keçirə bilərik.

Yeri gəlmişkən, AWS tərtibatçılarının .NET üçün açıq-aşkar bəyənməməsinə baxmayaraq, onlar .NET Core 2.1-i iş vaxtı kimi dəstəkləyir və bu, bütün inkişaf imkanlarını təmin edir.

Tortun üzərindəki albalı - AWS video faylları ilə işləmək üçün ayrıca xidmət təqdim edir - AWS Elemental MediaConvert.

İşin mahiyyəti inanılmaz dərəcədə sadədir: biz gedən videoya S3 linkini götürürük, AWS Console, .NET SDK və ya sadəcə JSON vasitəsilə video ilə nə etmək istədiyimizi yazırıq və xidmətə zəng edirik. O, özü daxil olan sorğuları emal etmək üçün növbələri həyata keçirir, nəticəni S3-ün özünə yükləyir və ən əsası, hər status dəyişikliyi üçün CloudWatch Hadisəsi yaradır. Bu, video emalını başa çatdırmaq üçün lambda tetikleyicilerini tətbiq etməyə imkan verir.

İşləyən Video Xidmətinin Sürətli İnkişafı üçün Serversiz Yanaşma
Son memarlıq belə görünür:

Bütün arxa tərəf iki lambdada yerləşir. Digəri, şaquli videoların fırlanması üçündür, çünki bu cür işi bir keçiddə etmək mümkün deyil.

Ön tərəfi JS-də yazılmış və pug vasitəsilə ümumi S3 vedrəsində tərtib edilmiş SPA ərizəsi şəklində yerləşdirəcəyik. Videoları özləri yükləmək üçün bizə heç bir server kodu lazım deyil - sadəcə S3-ün bizə təqdim etdiyi REST son nöqtələrini açmalıyıq. Yeganə odur ki, siyasətləri və CORS-u konfiqurasiya etməyi unutmayın.

Pitfalls

  • AWS MediaConvert, naməlum səbəblərdən yalnız hər bir video fraqmentinə səsi ayrıca tətbiq edir, lakin bizə bütün ekran qoruyucudan şən mahnı lazımdır.
  • Şaquli videoları ayrıca emal etmək lazımdır. AWS qara çubuqları sevmir və rulonları 90°-də qoyur.

Asan konkisürmə meydançası

Vətəndaşsızın bütün gözəlliyinə baxmayaraq, video ilə nə edilməli olduğunu izləməlisiniz: bitmiş video ardıcıllığına yapışdırın və ya audio əlavə edin. Xoşbəxtlikdən, MediaConvert öz İşləri vasitəsilə metadatanın ötürülməsini dəstəkləyir və biz həmişə bu metadatanı istənilən mərhələdə təhlil edərək “isMasterSoundJob” formasının sadə bayrağından istifadə edə bilərik.

Serversiz mükəmməl şəkildə NoOps ilə işləməyə imkan verir - layihə infrastrukturuna cavabdeh olan ayrıca komandanın lazımsızlığını qəbul edən bir yanaşma. Buna görə də, bu kiçik bir məsələ idi - biz hər halda hər zaman bir işi olan sistem administratorlarının iştirakı olmadan AWS-də həlli yerləşdiririk.
Və bütün bunları sürətləndirmək üçün biz VS-dən birbaşa bir düymə ilə yerləşdirməyə imkan verən AWS CloudFormation-da yerləşdirmə skriptini mümkün qədər avtomatlaşdırırıq. Nəticədə, 200 sətirli kod faylı sizə hazır həlli təqdim etməyə imkan verir, baxmayaraq ki, CloudFormation sintaksisi buna öyrəşmədiyiniz halda şok yarada bilər.

Ümumi

Serversiz panacea deyil. Lakin bu, üç məhdudiyyəti olan situasiyalarda həyatı çox asanlaşdıracaq: “məhdud resurslar – qısamüddətli – az pul”.

Serversiz üçün uyğun proqramların xüsusiyyətləri

  • Uzunmüddətli proseslər olmadan. API Gateway sərt limiti 29 saniyə, lambda sərt limiti 5 dəqiqə;
  • Hadisəyə əsaslanan arxitektura ilə təsvir edilmişdir;
  • SOA kimi boş birləşmiş komponentlərə parçalanır;
  • vəziyyətinizlə çox iş tələb etmir;
  • .NET Core-da yazılmışdır. .NET Framework ilə işləmək üçün sizə hələ də ən azı uyğun işləmə vaxtı olan Docker lazımdır.

Serversiz yanaşmanın üstünlükləri

  • infrastruktur xərclərini azaldır;
  • həllin çatdırılması xərclərini azaldır;
  • avtomatik miqyaslılıq;
  • texnoloji tərəqqinin qabaqcıl kənarında inkişaf.

Xüsusi bir nümunə ilə çatışmazlıqlar

  • Paylanmış izləmə və qeyd - qismən AWS X-Ray və AWS CloudWatch vasitəsilə həll edilir;
  • əlverişsiz sazlama;
  • Yük olmadıqda soyuq başlanğıc;
  • AWS istifadəçi düşmən interfeysi universal problemdir :)

Mənbə: www.habr.com

Добавить комментарий