کتاب Microservie Patterns، به طور جامع به مفاهیم، الگوها، و رویکردهای کلیدی معماری میکروسرویس میپردازد و به خوانندگان کمک میکند تا در طراحی و پیادهسازی سیستمهای نرمافزاری مبتنی بر میکروسرویس موفق عمل کنند. نویسنده در این کتاب سعی کرده با بیان الگوهای مختلف، مضرات و مزیتهای هر یک را بیان کرده و روشهای حل ایرادات را نیز توضیح دهد.
این کتاب شامل ۱۳ بخش است که در اینجا به توضیح در مورد سه بخش اول آن که نگاه کلیتری دارد، میپردازم. شروع این کتاب، در مورد مهاجرت یک برنامه سفارش غذا از معماری مونولوتیک به معماری میکروسرویس است که در تمامی فصلها، مثالها بر پایهی این نمونه است. در این کتاب از تکنولوژی یا فریم ورک خاصی استفاده نشده و برخلاف آنچه که در عنوان کتاب گفته شده، یعنی استفاده از جاوا، کدها به راحتی قابل درک هستند.
فصل اول: فرار از جهنم مونولیتیک
نویسنده در فصل اول کتاب، معماری مونولیتیک را توضیح میدهد. مزیتهای این نوع معماری بیان شده ولی از دید ریچاردسون، در این معماری هر چه اپلیکیشن بزرگتر و فیچرهای بیشتری به آن افزوده شود تبدیل به جهنمی میشود که توسعهی آن کاری بسیار دشوار و زمانبر خواهد بود. در ادامهی این فصل مزیتها و ایرادات معماری میکروسرویس نیز بیان میشود. سپس معماری میکروسرویس با معماری SOA مقایسه میشود. یکی از تفاوتهای معماری SOA با میکروسرویس، در دیتابیس مورد استفادهی سرویسها است. دیتابیس SOA، به صورت اشتراکی است ولی در معماری میکروسرویس، هر سرویس یک دیتابیس مخصوص خود را دارد.
از دیگر تفاوتهای این دو نوع معماری، سایز و تعداد سرویسهاست. در معماری SOA، تعداد کمی سرویس وجود دارد که هر کدام سایز بسیاری بزرگی دارند و خود، یک سرویس مونولیتیک به شمار میرود، ولی معماری میکروسرویس، حاوی تعداد بسیار زیادی سرویس است که سایز کوچکی دارند.
نویسنده اشاره میکند که معماری میکروسرویس، یک راه حل طلایی و کاملا درست برای تمامی پروژههای نرمافزاری نیست بلکه باید مزیتها و مضرات این معماری با توجه به پروژه مورد نظر بررسی شود.
فصل دوم: استراتژی تقسیم سرویسها
در این فصل، نویسنده استراتژیهای تقسیم یک پروژه مونولیتیک به چندین سرویس، با استفاده از مثال مربوط به نرم افزار سفارش غذا را، شرح داده و موانع موجود و راهحلهای برطرف کردن آنها را بیان میکند.
قبل از معرفی استراتژیهای تقسیم سرویسها، به تعریف معماری نرمافزار میپردازد و معماری یک سرویس نرمافزاری را بیان میکند. پیشنهاد نویسنده برای معماری سرویسهای موجود در میکروسرویسها، معماری hexagonal است.
پس از آن نویسنده با تعریف سرویس، نقش shared libraryها در معماری میکروسرویس و ساخت یک domain model در سطح بالا، به معرفی روشهای تفکیک سرویسها در یک نرمافزار میپردازد.
در این کتاب دو روش برای تفکیک سرویسها معرفی شدهاست.
با استفاده از نمونه مورد مطالعه کتاب، این دو روش با جزئیات بیان و شرح داده شده است.
از دید نویسنده با استفاده از دو اصل Single Responsibility Principle و Common Closure Principle میتوان سرویسهای بهتری طراحی کرد. با استفاده از SRP، سرویسهایی طراحی میشود که تنها و تنها یک وظیفه داشته باشند که باعث کوچکتر شدن و بالا رفتن پایداری سرویس میشود.
و با توجه به اصل CSP، اگر تغییر یک قاعده و قانون مربوط به کسب و کار باعث تغییر بیش از یک سرویس شود، احتمالا آن سرویسها باید با یکدیگر ادغام شوند.
و در نهایت، در ادامهی این فصل موانع و مشکلاتی که در نتیجهی جداسازی سرویسها به وجود میآید بررسی میشود.
فصل سوم: ارتباط بین سرویسها
در این فصل چگونگی ارتباط سرویسها به صورت مفصل مورد بررسی قرار میگیرد. این ارتباط از دو بعد تقسیمبندی شدهاست. در یک بعد، ارتباط یک به یک سرویسها و ارتباط یک به چند سرویسها مد نظر قرار گرفته است. در بعد دیگر، ارتباط synchronous و asynchronous را بیان میکند.
و در ادامهی این فصل به توضیح هر کدام از موارد بیان شده در جدول میپردازد.
در ارتباط synchronous، تکنولوژیهای REST و gPRC مطرح میشوند و مزیتها و ایرادات هر کدام به تفصیل بیان میشود.
در ارتباطات sync، به service discovery نیاز است زیرا نمیتوان آدرسهای IP هر سرویس را به صورت استاتیک تنظیم کرد و نیاز به مکانیزم داینامیک میباشد. تکنولوژیهای service discovery به صورت client-side و server-side هستند که هر کدام به صورت مختصر در کتاب توضیح داده شدهاند.
در ارتباطات async، تکنولوژی message broker معرفی شده است و ارتباطات broker-base و brokerless شرح داده شده است.
این کتاب، از جامعترین کتابها در حوزهی میکروسرویس است و الگوهای کاملی را برای هرکدام از چالشهای این معماری بیان میکند که میتوان در معماریهای مختلف دیگر نیز استفاده کرد. در ادامهی این کتاب الگوهایی مانند Saga و CQRS، تست میکروسرویسها و توسعهی آنها به تفصیل شرح داده شده است.