۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

ارکستراسیون و رقص در میکروسرویس های دات نت

ارکستراسیون یک رویکرد متمرکز و رقص یک رویکرد غیرمتمرکز برای هماهنگ کردن تعاملات میکروسرویس ها اتخاذ می کند. تفاوت ها را درک کنید.

ارکستراسیون یک رویکرد متمرکز و رقص یک رویکرد غیرمتمرکز برای هماهنگ کردن تعاملات میکروسرویس ها اتخاذ می کند. تفاوت ها را درک کنید.

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

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

این مقاله مفاهیم اصلی ارکستراسیون و رقص را در معماری های میکروسرویس پوشش می دهد و نحوه استفاده از هر یک (یا هر دو) را در برنامه های کاربردی مبتنی بر میکروسرویس ها مورد بحث قرار می دهد. ما همچنین ارکستراسیون و رقص ریز سرویس‌ها را در نمونه‌های کد ارائه‌شده در زیر شبیه‌سازی می‌کنیم.

معماری میکروسرویس چیست؟

Microservices به سبکی از معماری نرم افزار اشاره دارد که در آن یک برنامه کاربردی بزرگ می تواند به عنوان مجموعه ای از خدمات کوچک و مستقل ساخته شود. هر میکروسرویس هدف خاصی دارد و به طور مستقل قابل استقرار است.

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

دو رویکرد اصلی برای مدیریت ارتباط بین میکروسرویس‌ها، ارکستراسیون و رقص هستند. بیایید تفاوت ها را درک کنیم.

ارکستراسیون میکروسرویس چیست؟

ارکستراسیون میکروسرویس ها به یک رویکرد متمرکز اشاره دارد، که در آن یک جزء مرکزی، به نام ارکستراتور، مسئول مدیریت و هماهنگی تعاملات بین میکروسرویس ها است. Kubernetes و Docker Swarm نمونه‌هایی از ابزارهای ارکستراسیون هستند.

ارکستراسیون با تعریف توالی مراحلی که باید دنبال شوند به اطمینان از ثبات و قابلیت اطمینان در تعاملات بین میکروسرویس ها کمک می کند. همچنین با ارائه یک نقطه کنترل متمرکز و با اطمینان از اینکه هر میکروسرویس فقط با ارکستر کننده ارتباط برقرار می کند، به مدیریت خرابی ها و خطاها کمک می کند.

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

OpenAI فروشگاه GPT را راه اندازی کرد

نمونه‌هایی از هماهنگ‌سازی شامل استفاده از دروازه API برای مدیریت و ایمن کردن ارتباطات بین میکروسرویس‌ها، یا استفاده از یک واسطه پیام برای هماهنگ کردن جریان پیام‌ها بین میکروسرویس‌ها است.

نمونه ارکستراسیون Microservices در C#

Workflow Core یک موتور گردش کار سبک وزن برای برنامه‌های NET Core است. می توانیم از آن برای اجرای ارکستراسیون استفاده کنیم. در زیر نمونه‌ای از یک برنامه اصلی هماهنگ‌سازی میکروسرویس در سی شارپ با استفاده از کتابخانه Workflow Core آمده است.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using WorkflowCore.Interface;
using WorkflowCore.Models;
namespace MicroservicesOrchestrationExample
{
    class Program
    {
        public static void Main(string[] args)
        {
            IServiceProvider serviceProvider = ConfigureServices();
            var host = serviceProvider.GetService<IWorkflowHost>();
            host.RegisterWorkflow<SampleWorkflow>();       
            host.Start();           
            host.StartWorkflow("Sample");           
            Console.ReadLine();
            host.Stop();
        }
        private static IServiceProvider ConfigureServices()
        {
            IServiceCollection services = new ServiceCollection();
            services.AddLogging();
            services.AddWorkflow();
            services.AddTransient<LastStep>();
            var serviceProvider = services.BuildServiceProvider();
            return serviceProvider;
        }
    }
    public class SampleWorkflow : IWorkflow
    {
        public void Build(IWorkflowBuilder<object> builder)
        {
            builder
                .StartWith<FirstStep>()
                .Then<LastStep>();
        }
        public string Id => "Sample";
        public int Version => 1;
    }
    public class FirstStep : StepBody
    {
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Console.WriteLine("Microservice A");
            return ExecutionResult.Next();
        }
    }
    public class LastStep : StepBody
    {
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            Console.WriteLine("Microservice B");
            return ExecutionResult.Next();
        }
    }
}

در این مثال، یک گردش کار به نام SampleWorkflow تعریف کرده‌ایم که از دو مرحله FirstStep و LastStep تشکیل شده است. کتابخانه Workflow Core از اجرای این مراحل به ترتیب صحیح مراقبت می کند. متد Main میزبان گردش کار را شروع می کند و منتظر می ماند تا کاربر هر کلیدی را برای خاتمه برنامه فشار دهد.

کورهوگرافی میکروسرویس چیست؟

کوئوگرافی به رویکرد غیرمتمرکز برای هماهنگ کردن تعاملات بین میکروسرویس ها اشاره دارد، که در آن هر سرویس مستقیماً با سایر سرویس ها ارتباط برقرار می کند، بدون اتکا به هماهنگ کننده مرکزی. این الگو بار هماهنگی تعاملات را بر دوش خود میکروسرویس ها می گذارد.

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

کوئوگرافی به دستیابی به مقیاس پذیری و انعطاف پذیری بیشتر در معماری میکروسرویس ها کمک می کند، زیرا هر میکروسرویس می تواند به طور مستقل تکامل یافته و تغییر کند، بدون اینکه بر سیستم کلی تأثیر بگذارد. و چون رقص وابستگی به ارکستراتور مرکزی را از بین می برد، می تواند قابلیت اطمینان و انعطاف پذیری سیستم کلی را افزایش دهد.

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

Flutter 3.13 سرعت رندر در iOS

نمونه رقص میکروسرویس در سی شارپ

روش های مختلفی برای اجرای رقص میکروسرویس وجود دارد. یک رویکرد استفاده از یک واسطه پیام متمرکز مانند RabbitMQ یا ActiveMQ است که همه سرویس ها می توانند به آن متصل شوند. کارگزار پیام به عنوان یک واسطه بین سرویس ها عمل می کند و پیام ها را در صورت نیاز مسیریابی می کند.

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

در زیر نمونه‌ای از یک برنامه رقص میکروسرویس اولیه در C# با استفاده از کتابخانه MassTransit آمده است.

using MassTransit;
namespace HelloWorldChoreography
{
    class Program
    {
        static void Main(string[] args)
        {
            var busControl = Bus.Factory.CreateUsingInMemory(configure =>
            {
                configure.ReceiveEndpoint("sample-queue", endpoint =>
                {
                    endpoint.Consumer<SampleConsumer>();
                });
            });
            busControl.Start();
            Console.WriteLine("Press any key to exit");
            Console.ReadLine();
            busControl.Stop();
        }
    }
    public class SampleConsumer : IConsumer<SampleMessage>
    {
        public Task Consume(ConsumeContext<SampleMessage> context)
        {
            Console.WriteLine("Message received...");
            return Task.FromResult(0);
        }
    }
    public class SampleMessage { }
}

در این مثال، کلاس مصرف کننده، SampleConsumer، به صف نمونه گوش می دهد و پیام های دریافتی از نوع SampleMessage را مدیریت می کند. هنگامی که یک پیام دریافت می شود، مصرف کننده متن “پیام دریافت شد…” را در پنجره کنسول نمایش می دهد. هنگامی که برنامه شروع می شود، روش Main گذرگاه MassTransit را راه اندازی می کند و منتظر می ماند تا کاربر هر کلیدی را برای خاتمه برنامه فشار دهد.

ارکستراسیون در مقابل رقص

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

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

Rust پشتیبانی از C-string literals را اضافه می کند

از کدام باید استفاده کنید؟

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

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

از سوی دیگر، رقص، تمرین ارکستراسیون میکروسرویس ها با هم بدون یک نقطه هماهنگی مرکزی است. این به هر سرویس اجازه می دهد تا به طور مستقل عمل کند در حالی که هنوز بخشی از معماری بزرگتر است.

از ارکستراسیون می توان برای مدیریت پیاده سازی های ساده و پیچیده استفاده کرد. می‌تواند تهیه منابع، مقیاس‌بندی سرویس‌ها و استفاده از به‌روزرسانی‌ها و وصله‌ها را خودکار کند. ارکستراسیون همچنین می تواند بینشی در مورد عملکرد خدمات فردی ارائه دهد و مسائلی را که باید مورد توجه قرار گیرند، شناسایی کند.

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

رویکرد ترکیبی

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

در عوض، ممکن است یک رویکرد ترکیبی انتخاب کنید که ارکستراسیون و رقص را ادغام می کند. یک رویکرد ترکیبی می تواند از برنامه شما در برابر شکست ارکستراتور محافظت کند. اما باز هم، این انتخاب به الزامات برنامه شما و اهداف سازمان شما بستگی دارد.

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