قبل از پرداختن به موضوع API Gateway کمی درباره معماری مایکروسرویس توضیحاتی را ارائه میدهم تا درباره کاربرد API Gateway و در کل مدیریت API ها، آشنایی پیدا کنید. همانطور که میدانید هدف مایکروسرویسها تجزیه (decompose) و جداسازی (decouple) کافی برنامههای نرمافزاری به مولفهها و ماژولهای loosely coupled است، برخلاف برنامههای نرمافزاری یکپارچه (monolithic) که در آن ماژولها بهشدت coupled میباشند و به عنوان یک کل بزرگ و یکدست مستقر میشوند. در معماری مایکروسرویس، مایکروسرویسهای مختلف براساس مسئولیتهای اختصاص داده شده، مستقر میشوند و هرکدام دارای مدل API دقیق خود برای ارائه سرویس به مشتریان مختلف (وب، موبایل و APIهای شخص ثالث) هستند.
همانطور که در تصویر (۱) مشاهده میکنید، مشتریانان مختلف درحال ارتباط مستقیم با مایکروسرویسها هستند. چالشهای موجود در این نوع از ارتباط را میتوان به شکل زیر لیست کرد:
در حالتی که مایکروسرویسها API هایشان را در معرض دید مشتری قرار میدهند، ممکن است مشتری برای دیدن یک صفحه خاص از چندین مایکروسرویس مختلف درخواست اطلاعات کند و در چندین مرحلهی رفت و برگشتی دادههای مورد نیاز صفحه مدنظرش را بدست آورد. این کار ممکن است حتی برای دستگاههای دارای شبکه کم کار (قدرت عملیاتی شبکه پایین) مانند تلفن همراه، دشوار و در شرایطی غیرممکن نیز میباشد.
پذیرش پروتکلهای ارتباطی گوناگون (مانند gRpc، thrift، REST، AMQP و...) موجود در مایکروسرویسها، برای مشتری چالش برانگیز و سخت میباشد.
عملکردهای مشترک در تمامی مایکروسرویسها (مانند احراز هویت، مجوزهای دسترسی، ورود به سیستم و...) باید در هر مایکروسرویس پیادهسازی شوند.
ایجاد تغییرات در مایکروسرویسها بدون ایجاد اختلال در اتصال مشتری، دشوار خواهد بود. به عنوان مثال هنگام ادغام یا تقسیم مایکروسرویسها، ممکن است نیاز به اعمال تغییر در کدهای سمت client وجود داشته باشد.
تشریح API Gateway
برای برطرف کردن چالشهای ذکر شده در قسمت بالا، یک لایه اضافی معرفی شده است که بین مشتری (Client) و سرور قرار میگیرد و به عنوان یک reverse proxy برای مسیریابی درخواستهای ارسالی از مشتری به سرور عمل میکند (در شبکههای کامپیوتری، reverse proxy نوعی از سرور پروکسی است که منابع مورد نیاز مشتری از سمت یک یا چند سرور بازیابی میشود. سپس این منابع به مشتری ارسال میشوند و به نظر میرسد که از خود سرور پروکسی معکوس ارسال شده است. از این رویکرد عمدتاً برای load balancing استفاده میشود). API Gateway مشابه الگوی facade در پارادایم شیگرا، یک نقطه ورودی واحد (Single Entry Point) برای تمامی APIها فراهم میکند که معماری سیستم داخلی را محصور میکند.
اگر بخواهیم به طور خلاصه API Gateway را تعریف کنیم باید بگوییم که API Gateway به عنوان یک مولفه یا یک ابزار در رویکرد مدیریت API عمل میکند (پس توجه به این نکته مهم است که بدانیم، مدیریت API با API Gateway یکسان و تبادل پذیر نیستند).
قابلیتهای API Gateway:
در این قسمت برخی از قابلیتها و عملکردهایی که یک API Gateway میتواند داشته باشد را به صورت لیستی ذکر میکنیم (دقت شود API Gateway میتواند قابلیتهای بیشتری هم داشته باشد ولی در این بخش ما مهمترین آنها را ذکر میکنیم):
مسیریابی (Routing): با احاطه کردن سیستم داخلی و جدا کردن آن از مشتریان، یک نقطه ورودی واحد را برای مشتری فراهم میکند تا با سیستم مایکروسرویسها به صورت غیرمستقیم ارتباط برقرار کند. پس عمل مسیریابی سرویسها و مایکروسرویسهای داخلی توسط خود API Gateway انجام میگیرد.
احراز هویت و اعطای مجوز (Authentication & Authorization): در API Gateway میتوان درخواست های ورودی به سیستم را با استانداردها و پروتکلهای امنیتی کنترل کرد و همچنین تدابیر امنیتی لازم را برای دسترسی به مایکروسرویسها اعمال کرد.
کشف سرویس (Service discovery): یکی از عملکردهایی که API Gateway میتواند داشته باشد، کشف خودکار مایکروسرویسها در سیستم داخلی است. یعنی با اضافه شدن یا کم شدن مایکروسرویسهای جدید به سیستم، API Gateway میتواند به صورت خودکار تغییرات را تشخیص دهد و پیکربندیهای لازم را برای برقراری ارتباط آن مایکروسرویسها با مشتری فراهم کند.
کَش کردن پاسخها (Response caching): یکی دیگر از قابلیتهای خوب API Gateway ذخیرهسازی موقت پاسخها و نتایج ایجاد شده توسط مایکروسرویسها میباشد و این کار تاثیر چشمگیری روی performance سیستم دارد (البته کَش کردن پاسخها هنگامی میتواند موثر واقع شود که تعداد درخواستهای زیادی در بازه کوتاهی به سمت سیستم روانه شوند).
محدود کردن نرخ درخواستها (Rate limiting): برای کنترل نرخ درخواستهایی که به سیستم وارد میشوند، میتوان از استراتژی Rate Limit کمک گرفت و ترافیک ورودی را محدود کرد. میتوان از این استراتژی برای جلوگیری از حملات DoS و Brute force استفاده کرد.
متعادلسازی بار (Load balancing): قابلیت دیگری که API Gateway میتواند داشته باشد، توزیع ترافیک ورودی به سیستم میباشد. یعنی API Gateway میتواند با الگوریتمها و استراتژیهای مختلفی درخواستهای دریافتی را بین منابع Back-end توزیع کند.
الگوی BFF
الگوی Backend for Frontend (BFF) مشتقی از الگوی API Gateway است و به جای یک نقطه ورودی واحد برای تمامی مشتریان، چندین Gateway را براساس نوع مشتری ارائه میدهد. هدف از این الگو ایجاد APIهای متناسب با نیازهای هر مشتری میباشد. به کمک این الگو میتوان گلوگاههای یک API Gateway عمومی را از بین برد.
اگر نیازمندیهای بین مشتریها (IOS، اندروید، مرورگر وب و ...) به طور قابل توجهی متفاوت باشند آنگاه BFF ها راه حل خوبی میباشند. همچنین الگوی BFF ردگیری (tracking) درخواستها را سادهتر میکند و در صورت خرابی یکی از Gateway ها بقیه دچار مشکلی نمیشوند (یعنی به عبارتی در این الگو Single Point of Failure نخواهیم داشت).
ابزارها و تکنولوژیهای متن باز
در این بخش چندین مورد از API Gateway های متنباز و معروف در دنیا را بررسی میکنیم و درباره هر کدام به صورت مختصر توضیحاتی را ارائه میدهیم:
محصول Kong Gateway
محصول Kong Gateway یک API Gateway متنباز و سبک (lightweight) است که برای مایکروسرویسها بهینه شده است و تأخیر انتها به انتها و مقیاسپذیری خوبی را ارائه میدهد. اگر فقط اصول اولیه و ساده مدنظر باشد، این محصول برای انتخاب API Gateway بهترین گزینه میباشد. Kong Gateway به صورت طراحی شده که به صورت افقی مقیاسپذیر است. یعنی با افزودن Node های بیشتری از Kong Gateway، به صورت موازی میتوان درخواستهای زیادی را به صورت همزمان پاسخ داد.
محصول Apache APISIX
محصول Apache APISIX یک API Gateway پویا (dynamic)، بلادرنگ (real-time) و با کارایی عالی (high-performance) است. APISIX ویژگیهای خوبی را در مدیریت ترافیک مانند متوازنسازی بار (load balancing)، canary release (انتشار قناری تکنیکی است برای کاهش خطر معرفی نسخه جدید نرمافزار. در مرحله انتشار به صورت آهسته، نسخه جدید در اختیار زیرمجموعه کوچکی از کاربران قرار داده میشود تا بعد از دریافت فیدبک مثبت آنها، این نسخه به صورت عمومی در دسترس قرار گیرد)، Circuit Breaker (این الگو نیز باعث میشود در صورت خراب شدن یکی از مایکروسرویسها، کل سیستم همچنان پایدار بماند و به عملکرد خود ادامه دهد)، احراز هویت و... را ارائه میکند.
همچنین این محصول امکانات خوبی در حوزه مشاهدهپذیری (observability) در اختیار کاربرانش قرار میدهد. یعنی کاربران میتوانند به راحتی تمامی سرویسهای احاطه شده توسط این محصول را نظاره کنند (Monitoring)، مشکلات را ردگیری کنند (Tracing) و لاگهای آنها را مدیریت کنند (Logging).
محصول Netflix API Gateway (Zuul)
سرویس streaming نتفلیکس در بیش از ۱۰۰۰ نوع دستگاه مختلف (تلویزیون، ست تاپ باکس، گوشیهای هوشمند، سیستمهای بازی، تبلتها و...) در دسترس میباشند و در مجموع ۵۰۰۰۰ درخواست در ثانیه را در ساعات اوج مصرف، به سمت سرورهای نتفلیکس ارسال میکنند. نتفلیکس درخواستهای ارسالی هر دستگاه را به واسطه API Gateway Zuul دریافت و handle میکند. در تصویر ۶ میتوانید معماری کلی این API Gateway را مشاهده کنید.
شرکتهای ایرانی
شرکتهای ایرانی که محصول API Gateway را به عنوان یک سرویس به مشتریانشان ارائه میدهند، عبارتند از:
سرویس API Gateway ابری شرکت ابر درسا شامل مجموعه وسیعی از توابع و ابزارهای مدیریت چرخه زندگی API میباشد که برای ایجاد معماری سیستمهای API محور، مورد استفاده قرار میگیرد. توابع مدیریت چرخه زندگی شامل طراحی API، توسعه، آزمایش، انتشار، فروش، O&M و نظارت، کنترل امنیت و عدم انتشار است. سرویس API Gateway ابری با استفاده از قابلیتهای سازگاری و یکپارچگی قدرتمند خود، API های سیستمهای تجاری مختلف را مدیریت میکند و API ها را به صورت متمرکز فراخوانی میکند.
قابلیتهایی که این سرویس در اختیار کاربران خود قرار میدهد عبارتند از:
پشتیبانی از محیطهای ناهمگن: سرویس API Gateway ابری میتواند API های سیستمهای تجاری مختلف را صرف نظر از اینکه آن سیستمها در ابر درسا، مراکز داده محلی یا ابرهای شخص ثالث مستقر شده اند یا خیر، مدیریت کند. همچنین به واسطه این سرویس میتوان انواع سیستمهایی که با تکنولوژیهای پیادهسازی ناهمگون، ایجاد شدهاند را کنار یکدیگر قرار داد و در قالب یک API واحد در اختیار کاربران قرار داد.
ایجاد انواع معماری فنی: معماری بدون سرور ترکیبی از Function Compute و API Gateway به توسعه دهندگان امکان میدهد تا کد را کشف کرده و به سرعت خدمات کم هزینه، بسیار در دسترس و مقیاسپذیر در زمان واقعی را ایجاد کنند. این معماری توسعه مشاغل مرتبط با دستگاههای تلفن همراه، برنامههای وب، اینترنت اشیا (IoT) بازار ابر را تسهیل میکند. این معماری امکانات توسعه تجارت و مرزهای تجاری را گسترش میدهد. انعطافپذیری ترکیبات محصول بهبود یافته است.
یکپارچهسازی آسان با معماری مایکروسرویس: سرویس API Gateway ابری به عنوان یک سرویس ابری بالغ عمل میکند که اجازه دسترسی به خوشههای برنامه Kubernetes را میدهد. این به طور قابل توجهی قابلیتهای سرویس خوشههای برنامه Kubernetes را بهبود میبخشد. این معماری به عنوان معماری استاندارد برای برنامههای کاربردی اینترنت در مقیاس بزرگ عمل میکند.
پلتفرم مدیریت API سورنا توسعهدهندگان را قادر میسازد تا برنامههایی مرتبط با سامانههای داخلی سازمان طراحی و پیادهسازی نمایند. همچنین APIها در تکنولوژیهای مختلف نظیر اینترنت اشیا، رایانش ابری و دادههای حجیم نقشی کلیدی را ایفا مینماید. پلتفرم مدیریت API سورنا پایداری، امنیت و پشتیبانی ویژهای ارائه میکند تا شرکتهای طرف ثالث، همکاران، شرکا و حتی توسعهدهندگان آزاد بتوانند با آسودگی خیال و اطمینان از آنها استفاده نمایند.
قابلیتهای این پلتفرم عبارتند از:
طراحی سریع، سادگی پیاده سازی، تست دقیق: پلتفرم مدیریت API سورنا با نظارت، تجزیه و تحلیل دادهها، کنترل دسترسیها و محافظت از اطلاعات حساس شما با سیاستهای امنیتی خود موفقیت شما را تضمین میکند و به شما کمک میکند در نبرد با متجاوزان دنیای دیجیتال پیروز باشید.
قدرتمند، جامع و بسیار انعطاف پذیر: بخش ایجاد کسب درآمد در پلتفرم سورنا یک راه حل قدرتمند، جامع و انعطاف پذیر است که به شرکتها کمک میکند تا داراییهای دیجیتالی خود را به جریان درآمد جدید و مدلهای کسب و کار بفروشند. تمامی صنایع توانایی کسب درآمد از سرویسهایی که در سازمان خود استفاده میکنند را دارند. بخش کسب درآمد در مدیریت سرویس سورنا ارزش افزوده در زنجیره ارزش دیجیتالی شما ایجاد خواهد کرد. شما میتوانید مجموعهای از سرویسهای خود را با قیمت و زمان مشخص به فروشگاه سورنا اضافه کنید تا دیگر کاربران نیز بتوانند از آنها استفاده کنند و شما نیز از داراییهای دیجیتال خود کسب درآمد کنید.
راهحلهای امنیتی کاملا هوشمند: با توجه به اینکه این مولفه در جلوی سرویس اصلی(سرویس ارائه دهنده API) قرار میگیرد، در صورتی که به خوبی پیکربندی شود میتواند به عنوان یک سد و لایه حفاظتی عمل نموده و در افزایش امنیت ارائه دهندگان API موثر باشد. سیستم خود را برای مقابله با هکرها، رباتها و رفتارهای مشکوک آماده کنید. با آرامش و خیالی آسوده به ارائه خدمات خود بپردازید.
ارتباط با سنسورها، نمایش گزارشات، ارائه خدمات به مشترکین: امروزه اینترنت اشیا و کاربردهای آن در حال فراگیر شدن است. اما انتخاب پلتفرم مناسب چالش بسیاری از سازمانها و مدیران شهری است. شما با مدیریت سرویس سورنا میتوانید تمامی خدمات در حوزه IOT را در پنل مدیریت اضافه کنید و با توجه به نیاز کاربرانتان آنها را ارائه نمایید.
بینشهای کاربردی، تحلیلهای دقیق، هشدارهای متنی: بخش مانیتورینگ سورنا با ارائه تحلیلهای دقیق و کاربردی به شما کمک میکند تا بتوانید هر روز عملکرد سیستمهایتان را افزایش و از وضعیت پاسخگویی آنها آمار و گزارشات دقیقی در اختیار داشته باشید. سیستم هشدارمتنی سورنا به کاربران این امکان رامیدهد تا در کوتاه ترین زمان ممکن مشکلات خود را شناسایی کنند و با صرف کمترین هزینه و کوتاهترین زمان آن مشکل را برطرف نمایند.
هماهنگی لحظهای پنل مدیریت با دستگاهها: در زمان استفاده از وصلاپ پنل مدیریت سیستم در اختیار شما قرار خواهد گرفت که میتوانید از طریق آن از تمامی تغییرات در سیستمها باخبر شوید و به راحتی در محتواها و کاربری سیستم تغییرات خود را ایجاد کنید. از همین پنل میتوانید برای بارگذاری محتوا، ارسال پوش، اطلاع از وضعیت پرداختها و…. استفاده کنید.
جمعبندی
با توجه به جستجوهای انجام شده متوجه شدیم که استفاده از API Gateway تنها زمانی افزایش مییابد که شرکتهای بیشتری از معماریهای مایکروسرویس و معماری بدون سرور (Serverless) پیچیدهتری استفاده کنند. علاوه بر این، پس از مشاهده موفقیت اولیه شرکتهایی مانند آمازون و گوگل (Apige) و Salesforce، شرکتهای بیشتری سیستمهای نرمافزاری خود را به کمک این مفهوم راهاندازی میکنند. انتظار میرود با گسترش و تکامل API Gateway ها، این مفهوم نقش اصلی را در API Economy (اقتصاد API) بدست گیرد و در آینده تاثیر چشمگیری در معماریهای سیستمهای نرمافزاری داشته باشد.
این مقاله، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهید بهشتی میباشد