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