کتاب Building Distributed Applications that Work: Design, debug, test, observe, secure, and deploy (ساخت برنامههای توزیعشده کاربردی: طراحی، عیبیابی، تست، پایش، امنیت و استقرار) به بررسی اصول، الگوها و روشهای عملی برای طراحی و پیادهسازی برنامههای توزیعشده میپردازد؛ سیستمهایی که اجزای آنها روی چندین ماشین یا گره شبکهای اجرا میشوند و باید در کنار هم بهصورت هماهنگ کار کنند.
در ادامه مقدمهای از کتاب Building Distributed Applications that Work را از زبان نویسنده شرح خواهیم داد.
من بخش بزرگی از دوران حرفهای خود در مهندسی نرمافزار را صرف ساخت برنامههای توزیعشده میزبان در ابر (کلاود) کردهام. این برنامهها قدرتمند، منعطف و مقیاسپذیر هستند، اما ساخت آنها به طور سنتی و به شکلی بدنام، دشوار است.
برخلاف یک برنامه تکساحتی (مونولیتیک) منفرد، یک سیستم توزیعشده شامل چندین سرویس، وابستگیهای زیرساختی، فرآیندهای پسزمینه، پایگاههای داده، پیامرسانها (message brokers)، کشها، دروازهها (gateways) و سایر بخشهای متحرک است. اجرای کل این مجموعه روی یک رایانه توسعهدهنده به ندرت ساده بود. اغلب مجبور بودید سرویسها را یکییکی راهاندازی کنید، قطعات گمشده را شبیهسازی کنید و امیدوار باشید که تنظیمات محلی شما به اندازه کافی به محیط واقعی پروداکشن (تولید) نزدیک باشد.
بیشتر اوقات، اینطور نبود. در نتیجه، توسعه محلی اغلب به تقریب آزادی از سیستم نهایی تبدیل میشد. شما میتوانستید اجزای منفرد را آزمایش کنید، اما همیشه نمیتوانستید نحوه رفتار همه چیز را در کنار یکدیگر بسنجید. مشکلات یکپارچهسازی و پیکربندی، خطاهای شبکه و عدم تطابق وابستگیها میتوانست تا مدتها پنهان بماند و گاهی خود را پس از استقرار سیستم نشان دهد.
این وضعیت یکی از چالشهای اساسی توسعه بومی ابری (cloud-native) است. معماری ممکن است توزیعشده باشد، اما توسعهدهنده همچنان به روشی قابلاعتماد برای درک، اجرا، عیبیابی و تکامل کل سیستم نیاز دارد.
آسپایر (Aspire) به حل این مشکل کمک میکند. زمانی که آسپایر برای اولین بار عرضه شد، برای بخش زیادی از جامعه داتنت غافلگیرکننده بود، اما تأثیر آن بر سیستمهای ابری-محور فوری بود. ناگهان، توسعهدهندگان راهی کاربردی برای توصیف یک برنامه توزیعشده، به هم پیوستن اجزای آن و راهاندازی کل سیستم به صورت محلی با اصطکاک بسیار کمتر نسبت به قبل پیدا کردند.
با آسپایر میتوانید چندین سرویس، کانتینر، پایگاه داده و وابستگیهای زیرساختی را از یک مدل کاربردی واحد اجرا کنید. میتوانید نحوه تعامل آنها را مشاهده کنید. میتوانید آنها را با هم عیبیابی (دیباگ) کنید. میتوانید محیط توسعه محلی خود را بسیار بیشتر از آنچه قبلاً مقدور بود، شبیه به سیستم واقعی سازید.
از این گذشته، برنامههای بومی ابری صرفاً مجموعهای از سرویسهای مجزا نیستند؛ آنها یک سیستم هستند. ارزش آنها از نحوه ارتباط، هماهنگی، خرابی، بازیابی، مقیاسپذیری و تکامل بخشها در کنار یکدیگر سرچشمه میگیرد. برای ساختن خوب آنها، باید هم الگوهای معماری پشت آنها و هم ابزارهایی را که به شما در بهکارگیری مؤثر آن الگوها کمک میکنند، درک کنید.
من این موضوع را به طور مستقیم در زمان کار در مایکروسافت، کمی پس از انتشار آسپایر، تجربه کردم. من بخشی از یک پروژه بزرگ با تیمی بیش از ۹۰ نفر بودم. ما در حال ساخت یک سیستم توزیعشده بودیم که توانایی پردازش حجم زیادی از دادههای علمی را داشت. این پروژه قبل از وجود آسپایر شروع شده بود، بنابراین در ابتدا حول محور آسپایر ساخته نشده بود.
ما با بسیاری از مشکلات معمول مواجه بودیم: دشواری اجرای کل سیستم به صورت محلی، اتکا به شبیهسازی، فرآیند پیچیده آشناسازی نیروهای جدید (onboarding)، و مسائل یکپارچهسازی که تشخیص زودهنگام آنها دشوار بود.
از آنجا که آسپایر در آن زمان در دسترس بود، تیم تصمیم گرفت یک اثبات مفهوم (PoC) محدود به زمان اجرا کند تا ببیند آیا سیستم میتواند به آن مهاجرت داده شود یا خیر. مایه خوشحالی ما بود که مهاجرت به آن سختی که انتظار میرفت نبود، حتی برای سیستمی به بزرگی و پیچیدگی آن چه میساختیم.
هنگامی که سیستم از طریق آسپایر میزبانی شد، مدیریت بسیاری از مشکلات آسانتر شد. توسعهدهندگان میتوانستند سیستم را با اطمینان بسیار بیشتری به صورت محلی اجرا و آزمایش کنند. افراد جدید مراحل راهاندازی کمتری برای دنبال کردن داشتند. تشخیص مشکلات یکپارچهسازی در مراحل اولیه آسانتر شد. درک، عیبیابی و تکامل سیستم سادهتر شد.
آن تجربه، طرز تفکر مرا درباره توسعه بومی ابری شکل داد. از آن زمان به بعد، من به عنوان یک مشاور مستقل فعالیت میکنم و مرتباً به تیمها در طراحی و ساخت برنامههای ابری توزیعشده کمک میکنم. من اغلب آسپایر را پیشنهاد میکنم، نه تنها به این دلیل که یک چارچوب مفید است، بلکه به این دلیل که راهی کاربردی برای کار با انواع الگوهای معماری که سیستمهای مدرن ابری به آن نیاز دارند، در اختیار تیمها قرار میدهد.
کتاب Building Distributed Applications that Work با الهام از آن تجربه نوشته شده است. اما کتاب صرفاً درباره آسپایر به عنوان یک محصول نیست؛ بلکه درباره ساخت برنامههای توزیعشده بومی ابری است و از آسپایر به عنوان ابزاری کاربردی استفاده میکند که به ما اجازه میدهد موضوع را به درستی بررسی کنیم.
در سرتاسر کتاب Building Distributed Applications that Work، الگوها، تصمیمات و دادوستدها (tradeoffs) مربوط به طراحی سیستمهای متشکل از چندین سرویس و اجزای زیرساختی را پوشش میدهم. همچنین ارکستراسیون محلی، کشف سرویس (service discovery)، کانتینرها، پایگاههای داده، پیامرسانی، کش کردن، قابلیت مشاهده (observability)، استقرار، امنیت و طراحی معماری دنیای واقعی را پوشش میدهم.
آسپایر به توسعهدهندگان کمک میکند تا این ایده ها را ملموس کنند. این ابزار به ما اجازه میدهد به سرعت از تئوری به عمل منتقل شویم. اما هدف، فراتر از یادگیری یک فناوری واحد است. تا پایان این کتاب، باید درک قویتری از نحوه ساختاریافتگی برنامههای ابری توزیعشده، نحوه کارکرد اجزای آنها در کنار یکدیگر، و نحوه تکامل آنها از آغازهای ساده به سیستمهای آماده برای پروداکشن داشته باشید.
اگر قبلاً با آسپایر کار نکردهاید، فکر میکنم از میزان اصطکاکی که از سر راه برمیدارد شگفتزده خواهید شد. مهمتر از آن، امیدوارم کتاب Building Distributed Applications that Work به شما کمک کند در ساخت سیستمهای بومی ابری اعتمادبهنفس بیشتری پیدا کنید.
درباره کتاب Building Distributed Applications that Work
در این کتاب، یاد خواهید گرفت که چگونه یک برنامه مدرن از مجموعهای ساده از سرویسها به یک سیستم توزیعشده آماده برای پروداکشن تکامل مییابد. با استفاده از آسپایر به عنوان پایه عملی، الگوهای کاربردی پشت توسعه بومی ابری، از جمله ترکیب سرویسها، ارکستراسیون محلی، کشف سرویس، یکپارچهسازی زیرساخت، قابلیت مشاهده، استقرار و امنیت را بررسی خواهید کرد.
از طریق ساخت گامبهگام یک برنامه تجارت الکترونیک واقعگرایانه، تجربه عملی در زمینه نحوه سازماندهی سیستمهای توزیعشده؛ نحوه ارتباط اجزای آنها؛ و نحوه اتصال سرویسها به پایگاههای داده، کشها، پیامرسانها، کانتینرها و سایر وابستگیهای زیرساختی به دست خواهید آورد. همچنین با انواع حالات خاص (edge cases) که سیستمهای واقعی را میسازند یا خراب میکنند، از جمله کشف سرویس با کلاینتهای SignalR و استقرار در محیطهای ابری مانند Azure Container Apps و Kubernetes کار خواهید کرد.
چه کسانی باید کتاب Building Distributed Applications that Work را بخوانند
این کتاب برای توسعهدهندگان داتنت هدف گذاری شده است که میخواهند نحوه استفاده از آسپایر را بیاموزند. اگرچه لزوماً نیازی به تجربه قبلی در زمینه برنامههای توزیعشده و ارکستراسیون ندارید، اما همچنان به مقداری تجربه با داتنت، سیشارپ و توسعه برنامههای وب نیاز دارید. به طور خاص، باید موارد زیر را درک کنید:
-
نحو پایه سیشارپ
-
مبانی برنامهنویسی شیءگرا
-
راهاندازی برنامه داتنت
-
ساختار برنامه ASP.NET Core
-
استفاده از بستههای NuGet
-
استفاده از تزریق وابستگی (Dependency Injection) در داتنت
-
درک پایه از پروتکل HTTP
-
تفاوت بین توسعه فرانتاند و بکاند
به طور خلاصه، اگرچه کتاب Building Distributed Applications that Work برای توسعهدهندگان سطح مبتدی (junior) مناسب است، اما به عنوان اولین کتاب برای کسی که مبانی استفاده از داتنت برای برنامهنویسی را نیموخته است، مناسب نمیباشد.
نحوه سازماندهی کتاب Building Distributed Applications that Work: یک نقشه راه
این کتاب دارای چهار بخش شامل ۱۰ فصل است.
-
بخش ۱ اصول اولیه سیستمهای ابری و آسپایر را پوشش میدهد:
-
فصل ۱ — شروع کار با سیستمهای توزیعشده و آسپایر
-
فصل ۲ — مدیریت اجزای زیرساخت با کانتینرها و یکپارچهسازیها
-
فصل ۳ — استفاده از اجزای پایگاه داده و ذخیرهسازی
-
بخش ۲ به پیادهسازی عملی تعاملی بودن و یکپارچهسازی هوش مصنوعی اختصاص دارد:
-
بخش ۳ به شما نشان میدهد چگونه برنامههای در سطح حرفهای بسازید:
-
فصل ۶ — تست یکپارچهسازی و نظارت (Monitoring)
-
فصل ۷ — اجزایی برای پیامرسانی و کشing
-
فصل ۸ — امنیت برنامه در آسپایر
-
بخش ۴ استقرار در پروداکشن و ارتقای سیستمهای آسپایر را پوشش میدهد: