Ажлын видео үйлчилгээг хурдан хөгжүүлэх сервергүй арга

Ажлын видео үйлчилгээг хурдан хөгжүүлэх сервергүй арга

Би аутсорсингийн чиглэлээр ажилладаг бөгөөд гол зарчмыг "Их зарж, хурдан хий" гэсэн хэллэгээр тайлбарлаж болно. Бид үүнийг хурдан хийх тусам илүү их орлого олох болно. Мөн бүх зүйл таяг, хонхорхой дээр биш, харин чанарын хүлээн зөвшөөрөгдсөн түвшинд ажиллах нь зүйтэй юм. Богино хугацаанд сурталчилгааны үйлчилгээг хөгжүүлэх шаардлагатай байсан туршлагаа би танд хэлье.

Үүнд: AWS дээрх root бүртгэл, технологийн стек сонгоход хязгаарлалт байхгүй, нэг арын хэсэг, хөгжүүлэлт хийхэд нэг сар.

Даалгавар: Хэрэглэгчид нэгээс дөрвөн секундын үргэлжлэх нэгээс дөрвөн видеог байршуулж, дараа нь анхны видео цувралд суулгадаг сурталчилгааны үйлчилгээг хэрэгжүүлэх.

шийдвэр

Ийм богино хугацаанд өөрийн дугуйн үйлчилгээг бичих нь тийм ч сайн санаа биш юм. Нэмж дурдахад үйлчилгээ нь ачааллыг даван туулж, хүн бүр хүссэн видеог хүлээн авахын тулд дэд бүтэц шаардлагатай болно. Мөн онгоцны үнийн шошготой биш байсан нь дээр. Тиймээс бид хамгийн бага тохируулгатай бэлэн шийдлүүдэд нэн даруй анхаарлаа хандуулдаг.

Видеотой ажиллах стандарт шийдэл бол FFmpeg, хөндлөн платформ консол хэрэгсэл бөгөөд аргументуудаар дамжуулан аудиог таслах, дахин давтах боломжийг олгодог. Боодол бичиж, амьдралдаа гаргах л үлдлээ. Бид хоёр видеог хооронд нь холбосон прототипийг бичиж, ... хөгжилтэй эхэлнэ. Номын сан нь .NET Core 2 дээр суурилсан бөгөөд энэ нь ямар ч виртуал машин дээр ажиллах ёстой, тиймээс бид AWS EC2 жишээ авах бөгөөд бүх зүйл ажиллах болно.

Нуугдсан текстүгүй, энэ нь ажиллахгүй
.
Хэдийгээр FFmpeg нь даалгаврыг хялбаршуулдаг ч үнэхээр үр дүнтэй шийдэлд хүрэхийн тулд та EC2 инстанцыг үүсгэж, түүнд зориулсан сүлжээний дэд бүтцийг, тэр дундаа Ачаалал тэнцвэржүүлэгчийг төлөвлөх хэрэгтэй. Эхнээс нь байршуулах энгийн ажил нь "бага зэрэг" илүү төвөгтэй болж, дэд бүтэц нь тэр даруй мөнгө шаардаж эхэлдэг - цаг тутамд үйлчлүүлэгчийн данснаас ашиглалтын хугацааны мөнгийг хасдаг.

Манай үйлчилгээ нь Урт хугацааны процессыг агуулдаггүй, том, бүдүүн харилцааны мэдээллийн сан шаарддаггүй, микро үйлчилгээний дуудлагын гинжин хэлхээ бүхий үйл явдалд суурилсан архитектурт төгс нийцдэг. Энэ шийдэл нь өөрөө санал болгож байна - бид EC2-ээс татгалзаж, AWS Lambda дээр суурилсан стандарт Image Resizer гэх мэт жинхэнэ сервергүй програмыг хэрэгжүүлж чадна.

Дашрамд хэлэхэд, AWS хөгжүүлэгчид .NET-д дургүй байдаг ч тэд .NET Core 2.1-ийг ажиллах цаг болгон дэмждэг бөгөөд энэ нь бүх төрлийн хөгжүүлэлтийн боломжийг олгодог.

Мөн бялуу дээрх интоор - AWS нь видео файлуудтай ажиллах тусдаа үйлчилгээ үзүүлдэг - AWS Elemental MediaConvert.

Ажлын мөн чанар нь маш энгийн: бид гарч буй видеоны S3 холбоосыг авч, AWS Console, .NET SDK эсвэл зүгээр л JSON-ээр дамжуулан видеогоор юу хийхийг хүсч байгаагаа бичиж, үйлчилгээг дууддаг. Энэ нь өөрөө ирж буй хүсэлтийг боловсруулах дарааллыг хэрэгжүүлж, үр дүнг өөрөө S3-д байршуулж, хамгийн чухал нь статусын өөрчлөлт бүрт CloudWatch Event үүсгэдэг. Энэ нь бидэнд видео боловсруулалтыг дуусгахын тулд lambda триггерийг хэрэгжүүлэх боломжийг олгодог.

Ажлын видео үйлчилгээг хурдан хөгжүүлэх сервергүй арга
Эцсийн архитектур нь иймэрхүү харагдаж байна:

Бүх арын хэсэг нь хоёр ламбдад байрладаг. Өөр нэг нь босоо видеог эргүүлэхэд зориулагдсан, учир нь ийм ажлыг нэг дамжуулалтаар хийх боломжгүй юм.

Бид урд талыг JS дээр бичсэн, pug-ээр дамжуулан эмхэтгэсэн SPA програмын хэлбэрээр нийтийн S3 хувин дээр байрлуулах болно. Видеог өөрсдөө татаж авахын тулд бидэнд ямар ч серверийн код хэрэггүй - бид зүгээр л S3-ийн бидэнд өгдөг REST төгсгөлийн цэгүүдийг нээх хэрэгтэй. Цорын ганц зүйл бол бодлого болон CORS тохируулахаа бүү мартаарай.

Хүндрэл

  • AWS MediaConvert нь тодорхойгүй шалтгааны улмаас зөвхөн видеоны фрагмент бүрт дуу чимээг тусад нь ашигладаг боловч бидэнд дэлгэц амраагчаас хөгжилтэй дуу хэрэгтэй.
  • Босоо видеог тусад нь боловсруулах шаардлагатай. AWS нь хар бааранд дургүй бөгөөд өнхрүүлгийг 90°-д тавьдаг.

Хялбар тэшүүрийн талбай

Иргэний харьяалалгүй бүх гоо сайхныг үл харгалзан та видеог юу хийх хэрэгтэйг хянах хэрэгтэй: дууссан видео дараалалд нааж эсвэл аудио нэмнэ үү. Аз болоход, MediaConvert нь ажлын байраар дамжуулан мета өгөгдлийг дамжуулахыг дэмждэг бөгөөд бид "isMasterSoundJob" хэлбэрийн энгийн тугийг ашиглаж, энэ мета өгөгдлийг аль ч шатанд задлан шинжлэх боломжтой.

Сервергүй нь NoOps-тэй ажиллахыг төгс зөвшөөрдөг - төслийн дэд бүтцийг хариуцдаг тусдаа баг шаардлагагүй гэж үздэг арга. Тиймээс, энэ нь жижиг асуудал байсан - бид ямар ч байсан хийх зүйл үргэлж байдаг системийн администраторуудын оролцоогүйгээр AWS дээр шийдлийг ашигладаг.
Мөн энэ бүхнийг хурдасгахын тулд бид VS-ээс шууд нэг товчлуураар байршуулах боломжийг олгодог AWS CloudFormation дээр байршуулах скриптийг аль болох автоматжуулдаг. Үүний үр дүнд 200 мөр кодын файл нь танд бэлэн шийдлийг гаргах боломжийг олгодог боловч хэрэв та үүнд дасаагүй бол CloudFormation синтакс нь цочирддог.

Нийт

Сервергүй бол эм биш юм. Гэхдээ энэ нь "хязгаарлагдмал нөөц - богино хугацаа - бага мөнгө" гэсэн гурван хязгаарлалттай нөхцөл байдалд амьдралыг илүү хялбар болгоно.

Сервергүй ажиллахад тохиромжтой програмуудын шинж чанарууд

  • Урт хугацааны процессгүйгээр. API Gateway хатуу хязгаар нь 29 секунд, lambda хатуу хязгаар нь 5 минут;
  • Үйл явдалд тулгуурласан архитектураар тодорхойлсон;
  • SOA гэх мэт сул холболттой бүрэлдэхүүн хэсгүүдэд задардаг;
  • таны нөхцөл байдалд их ажиллах шаардлагагүй;
  • .NET Core дээр бичигдсэн. .NET Framework-тэй ажиллахын тулд танд хамгийн багадаа тохирох ажиллах цагтай Docker хэрэгтэй болно.

Сервергүй аргын ашиг тус

  • дэд бүтцийн зардлыг бууруулдаг;
  • уусмалыг хүргэх зардлыг бууруулдаг;
  • автоматаар өргөтгөх чадвар;
  • Технологийн дэвшлийн хамгийн дээд цэгт хөгжил.

Тодорхой жишээгээр сул талууд

  • Тархсан мөрдөх, бүртгэх - AWS X-Ray болон AWS CloudWatch-ээр хэсэгчлэн шийдэгдсэн;
  • тохиромжгүй дибаг хийх;
  • Ачаалал байхгүй үед хүйтэн эхлэх;
  • AWS хэрэглэгчийн дайсагнасан интерфейс нь бүх нийтийн асуудал юм :)

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх