برنامه نویسی

Rust vs Node – عملکرد تولید کننده کافکا با AWS Lambda

مقدمه

اگر از Rust شنیده اید ، احتمالاً از مقایسه این زبان در مقایسه با سایر زبانهای برنامه نویسی امروز آگاه هستید. برای کشف اینکه چه میزان از تفاوت ما صحبت می کنیم ، یک تست بار بسیار ساده را در دو عملکرد Lambda AWS اجرا کردم. یکی روی گره و دیگری روی زنگ زدگی. هر دو با فشار دادن بار نمونه به کافکا ، منطق را دقیقاً یکسان اجرا می کنند. نتایج جالب بود.

راه اندازی

Rust vs Node Kafka تولید کننده
کد همانطور که اشاره کردم ، یک بار رویداد ورودی را می گیرد و آن را به یک موضوع Kafka سوق می دهد. من یک خوشه MSK برای این کار تنظیم کرده ام. عوامل مختلفی در عملکرد برنامه نقش دارند و فرد می تواند اندازه بار باشد. من اطمینان حاصل کردم که از اندازه بار 256 کیلوبایت استفاده می کنم ، زیرا تصور می کنم بیشتر موارد استفاده با اندازه ای به اندازه این مورد خوب عمل می کنند.

آزمایش بار با استفاده از توپخانه انجام شد. این مناسب برای انجام سریع تست ها بدون نیاز به تلاش زیاد در پیکربندی است. با استفاده از یک دروازه API که در هر دو عملکرد لامبدا تنظیم شده است ، توپخانه به همراه بار و توان تعریف شده به نقطه پایانی (های) می رسد.

برای نظارت بر معیارهای عملکرد ، تصمیم گرفتم از OpenTelemetry استفاده کنم داتوگبشر OTEL اگر آگاه نیستید ، یک ابزار/چارچوب مشاهده برای ساز کاربرد شما برای جمع آوری سیاهههای مربوط ، ردپاها و معیارها است. این امکان را برای شما فراهم می کند تا با پیروی از یک الگوی سازگار ، تا زمانی که این سیستم عامل از OTEL پشتیبانی کند ، تمام داده های جمع آوری شده را در یک بستر نظارت از انتخاب خود منتشر کنید. DataDog پشتیبانی خوبی از OTEL دارد و در صورت تکمیل دید کامل برای برنامه های شما ، تعداد زیادی از ویژگی ها را در زیر چتر محصول خود ارائه می دهد.

ابزاری عملکرد گره کاملاً ساده بود زیرا فقط مجبور شدم لایه های OTEL را درج کنم و از ساخت CDK Datadog استفاده کنم. از طرف دیگر ، عملکرد زنگ زدگی (همچنین دارای ساختار CDK) نیز به کمی رویکرد دستی نیاز داشت زیرا در حال تهیه خودکار در دسترس نیست. من با مراجعه به این مخزن از جیمز ایستام ، توانستم قطعات را با هم جمع کنم.

کتابخانه مشتری Rust Kafka که من از آن استفاده کردم می تواند از این مخزن کاوش شود. کد Lambda و CDK IAC را می توان در اینجا یافت.

مقایسه نتایج آزمون

تولید کننده Rust Kafka

با نگاهی به متریک متوسط ​​P50 ، اختلاف تأخیر به نظر نمی رسد. P99 هرچند تصویر دیگری را نقاشی می کند. همچنین ، استفاده از حافظه کاملاً تفاوت را نشان داد. با زنگ زدگی حدود 70-90MB ، و گره در حدود 150-176MB (بعضی اوقات حتی بیشتر).

گره Kafka تولید کننده

با این حال ، من می خواهم چند مورد را قبل از اینکه ما را به عنوان برنده عالی برنده کنیم ، برجسته کنم. گرچه هر دو لامبدا در اصل همان کار را انجام می دهند ، مشتری اصلی کافکا مورد استفاده قرار می گیرد چیزی نیست که من ایجاد کردم. بسته به نحوه ساخت این کتابخانه ها ، عملکرد کلی ممکن است متفاوت باشد. Node Lambda برای سازهای با OTEL به دو لایه اضافی نیاز دارد ، زیرا من تصمیم گرفتم به صورت خودکار به صورت خودکار استفاده کنم و بر خلاف عملکرد زنگ زدگی کد ردیابی را تنظیم نکنم. من فکر می کنم که تنظیم خودکار همچنین می تواند بر عملکرد عملکرد گره و نحوه جمع آوری و صادر کردن داده های آثار/متریک تأثیر بگذارد ، شاید به طور قابل توجهی اما با این وجود ارزش توجه داشته باشد.

تغییر به زنگ زدگی؟

واضح است که Rust با هزینه و عملکرد مزیت بزرگی را ارائه می دهد اما آیا ارزش منحنی یادگیری شیب دار را دارد؟ من فکر می کنم بله اگرچه ، من در اطراف بازی کرده ام و زنگ زدگی را روشن و خاموش می کنم ، اما هنوز هم جایی نیستم که با آن راحت باشم.

در حالی که استفاده از بهترین ابزار برای کار بسیار عالی است ، گاهی اوقات ، کمی بیشتر فکر می کند. اگر به دنبال این هستید که با یک چرخه توسعه محصول جدید ، سریع سریع پیش بروید ، مگر اینکه همه افراد در تیم پس زمینه شما با Rust مهارت داشته باشند و می توانند به راحتی تمام توپ های منحنی را که ممکن است با تکامل محصولی که در حال ساخت هستند ، انجام دهند ، ممکن است بخواهید ، ممکن است بخواهید قبل از رفتن به همه ، یک قدم عقب بردارید. کاملاً محتمل است که برخی از ابزارهایی که در جریان کار استفاده می کنید حتی هنوز پشتیبانی از زنگ زدگی را ارائه نمی دهند.

افکار پایانی

در اکوسیستم بدون سرور ، از آنجا که Lambdas می تواند برای کنترل قطعات جدا شده برنامه شما طراحی شود ، مخلوط کردن و مطابقت آن بسیار ساده تر می شود. شما می توانید یکی از آن کارکردها را با بالاترین توان انتخاب کنید که همچنین بالاترین حافظه را همراه با زمان اجرای طولانی تر مصرف می کند و با آن شروع می کند زنگ زدگی (بله ، خوب است که آن را صدا کنیم). در اصل ، شما می خواهید آن بخش هایی از برنامه را که دارای عملکرد مهم هستند ، انتخاب کنید و سپس امکان انتقال آنها را به زنگ زدگی کشف کنید.

اگرچه اکوسیستم Rust در مقایسه با سایر زبانها کاملاً وجود ندارد ، اما حمایت از جامعه آن و جذابیت کلی در حال رشد است. و این نشانه خوبی برای شروع کثیف شدن دستان شما و شروع سفر زودتر از دیرتر است.

اگر سعی کرده اید با Rust کاری جالب انجام دهید ، دوست دارم آن را بشنوم!

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

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

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

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