ما در بحبوحه یک انقلاب توسعه اپلیکیشن و مدیریت سیستم IT هستیم که توسط ابر هدایت می شود. زیرساختهای سریع، چابک، ارزان و بسیار مقیاسپذیر، که بهطور کامل سلفسرویس و با صورتحساب پرداختی ارائه میشود، کارایی عملیاتی را بهبود میبخشد و امکان افزایش زمان به ارزش را در صنایع فراهم میکند. ظهور کانتینرها با راه اندازی سریع، بسته بندی برنامه استاندارد و مدل ایزوله، کمک بیشتری به کارایی و چابکی می کند.
با این حال، بسیاری از شرکتها دریافتهاند که ایجاد برنامههای کاربردی خود بسیار در دسترس، مقیاسپذیر و چابک همچنان چالش برانگیز است. فشارهای تجاری رقابتی ایجاب میکند که برنامهها به طور مداوم تکامل یافته و ویژگیها و عملکردهای جدیدی را اضافه کنند و در عین حال 24x7 در دسترس باشند. به عنوان مثال، دیگر قابل قبول نیست که یک وب سایت بانکی دارای پنجره تعمیر و نگهداری باشد، در حالی که حتی چند سال پیش این امر عادی بود. به طور مشابه، یک سایت تجارت الکترونیکی که حتی برای مدت کوتاهی از کار افتاده باشد، مشتریان را به یکی از رقبای متعددی سوق می دهد که می تواند در آن لحظه به آنها خدمت کند. عدم تحقق این خواسته ها می تواند به معنای تفاوت بین مرتبط ماندن و از دست دادن تجارت باشد.
این واقعیتهای تجاری، توسعهدهندگان را به سمت اتخاذ یک مدل معماری کاربردی به نام «microservices» سوق میدهد، اصطلاحی که توسط جیمز لوئیس و مارتین فاولر رایج شده است. در این پست، من در مورد اینکه چگونه و چرا یک معماری میکروسرویس میتواند به توسعه برنامهها و وظایف چرخه حیات کمک کند، صحبت میکنم و قابلیتهایی را که پلتفرمها میتوانند برای پشتیبانی از این معماریها ارائه دهند، شرح دهم. سپس برخی از پلتفرمهایی که معمولاً توسط توسعهدهندگان بهعنوان پایهای برای برنامههای مبتنی بر میکروسرویس مورد استفاده قرار میگیرند را که Azure از آنها پشتیبانی میکند، فهرست میکنم، و در نهایت، پلتفرم اپلیکیشن میکروسرویس خود را به نام Service Fabric که پشتیبانی جامعی از مدیریت چرخه حیات میکروسرویس ارائه میکند، به اختصار شرح خواهم داد.
مدل های کاربردی یکپارچه
برای چندین دهه، هزینه، زمان و پیچیدگی تهیه سخت افزار جدید، چه فیزیکی و چه مجازی، به شدت بر توسعه اپلیکیشن تاثیر گذاشته است. این عوامل زمانی که این برنامهها از نظر ماموریت حیاتی هستند، آشکارتر میشوند، زیرا زمان بالا به زیرساختهای بسیار در دسترس، از جمله سختافزارهای گرانقیمت مانند SAN و متعادلکنندههای بار سختافزار نیاز دارد. از آنجایی که زیرساخت فناوری اطلاعات ثابت است، برنامهها به گونهای نوشته شدهاند که اندازه استاتیک داشته باشند و برای سختافزار خاص طراحی شوند، حتی در صورت مجازیسازی. حتی زمانی که برنامهها برای به حداقل رساندن نیازهای کلی سختافزار و ارائه سطحی از چابکی و مقیاسبندی مستقل تجزیه میشدند، معمولاً به مدل کلاسیک سه لایه، با وب، منطق تجاری و سطوح داده، همانطور که در شکل زیر نشان داده شده است، تبدیل شد. با این حال، هر لایه هنوز یکپارچه خاص خود بود و عملکردهای متنوعی را اجرا میکرد که در یک بسته واحد ترکیب شدند که روی سختافزار از پیش مقیاسبندی شده برای بارهای اوج استفاده میشد. هنگامی که بارگذاری باعث میشود یک برنامه از سختافزار خود بیشتر شود، پاسخ معمولاً «مقیاسسازی» یا ارتقای سختافزار برنامه برای افزودن ظرفیت بود تا از پیکربندی مجدد مرکز داده و معماری مجدد نرمافزار جلوگیری شود.
مدل کاربردی یکپارچه نتیجه طبیعی محدودیتهای چابکی زیرساخت بود، اما منجر به ناکارآمدی شد. از آنجایی که زیرساخت ثابت و چرخههای توسعه طولانی به این معنی بود که تجزیه برنامهها فراتر از چند لایه مزیت کمی دارد، توسعهدهندگان ارتباط تنگاتنگی بین سرویسهای کاربردی نامرتبط در لایهها ایجاد کردند. تغییر در هر سرویس برنامه، حتی در موارد کوچک، مستلزم آزمایش مجدد و استفاده مجدد از کل لایه آن بود. یک بهروزرسانی ساده میتواند اثرات پیشبینینشدهای روی بقیه سطوح داشته باشد، تغییرات را مخاطرهآمیز کند و چرخههای توسعه را طولانیتر کند تا امکان آزمایش دقیقتر را فراهم کند. وابستگی آنها به منابع تخصیصیافته و سختافزار بسیار در دسترس، برنامههای کاربردی را مستعد تغییرات در بار و عملکرد سختافزاری میکند، که میتواند آنها را به خارج از منطقه عملیاتی استاندارد خود سوق دهد و باعث کاهش شدید عملکرد آنها شود. یک نقص سختافزاری آشکار میتواند کل برنامه را به یک tailspin تبدیل کند.
در نهایت، یکی دیگر از چالشهای پیش روی برنامههای یکپارچه که از یک رویکرد لایهبندی استفاده میکردند، ارائه عملکرد سریع با دادههای ذخیرهشده در لایه پشتیبان بود. یک رویکرد معمولی، معرفی کش های میانی برای بافر در برابر ناکارآمدی های ناشی از جداسازی محاسبات و داده ها بود، اما با افزودن منابع سخت افزاری استفاده نشده، هزینه ها را افزایش داد و پیچیدگی های بیشتری را توسعه و به روز رسانی ایجاد کرد.
معماری میکروسرویس ها
در حالی که برنامه های کاربردی در مقیاس ساده و محدود وجود دارد که معماری یکپارچه برای آنها هنوز منطقی است، میکروسرویس ها رویکرد متفاوتی برای توسعه و استقرار برنامه هستند، رویکردی که کاملاً برای چابکی، مقیاس و قابلیت اطمینان الزامات بسیاری از برنامه های کاربردی ابر مدرن مناسب است. یک برنامه میکروسرویس به اجزای مستقلی به نام "microservices" تجزیه می شود که برای ارائه عملکرد کلی برنامه به طور هماهنگ کار می کنند. اصطلاح «microservice» بر این واقعیت تأکید دارد که برنامهها باید از سرویسهایی تشکیل شده باشند که به اندازه کافی کوچک باشند تا واقعاً نگرانیهای مستقل را منعکس کنند به طوری که هر میکروسرویس یک عملکرد واحد را پیادهسازی کند. علاوه بر این، هر یک دارای قراردادهای کاملاً تعریف شده (قراردادهای API) - معمولاً RESTful - برای سایر ریزسرویسها برای برقراری ارتباط و اشتراکگذاری دادهها با آن است. میکروسرویس ها همچنین باید بتوانند مستقل از یکدیگر نسخه و به روز رسانی کنند. این کوپلینگ شل چیزی است که از تکامل سریع و قابل اعتماد یک برنامه پشتیبانی می کند. شکل 3 نشان می دهد که چگونه یک برنامه یکپارچه ممکن است به میکروسرویس های مختلف تقسیم شود.
برنامه های کاربردی مبتنی بر میکروسرویس همچنین جداسازی برنامه را از زیرساخت زیرینی که روی آن اجرا می شود، امکان پذیر می کند. برخلاف برنامههای کاربردی یکپارچه که توسعهدهندگان نیازمندیهای منابع را برای فناوری اطلاعات اعلام میکنند، میکروسرویسها منابع مورد نیاز خود را به یک سیستم نرمافزاری توزیعشده معروف به «مدیر خوشه» اعلام میکنند، که «برنامهریزی میکند» یا آنها را بر روی ماشینهای اختصاص داده شده به خوشه قرار میدهد تا خوشه را به حداکثر برساند. استفاده از منابع کلی و در عین حال رعایت الزامات هر میکروسرویس برای دسترسی بالا و تکرار داده ها، برای به حداقل رساندن نیازهای مقیاس خوشه نشان داده شده است.
با این مدل، مقیاس میکروسرویس میتواند تقریباً آنی باشد و به یک برنامه اجازه میدهد تا با بارهای متغیر سازگار شود. اتصال شل آنها همچنین به این معنی است که میکروسرویس ها می توانند به طور مستقل مقیاس شوند. به عنوان مثال، شنونده HTTP نقطه پایانی عمومی، یک ریزسرویس در عملکرد وب یک برنامه کاربردی، ممکن است تنها ریزسرویس یک برنامه کاربردی باشد که برای رسیدگی به برخی از ترافیک ورودی اضافی کاهش می یابد.
ماهیت مستقل و توزیعشده برنامههای کاربردی مبتنی بر میکروسرویس، بهروزرسانیهای متحرک را نیز امکانپذیر میکند، که در آن تنها زیر مجموعهای از نمونههای یک میکروسرویس در هر زمان معین بهروزرسانی میشوند. اگر مشکلی شناسایی شود، قبل از اینکه همه نمونهها با کد یا پیکربندی معیوب بهروزرسانی شوند، میتوان یک بهروزرسانی باگ را «برگرداند» یا لغو کرد. اگر سیستم بهروزرسانی خودکار باشد، ادغام با خطوط لوله Continuous Integration (CI) و Continuous Delivery (CD) به توسعهدهندگان این امکان را میدهد که به طور ایمن و مکرر برنامه را بدون ترس از تأثیر در دسترس بودن، توسعه دهند.
در حالی که مدل کلاسیک برای مقیاسپذیری برنامهها، داشتن یک لایه با بار متعادل و بدون حالت با یک ذخیرهگاه داده خارجی یا پایگاه داده مشترک برای ذخیره وضعیت پایدار است، میکروسرویسهای وضعیتی میتوانند به عملکرد بالاتر، تأخیر کمتر، مقیاس عظیم دست یابند و چابکی توسعهدهنده را برای بهروزرسانیهای سرویس حفظ کنند. میکروسرویسهای دولتی دادههای پایدار را مدیریت میکنند و معمولاً آنها را به صورت محلی روی سرورهایی که روی آنها قرار میگیرند ذخیره میکنند تا از سربار دسترسی به شبکه و پیچیدگی عملیات متقابل سرویس جلوگیری کنند. این سریع ترین پردازش ممکن را ممکن می کند و می تواند نیاز به حافظه پنهان را از بین ببرد. علاوه بر این، به منظور مدیریت اندازههای داده و خروجیهای انتقال فراتر از آن چیزی که یک سرور میتواند پشتیبانی کند، دادههای پارتیشن میکروسرویسهای حالتپذیر مقیاسپذیر در میان نمونههای آنها و پیادهسازی نسخهبندی طرحواره بهگونهای که کلاینتها حتی در حین بهروزرسانی، یک نسخه ثابت را ببینند، صرف نظر از اینکه کدام نمونه میکروسرویس را با هم ارتباط برقرار میکنند.
پلتفرم های کاربردی میکروسرویس
در اجرای داخلی سرویسهای مایکروسافت در مقیاس ابری مانند Bing، Cortana و Intune به ما درک عمیقی از پیچیدگیهای مرتبط با طراحی، توسعه، و استقرار برنامههای کاربردی در مقیاس بزرگ در مقیاس ابری داده است. به روز رسانی های مکرر در مقیاس بزرگ، همیشه در برنامه ها یک چالش است، مهم نیست که برنامه چقدر خوب طراحی شده باشد. صرف انداختن میکروسرویس ها در ماشین های مجازی یا حتی کانتینرها، پتانسیل کامل رویکرد میکروسرویس ها را فعال نمی کند، که به یک پلت فرم اپلیکیشن میکروسرویس با ابزار متمرکز بر DevOps نیاز دارد.
یک پلتفرم برنامه کاربردی میکروسرویس با امکانات کامل، تمام مزایای معماری میکروسرویسهای قبلاً بیان شده از بازده هزینه، مقیاسپذیری و در دسترس بودن 24x7 را ارائه میدهد. همچنین اینها را یک قدم جلوتر می برد. همانطور که قبلا ذکر شد، باید ارتقاهای ایمن و قابل اعتماد را با استفاده از یک مدل بهداشتی قابل توسعه و برگشت خودکار طراحی کند. همچنین با ارائه یک سرویس نامگذاری به میکروسرویس ها کمک می کند تا یکدیگر را کشف کنند و سلامت آنها را نظارت و حفظ کنند. به عنوان مثال، هنگام مقیاس بندی یا بهبود، یک پلت فرم میکروسرویس اطلاعات مکان به روز شده را از طریق سرویس نامگذاری به سایر میکروسرویس ها منتقل می کند تا بتوانند به سرعت ارتباط برقرار کنند یا دوباره برقرار کنند.
برای حفظ سلامت میکروسرویسها، زمانی که نرمافزار یا سختافزاری که روی آنها اجرا میشود از کار میافتد یا باید برای ارتقاء مجدد راهاندازی شود، پلتفرم بهطور خودکار نمونهها را به ماشینهای مجازی یا سرورهای سالم منتقل میکند. علاوه بر این، یک پلت فرم میکروسرویس باید در ابرهای خصوصی و عمومی قابل استقرار باشد. این برای پشتیبانی از سناریوهای ترکیبی که در آن بار کاری از یک ابر خصوصی به یک ابر عمومی منفجر میشود و برای فعال کردن توسعه/آزمایش ابر عمومی با استقرار تولید در یک ابر خصوصی ضروری است. پشتیبانی از ابرهای متعدد همچنین نگرانیهای مربوط به قفل شدن فروشنده را هنگام انتخاب یک پلتفرم برنامه برطرف میکند و پلتفرم را از زیرساخت جدا میکند.
این بخش به طور خلاصه چندین پلتفرم محبوب را که امروزه توسعه دهندگان در حال ساخت و استقرار اپلیکیشن های میکروسرویس هستند، توضیح می دهد. همه موارد زیر می توانند بر روی زیرساخت Azure اجرا شوند و بر اساس نیازهای شما به شما امکان انتخاب می دهند.
Docker Swarm و Docker Compose
فرمت استاندارد بسته بندی و جداسازی منابع ظروف داکر، آنها را با معماری های میکروسرویس سازگاری طبیعی کرده است. Docker Compose یک مدل برنامه کاربردی تعریف میکند که از چندین میکروسرویس بستهبندی شده با Docker پشتیبانی میکند، و Docker Swarm به عنوان یک مدیر خوشه در مجموعهای از زیرساختها عمل میکند که همان پروتکلی را که یک نصب Docker تک نود انجام میدهد، نشان میدهد، به طوری که با ابزار گسترده Docker کار میکند. زیست بوم. سرویس کانتینر Azure از Docker Swarm و Docker Compose پشتیبانی می کند.
کوبرنتیس
Kubernetes یک سیستم منبع باز برای خودکارسازی استقرار، عملیات و مقیاسبندی برنامههای کانتینری است. این کانتینرها را که یک برنامه کاربردی را تشکیل می دهند در واحدهای منطقی برای مدیریت و کشف آسان گروه بندی می کند. در اصل توسط گوگل توسعه یافته است، و بر تجربیات آنها در اجرای سرویس های مقیاس بزرگ مانند جستجو و جی میل استوار است. حتی برخی از راه حل های سنتی PaaS مانند Apprenda با Kubernetes ادغام می شوند.
Mesosphere DCOS، با Apache Mesos و Marathon
مایکروسافت و Mesosphere برای آوردن اجزای منبع باز سیستم عامل مرکز داده Mesosphere (DCOS) از جمله Apache Mesos و Marathon به Azure همکاری کردهاند. Mesosphere DCOS که توسط Mesos ارائه میشود، یک مدیر خوشه مقیاسپذیر است که شامل Mesosphere’s Marathon، یک ابزار ارکستراسیون کانتینر درجه تولید است. به عنوان بخشی از سرویس کانتینر Azure در دسترس است. همچنین یک نسخه سازمانی از Mesosphere موجود است که روی Azure اجرا می شود. Mesosphere DCOS قابلیتهای پلتفرم میکروسرویسها از جمله کشف سرویس، تعادل بار، بررسی سلامت، محدودیتهای مکانیابی و تجمع معیارها را فراهم میکند. در نهایت، Mesosphere یک کتابخانه از خدمات تایید شده را ارائه میکند که قابلیتهای اضافی مانند Kafka، Chronos، Cassandra، Spark و موارد دیگر را ارائه میدهد که همگی با یک فرمان قابل نصب هستند.
OpenShift
OpenShift توسط Red Hat یک سرویس پلتفرم است که از بستهبندی مبتنی بر کانتینر Docker برای استقرار قابلیتهای هماهنگی کانتینر و مدیریت محاسباتی برای Kubernetes استفاده میکند و کاربران را قادر میسازد تا JBoss Middleware، چندین زبان برنامهنویسی، پایگاههای داده و سایر زمانهای اجرا برنامه را اجرا کنند. OpenShift Enterprise 3 یک تجربه توسعه را ارائه می دهد که به توسعه دهندگان امکان می دهد فرآیند ساخت و استقرار برنامه را در یک زیرساخت برنامه ایمن و درجه سازمانی خودکار کنند. با پشتیبانی اخیر از تصاویر لینوکس Red Hat Enterprise در Azure، OpenShift در Azure پشتیبانی می شود. به زودی به دنبال برخی اسناد در مورد این موضوع باشید.
ریخته گری ابر محوری
Pivotal Cloud Foundry معماریهای میکروسرویس را با ترکیب گردش کار و زمانبندی کانتینر از Cloud Foundry با ادغام الگوهای میکروسرویس مانند کشف سرویس، متعادلسازی بار سمت مشتری، قطع کنندههای مدار و ردیابی توزیع شده، با استفاده از Spring Cloud و NetflixOSS، فعال میکند. Pivotal Cloud Foundry از عملیات میکروسرویس جاری از طریق قابلیتهای استقرار و مدیریت خدمات مانند مقیاس خودکار، بهروزرسانیهای سبز-آبی، نظارت بر سلامت، معیارهای برنامه، گزارشهای جریان و غیره پشتیبانی میکند.
پارچه سرویس
برای حمایت از تکامل داخلی خود از داخل محل به ابر و از یکپارچه به برنامههای مبتنی بر میکروسرویس، بیش از ده سال پیش Service Fabric را توسعه دادیم. Service Fabric بسیاری از خدمات ابری ما را در مقیاس فوقالعاده، از جمله SQL DB، DocDB، Intune، Cortana و Skype for Business، و همچنین بسیاری از خدمات زیرساخت داخلی Azure، تامین میکند. ما دقیقاً از همان فناوری استفاده کردهایم و Service Fabric را بهعنوان یک سرویس در Azure منتشر کردهایم، و SDK مستقل امکان استقرار برنامههای Service Fabric را در کلاسترهای داخلی و سایر ابرها فراهم میکند. در نسخه عمومی اولیه، Service Fabric روی ویندوز با هر زبان دات نت اجرا می شود و پشتیبانی لینوکس و جاوا در دست توسعه است. Service Fabric دارای پشتیبانی داخلی برای مدیریت چرخه حیات، استقرار ترکیبی، و در دسترس بودن 24x7 با تجربه توسعه یکپارچه با استفاده از Visual Studio است. این پلتفرم مدلهای بهداشتی توسعهپذیری را برای زیرساختها و ریزسرویسها ارائه میکند تا امکان ارتقای خودکار مبتنی بر سلامت و بازگشت خودکار، سادهسازی DevOps را فراهم کند. علاوه بر این، Service Fabric از ریزسرویسهای بدون تابعیت و دولتی با انتخاب رهبری پشتیبانی میکند تا از سازگاری دادهها و یک چارچوب تکرار دولتی پشتیبانی کند که از تراکنشها برای تضمین دادههای دولتی پشتیبانی میکند.
نتیجه
دنیای محاسبات با ظهور ابر برای همیشه تغییر کرده است. Cloud به توسعه دهندگان امکان دسترسی فوری، ارزان و در مقیاس های تقریبا بی نهایت را به زیرساخت ها می دهد. چابکی ابر و در دسترس بودن بالا و نیازهای چابکی ثابت کسب و کار مدرن، معماری های یکپارچه را تحت فشار قرار داده و منجر به ظهور برنامه های کاربردی مبتنی بر ریزسرویس ها شده است. با یک پلتفرم میکروسرویس جامع، توسعهدهندگان میتوانند برنامههایی ایجاد کنند که در مقیاس وسیع با عملکرد بالا، در دسترس بودن بالا، اثربخشی هزینه و مدیریت چرخه حیات مستقل، در میان ابرهای عمومی و ابرهای خصوصی پشتیبانی میکنند. میکروسرویس ها یک انقلاب کاربردی هستند که توسط ابر قدرت می گیرند.