کیوان دمیرچی - Keivan Damirchi
کیوان دمیرچی - Keivan Damirchi
خواندن ۷ دقیقه·۵ سال پیش

آپاچی کافکا - قسمت اول

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

مثلا یک سیستم انبارگردانی را در نظر بگیرید که 5 سرویس نقش مبدا و 6 سرویس نقش مقصد را بازی می کنند، در این حالت ما 30 ارتباط میان سرویسهای خود خواهیم داشت که هر کدام از این ارتباط ها چالشهای مختلفی برای ما بوجود می آورند، از جمله :

  • پروتکل های ارتباطی که برای انتقال داده میان این سرویسها استفاده می شود ممکن است برای هر کدام از آنها متفاوت باشد، مثلا یک سرویس از HTTP استفاده کند و سرویس دیگر از Rest و ....
  • فرمت داده های هر کدام از این سرویس های مبدا یا مقصد ممکن است با سرویس طرف مقابل متفاوت باشد، مثلا یک سرویس ممکن است از فرمت Json و سرویس دیگر از فرمت XML و سرویس دیگر ... . هر کدام از سرویس ها در مبدا و مقصد باید داده های دریافتی را برای خواندن پردازش کنند.
  • در فواصل زمانی مختلف و بنا بر تغییرات احتمالی که در سیستم شما بوجود می آید ممکن است ساختار داده های شما تغییر کند.

در کنار موارد ذکر شده، ممکن است در سیستم های مقصد با افزایش بار و افزایش تعداد اتصالات (Connections) مواجهه شوید که به نوبه خود ممکن است دچار چالشهای جدی در آینده شوید.

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

پلتفرمهای مختلفی برای انتقال و تبادل پیام بین سرویس ها وجود دارد، از جمله RabbitMQ، ActiveMQ، MSMQ که هر کدام دارای مزایایی هستند، چرا از کافکا استفاده کنیم؟

یکی از مسائلی که در انتخاب یک تکنولوژی مطرح است، میزان استفاده آن تکنولوژی در شرکتها و نرم افزار های اصطلاحا مشهور است، مسئله مهم بعدی سازنده و بوجود آورنده آن تکنولوژی است که توسط کدام کمپانی ایجاد شده و نگهداری می شود. آپاچی کافکا توسط لینکداین بصورت Open Source ایجاد شده و در حال حاضر توسط شرکت Confluent نگهدای می شود، همچنین توسط شرکتهایی نظیر نت‌فلیکس، اوبر، والمارت، لینکداین استفاده می شود.

  • معماری کافکا بصورت توزیع شده (Distributed) می باشد، بسیار انعطاف پذیر است (Resilient Architecture) و قابلیت یکپارچگی بالایی با دیگر سیستم ها دارد.
  • این پلتفرم قابلیت مقیاس پذیری افقی را دارد(افزایش تعداد سیستم بجای افزایش توان سیستم).
  • کلاسترهای کافکا قابل توسعه تا 100 Broker هستند.
  • با استفاده از پیکربندی مناسب امکان انتقال میلیونها پیام در ثانیه را دارند.
  • کافکا تاخیر در پاسخگویی در کمتر از 10 میلی ثانیه دارد که عموما به این نوع پاسخگویی Real Time گفته می شود(زمان پاسخگویی در لحظه).

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

مورد استفاده اصلی کافکا که عموما با آن شناخته می شود سیستم انتقال پیام میان سرویس هاست (Messaging System)، اما کافکا در موارد زیر نیز مورد استفاده قرار می گیرد :

  • ردیاب فعالیت ها (Activity Tracking)
  • جمع آوری Metrics از بخش ها مختلف سرویس ها (متریکها یا معیارها، اطلاعاتی عموما آماری از نرم افزارها هستند که بیانگر کارایی سیستم در پاسخگویی به یک درخواست یا ... می باشند، مانند زمان پاسخگویی برای دریافت لیستی از کارمندان از سرویس مربوط به کارمندان).
  • جمع آوری لاگ از سرویس ها
  • پردازش جریان داده (Stream Processing)، با توجه به زمان پاسخگویی بالای کافکا؛ این پلتفرم قابلیت آن را دارد که در سیستم هایی که جریان اطلاعات بصورت پیوسته وجود دارد مورد استفاده قرار گیرد(مثالی از این مورد می تواند سنسورهای مربوط به چک کردن دما یک محیط باشد که پیوسته در حال دریافت اطلاعات دما و ارسال آن به یک سرویس یا ...است).

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

ما اشاره کردیم که شرکتهای معروفی از کافکا برای توسعه و بهتر کردن کارکرد نرم افزارهای خود استفاده می کنند، در زیر نمونه هایی از این شرکتها به همراه موارد استفاده آن بیان شده است:

  • نت‌فلیکس از کافکا در سیستمهای توصیه گر خود استفاده می کند، به این شکل که زمانیکه شما در نت‌فلیکس مشغول تماشای یک ویدیو هستید، در فواصل زمانی مختلف مشاهده می کنید که نت‌فلیکس ویدیوهای متنوعی به شما پیشنهاد می کند.(از طریق پردازش کنشهای شما در وبسایت نت‌فلیکس، مثلا بر روی چه ویدیوهایی کلیک میکنید و یا چه ویدیویی را بیشتر تماشا میکنید؛ همه این کنش ها در لحظه پردازش و تحلیل می شوند و ویدیو مناسبی به ازای آن به شما پیشنهاد می شود).
  • اوبر از کافکا برای جمع آوری اطلاعات کاربران، تاکسی ها و سفرها بصورت Real Time برای محاسبه و پیش بینی تقاضا و همچنین پیش بینی هزینه ها استفاده می کند(مهمترین سرویس های اوبر از کافکا برای تبادل پیام استفاده می کند).
  • لینکداین برای جلوگیری از هرزنامه ها، گردآوری کنشهای کاربر برای پیشنهاد کانکشن ها(افرادی که از چند لحاظ نزدیکی بیشتری به کاربر دارند) بصورت Real Time استفاده می کند.

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

در قسمت های بعد سعی می شود بصورت جزئی تری با کافکا آشنا شویم و بصورت مفصل تری به تشریح امکانات و موارد استفاده از این پلتفرم می پردازیم، همچنین یک نرم افزار ساده را در ASP.Net Core با آپاچی کافکا پیاده سازی خواهیم کرد.

منابع :

وبسایت آپاچی کافکا

لینکداین







apache kafkakafkaآپاچی کافکاکافکاmessaging service
توسعه دهنده نرم افزار
شاید از این پست‌ها خوشتان بیاید