برنامه نویسی

محدود کردن سرعت میکروسرویس در زنگ زدگی

این یک ارسال برای توسعه دهنده Amazon Q “Quack the Code” چالش: کاوش در امکانات است

آنچه من ساختم

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

محدود کننده نرخ V2: یک راه حل جامع

خدمات محدود کننده نرخ من فقط یک دستگاه شیرآلات ساده API نیست-این یک سیستم کاملاً برجسته است که برای محیط های تولیدی با قابلیت های زیر طراحی شده است:

معماری چند مستأجر

این سرویس از چندین مستاجر با انزوا کامل بین آنها پشتیبانی می کند. در این زمینه ، مستاجران نمایانگر برنامه های مختلف ، خدمات یا مشتریانی هستند که به قابلیت های محدود کننده نرخ نیاز دارند. هر مستاجر می تواند داشته باشد:

  • کلید API خودشان برای احراز هویت
  • قوانین و سهمیه محدود کننده نرخ سفارشی
  • ردیف خدمات مختلف (رایگان ، استاندارد ، حق بیمه ، شرکت)
  • ردیابی و معیارهای استفاده جدا شده

الگوریتم های محدود کننده نرخ چندگانه

من چهار الگوریتم محدود کننده نرخ متفاوت را متناسب با موارد مختلف استفاده کردم:

  • سطل توکن: محدود کردن نرخ صاف با قابلیت پشت سر هم فراهم می کند
  • سطل نشتی: محدود کردن نرخ خروج ثابت را تضمین می کند
  • پنجره ثابت: محدودیت ساده مبتنی بر پنجره را ارائه می دهد
  • پنجره کشویی: محدودیت دقیق تر پنجره را با مسائل مرزی کمتر ارائه می دهد

قابلیت مشاهده جامع

نظارت و اشکال زدایی برای خدمات تولید بسیار مهم است ، بنابراین من یکپارچه شدم:

  • ردیابی Opentelemetry: برای توزیع درخواست توزیع شده در خدمات
  • معیارهای پرومتئوس: برای جمع آوری و افشای معیارهای عملکرد
  • داشبورد گرافانا: برای تجسم معیارها با داشبوردهای از پیش تنظیم شده
  • jaeger ui: برای کاوش و تجزیه و تحلیل اثری

گزینه های ذخیره سازی انعطاف پذیر

این سرویس از چندین پشتیبان ذخیره سازی پشتیبانی می کند:

  • ذخیره سازی در حافظه برای عملکرد بالا
  • redis برای استقرار توزیع شده
  • ذخیره سازی ترکیبی با Redis + حافظه بازپرداخت برای مقاومت

مستندات و آزمایش API

  • swagger/openapi: برای مستندات API تعاملی
  • اسکریپت های آزمایش را بارگذاری کنید: برای تأیید عملکرد در شرایط مختلف

کانتینر سازی

کل محلول با آهنگسازی Docker و Docker Constrate Containerized می شود و استقرار و مقیاس آن را آسان می کند.

تجربه توسعه دهنده A Amazon Q

آنچه این پروژه را واقعاً قابل توجه می کند این است که من چگونه آن را ساختم. با وجود دانش محدود زنگ زدگی ، من توانستم این سیستم پیچیده را با کمک توسعه دهنده Amazon Q توسعه دهم. این تجربه تحول آمیز بود – احساس می کرد که من Amazon Q را مدیریت می کردم در حالی که 90 ٪ از کار برنامه نویسی را اداره می کرد.

ما یک فرآیند توسعه تکراری را دنبال کردیم که در آن آمازون س:

  1. به برنامه ریزی تکرارهای پروژه کمک کرد
  2. ساختار کد اصلی را ایجاد کرد
  3. الگوریتم ها و الگوهای پیچیده اجرا شده
  4. در ادغام فن آوری های مختلف کمک کرده است
  5. پشتیبانی اشکال زدایی را هنگام بروز مشکلات ارائه داد

این واقعاً تکان دهنده بود که از دست اول واقعیت توسعه AI را تجربه کنید ، جایی که می توانم بر تصمیمات و الزامات معماری تمرکز کنم در حالی که هوش مصنوعی جزئیات اجرای آن را اداره می کرد. این آینده است – توسعه دهندگان مدیریت عوامل هوش مصنوعی که بیشتر کد را تولید می کنند ، چرخه های توسعه را به طرز چشمگیری تسریع می کنند.

برای تکرار بعدی من ، من قصد دارم GRPC را برای ارتباطات داخلی به جای HTTP پیاده سازی کنم ، که باید عملکرد را بیشتر بهبود بخشد. من از ادامه این پروژه و بررسی راه های بیشتر برای اهرم Amazon Q در گردش کار توسعه خود بسیار هیجان زده ام.

نسخه آزمایشی

داشبورد جگر

اهداف پرومتئوس

داشبورد گرافنا

داشبوردهای گرافنا با برخی معیارها

Doc Swagger

مخزن کد

https://github.com/tanishparashar/rate-limiter-final

چگونه من از توسعه دهنده Amazon Q استفاده کردم

در طول توسعه خدمات محدودیت V2 Limiter My Limiter ، Amazon Q Developer شریک برنامه نویسی مجازی من شد – یک توسعه دهنده نرم افزاری که در کنار من کار می کرد ، اجرای دستورات ، نوشتن
کد و مشکلات اشکال زدایی. این همکاری ، گردش کار توسعه من را به روشهایی که پیش بینی نکرده بودم تغییر داد.

یک رویکرد توسعه تکراری

سفر من با Amazon Q از زمانی شروع شد که تصمیم گرفتم یک رویکرد تکراری برای ایجاد محدود کننده نرخ داشته باشم. من به سادگی از آن خواسته ام ، “این تکرار 1 ، کد برای من است” و آمازون Q پاسخ داد
تولید پایه کد اولیه. این لحظه آغاز یک الگوی توسعه جدید برای من بود – جایی که می توانم روی تصویر بزرگ تمرکز کنم در حالی که Amazon Q اجرای آن را انجام داد
جزئیات

برای هر تکرار ، من روندی را دنبال کردم که چیزی شبیه به این بود:

  1. برنامه ریزی: من ویژگی ها و مؤلفه های مورد نیاز برای تکرار فعلی را توصیف می کنم
  2. تولید کد: Amazon Q می تواند کد زنگ زدگی را تولید کند
  3. بررسی و پالایش: من کد را مرور می کنم ، سؤال می کنم و درخواست اصلاح می کنم
  4. ادغام: ما کد جدید را با مؤلفه های موجود ادغام می کنیم
  5. آزمایش و اشکال زدایی: Amazon Q به شناسایی و رفع مشکلات کمک می کند

غلبه بر چالش ها

سفر بدون چالش های آن نبود. لحظه ای دشوار بود که در کد زنگ زدگی بیش از 100 خطای تلفیقی روبرو شدم. احساس غرق شدن کردم و رها کردم
این پروژه – به نظر می رسید رفع بسیاری از مسائل ، به ویژه با دانش محدود زنگ من ، غیرممکن است.

بعد از استراحت برای پاک کردن سرم ، به این پروژه بازگشتم و تصمیم گرفتم با کمک آمازون Q خطات را یک به یک برطرف کنم. من پیام های خطا را به اشتراک گذاشتم و آمازون س:

  1. توضیح داد که هر خطا به زبان ساده چیست
  2. الگوهای مشخص شده در بین خطاها
  3. اصلاحات سیستماتیک پیشنهادی برای گروه های مسائل مرتبط
  4. قطعه های کد اصلاح شده
  5. مفاهیم اساسی زنگ را توضیح داد تا بتوانم از این تجربه یاد بگیرم

این ماراتن اشکال زدایی نه تنها پروژه من را نجات داد بلکه درک من از مدل مالکیت Rust ، طول عمر و سیستم نوع را نیز به میزان قابل توجهی بهبود بخشید.

نکاتی برای همکاری مؤثر با Amazon q

بر اساس تجربه من ، در اینجا برخی از بینش ها برای همکاری مؤثر با توسعه دهنده A Amazon Q وجود دارد:

  1. زمینه واضح را ارائه دهید: هرچه زمینه بیشتری در مورد پروژه خود ارائه دهید ، Amazon Q بهتر می تواند به شما کمک کند. اطلاعات مربوط به ساختار پروژه ، وابستگی ها و اهداف خود را درج کنید.

  2. به تدریج تکرار کنید: به جای تلاش برای ساختن همه چیز به یکباره ، پیشرفت خود را به تکرارهای کوچک و قابل کنترل تقسیم کنید.

  3. سؤالات خاص را بپرسید: وقتی با مشکلات روبرو می شوید ، در مورد آنچه می خواهید به آن برسید و آنچه کار نمی کند ، خاص باشید.

  4. از کد بیاموزید: فقط کد تولید شده را کپی نکنید. برای درک آن وقت بگذارید ، که باعث بهبود مهارت های شما و کمک به شما در ارائه درخواست های بهتر در آینده می شود.

  5. تأیید و آزمایش: همیشه کد تولید شده را مرور و آزمایش کنید. Amazon Q قدرتمند است اما معصوم نیست.

  6. از زبان طبیعی استفاده کنید: الزامات خود را به زبان ساده توضیح دهید ، گویی که با یک توسعه دهنده انسانی صحبت می کنید.

تحول

Amazon Q به من کمک کرده است که به یک توسعه دهنده بهتر و پربارتر تبدیل شوم. این فقط مربوط به نوشتن کد سریعتر نیست – این مربوط به داشتن یک همراه آگاه در طول فرآیند توسعه است
چه کسی می تواند مفاهیم پیچیده را توضیح دهد ، بهترین شیوه ها را پیشنهاد کند و به عیب یابی مسائل کمک کند.

این تجربه دیدگاه من در مورد توسعه AI را تغییر داده است. به جای جایگزینی توسعه دهندگان ، ابزارهایی مانند Amazon Q قابلیت های ما را تقویت می کنند و به ما امکان می دهند پیچیده تر مقابله کنیم
پروژه ها و تمرکز بر جنبه های خلاقانه توسعه نرم افزار.

من از این چالش و فرصتی برای همکاری با Amazon Q بسیار سپاسگزارم. این امکانات جدیدی را برای آنچه می توانم بسازم ، حتی با فناوری هایی که هنوز یاد می گیرم باز کرده است.

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

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

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

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