نماد سایت امپراطوری من

آشنایی با معماری میکروسرویس

introduction to microservice architecture

پیش زمینه

پیش از بررسی معماری میکروسرویس فرض کنید شما در حال توسعه یک برنامه Enterprise سمت سرور هستید. باید از انواع کلاینت‌های مختلف از جمله مرورگرهای دسکتاپ، مرورگرهای موبایل و برنامه‌های کاربردی تلفن همراه Native پشتیبانی کنید. همچنین ممکن است یک API را برای 3rd parties ایجاد کنید. همچنین ممکن است از طریقweb service ها یا message broker ها با سایر برنامه ها تعامل داشته باشید. برنامه درخواست ها (درخواست های HTTP و پیام‌ها) را با اجرای business logic، دسترسی به پایگاه داده و یا تبادل پیام با سیستم های دیگر مدیریت می‌کند و یک پاسخ HTML/JSON/XML را برمی گرداند. اجزای منطقی مختلفی مربوط به حوزه های عملکردی برنامه وجود دارد.

مسئله

معماری استقرار برنامه در این وضعیت باید چگونه باشد؟

الزامات:

راه حل

شما باید معماری برنامه را به گونه‌ای تعریف کنید که برنامه به مجموعه‌ای از سرویس‌های مشارکت کننده تقسیم شود که این سرویس‌ها هم بصورت مستقل کارایی داشته باشند و هم در تعامل با همدیگر کارکرد کلی نرم‌افزار را بوجود آورند. به این نوع از مقیاس پذیری مقیاس پذیری محور Y می‌گویند. همچنین باید این موضوع را در نظر بگیرید که هر سرویس:

در معماری میکرو سرویس، سرویس‌ها در ارتباطات همزمان(Synchronous) از پروتکل‌های همزمان مانند HTTP/REST و در ارتباطات غیرهمزمان(Asynchronous) از پروتکل‌های غیر همزمان مانند AMQP استفاده می‌کنند. سرویس‌ها همانطور که گفته شد می‌توانند بصورت مستقل از یکدیگر توسعه یافته و مستقر شوند. هر سرویس پایگاه داده خود را دارد تا داده‌های خود را از دیگر سرویس‌ها جدا کند. سازگاری داده‌ها(Data Consistency) بین سرویس‌ها با استفاده از الگوی Saga حفظ می‌شود.

برای کسب اطلاعات بیشتر در مورد ماهیت یک سرویس، لطفا این نوشته را مطالعه کنید.


مثال کاربردی
برنامه تجارت الکترونیک ساختگی

بیایید تصور کنیم که در حال ساخت یک برنامه تجارت الکترونیک(فروشگاه اینترنتی) هستید که سفارشات مشتریان را می گیرد، موجودی انبار و اعتبار کاربر را تأیید می کند و در نهایت سفارشات کاربران را ارسال می کند. این برنامه شامل چندین مؤلفه از جمله StoreFrontUI است که رابط کاربری را پیاده‌سازی می‌کند، همراه با برخی از سرویس‌های backend برای بررسی اعتبار، نگهداری موجودی و سفارش‌های ارسال. در نتیجه برنامه شامل مجموعه ای از سرویس‌ها است.


فواید معماری میکروسرویس

این راه حل دارای چندین مزیت است:


مشکلات موجود در معماری میکروسرویس


مسائل معماری میکروسرویس

مسائل زیادی وجود دارد که باید به آنها رسیدگی کنید.

چه زمانی از باید معماری میکروسرویس استفاده کنیم؟

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

در معماری میکروسرویس چگونه اپلیکیشن را به سرویس ها تجزیه کنیم؟

چالش دیگر، تصمیم گیری در مورد نحوه‌ی تقسیم سیستم به میکروسرویس ها است. این یک هنر بسیار بزرگ است، اما تعدادی استراتژی وجود دارد که می تواند در این امر به شما کمک کند:

در معماری میکروسرویس چگونه یکپارچگی داده ها را حفظ کنیم؟

به منظور اطمینان از loose coupling، هر سرویس پایگاه داده خاص خود را دارد. در این وضعیت حفظ سازگاری داده‌ها بین سرویس‌ها یک چالش است. برای حل این چالش برنامه باید از الگوی Saga استفاده کند. یک سرویس زمانی یک رویداد را منتشر می‌کند که داده‌های آن تغییر کند. سایر سرویس‌ها آن رویداد را Consume می‌کنند. یعنی گوش به زنگ آن رویداد هستند تا در زمان وقوع، متناسب با آن داده‌های خود را بروز کنند. راه‌های مختلفی برای بروز رسانی قابل اعتماد داده‌ها و انتشار رویداد‌ها وجود دارد. از میان این راه‌ها می‌توان به Event Sourcing و Transaction log Tailing اشاره کرد.

چگونه کوئری ها را پیاده سازی کنیم؟

چالش دیگر پیاده سازی پرس و جوهایی است که نیاز به بازیابی داده های متعلق به چندین سرویس دارند. این چالش توسط روش‌های API Composition و Command Query Responsibility Segregation(CQRS) قابل حل است.

خروج از نسخه موبایل