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