موتورهای داده مانند RocksDB نقش مهمی را در جلوگیری از تنگناهای دسترسی به ابرداده ایفا می کنند که ممکن است بر عملکرد سیستم های مقیاس بزرگ تأثیر بگذارد. در اینجا چیزی است که شما باید بدانید.
در پشته نرمافزاری اکثر برنامهها، یک موتور داده، یک ذخیرهسازی با ارزش کلیدی تعبیهشده که دادهها را مرتبسازی و فهرستبندی میکند، مدفون است. تا به حال، موتورهای داده – که گاهی اوقات موتورهای ذخیره سازی نامیده می شوند – تمرکز کمی دریافت کرده اند و کارهای خود را در پشت صحنه، زیر برنامه و بالای حافظه انجام می دهند.
موتور داده معمولاً عملیات اساسی مدیریت ذخیره سازی را انجام می دهد، به ویژه برای ایجاد، خواندن، به روز رسانی و حذف داده ها (CRUD). علاوه بر این، موتور داده باید به طور موثر یک رابط برای خواندن متوالی داده ها و به روز رسانی اتمی چندین کلید به طور همزمان فراهم کند.
سازمانها به طور فزایندهای از موتورهای داده برای اجرای فعالیتهای مختلف در حین پرواز، در دادههای زنده، در حین انتقال استفاده میکنند. در این نوع پیادهسازی، موتورهای داده محبوب مانند RocksDB نقش مهمی را در مدیریت حجمهای کاری فشرده ابرداده ایفا میکنند و جلوگیری از تنگناهای دسترسی به ابرداده که ممکن است بر عملکرد کل سیستم تأثیر بگذارد.
در حالی که حجم ابرداده به ظاهر بخش کوچکی از منابع را نسبت به داده مصرف میکند، تأثیر حتی کوچکترین تنگنا بر تجربه کاربر نهایی بهطور ناخوشایندی آشکار میشود و نیاز به عملکرد زیر میلیثانیه را نشان میدهد. این چالش بهویژه زمانی که با حجمهای کاری مدرن و فشرده فراداده مانند اینترنت اشیا و تجزیه و تحلیل پیشرفته سروکار داریم، برجسته است.
ساختارهای داده در موتور داده به طور کلی در یکی از دو دسته قرار می گیرند، درخت B یا درخت LSM. دانستن الگوی استفاده از برنامه نشان می دهد که کدام نوع ساختار داده برای نمایه عملکرد مورد نظر شما بهینه است. از آنجا، میتوانید بهترین راه را برای بهینهسازی عملکرد ابرداده زمانی که برنامهها در مقیاس وب رشد میکنند، تعیین کنید.
مزایا و معایب B-tree
B-trees به طور کامل توسط کلید داده شده توسط کاربر مرتب می شوند. از این رو درختان B برای حجم کاری مناسب هستند که در آن تعداد زیادی خواندن و جستجو وجود دارد، مقدار کمی از نوشتن وجود دارد، و داده ها به اندازه کافی کوچک هستند تا در DRAM قرار بگیرند. B-trees انتخاب خوبی برای پایگاه داده های کوچک و همه منظوره هستند.
با این حال، درختان B به دلایل متعددی مشکلات عملکرد نوشتن قابل توجهی دارند. اینها شامل افزایش سربار فضای مورد نیاز برای مقابله با تکه تکه شدن، تقویت نوشتن است که به دلیل نیاز به مرتب کردن داده ها در هر نوشتن است، و اجرای همزمان نوشتن که نیاز به قفل دارد، که به طور قابل توجهی بر عملکرد کلی و مقیاس پذیری سیستم تأثیر می گذارد.
مزایا و معایب درخت LSM
درختهای LSM در هسته بسیاری از پلتفرمهای داده و ذخیرهسازی هستند که به توان عملیاتی فشرده نیاز دارند. اینها شامل برنامههایی میشوند که بسیاری از درجها و بهروزرسانیهای جدید برای کلیدها یا گزارشهای نوشتن دارند – چیزی که بر روی تراکنشهای نوشتن هم در حافظه و هم زمانی که حافظه یا حافظه پنهان روی دیسک ریخته میشود فشار وارد میکند.
یک LSM یک ساختار جزئی مرتب شده است. هر سطح از درخت LSM یک آرایه مرتب شده از داده ها است. بالاترین سطح در حافظه نگهداری می شود و معمولاً بر اساس ساختارهای درخت B است. سطوح دیگر آرایه های مرتب شده ای از داده ها هستند که معمولاً در ذخیره سازی پایدار کندتر قرار دارند. در نهایت یک فرآیند آفلاین، با نام مستعار فشردهسازی، دادهها را از سطح بالاتر گرفته و با سطح پایینتری ادغام میکند.
مزایای LSM نسبت به B-tree به این دلیل است که نوشتن به طور کامل در حافظه انجام میشود و از یک گزارش تراکنش (یک گزارش پیشنویس نوشتن یا WAL) برای محافظت از دادهها استفاده میشود. حافظه تا ذخیره سازی مداوم سرعت و کارایی افزایش مییابد زیرا LSM از یک فرآیند نوشتن فقط ضمیمه استفاده میکند که امکان نوشتن سریع متوالی را بدون چالشهای تکهتکهای که درختهای B در معرض آن هستند، میدهد. درجها و بهروزرسانیها را میتوان بسیار سریعتر انجام داد، در حالی که سیستم فایل به طور مداوم با فرآیند فشردهسازی پسزمینه سازماندهی و سازماندهی مجدد میشود که اندازه فایلهای مورد نیاز برای ذخیره دادهها روی دیسک را کاهش میدهد.
LSM معایب خاص خود را دارد. به عنوان مثال، اگر داده ها در قطعات کوچک و تصادفی قابل دسترسی باشند، عملکرد خواندن می تواند ضعیف باشد. این به این دلیل است که داده ها پخش می شوند و در صورت بهینه نبودن پیکربندی، یافتن سریع داده های مورد نظر دشوار است. راههایی برای کاهش این مشکل با استفاده از نمایهها، فیلترهای شکوفه، و تنظیمهای دیگر برای اندازه فایل، اندازه بلوک، استفاده از حافظه، و سایر گزینههای قابل تنظیم وجود دارد – با فرض اینکه سازمانهای توسعهدهنده دانش لازم برای انجام مؤثر این وظایف را دارند. p>
تنظیم عملکرد برای فروشگاههای ارزش کلید
سه فاکتور عملکرد اصلی در یک ذخیره کلید ارزش عبارتند از: تقویت نوشتن، تقویت خواندن و تقویت فضا. هر کدام پیامدهای مهمی بر عملکرد نهایی، پایداری و ویژگیهای کارایی برنامه دارند. به خاطر داشته باشید که تنظیم عملکرد برای یک فروشگاه با ارزش کلیدی یک چالش زنده است که با تغییر استفاده از برنامه، زیرساخت و الزامات در طول زمان، دائماً شکل میگیرد و تکامل مییابد.
تقویت نوشتن
تقویت نوشتن به عنوان تعداد کل بایت های نوشته شده در یک عملیات نوشتن منطقی تعریف می شود. همانطور که داده ها منتقل می شوند، کپی می شوند و مرتب می شوند، در سطوح داخلی، دوباره و دوباره نوشته می شوند، یا تقویت می شوند. تقویت نوشتن بر اساس اندازه داده منبع، تعداد سطوح، اندازه Memtable، مقدار رونویسیها و سایر عوامل متفاوت است.
خواندن تقویت
این فاکتوری است که با تعداد دفعاتی که یک درخواست خواندن برنامه ایجاد میکند، تعریف میشود. اگر یک کوئری داده ۱K دارید که در ردیفهای ذخیره شده در memtable یافت نمیشود، درخواست خواندن به فایلهای موجود در ذخیرهسازی دائمی میرود که به کاهش تقویت خواندن کمک میکند. نوع پرس و جو (به عنوان مثال پرس و جو محدوده در مقابل پرس و جو نقطه ای) و اندازه درخواست داده نیز بر تقویت خواندن و عملکرد کلی خواندن تأثیر می گذارد. با تغییر الگوهای استفاده از برنامه، عملکرد خواندن نیز در طول زمان متفاوت خواهد بود.
تقویت فضا
این نسبت مقدار فضای ذخیره سازی یا حافظه مصرف شده توسط داده ها تقسیم بر اندازه واقعی داده ها است. این بستگی به نوع و اندازه داده های نوشته شده و به روز شده توسط برنامه دارد، بسته به اینکه آیا فشرده سازی استفاده می شود، روش فشرده سازی، و فراوانی تراکم.
تقویت فضا تحت تأثیر عواملی مانند داشتن مقدار زیادی داده قدیمی که هنوز زباله جمعآوری نشده است، تجربه تعداد زیادی درج و بهروزرسانی، و انتخاب الگوریتم فشردهسازی است. بسیاری از گزینه های تنظیم دیگر می توانند بر تقویت فضا تأثیر بگذارند. در همان زمان، تیمها میتوانند نحوه رفتار فشردهسازی و فشردهسازی را سفارشی کنند، یا عمق سطح و اندازه هدف هر سطح را تنظیم کنند، و زمانی که فشردهسازی اتفاق میافتد، برای کمک به بهینهسازی قرار دادن دادهها، تنظیم کنند. هر سه این فاکتورهای تقویت نیز تحت تأثیر حجم کار و نوع داده، زیرساخت حافظه و ذخیره سازی و الگوی استفاده توسط برنامه قرار می گیرند.
تنظیم چند بعدی: بهینه سازی نوشتن و خواندن
در بیشتر موارد، ساختارهای داده ذخیره کلید-مقدار موجود را میتوان طوری تنظیم کرد که برای سرعت نوشتن و خواندن برنامه به اندازه کافی خوب باشد، اما نمیتوانند عملکرد بالایی را برای هر دو عملیات ارائه دهند. وقتی مجموعه دادهها بزرگ میشوند، این مسئله میتواند حیاتی شود. همانطور که حجم ابرداده ها همچنان در حال رشد هستند، ممکن است اندازه خود داده ها را کوچکتر کنند. در نتیجه، زمان زیادی طول نمی کشد تا سازمان ها به نقطه ای برسند که بین عملکرد، ظرفیت و هزینه معامله کنند.
وقتی مشکلات عملکردی پیش میآید، تیمها معمولاً با اشتراکگذاری مجدد دادهها شروع میکنند. Sharding یکی از آن بدی های ضروری است که در زمان توسعه دهنده عوارضی را به دنبال دارد. با چند برابر شدن تعداد مجموعههای داده، توسعهدهندگان باید به جای تمرکز بر نوشتن کد، زمان بیشتری را به پارتیشنبندی دادهها و توزیع آنها بین خردهها اختصاص دهند.
علاوه بر اشتراک گذاری، تیم ها اغلب سعی می کنند عملکرد پایگاه داده را تنظیم کنند. خبر خوب این است که فروشگاههای دارای ارزش کلیدی با ویژگیهای کامل مانند RocksDB تعداد زیادی دستگیره و دکمهها را برای تنظیم ارائه میکنند – تقریباً بیش از حد. خبر بد این است که تنظیم یک فرآیند تکراری و زمانبر است و یک هنر زیبا است که در آن توسعهدهندگان ماهر میتوانند با مشکل مواجه شوند.
همانطور که قبلا ذکر شد، یک تنظیم مهم تقویت نوشتن است. با افزایش تعداد عملیات نوشتن، ضریب تقویت نوشتن (WAF) افزایش مییابد و عملکرد ورودی/خروجی کاهش مییابد که منجر به کاهش عملکرد و همچنین عملکرد غیرقابل پیشبینی میشود. و از آنجایی که موتورهای داده مانند RocksDB عمیقترین یا «پایینترین» بخش پشته نرمافزار هستند، هر گونه I/O hang که در این لایه ایجاد میشود ممکن است پشته را چکانده و تاخیرهای زیادی ایجاد کند. در بهترین دنیاها، یک برنامه کاربردی دارای ضریب تقویت نوشتن n است، جایی که n تا حد امکان پایین است. یک WAF معمولی ۳۰ به طور چشمگیری بر عملکرد برنامه در مقایسه با یک WAF ایده آل تر نزدیک به ۵ تأثیر می گذارد.
البته تعداد کمی از برنامه ها در بهترین دنیاها وجود دارند، و تقویت نیاز به ظرافت یا انعطاف پذیری برای انجام تنظیمات تکراری دارد. هنگامی که بهینهسازی شوند، این نمونهها ممکن است در صورت تغییر بارهای کاری یا سیستمهای زیربنایی، با مشکلات عملکرد اضافی و قابل توجهی مواجه شوند که نیاز به تنظیم بیشتر – و شاید یک حلقه بیپایان تنظیم مجدد – را ایجاد میکند که زمان بیشتری را برای توسعهدهنده مصرف میکند. افزودن منابع، اگرچه یک پاسخ است، اما راه حل بلندمدتی نیز نیست.
به سوی موتورهای داده نسل بعدی
موتورهای داده جدیدی در بازار ظهور میکنند که بر برخی از این کاستیها در بارهای کاری کم تأخیر و فشرده که به مقیاسپذیری و عملکرد قابلتوجهی نیاز دارند، غلبه میکنند، همانطور که در ابرداده رایج است. در مقاله بعدی، فناوری Speedb و رویکرد آن برای تنظیم فاکتورهای تقویت در بالا را بررسی خواهیم کرد. p>
همانطور که استفاده از معماریهای میکروسرویس با تأخیر کم گسترش مییابد، مهمترین نکته برای توسعهدهندگان این است که گزینههایی برای بهینهسازی عملکرد ابرداده، با تنظیم یا جایگزینی موتور داده برای حذف عملکرد قبلی و مشکلات مقیاس وجود دارد. این گزینهها نه تنها به مداخله مستقیم توسعهدهنده کمتری نیاز دارند، بلکه بهتر نیازهای برنامههای کاربردی مدرن را برآورده میکنند.
Hilik Yochai مدیر ارشد علمی و یکی از بنیانگذاران Speedb است، شرکتی که در پشت موتور داده Speedb، جایگزینی برای RocksDB و Hive، انجمن منبع باز Speedb جایی که توسعه دهندگان می توانند در Speedb و RocksDB با یکدیگر تعامل داشته باشند، بهبود دهند و دانش و بهترین شیوه ها را به اشتراک بگذارند. فناوری Speedb به توسعه دهندگان کمک می کند تا عملیات داده های فوق مقیاس خود را با مقیاس و عملکرد بی حد و حصر بدون به خطر انداختن عملکرد، تکامل دهند، در حالی که دائماً در تلاش برای بهبود قابلیت استفاده و سهولت استفاده هستند.
—
New Tech Forum مکانی برای کاوش و بحث در مورد فناوری سازمانی نوظهور در عمق و وسعت بی سابقه ای فراهم می کند. انتخاب ذهنی است، بر اساس انتخاب ما از فناوری هایی که معتقدیم مهم هستند و برای خوانندگان InfoWorld بیشترین علاقه را دارند. InfoWorld وثیقه بازاریابی را برای انتشار نمی پذیرد و حق ویرایش تمام محتوای ارائه شده را برای خود محفوظ می دارد. همه سوالات را به newtechforum@infoworld.com ارسال کنید.
پست های مرتبط
بهینه سازی عملکرد ابرداده برای برنامه های کاربردی در مقیاس وب
بهینه سازی عملکرد ابرداده برای برنامه های کاربردی در مقیاس وب
بهینه سازی عملکرد ابرداده برای برنامه های کاربردی در مقیاس وب