برنامه نویسی

معرفی AWS Lambda Response Streaming

امروز، AWS پشتیبانی از پاسخ‌های جریانی از توابع Lambda را اعلام کرده است. این قابلیت مدت‌ها انتظار به توسعه‌دهندگان کمک می‌کند تا پاسخ‌ها را از توابع خود به کاربران خود منتقل کنند، بدون اینکه لزوماً منتظر تمام شدن پاسخ باشند. این به ویژه برای رندر سمت سرور، که معمولاً توسط فریمورک های جاوا اسکریپت مدرن استفاده می شود، مفید است.

این قابلیت زمان تا اولین بایت را کاهش می‌دهد، که باعث می‌شود برنامه شما سریع‌تر احساس کند و سریع‌تر بارگیری شود – به ویژه برای کاربرانی که از نظر جغرافیایی از مرکز داده AWS استفاده می‌کنید یا کاربرانی که اتصالات ضعیفی دارند.

بیایید شیرجه بزنیم

را قادر می سازد

برای فعال کردن پاسخ‌های جریانی، توسعه‌دهندگان باید کد عملکرد خود را کمی تغییر دهند. کنترل کننده شما باید از یک دکوراتور جدید موجود در زمان اجرای Lambda برای Node 14، 16 یا 18 استفاده کند که هندلر شما را می پوشاند.

در اینجا یک نمونه از پست راه اندازی آورده شده است:

exports.handler = awslambda.streamifyResponse(
    async (event, responseStream, context) => {
        responseStream.setContentType(text/plain);
        responseStream.write(Hello, world!);
        responseStream.end();
    }
);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر با API جریان قابل نوشتن Node آشنا هستید، متوجه خواهید شد که این دکوراتور یکی را اجرا می کند. AWS به شما پیشنهاد می‌کند از خطوط لوله جریان برای نوشتن در جریان استفاده کنید – دوباره، مثالی از پست راه‌اندازی آورده شده است:

const pipeline = require("util").promisify(require("stream").pipeline);
const zlib = require('zlib');
const { Readable } = require('stream');

exports.gzip = awslambda.streamifyResponse(async (event, responseStream, _context) => {
    // As an example, convert event to a readable stream.
    const requestStream = Readable.from(Buffer.from(JSON.stringify(event)));

    await pipeline(requestStream, zlib.createGzip(), responseStream);
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

جدا از چیزی مانند رندر HTML سمت سرور، این ویژگی همچنین به انتقال رسانه به تماس‌گیرندگان API کمک می‌کند. در اینجا نمونه‌ای از تابع Lambda است که با استفاده از جریان پاسخ، یک تصویر را ارائه می‌کند:

/**
 * Response streaming function which loads a large image.
 */
module.exports.handler = awslambda.streamifyResponse(
  async (event, responseStream, _context) => {
    responseStream.setContentType("image/jpeg");
    let result = fs.createReadStream('large-photo.jpeg');

    await pipeline(result, responseStream);    
  }
);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما می توانید جریان پاسخ به مرورگر را مشاهده کنید که به شکل زیر است:
پاسخ جریانی به مرورگر

فراخوانی این توابع

در مرحله بعد، اگر می‌خواهید تابعی را فراخوانی کنید که با استفاده از NodeJS AWS SDK یک پاسخ جریانی را به صورت برنامه‌نویسی صادر می‌کند، باید از نسخه 3 استفاده کنید. من در مورد این تغییر به طور گسترده نوشته ام، اما مهمتر از همه برای این ویژگی – به نظر نمی رسد که v2 SDK اصلا پشتیبانی نمی شود. بنابراین قبل از اینکه بتوانید از پاسخ‌های جریانی استفاده کنید، باید آن را ارتقا دهید. اگر به دنبال فراخوانی تابعی با استفاده از پاسخ‌های جریانی با زبان‌های دیگر هستید، اکنون با استفاده از AWS SDK برای Java 2.x و AWS SDK برای Go نسخه 1 و نسخه 2 پشتیبانی می‌شود. امیدوارم پشتیبانی از boto3 پایتون در دسترس باشد. به زودی.

ALB، دروازه API، و URL های تابع

برنامه‌نویسان می‌توانند از این قابلیت با تابع تابع Lambda جدیدتر استفاده کنند. AWS همچنین می گوید که می توانید پاسخ ها را از طریق API Gateway و ALB پخش کنید.

برداشت من

اگر از لامبدا برای ارائه رسانه‌هایی مانند تصاویر، ویدیوها یا صدا استفاده می‌کنید – پاسخ‌های جریانی بسیار کمک خواهد کرد. این مورد برای من شخصاً مورد استفاده اصلی نبوده است، اما من گمان می‌کنم که توسعه‌دهندگانی که از Lambda برای ارائه برنامه‌های frontend با استفاده از رندر سمت سرور استفاده می‌کنند، بیشتر از آن استفاده می‌کنند. برای آن دسته از کاربران، من فکر می کنم این راه اندازی به ویژه هیجان انگیز است.
در نهایت، پاسخ جریانی برای لامبدا گام مهمی در نزدیک کردن قابلیت لامبدا به آنچه کاربران می‌توانند در محیط‌های محاسباتی سنتی پر از سرور دریافت کنند، است. این یک ویژگی جدید هیجان انگیز است و من مشتاقانه منتظر دیدن قابلیت هایی هستم که برای کاربران باز می کند.

بسته شدن

مثل همیشه، اگر این پست را دوست داشتید، می توانید نظرات بیشتری را در وبلاگ من پیدا کنید توییتر!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا