مِشِ سرویس چیست؟
مِشِ سرویس یک لایه نرمافزاری است که تمام ارتباطات بین سرویسها در برنامهها را مدیریت میکند. این لایه از میکروسرویسهای کانتینریزه شده تشکیل شده است. با مقیاسبندی برنامهها و افزایش تعداد میکروسرویسها، نظارت بر عملکرد سرویسها چالشبرانگیز میشود. برای مدیریت اتصالات بین سرویسها، مِشِ سرویس ویژگیهای جدیدی مانند نظارت، ثبت وقایع، ردیابی و کنترل ترافیک را ارائه میدهد. این لایه مستقل از کد هر سرویس است، که به آن امکان میدهد در سراسر مرزهای شبکه و با سیستمهای مدیریت سرویس متعدد کار کند.
چرا به مِشِ سرویس نیاز دارید؟
در معماری برنامههای مدرن، میتوانید برنامهها را به عنوان مجموعهای از میکروسرویسهای کوچک و مستقل قابل استقرار بسازید. تیمهای مختلف ممکن است میکروسرویسهای جداگانه را بسازند و زبانهای برنامهنویسی و ابزارهای خود را انتخاب کنند. با این حال، میکروسرویسها باید برای عملکرد صحیح کد برنامه با یکدیگر ارتباط برقرار کنند.عملکرد برنامه به سرعت و انعطافپذیری ارتباط بین سرویسها بستگی دارد. توسعهدهندگان باید برنامه را در سراسر سرویسها نظارت و بهینهسازی کنند، اما به دلیل ماهیت توزیع شده سیستم، به دست آوردن دید کافی دشوار است. با مقیاسبندی برنامهها، مدیریت ارتباطات پیچیدهتر میشود.دو محرک اصلی برای پذیرش مِشِ سرویس وجود دارد که در ادامه به تفصیل توضیح میدهیم.
قابلیت مشاهده در سطح سرویس
با استقرار حجم بیشتری از بار کاری و سرویسها، توسعهدهندگان در درک نحوه عملکرد همه چیز با هم با چالش مواجه میشوند. به عنوان مثال، تیمهای سرویس میخواهند بدانند وابستگیهای پاییندستی و بالادستی آنها چیست. آنها میخواهند دید بیشتری نسبت به نحوه ارتباط سرویسها و بار کاری در لایه برنامه داشته باشند.
کنترل در سطح سرویس
مدیران میخواهند کنترل کنند که کدام سرویسها با یکدیگر صحبت میکنند و چه اقداماتی انجام میدهند. آنها کنترل دقیق و حاکمیت بر رفتار، سیاستها و تعاملات سرویسها در یک معماری میکروسرویسها را میخواهند. اعمال سیاستهای امنیتی برای انطباق با مقررات ضروری است.
مزایای مِشِ سرویس چیست؟
مِشِ سرویس یک لایه زیرساخت متمرکز و اختصاصی را فراهم میکند که پیچیدگیهای ارتباط سرویس به سرویس را در یک برنامه توزیع شده مدیریت میکند. در ادامه، چندین مزیت مِشِ سرویس را ارائه میدهیم.
کشف سرویس
مِشهای سرویس، کشف سرویس خودکار را فراهم میکنند، که بار عملیاتی مدیریت نقاط پایانی سرویس را کاهش میدهد. آنها از یک رجیستری سرویس برای کشف پویا و پیگیری همه سرویسها در مِش استفاده میکنند. سرویسها میتوانند بدون توجه به موقعیت یا زیرساخت زیربنایی خود، یکپارچه یکدیگر را پیدا کرده و با یکدیگر ارتباط برقرار کنند. میتوانید با استقرار سرویسهای جدید در صورت نیاز، به سرعت مقیاسبندی کنید.
توزیع بار
مِشهای سرویس از الگوریتمهای مختلفی مانند round-robin، کمترین اتصالات یا توزیع بار وزنی برای توزیع هوشمندانه درخواستها در چندین نمونه سرویس استفاده میکنند. توزیع بار، استفاده از منابع را بهبود میبخشد و در دسترس بودن و مقیاسپذیری بالا را تضمین میکند. میتوانید عملکرد را بهینه کرده و از گلوگاههای ارتباط شبکه جلوگیری کنید.
مدیریت ترافیک
مِشهای سرویس ویژگیهای پیشرفته مدیریت ترافیک را ارائه میدهند، که کنترل دقیق بر مسیریابی درخواست و رفتار ترافیک را فراهم میکند. در اینجا چند نمونه آورده شده است.
تقسیم ترافیک
میتوانید ترافیک ورودی را بین نسخهها یا پیکربندیهای مختلف سرویس تقسیم کنید. مِش بخشی از ترافیک را به نسخه بهروزرسانی شده هدایت میکند، که امکان استقرار کنترل شده و تدریجی تغییرات را فراهم میکند. این امر انتقال روان را فراهم میکند و تأثیر تغییرات را به حداقل میرساند.
آینهسازی درخواست
میتوانید ترافیک را برای تجزیه و تحلیل به یک سرویس آزمایشی یا نظارتی بدون تأثیر بر جریان درخواست اصلی، تکرار کنید. با آینهسازی درخواستها، بینشی در مورد نحوه مدیریت درخواستهای خاص توسط سرویس بدون تأثیر بر ترافیک تولید به دست میآورید.
استقرارهای قناری
میتوانید زیرمجموعه کوچکی از کاربران یا ترافیک را به یک نسخه جدید سرویس هدایت کنید، در حالی که بیشتر کاربران به استفاده از نسخه پایدار موجود ادامه میدهند. با قرار گرفتن در معرض محدود، میتوانید رفتار و عملکرد نسخه جدید را در یک محیط واقعی آزمایش کنید.
امنیت
مِشهای سرویس ویژگیهای ارتباط امن مانند رمزگذاری TLS متقابل (mTLS)، احراز هویت و مجوز را فراهم میکنند. TLS متقابل، تأیید هویت را در ارتباط سرویس به سرویس فعال میکند. این امر با رمزگذاری ترافیک به اطمینان از محرمانگی و یکپارچگی دادهها کمک میکند. همچنین میتوانید سیاستهای مجوز را برای کنترل اینکه کدام سرویسها به نقاط پایانی خاص دسترسی دارند یا اقدامات خاصی را انجام میدهند، اعمال کنید.
نظارت
مِشهای سرویس ویژگیهای نظارت و قابلیت مشاهده جامع را برای به دست آوردن بینش در مورد سلامت، عملکرد و رفتار سرویسهای شما ارائه میدهند. نظارت همچنین از عیبیابی و بهینهسازی عملکرد پشتیبانی میکند. در اینجا نمونههایی از ویژگیهای نظارتی که میتوانید استفاده کنید آورده شده است:
- جمعآوری معیارهایی مانند تأخیر، نرخ خطا و استفاده از منابع برای تجزیه و تحلیل عملکرد کلی سیستم
- انجام ردیابی توزیع شده برای مشاهده مسیر کامل و زمانبندی درخواستها در چندین سرویس
- ثبت رویدادهای سرویس در گزارشها برای ممیزی، اشکالزدایی و انطباق
مِشِ سرویس چگونه کار میکند؟
مِشِ سرویس منطق حاکم بر ارتباط سرویس به سرویس را از سرویسهای فردی حذف میکند و ارتباط را به لایه زیرساخت خود انتزاع میکند. این کار از چندین پراکسی شبکه برای مسیریابی و ردیابی ارتباط بین سرویسها استفاده میکند.یک پراکسی به عنوان یک دروازه واسطه بین شبکه سازمان شما و میکروسرویس عمل میکند. تمام ترافیک به و از سرویس از طریق سرور پراکسی مسیریابی میشود. پراکسیهای فردی گاهی اوقات “سایدکار” نامیده میشوند، زیرا به طور جداگانه اجرا میشوند اما از نظر منطقی در کنار هر سرویس هستند. در مجموع، پراکسیها لایه مِشِ سرویس را تشکیل میدهند.
در معماری مِشِ سرویس دو جزء اصلی وجود دارد: صفحه کنترل و صفحه داده.
صفحه داده (Data Plane)
صفحه داده، جزء مدیریت داده مِشِ سرویس است. این شامل تمام پراکسیهای سایدکار و عملکردهای آنها میشود. هنگامی که یک سرویس میخواهد با سرویس دیگری ارتباط برقرار کند، پراکسی سایدکار این اقدامات را انجام میدهد:
- سایدکار درخواست را رهگیری میکند.
- درخواست را در یک اتصال شبکه جداگانه کپسوله میکند.
- یک کانال امن و رمزگذاری شده بین پراکسیهای مبدا و مقصد برقرار میکند.
پراکسیهای سایدکار پیامرسانی سطح پایین بین سرویسها را مدیریت میکنند. آنها همچنین ویژگیهایی مانند قطع مدار (circuit breaking) و تلاش مجدد درخواست (request retries) را برای افزایش انعطافپذیری و جلوگیری از افت کیفیت سرویس پیادهسازی میکنند. عملکرد مِشِ سرویس—مانند توزیع بار، کشف سرویس و مسیریابی ترافیک—در صفحه داده پیادهسازی میشود.
صفحه کنترل (Control Plane)
صفحه کنترل به عنوان لایه مدیریت و پیکربندی مرکزی مِشِ سرویس عمل میکند.با استفاده از صفحه کنترل، مدیران میتوانند سرویسهای داخل مِش را تعریف و پیکربندی کنند. برای مثال، میتوانند پارامترهایی مانند نقاط پایانی سرویس، قوانین مسیریابی، سیاستهای توزیع بار و تنظیمات امنیتی را مشخص کنند. پس از تعریف پیکربندی، صفحه کنترل اطلاعات لازم را به صفحه داده مِشِ سرویس توزیع میکند.پراکسیها از اطلاعات پیکربندی برای تصمیمگیری در مورد نحوه مدیریت درخواستهای ورودی استفاده میکنند. آنها همچنین میتوانند تغییرات پیکربندی را دریافت کرده و رفتار خود را به صورت پویا تطبیق دهند. میتوانید تغییرات بلادرنگ در پیکربندی مِشِ سرویس بدون راهاندازی مجدد یا اختلال در سرویس ایجاد کنید.
پیادهسازیهای مِشِ سرویس معمولاً قابلیتهای زیر را در صفحه کنترل شامل میشوند:
- رجیستری سرویس که تمام سرویسهای داخل مِش را ردیابی میکند.
- کشف خودکار سرویسهای جدید و حذف سرویسهای غیرفعال.
- جمعآوری و تجمیع دادههای تلهمتری مانند معیارها، گزارشها و اطلاعات ردیابی توزیع شده.
ایستیو چیست؟
ایستیو یک پروژه مِشِ سرویس متنباز است که عمدتاً برای کار با کوبرنتیز طراحی شده است. کوبرنتیز یک پلتفرم ارکستراسیون کانتینر متنباز است که برای استقرار و مدیریت برنامههای کانتینریزه شده در مقیاس استفاده میشود.اجزای صفحه کنترل ایستیو خودشان به عنوان بار کاری کوبرنتیز اجرا میشوند. این پروژه از یک پاد کوبرنتیز—مجموعهای از کانتینرهای به هم پیوسته که یک آدرس IP را به اشتراک میگذارند—به عنوان مبنایی برای طراحی پراکسی سایدکار استفاده میکند.پراکسی لایه ۷ ایستیو به عنوان یک کانتینر دیگر در همان زمینه شبکه سرویس اصلی اجرا میشود. از این موقعیت، میتواند تمام ترافیک شبکه را که از پاد عبور میکند، رهگیری، بازرسی و دستکاری کند. با این حال، کانتینر اصلی نیازی به تغییر یا حتی آگاهی از وقوع این اتفاق ندارد.
چالشهای پیادهسازیهای مِشِ سرویس متنباز چیست؟
در اینجا برخی از چالشهای رایج مِشِ سرویس مرتبط با پلتفرمهای متنباز مانند ایستیو، لینکرد و کانسول آورده شده است.
پیچیدگی
مِشهای سرویس اجزای زیرساختی اضافی، الزامات پیکربندی و ملاحظات استقرار را معرفی میکنند. آنها دارای منحنی یادگیری تندی هستند که نیاز به کسب تخصص توسعهدهندگان و اپراتورها در استفاده از پیادهسازی خاص مِشِ سرویس دارد. آموزش تیمها زمان و منابع میبرد. یک سازمان باید اطمینان حاصل کند که تیمها دانش لازم را برای درک پیچیدگیهای معماری مِشِ سرویس و پیکربندی مؤثر آن دارند.
سربارهای عملیاتی
مِشهای سرویس سربارهای اضافی برای استقرار، مدیریت و نظارت بر پراکسیهای صفحه داده و اجزای صفحه کنترل را معرفی میکنند. به عنوان مثال، باید موارد زیر را انجام دهید:
- اطمینان از در دسترس بودن و مقیاسپذیری بالای زیرساخت مِشِ سرویس
- نظارت بر سلامت و عملکرد پراکسیها
- مدیریت ارتقاها و مسائل مربوط به سازگاری
ضروری است که مِشِ سرویس را با دقت طراحی و پیکربندی کنید تا هرگونه تأثیر عملکردی بر سیستم کلی به حداقل برسد.
چالشهای ادغام
یک مِشِ سرویس باید به طور یکپارچه با زیرساختهای موجود ادغام شود تا عملکردهای مورد نیاز خود را انجام دهد. این شامل پلتفرمهای ارکستراسیون کانتینر، راه حلهای شبکه۱ و سایر ابزارها در پشته فناوری میشود.
اطمینان از سازگاری و ادغام روان با سایر اجزا در محیطهای پیچیده و متنوع میتواند چالشبرانگیز باشد. برنامهریزی و آزمایش مداوم برای تغییر APIها، قالبهای پیکربندی و وابستگیهای شما مورد نیاز است. همین امر در صورتی که نیاز به ارتقا به نسخههای جدید در هر نقطه از پشته داشته باشید، صادق است.