API Gateway به زبان ساده (قسمت اول)

زمانی که یک برنامه با استفاده از معماری میکروسرویس تولیدمی‌شود، در واقع مجموعه‌ای از سرویس های کوچک که بر مبنای اصل Single Responsibility طراحی شده‌ اند ایجاد می شود. یکی از جنبه های مهم برنامه های مبتنی براین معماری چگونگی دسترسی مشتری یا فراخوانی سرویس ها می باشد. برنامه‌های متداول این مشکل بزرگی نیست و با ارائه url سرویس انجام می شود چراکه تعداد سرویس ها کم است.

اما در سیستم های مبتنی بر معماری میکروسرویس ،مانند سایت آمازون، در راه‌اندازی یک صفحه وب،صدها سرویس درگیر هستند. به طور معمول برنامه‌های کاربردی مدرن مانند LinkedIn، eBay، آمازون، یا هر برنامه‌ با مشتریان و خدمات فراوان تمایل دارند وب سایت‌های بزرگ‌تر داشته باشند و بدیهی است که آن‌ها باید با تعداد زیادی از سرویس ها سروکار داشته باشند. بنابراین، طراحی این که چگونه مشتریان می‌خواهند به سرویس ها دسترسی داشته باشند یک برنامه مبتنی بر معماری میکروسرویس مهم می‌شود. موارد زیر چالش‌های کلیدی در دسترسی / ارتباط مستقیم بین یک برنامه مشتری و یک برنامه میکروسرویس است :

  • اساسا ماهیت برنامه های میکروسرویس توزیع شده‌است.مطابق با مقیاس پذیری مورد نیاز تعداد معینی از نمونه‌ها هر سرویس نیاز هست. هر نمونه(=Instances) از سرویس endpoint خود را دارد. برای پیاده سازی یک فرآیند کسب‌وکار ، لازم است که از چندین سرویس استفاده کنید. این کار با ترافیک سنگین شبکه و افزایش تاخیر شبکه همراه است ،علاوه براین پیاده سازی کد در سمت مشتری بسیار پیچیده می‌شود.
  • یک مشکل بزرگ عملی این است که وقتی API سرویس ها توسعه می‌یابند, اغلب معماران و توسعه دهندگان API تنها تیم‌های داخلی را در نظر دارند و تمایل به توسعه API با مستندات ضعیف دارند. بنابراین مشتریان در انطباق نیازمندی‌ های خود با API ها بسیار مشکل دارند.
  • هر سرویس فرمت داده خود را دارد و سرویس ها ممکن است از تکنیک‌های مختلفی برای طراحی API استفاده کنند.
  • سرویس ها ممکن است از پروتکل‌های انتقال(=transport) مختلف استفاده کنند.
  • سرویس ها ممکن است از پروتکل‌های ارتباطی مختلف استفاده کنند.
  • کد سمت مشتری برای دستیابی به سرویس های مختلف, دچار ناهمگونی بالا می شود.

به منظور کاهش مشکلات فوق، مفهوم API Gateway توسعه‌یافته است. یک API Gateway به عنوان نقطه ورود واحد عمل می‌کند و فراخوانی سرویس ها از بیرون شبکه محلی را با سرعت بالا ممکن می‌سازد.اگر یک مشتری ارتباط مستقیمی با سرویس بدون یکAPI Gateway برقرار کند ، ، درخواست‌ها می باید از مسیر اینترنت عبور کنند، که عملکرد ضعیفی را در تعداد درخواست بالا دارد.اما هنگامی که مشتری درخواست خود را به API Gateway می‌دهد، API Gateway سرویس را در یک شبکه محلی با سرعت بالا فرامی خواند.

هنگامی که مشتری درخواست خود را به API Gateway می‌دهد، API Gateway سرویس را در یک شبکه محلی با سرعت بالا فرامی خواند
هنگامی که مشتری درخواست خود را به API Gateway می‌دهد، API Gateway سرویس را در یک شبکه محلی با سرعت بالا فرامی خواند


کارکرد های کلیدی API Gateway

هدف اصلی API Gateway ارائه یک نقطه ورود میانی برای یک برنامه مبتنی بر معماری میکروسرویس است. علاوه بر این, برای ارائه کارکرد های زیر طراحی شده‌است :

کارکرد های کلیدی API Gateway
کارکرد های کلیدی API Gateway
  • ایجاد API های مخصوص سفارش برای مشتری های سرویس ها
  • هماهنگ‌کننده(=orchestration) سرویس ها
  • ترکیب سرویس ها
  • پیاده‌سازی امنیت
  • کشف سرویس و مسیریابی
  • تجمیع داده

ایجاد API های مخصوص سفارش برای مشتری های سرویس ها درAPI Gateway

یک API Gateway درواقع یک انتزاع سطح بالاتر برای سیستم داخلی می باشد و می تواند API مخصوص به هر مشتری را فراهم کند، نکته حائز اهمیت این است که یک مشتری می‌تواند با استفاده از انواع مختلفی از دستگاه‌ها به برنامه دسترسی داشته باشد مانند :

  • گوشی هوشمند با iOS یا Android
  • کامپیوترهای شخصی
  • وسایل فراگیر/ اینترنت اشیا (IOT)، و غیره.

انواع مختلفی از مشتریان مانند مشتریان موبایل، مرورگرها و یا برنامه‌های کاربردی سرورهای سنتی و یا سرویس های دیگر،ممکن است با API Gateway تعامل داشته باشند.

 انواع مختلفی از مشتریان مانند مشتریان موبایل، مرورگرها و یا  سرویس ها
انواع مختلفی از مشتریان مانند مشتریان موبایل، مرورگرها و یا سرویس ها


در نرم‌افزار های مبتنی بر میکروسرویس ممکن است از API REST، Apache Thrift و یا Google Protobuf و یا ترکیبی از اینها برای ارائه API خود استفاده ‌کنند. حالا سوال این است که چگونه API هایی باطراحی عمومی با انواع مشتریان تعامل خواهند داشت. در اینجا، API Gateway نقش حیاتی بازی می‌کند. در واقع API Gateway ، سرویس های مخصوص مشتری را با کد رابط مورد نیاز هر API راایجاد می‌کند و تعامل با انواع مختلف مشتریان را تسهیل می‌کند.

ترکیب سرویس ها در API Gateway

موقعیت‌هایی زیادی وجود دارد که در برای برآورده شدن نیاز مشتری می بایست بیش از یک سرویس فراخوانی و استفاده شود . بطور مثال فرض کنید مشتری سرویسی برای دریافت برنامه سفر نیاز داشته باشد. همانطور که در شکل پایین نشان‌داده شده‌است، این سرویس را می‌توان با استفاده از سه سرویس اتمیک(منظور کوچکترین واحد طراحی سرویس می باشد) از حوزه‌های مختلف ارائه کرد که در این مثال سرویس ها شامل سرویس رزرو بلیط قطار, سرویس رزرو هتل, و سرویس رزرو وسیله نقلیه اجاره ای در مقصد هستند. همانطور که درشکل مشخص است در پاسخ به در خواست مشتری برای دریافت برنامه سفر API Gateway سه سرویس اشاره شده در بالا را باهم ترکیب می کند

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