شما در سیستم خود سرویسی دارید که نقش مبدا را بازی می کند و سرویس دیگری که نقش مقصد را بر عهده دارد و قصد دارید میان این دو سرویس داده های خود را رد و بدل کنید. در این سناریو ساده که فقط یک مبدا و مقصد وجود دارد، ابزارهای زیادی وجود دارند که به ما برای انجام کارمان کمک می کنند، اما اگر تعداد سرویس های مبدا و مقصد در سیستم نرم افزاری ما بیشتر شود میزان ارتباطات میان سرویسها نیز افزایش پیدا می کند.
مثلا یک سیستم انبارگردانی را در نظر بگیرید که 5 سرویس نقش مبدا و 6 سرویس نقش مقصد را بازی می کنند، در این حالت ما 30 ارتباط میان سرویسهای خود خواهیم داشت که هر کدام از این ارتباط ها چالشهای مختلفی برای ما بوجود می آورند، از جمله :
در کنار موارد ذکر شده، ممکن است در سیستم های مقصد با افزایش بار و افزایش تعداد اتصالات (Connections) مواجهه شوید که به نوبه خود ممکن است دچار چالشهای جدی در آینده شوید.
اینجاست که آپاچی کافکا به داد ما می رسد، با استفاده از کافکا تبادل اطلاعات میان سرویس ها به سادگی انجام خواهد شد، به این صورت که هر کدام از سرویس های مبدا یا مقصد از یک سو به کافکا متصل خواهند شد و عمل رد و بدل کردن داده ها را انجام میدهند. کافکا عملا یک سیستم انتقال پیام(شامل یک دستور یا ...) میان سیستم هاست، در بالا به نرم افزار انبارداری اشاره کردیم، تصور کنید که ما یک سرویس سفارش و یک سرویس کالا داریم و قصد داریم یک سفارش جدید در سیستم ثبت کنیم، ابتدا سرویس سفارش درخواستی مبنی بر ثبت سفارش جدید دریافت می کند و با ارسال یک پیام به سرویس کالا (که از طریق کافکا انجام می شود) اقدام به بهروزرسانی موجودی کالای مورد استفاده در سفارش می کند.
پلتفرمهای مختلفی برای انتقال و تبادل پیام بین سرویس ها وجود دارد، از جمله RabbitMQ، ActiveMQ، MSMQ که هر کدام دارای مزایایی هستند، چرا از کافکا استفاده کنیم؟
یکی از مسائلی که در انتخاب یک تکنولوژی مطرح است، میزان استفاده آن تکنولوژی در شرکتها و نرم افزار های اصطلاحا مشهور است، مسئله مهم بعدی سازنده و بوجود آورنده آن تکنولوژی است که توسط کدام کمپانی ایجاد شده و نگهداری می شود. آپاچی کافکا توسط لینکداین بصورت Open Source ایجاد شده و در حال حاضر توسط شرکت Confluent نگهدای می شود، همچنین توسط شرکتهایی نظیر نتفلیکس، اوبر، والمارت، لینکداین استفاده می شود.
با ذکر موارد بالا متوجه اهمیت آپاچی کافکا شده ایم، سوال بعدی این است که در چه مواردی از آپاچی کافکا استفاده می کنیم؟
مورد استفاده اصلی کافکا که عموما با آن شناخته می شود سیستم انتقال پیام میان سرویس هاست (Messaging System)، اما کافکا در موارد زیر نیز مورد استفاده قرار می گیرد :
همانطور که ذکر شد، اصلی ترین کار کافکا که بصورت یک تعریف کلی که بواسطه آن شناخته می شود این است که کافکا یک مکانیزم نقل و انتقال پیام از یک سیستم(ممکن است یک سرویس، پایگاه داده، ...) به یک سیستم دیگر است.
ما اشاره کردیم که شرکتهای معروفی از کافکا برای توسعه و بهتر کردن کارکرد نرم افزارهای خود استفاده می کنند، در زیر نمونه هایی از این شرکتها به همراه موارد استفاده آن بیان شده است:
همانگونه که گفته شد شرکتهای مطرحی از کافکا در بخش های مختلفی مانند توصیه های در لحظه، تصمیم گیری های در لحظه برای بهتر کردن سرویس خود استفاده می کنند.
در قسمت های بعد سعی می شود بصورت جزئی تری با کافکا آشنا شویم و بصورت مفصل تری به تشریح امکانات و موارد استفاده از این پلتفرم می پردازیم، همچنین یک نرم افزار ساده را در ASP.Net Core با آپاچی کافکا پیاده سازی خواهیم کرد.
منابع :