سرویس مش (Service Mesh) چیست؟

سرویس مش(Service Mesh) یک لایه نرم افزاری است که تمام ارتباطات بین سرویس‌ها را در برنامه‌ها مدیریت می‌کند. این لایه از میکروسرویس‌های کانتینری تشکیل شده است. با افزایش مقیاس برنامه‌ها و افزایش تعداد مایکروسرویس‌ها، نظارت بر عملکرد سرویس‌ها چالش برانگیز می‌شود. برای مدیریت ارتباطات بین سرویس‌ها، یک سرویس مش ویژگی‌های جدیدی مانند مانیتورینگ، لاگینگ، ردیابی و کنترل ترافیک را فراهم می‌کند که مستقل از کد هر سرویس بوده و به آن اجازه می‌دهد در سراسر مرزهای شبکه و با چندین سیستم مدیریت سرویس کار کند.


چرا به سرویس مش نیاز دارید؟

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

عملکرد برنامه به سرعت و انعطاف پذیری ارتباط بین سرویس‌ها بستگی دارد. توسعه دهندگان باید برنامه را در سراسر سرویس‌ها مانیتور و بهینه سازی کنند، اما به دلیل ماهیت توزیع شده سیستم، به سختی قابل مشاهده است. همانطور که برنامه‌ها مقیاس می‌شوند، مدیریت ارتباطات پیچیده‌تر می‌شود.

 

دو محرک اصلی برای پذیرش سرویس مش وجود دارد که در ادامه به جزئیات آنها می‌پردازیم:


قابلیت مشاهده در سطح سرویس (Service-level)

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

کنترل در سطح سرویس

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

سرور مجازی یک ماشین مجازی کامل است که می‌توانید منابع مورد نیاز خود را روی آن انتخاب نمائید.
خرید vps در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

مزایای مش سرویس چیست؟

سرویس مش یک لایه زیرساخت متمرکز و اختصاصی را فراهم می‌کند که پیچیدگی‌های ارتباط سرویس به سرویس را در یک برنامه کاربردی توزیع شده مدیریت می‌نماید. در ادامه چندین مزیت سرویس مش را ذکر خواهیم کرد:

  • کشف سرویس (Service discovery)

سرویس مش، دیسکاوری سرویس خودکار را ارائه می‌کند که بار عملیاتی مدیریت نقاط پایانی سرویس را کاهش می‌دهد. آنها از یک service registry استفاده می‌کنند تا به صورت پویا تمام سرویس‌های درون مش را کشف و پیگیری نمایند. سرویس‌ها می‌توانند بدون در نظر گرفتن موقعیت مکانی یا زیرساخت‌های زیربنایی(underlying infrastructure)، یکپارچه (seamlessly) یکدیگر را پیدا کرده و با یکدیگر ارتباط برقرار نمایند. شما می‌توانید به سرعت با استقرار سرویس‌های جدید در صورت لزوم مقیاس پذیری داشته باشید.

  • لود بالانسینگ (Load balancing)

سرویس مش از الگوریتم‌های مختلفی برای توزیع هوشمندانه درخواست‌ها در چندین نمونه سرویس استفاده می‌کند مانند round-robin، least connections، یا weighted load balancing. لود بالانس، استفاده از منابع را بهبود می‌بخشد و در دسترس بودن و مقیاس پذیری بالا را تضمین می‌کند. می توانید عملکرد را بهینه و از تنگناهای(bottleneck) ارتباطی شبکه جلوگیری کنید.

  • مدیریت ترافیک (Traffic management)

سرویس مش ویژگی‌های مدیریت ترافیک پیشرفته‌ای را ارائه کرده که کنترل دقیقی را بر مسیریابی درخواست و رفتار ترافیک ارائه می دهد. در اینجا چند نمونه هستند.

  • تقسیم ترافیک (Traffic splitting)

می‌توانید ترافیک ورودی را بین نسخه‌ها یا پیکربندی‌های مختلف سرویس تقسیم کنید. مش مقداری از ترافیک را به نسخه به‌روزرسانی شده هدایت می‌کند که امکان انتشار تدریجی و کنترل‌شده تغییرات را فراهم می‌نماید. یک انتقال نرم (smooth transition) را فراهم می‌کند و تاثیر تغییرات را به حداقل می‌رساند.

  • درخواست میرورینگ (Request mirroring)

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

  • استقرار به روش قناری (Canary deployments)

شما می توانید زیرمجموعه کوچکی از کاربران یا ترافیک را به یک نسخه سرویس جدید هدایت کنید، در حالی که اکثر کاربران همچنان از نسخه پایدار موجود استفاده می‌کنند. با exposure محدود، می‌توانید رفتار و عملکرد نسخه جدید را در یک محیط واقعی آزمایش کنید.

  • امنیت (Security)

مش سرویس ویژگی‌های ارتباطی ایمن مانند رمزگذاری mutual TLS (mTLS) ، authentication و authorization را ارائه می‌دهد. Mutual TLS تایید هویت را در ارتباط سرویس به سرویس فعال می‌کند. با رمزگذاری ترافیک به اطمینان از محرمانه بودن و یکپارچگی داده‌ها کمک می‌نماید. همچنین می‌توانید سیاست‌های مجوز را برای کنترل اینکه کدام سرویس‌ها به نقاط پایانی خاصی دسترسی دارند یا اقدامات خاصی را انجام می‌دهند، اعمال کنید.

  • مانیتورینگ (Monitoring)

مش سرویس ویژگی‌های مانیتورینگ و مشاهده جامعی را برای به دست آوردن بینشی در مورد سلامت، عملکرد و رفتار سرویس‌ها ارائه می‌دهد. مانیتورینگ همچنین از عیب یابی و بهینه سازی عملکرد پشتیبانی می‌کند. در ادامه نمونه‌هایی از ویژگی های مانیتورینگ وجود دارد که می توانید استفاده کنید:

  • برای تجزیه و تحلیل عملکرد کلی سیستم، معیارهایی مانند latency ، error rates و استفاده از منابع را جمع آوری کنید.
  • ردیابی توزیع شده را برای مشاهده مسیر و زمان بندی کامل درخواست ها در چندین سرویس انجام دهید
  • رویدادهای سرویس را در گزارش‌ها برای اهداف ممیزی، اشکال‌زدایی و انطباق ثبت کنید

سرویس مش چگونه کار می کند؟

سرویس مش منطق حاکم بر ارتباطات سرویس به سرویس را از سرویس‌های فردی حذف می‌کند و ارتباطات را به لایه زیرساخت خود انتزاع نموده و از چندین پروکسی شبکه برای مسیریابی و ردیابی ارتباط بین سرویس‌ها استفاده می‌کند.

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

سرویس مش چگونه کار می‌کند؟

دو جزء اصلی در معماری سرویس مش وجود دارد Data plane و Control plane

صفحه داده (Data plane)

صفحه داده مولفه مدیریت داده یک سرویس مش است که شامل تمام پراکسی‌‎های sidecar و عملکردهای آنها می‌شود. هنگامی که یک سرویس می‌خواهد با سرویس دیگری ارتباط برقرار کند، پراکسی sidecar این اقدامات را انجام می‌دهد:

  1. sidecar درخواست را رد می‌کند
  2. این درخواست را در یک اتصال شبکه جداگانه کپسوله می‌کند
  3. یک کانال امن و رمزگذاری شده بین پراکسی‌های مبدا و مقصد ایجاد می‌کند

پراکسی‌های sidecar پیام‌های سطح پایین بین سرویس‌ها را مدیریت می‌کنند. آنها همچنین ویژگی‌هایی مانند قطع شدن مدار و درخواست مجدد را برای افزایش انعطاف پذیری و جلوگیری از تخریب سرویس،  پیاده سازی می‌کنند. عملکرد سرویس مش – مانند لود بالانسینگ، دیسکاوری سرویس و مسیریابی ترافیک - در صفحه داده پیاده سازی می‌شود.

صفحه کنترل (Control plane)

صفحه کنترل به عنوان لایه مدیریتی و پیکربندی مرکزی سرویس مش عمل می‌کند.

با صفحه کنترل، مدیران می‌توانند سرویس‌ها را در مش تعریف و پیکربندی کنند. به عنوان مثال، آنها می‌توانند پارامترهایی مانند نقاط پایانی سرویس، قوانین مسیریابی، سیاست های لود بالانس و تنظیمات امنیتی را مشخص کنند. هنگامی که پیکربندی تعریف شد، صفحه کنترل اطلاعات لازم را در صفحه داده سرویس مش توزیع می‌کند.

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

اجرای سرویس مش معمولا شامل قابلیت‌های زیر در صفحه کنترل است:

  • رجیستری سرویس که تمام سرویس‌های داخل مش را ردیابی می‌کند
  • کشف خودکار سرویس‌های جدید و حذف سرویس‌های غیر فعال
  • جمع آوری و تجمیع داده‌های تله متری مانند متریک‌ها، لاگ‌ها و اطلاعات ردیابی توزیع شده

Istio چیست؟


ایستیو (Istio) چیست؟

Istio یک پروژه مش سرویس متن‌باز است که برای کار در درجه اول با Kubernetes طراحی شده است. Kubernetes یک پلتفرم ارکستراسیون کانتینر متن‌باز است که برای استقرار و مدیریت برنامه‌های کاربردی کانتینری در مقیاس استفاده می‌شود.

اجزای صفحه کنترل ایستیو با بار کاری خود Kubernetes اجرا می‌شوند. از یک Kubernetes Pod – مجموعه‌ای محکم از کانتینرها که یک IP مشترک دارند - به عنوان مبنای طراحی پراکسی sidecar استفاده می‌کند.

پروکسی لایه 7 Istio به عنوان یک کانتینر دیگر در زمینه شبکه مشابه سرویس اصلی اجرا می‌شود. از آن موقعیت، می‌تواند تمام ترافیک شبکه را که از طریق Pod هدایت می@شود، رهگیری، بازرسی و دستکاری کند. با این حال، کانتینر اولیه نیازی به تغییر یا حتی آگاهی از اینکه این اتفاق می‌افتد ندارد.

چالش‌های پیاده‌سازی سرویس مش متن‌باز چیست؟

در ادامه برخی از چالش‌های سرویس مش مشترک مرتبط با پلتفرم‌های متن‌باز مانند Istio، Linkerd و Consul آورده شده است.

پیچیدگی

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

سربار عملیاتی

سرویس مش، سربار اضافی را برای استقرار، مدیریت و مانیتورینگ بر پراکسی‌های صفحه داده و صفحه کنترل معرفی می‌کنند. به عنوان مثال، شما باید موارد زیر را انجام دهید:

  • اطمینان از در دسترس بودن و مقیاس پذیری بالای زیرساخت سرویس‌های مش 
  • بر سلامت و عملکرد پروکسی‌ها نظارت کنید
  • رسیدگی به ارتقا و مشکلات سازگاری

طراحی و پیکربندی دقیق مش سرویس برای به حداقل رساندن هرگونه تاثیر عملکرد بر سیستم کلی ضروری است.

چالش‌های ادغام

یک سرویس مش باید به طور یکپارچه با زیرساخت‌های موجود ادغام شود تا عملکردهای مورد نیاز خود را انجام دهد. این شامل پلتفرم‌های ارکستراسیون کانتینر، راه‌حل‌های شبکه‌ای و سایر ابزارهای موجود در پشته فناوری است.

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