کنجکاو در مباحث مهندسی نرم افزار
چرا Kafka سریع است؟
کافکا با استفاده از I/O ترتیبی و اصل کپی صفر(Zero Copy Principle)، به برتری انتقال پیام با تأخیر زمانی کم دست پیدا میکند. همین تکنیکها به طور معمول در بسیاری از پلتفرمهای پیامرسانی/جریان اطلاعاتی دیگر نیز استفاده میشوند. نمودار زیر نحوه انتقال داده بین تولیدکننده و مصرفکننده و مفهوم کپی صفر را نشان میدهد.
این نمودارها نشان میدهد که چگونه دادهها بین تولیدکننده و مصرفکننده منتقل میشود و کپی صفر به چه معناست.
مرحله ۱.۱ - ۱.۳: تولیدکننده دادهها را روی دیسک مینویسد.
مرحله ۲: مصرفکننده دادهها را بدون کپی صفر میخواند.
- ۲.۱: دادهها از دیسک به کش (cache) سیستمعامل بارگذاری میشوند.
- ۲.۲: دادهها از کش سیستمعامل به اپلیکیشن کافکا کپی میگردند.
- ۲.۳: اپلیکیشن کافکا دادهها را به بافر سوکت (socket buffer) کپی میکند.
- ۲.۴: دادهها از بافر سوکت به کارت شبکه کپی میشوند.
- ۲.۵: کارت شبکه دادهها را به سمت مصرفکننده ارسال میکند.
مراحل با کپی صفر (مراحل ۳.۱ تا ۳.۳):
مرحله ۳: مصرفکننده دادهها را با کپی صفر میخواند.
- ۳.۱: دادهها از دیسک به کش سیستمعامل بارگذاری میشوند.
- ۳.۲: کش سیستمعامل با استفاده از دستور ()sendfile مستقیماً دادهها را به کارت شبکه کپی میکند.
- ۳.۳: کارت شبکه دادهها را به سمت مصرفکننده ارسال میکند.
کپی صفر میانبری است برای صرفهجویی در کپیهای متعدد دادهها بین محیط برنامه (application context) و محیط هسته (kernel context).این رویکرد زمان را تقریباً 65% کاهش میدهد.
مطلبی دیگر از این انتشارات
تجربه من از برنامه نویسی روز سوم!
مطلبی دیگر از این انتشارات
خلاصه ایی از کتاب clean coder نوشته رابرت مارتین
مطلبی دیگر از این انتشارات
تجربههایی ارزشمند در توسعه نرمافزار