محمد زارع
محمد زارع
خواندن ۲ دقیقه·۸ ماه پیش

معایب معماری میکروسرویس

هدفم از این نوشته این هست که بگم قبل از اینکه کورکورانه بریم سراغ میکروسرویس، یکم مغزهامون قلقلک داده بشه و کمی فکر کنیم!

پیچیدگی در مدیریت

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

افزایش منابع مصرفی (مخالف!)

تو خیلی جاها این رو به عنوان عیب میدونن ولی عملا همچین چیزی اتفاق نمیفته و ما این رو عیب در نظر نمیگیریم.

تاخیر شبکه

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

یکپارچگی دیتا

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

پیچیدگی تست

تراکنش هایی که بین سرویس ها انجام میشه باعث میشه به شدت تست نویسی پیچیده بشه.

پیچیدگی دپلوی

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

چالش های امنیتی

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

هزینه نگهداری و توسعه

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

سربار هماهنگی بین تیم ها

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

عکس

اینم عکس


معماری میکروسرویس
شاید از این پست‌ها خوشتان بیاید