AWS Lambda konteynerlarini qayta ishlatish bo'yicha eng yaxshi amaliyotlar

AWS Lambda-ni boshqa xizmatlarga ulashda issiqni optimallashtirish boshlanadi

AWS Lambda serversiz va fuqaroligi yo'qligi sababli keng miqyoslilikni ta'minlaydi, bu lambda funktsiyasining ko'p nusxalarini bir zumda yumshatish imkonini beradi (bu erda tasvirlangan). Ammo, dastur kodini yozayotganda, siz ba'zi rasmiy ma'lumotlarga kirishni xohlaysiz. Bu RDS yoki S3 kabi ma'lumotlar omboriga ulanishni anglatadi. Biroq, AWS Lambda-dan boshqa xizmatlarga ulanish sizning funktsional kodingizga vaqt qo'shadi. Bundan tashqari, RDS inventariga ruxsat etilgan ulanishlarning maksimal soniga erishish kabi yuqori miqyoslilikning yon ta'siri bo'lishi mumkin. Bunga qarshi turishning bir usuli - ulanishni to'xtatish va lambda ish vaqtini qisqartirish uchun AWS Lambda-da konteynerlardan qayta foydalanish.

Bu erda lambda so'rovining hayotiy tsiklini tushuntirish uchun ba'zi foydali diagrammalar mavjud.

Funktsiyangiz birinchi marta ishga tushganda yoki harakatsiz bo'lganidan so'ng, sovuq boshlash paytida quyidagilar ro'y beradi:

  • Kod va qaramliklar yuklab olinadi.
  • Yangi konteyner ishga tushirildi.
  • Ish vaqti tiklangan.

Yakuniy harakat lambda funktsiyasi har safar chaqirilganda sodir bo'ladigan kodni boshlashdir. Agar konteyner lambda funktsiyasini keyingi chaqirish uchun qayta ishlatilsa, kodni boshlashdan oldin o'tishimiz mumkin. Bu iliq start deb ataladi va bu ishlov berish usuli doirasidan tashqarida ulanishni belgilab, boshqa xizmatlarga ulanishda optimallashtirishimiz mumkin bo'lgan qadamdir.

Lambdaning boshqa AWS xizmatlariga ulanish

Masalan: RDS misoliga ulaning, AWS piktogrammalarini shu erdan oling

Bizda ishlash uchun asosiy va keng tarqalgan misol bor - biz ma'lumotni boyitish uchun konteyner manbasiga ulanishni xohlaymiz. Ushbu misolda, JSON to'lov yuklamasi ID bilan birga keladi va Lambda funktsiyasi IDg tegishli nomini topish uchun PostgreSQL ishlaydigan RDS nusxasiga ulanadi, shunda biz boyitilgan to'lov miqdorini qaytaramiz. Lambda funktsiyasi VPCda yashaydigan RDS bilan bog'langanligi sababli, lambda funktsiyasi endi xususiy tarmoq ichida ham yashashi kerak. Bu sovuq boshlash uchun bir necha qadam qo'shadi - VPC elastik tarmoq interfeysi (ENI) ulanishi kerak (Jeremy Dalyning blogida aytilganidek, bu sizning sovuq boshlanishingizga vaqt qo'shadi).

Eslatma: agar biz DSMS o'rniga DynamoDB-da kalit / qiymatni saqlash vositasidan foydalansak, VPC-dan foydalanmasligimiz mumkin.

Men ushbu vazifani hal qilish uchun ikkita echimni ko'rib chiqaman, birinchisi - "sodda" echim, ikkinchisi esa keyingi takliflar uchun ulanishni qayta ishlatib, iliq start vaqtlarini optimallashtiradi. Keyin har bir echimning ishlashini taqqoslaymiz.

Variant 1 - ishlov beruvchida RDS-ga ulanish

Ushbu kod misoli men ushbu vazifaga qanday qilib bemalol yondashishim mumkinligini ko'rsatadi - ma'lumotlar bazasiga ulanish ishlov berish usulida. Foydali yukni qaytarishdan oldin identifikator nomini olish uchun oddiy tanlov so'rovi mavjud, bu endi ismni o'z ichiga oladi.

Kichik sinov paytida ushbu parametr qanday amalga oshirilishini ko'rib chiqamiz va 20 ta tasodifiy 2000 ta taklif bilan portlash sodir bo'ladi. Minimal davomiyligi 18 ms, o'rtacha 51 ms va atigi 1 sekunddan oshadi (sovuq boshlanish vaqti).

Lambda davomiyligi

Quyidagi grafik ma'lumotlar bazasiga maksimal sakkizta ulanish mavjudligini ko'rsatadi.

5 daqiqali oynada RDS ma'lumotlar bazasiga ulanishlar soni.

Variant 2 - Global aloqadan foydalaning

Ikkinchi variant - ulanishni ishlov berish usulidan tashqarida global deb aniqlash. Keyin ishlov beruvchida biz ulanish mavjudligini tekshirish uchun tekshiruvni qo'shamiz va faqat agar u mavjud bo'lmasa ulanish mumkin. Bu shuni anglatadiki, ulanish har bir idishda bir marta amalga oshiriladi. Shartli ravishda o'rnini bosgan holda ulanishni o'rnatish, agar kod mantig'ida talab qilinmasa, ulanishning hojati yo'q degan ma'noni anglatadi.

Biz endi ma'lumotlar bazasiga ulanishni yopmayapmiz, shuning uchun ulanish funktsiyani keyingi chaqirish uchun qoladi. Ulanishni qayta ishlatish iliq start vaqtini sezilarli darajada kamaytiradi - o'rtacha davomiylik taxminan 3 baravar tezroq va minimal 18 ms emas, balki 1 ms.

Lambda muddati

RDS misoliga ulanish ko'p vaqt talab qiladigan vazifadir va har bir chaqiruv uchun ulanmaslik ishlash uchun foydalidir. Oddiy ma'lumotlar bazasi so'rovi uchun ma'lumotlar bazasiga ulanishda biz 20 ta maksimal ma'lumotlar bog'lanishiga erishamiz, bu moslik darajasiga mos keladi (biz 20 marta xujjatlarni 100 marta qildik). Takliflar portlashi to'xtaganda, ulanishlar asta-sekin yopiladi.

Endi AWS lambda davomiyligini 15 daqiqaga oshirdi, demak ma'lumotlar bazasi ulanishlari uzoqroq davom etishi mumkin va siz RDS maksimal ulanishlar soniga etib borish xavfi tug'dirasiz. Odatiy maksimal ulanishlarni RDS parametrlar guruhi sozlamalarida qayta yozib qo'yish mumkin, garchi maksimal ulanish sonining ko'payishi xotirani ajratishda muammolarga olib kelishi mumkin. Kichik nusxalarda odatiy max_connections qiymati 100 dan kam bo'lishi mumkin. Ushbu cheklovlarni yodda tuting va kerak bo'lganda ma'lumotlar bazasiga ulanish uchun ilova mantig'ini qo'shing.

Boshqa vazifalar uchun global ulanishdan foydalanish

Lambda S3 ga ulanmoqda

Lambda bilan bajarishimiz kerak bo'lgan umumiy vazifa S3-dan davlat ma'lumotlarini olishdir. Quyidagi kod parchasi Python Lambda Funktsiyasining rejasi bilan ta'minlangan AWS bo'lib, uni AWS konsoliga kirib, shu erni bosib o'tishingiz mumkin. Kodda S3 mijoz to'liq konteyner ishga tushirilganda ishlov beruvchidan tashqarida to'liq aniqlanganligini ko'rishingiz mumkin, RDS misolida global ulanish ishlov beruvchiga o'rnatilgan. Ikkala yondashuv ham global o'zgaruvchilarni o'rnatadi, bu esa ularni keyingi chaqiriqlar uchun ishlatishga imkon beradi.

s3-get-object lambda skript kodi parchasi https://console.aws.amazon.com/lambda/home?region=us-east-1#/create/new?bp=s3-get-object-python

Atrof muhit o'zgaruvchilarini shifrlash

Lambda konsoli qo'shimcha xavfsizlik uchun atrof-muhit parametrlarini shifrlash imkoniyatini beradi. Quyidagi kod parchasi Lambda funktsiyasidan atrof-muhit o'zgaruvchilarini shifrlash uchun yordamchi skriptning Java misolida keltirilgan AWS. Ushbu qo'llanmani (ayniqsa 6-bosqichni) bajarib, kod parchasiga o'tishingiz mumkin. DECRYPTED_KEY klass global sifatida aniqlanganligi sababli, decryptKey () funktsiyasi va mantiq lambda idishiga atigi bir marta chaqiriladi. Shu sababli, biz iliq start davrlarida sezilarli yaxshilanishni ko'ramiz.

https://console.aws.amazon.com/lambda/home?region=us-east-1#/functions va https://docs.aws.amazon.com/lambda/latest/dg/tutorial-env_console.html

FaaS echimlarida global o'zgaruvchilardan foydalanish

Ushbu yondashuv AWS Lambda uchun alohida emas. Global ulanishdan foydalanish usuli boshqa bulut ta'minotchilarining serversiz funktsiyalariga ham qo'llanilishi mumkin. Google Cloud Functions maslahatlari va hiyla-nayranglari dangasa bo'lmagan o'zgaruvchilarga (o'zgaruvchi har doim ishlov berish usulidan tashqarida boshlanganda) dangasa o'zgaruvchilarga (global o'zgaruvchi faqat kerak bo'lganda o'rnatiladi) global o'zgaruvchilarga yaxshi tushuntirish beradi.

Boshqa eng yaxshi amaliyotlar

Shuni yodda tutish uchun ba'zi boshqa eng yaxshi amaliyotlar.

Sinov

FaaS-dan foydalanish mikroservislar arxitekturasiga ega bo'lishni osonlashtiradi. Kichkina, diskret funktsional qismlarga ega bo'lish, birliklarni samarali sinovdan o'tkazishda yordam beradi. Qurilmangizning sinovlarini o'tkazish uchun:

  • Lambda to'plamidan testga bog'liqlikni chiqarib tashlashni unutmang.
  • Dasturning asosiy usuliga o'xshab, mantiqni ishlov berish usulidan ajratib turing.

Bog'lanish va paket hajmi

Joylashtirish paketining hajmini qisqartirish shuni anglatadiki, kodni yuklab olish boshlanganda tezroq bo'ladi va shuning uchun sizning sovuq boshlanish vaqtingizni yaxshilaydi. ZIP fayllarning hajmini kamaytirish uchun foydalanilmagan kutubxonalarni va o'lik kodni olib tashlang. AWS SDK Python va JavaScript ish vaqtlari uchun taqdim etiladi, shuning uchun ularni tarqatish paketiga kiritishga hojat yo'q.

Agar Node.js sizning afzal ko'rgan Lambda ish vaqti bo'lsa, siz funktsional kodning hajmini kamaytirish va tarqatish paketining hajmini kamaytirish uchun minifatsiya va xiralashtirishni qo'llashingiz mumkin. Ayrim, ammo minitlash va xiralashtirishning barcha jihatlari boshqa ish vaqtlarida qo'llanilishi mumkin emas, masalan. python-dan bo'sh joyni olib tashlay olmaysiz, ammo sharhlarni olib tashlashingiz va o'zgaruvchi nomlarni qisqartirishingiz mumkin.

Xotirani o'rnatish

Lambda funktsiyasi uchun optimal xotirani topish tajribasi. Siz xotira ajratish uchun pul to'laysiz, shuning uchun xotirani ikki baravar oshirish har millisekundga ikki baravar to'lashingiz kerakligini anglatadi; ammo ajratilgan xotira bilan hisoblash qobiliyati oshadi, shuning uchun u ish vaqtini avvalgisining yarmidan kamiga kamaytirishi mumkin. Siz uchun optimal xotira sozlamasini tanlash uchun bir nechta foydali vositalar allaqachon mavjud.

Xulosa qilmoq…

Shuni hisobga olish kerak bo'lgan narsa shundaki, ulanishni qayta ishlatish usulini qo'llash zarurmi. Agar sizning lambda funktsiyangiz juda kamdan-kam hollarda chaqirilsa, masalan kuniga bir marta bo'lsa, unda siz issiq boshlanishlarni optimallashtirishdan foyda ko'rmaysiz. Ko'pincha ishlashni optimallashtirish bilan sizning kodingizni o'qishga nisbatan optimallashtirish o'rtasida kelishmovchilik yuzaga keladi - "xiralashtirish" atamasi o'zi uchun gapiradi! Bunga qo'shimcha ravishda, boshqa xizmatlarga ulanishlarni qayta ishlatish uchun kodingizga global o'zgaruvchilar qo'shilishi sizning kodingizni kuzatishni qiyinlashtirishi mumkin. Ikkita savol xayolga keladi:

  • Jamoaning yangi a'zosi sizning kodingizni tushunadimi?
  • Siz va sizning guruhingiz kelajakda kodni tuzatishga qodirmisiz?

Ammo siz Lambda-ni o'z ko'lami uchun tanlaganingiz va yuqori unumdorlik va past narxlarni talab qilganingiz uchun jamoangizning ehtiyojlariga mos keladigan muvozanatni toping.

Ushbu fikrlar muallifning fikrlari. Agar ushbu lavozimda boshqacha ko'rsatilmagan bo'lsa, Capital One unga aloqador emas va yuqorida zikr etilgan kompaniyalar tomonidan tasdiqlanmagan. Ishlatilgan yoki namoyish etilgan barcha savdo belgilari va boshqa intellektual mulk tegishli egalarining mulki hisoblanadi. Ushbu maqola © 2019 Capital One.