میان افزار چیست؟

Middleware یا میان افزار چیست؟

Middleware یا میان افزار چیست؟

Middleware یا میان افزار، یکی از مفهوم های پر کاربرد است که معمولا در زمینه توسعه وب و فریم ورک لاراول به کار میرود.

به طور کلی Middleware، یک نرم افزار واسط بین دو برنامه یا سرویس است که وظیفه آن آسان تر کردن ارتباطات بین آنها ست.

برای مثال میتوان گفت Middleware همانند یک پروکسی عمل میکند. می تواند به عنوان یک باتری داده یا مترجم و یا یک پروکسی که فقط درخواست ها را هدایت میکند، باشد.

در چه مواردی از Middleware استفاده میشود؟

1.تبدیل یا ترجمه داده از طریق Middleware :

فرمت های تبادل داده بسیار زیادی مانند JSON، XML و Protobuf وجود دارد. امروزه در بیشتر مواقع از JSON استفاده میشود، اما همچنان هر یک از آنها در مواقع خاص کاربرد دارند.

برای مثال، Protobuffer ها با این ویژگی شناخته شده اند که عملکرد بیشتری نسبت به JSON دارند. اما برای انسان ها قابل خواندن نیستند.

بنابراین ممکن است در سرویس های داخلی از Protobuffer ها استفاده شود. سپس زمانی که یک مرورگر در حال استفاده از API است، شما تصمیم بگیرید که از JSON استفاده کنید.

ما میتوانیم یک Middleware ایجاد کنیم که از یک کتابخانه تبدیل داده استفاده میکند. پس از درخواست ها را با یک فرمت قابل درک و خواندن برای سرویس گیرنده ترجمه کند.

2.جمع آوری یا تکثیر داده ها از طریق میان افزار :

معماری میکروسرویس یک الگوی معماری مشهور است که معمولا در برنامه های مدرن اعمال میشود. معماری میکروسرویس شامل تعدادی برنامه و سرویس های کوچک است که به یکدیگر وابسته هستند و از طریق اینترنت با هم همکاری میکنند.

برای مثال، ممکن است شما در یک پروژه e-commerce (تجارت الکترونیکی)، از یک میکروسرویس برای ذخیره سازی و بازیابی محصولات استفاده کنید. سپس از یک میکروسرویس دیگر برای جستجو و یکی دیگر برای احراز هویت و ذخیره کاربران نیز استفاده کنید به طوری که هر میکروسرویس دیتابیس مربوط به خودش را داشته باشد.

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

جمع آوری داده ها :

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

سپس می توانیم نتایج هر دو سرور را جمع آوری کنیم و آنها را به client یا سمت مشتری برگردانیم. توجه داشته باشید که با افزایش سرورها، تعداد درخواست ها نیز به صورت خطی افزایش می یابد. در آخر لازم است که داده ها merge شوند.

تکثیر داده ها :

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

اگر جدول های مورد نیازمان محصول و کاربر هستند، می توان آن جدول ها را به خوبی در سرور جستجو ایجاد کرد. سپس هر زمان که یک کاربر جدید در دیتابیس کاربر ذخیره کردیم، یک نسخه از آن را در سرور جستجو، ذخیره کنیم.

می توانیم برای تکثیر داده ها، متدهای ذخیره شده در سرور سرچ را از طریق متدهای ذخیره شده محصول و کاربر، فراخوانی کنیم. یا اینکه می توان یک Middleware برای ذخیره سازی ایجاد کرد که به صورت زیر عمل کند:

-هر زمان که یک درخواست ذخیره، دریافت میشود سرورهای ذخیره شده محصول/کاربر و سرور فراخوانی میشود.

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

به تصاویر زیر دقت کنید و آنها را مقایسه کنید.

در نمودار زیر از Middleware استفاده نشده است:

این نمودار طراحی زشت و نا مفهومی دارد که کد شما را بهم پیوسته و پیچیده تر میکند.

اکنون نمودار قبل را یکبار دیگر طراحی میکنیم و در آن از Middleware استفاده میکنیم:

در این سناریو برای ذخیره یک محصول یا کاربر، یک Middleware توسط مشتری فراخوانی و بقیه کارها را به راحتی اداره میشود.

3.امنیت API به وسیله Middleware :

در هر کد فرانت-اند سمت کلاینت (front end client-side code)، میتوان درخواست های ارسالی را در کنسول مرورگر و یا از طریق یک پروکسی مشاهده کرد.

کمی قبل یک سرور کاربر را بررسی کردیم که حاوی اطلاعات ورود (login) و ثبت نام ( sign-up) کاربران است. اگر کد front end مستقیما درخواست ها را به سرور کاربر ارسال کند، آدرس سرور احراز هویت ما در معرض دسترسی قرار میگیرد. یعنی هکرها و نفوذ کنندگان می توانند با استفاده از یک سری ابزار نقاط ضعف و آسیب پذیر سرور را پیدا و اسکن کنند.

میتوانیم از Middleware به عنوان یک پروکسی برای مخفی کردن URL احراز هویت سرور، استفاده کنیم. بخش front end با Middleware ارتباط برقرار میکند. سپس درخواست ها را به سمت سرور احراز هویت هدایت و بازخوردها را برمیگرداند.

همچنین این رویکرد به ما این امکان را میدهد تا تمام درخواست های سرور احراز هویت را به جز درخواست های middleware’s URL، مسدود کنیم. این امر باعث امنیت بیشتر سرور احراز هویت میشود.

البته با توجه به اینکه در گذشته front end با سرور احراز هویت ارتباط برقرار میکرد، این امر ممکن نبود. تا زمانی که front end به معنی کامپیوتر مشتری است، نمی توان برای آن یک فیلتر IP بکار برد.

4.افشا کردن API های عمومی به کمک میان افزارها :

در قسمت قبل، یاد گرفتیم که به کمک Middleware میتوان دسترسی به API را محدود کرد.

فرض کنید که شما به عنوان مهندس نرم افزار در یک بانک کار میکنید و بانک در حال برنامه ریزی یک hackathon است. در چنین مواقع ای ما نیاز به دسترسی به API داریم.

با توجه به قوانین امنیتی بانک مطمئنا به ما دسترسی به تمام API ها نمی دهند. همچنین اجازه ی انجام هر عملیاتی را هم نمیدهند.

به همین جهت، ما باید یک Middleware پیاده سازی کنیم که فقط برخی از نقاط ضعف را افشا و درخواست ها را به API واقعی ما هدایت کند. سپس ما این API را به توسعه دهندگان موجود در hackathon ارائه دهیم.

Hackathon چیست؟

ممکن است با شنیدن رویکرد hackathon، در ذهنتان گروهی از هکران که در حال حمله و نفوذ به سیستم های دیگران هستند، تجسم شود.

در واقع hackathon هیچ ارتباطی با این نوع هک ها و حملات ندارد. یک گردهمایی برای برنامه نویسان است که در آن به کمک علم و خلاقیت های یکدیگر، فناوری های تازه ای را خلق می کنند.

بستن