امروز ما Workers KV Instant را معرفی میکنیم، حالت جدیدی برای Workers KV که تغییرات شما را به صورت جهانی برای دسترسی فوری بدون جریمههای خواندن سرد (cold read penalties) منتشر میکند.
سرویس Workers KV از زمان راهاندازی در هفته تولد در سال ۲۰۱۸ (Birthday Week in 2018)، یکی از محبوبترین سرویسهای ما در پلتفرم توسعهدهندگان (Developer Platform) بوده است. این سرویس برای دسترسی سریع به دادههایی مانند داراییهای ایستا (static assets) و پیکربندیهای کاربر که گاهی نوشته اما مکرراً خوانده میشوند، عالی است. ما خودمان از آن در بسیاری از محصولات Cloudflare استفاده میکنیم.
ما همچنین یک ذخیرهساز کلید-مقدار (key-value store) کلیدی دیگر به نام Quicksilver داریم که از زمان معرفی آن در سال ۲۰۲۰ (2020)، بارها درباره آن مطلب نوشتهایم. ما Quicksilver را برای تکثیر جهانی فوقالعاده سریع و دسترسی با تاخیر کم طراحی کردهایم و تقریباً هر درخواستی به Cloudflare حداقل یک کلید را در Quicksilver بررسی میکند. سالهاست که کاربران از ما میخواستند، اما ما هرگز Quicksilver را در دسترس مشتریان خود قرار نداده بودیم.
ما امروز با Workers KV Instant این وضعیت را تغییر میدهیم. حالت KV Instant همان API را مانند Workers KV ارائه میدهد، اما انرژی آن توسط Quicksilver تامین میشود. حالت KV Instant خوانشهای p99 را ۱۰۰ برابر سریعتر و بهروزرسانیهای فوری را بدون نیاز به انتظار برای انقضای TTL ارائه میدهد. این برای هر نوع دادهای مناسب نیست، اما برای دادههای پیکربندی برنامه که بهروزرسانی کمی دارند — همان چیزی که ما خودمان از Quicksilver برای آن استفاده میکنیم — KV Instant میدرخشد.
خوانشهای ۱۰۰ برابر سریعتر نسبت به Workers KV
حالت KV Instant تاخیری در خواندن ارائه میدهد که بیش از ۱۰۰ برابر سریعتر از حالت کلاسیک است؛ خوانشها در کمتر از ۲ میلیثانیه حتی در صدک ۹۹ زمان پاسخ (p99) حل میشوند و زمانهای صدک ۹۵ (p95) در مقیاس میکروثانیه اندازهگیری میشوند. نوشتنها بیش از ۲۰ برابر سریعتر به لبه (edge) منتقل میشوند و ۹۹ درصد از تمام عملیات نوشتن در حدود ۲۵۰ میلیثانیه تکثیر میشوند.
این ویژگیهای عملکردی بالا، KV Instant را برای خواندن دادهها در مسیر بحرانی (hot path) برنامههای شما، به ویژه پرچمها (flags) و تنظیماتی که باید تقریباً بلافاصله پس از نوشته شدن در سراسر جهان در دسترس باشند، ایدهآل میکند.
Mode | p99 reads (cached) | p99 reads (all) | median write replication | p95 write replication | p99 write replication |
Instant | N/A | 1.62 ms | 107 ms (1) | 181ms (1) | 256 ms (1) |
Classic | 160 ms | 287 ms | < 1 s (2, 3) | < 1 s (2, 3) | 4.38 s (2) |
یادداشتهای جدول:
- زمان تکثیر به تمام مکانهای لبه (بیش از ۳۰۰ مکان تا زمان انتشار)
- زمان تکثیر در تمام پسزمینههای ذخیرهسازی مورد نیاز
- ما دقت زیر ثانیه برای تاخیر تکثیر در حالت کلاسیک نداریم
حالت KV Instant توسط نسخه ۲ کوییکسیلور (Quicksilver v2)، یک فروشگاه کلید-مقدار که بهصورت داخلی توسط Cloudflare توسعه یافته است، پشتیبانی میشود تا تکثیر سریع جهانی و دسترسی با تاخیر کم در مقیاس سیارهای را امکانپذیر کند.
همان API ساده Workers KV — توابع get()، put()، list() و delete()
حالت KV Instant از Workers KV API آشنایی که امروز با آن برنامهنویسی میکنید، استفاده میکند.
برای مثال، فرض کنید روی یک راهاندازی محصول بزرگ کار میکنید و باید بتوانید دقیقاً ساعت ۱۰:۱۳ صبح هنگامی که محصول در سخنرانی اصلی روی صحنه معرفی میشود، محتوای صفحه اصلی را تغییر دهید. شما به کلیدی نیاز دارید که بتوانید آن را بخوانید، تاخیر نزدیک به صفر داشته باشد، در هر درخواستی فارغ از مقیاس قابل خواندن باشد و به محض تغییر، فورا بهروز شود.
اکثر عملیات اتصال با معادلهای کلاسیک Workers KV سازگار هستند. هنگام کار با KV Instant سه تفاوت کلیدی وجود دارد:
- هنگام ایجاد یک فضای نام KV، باید حالت KV Instant را مشخص کنید (ارسال ویژگی
”mode”:“instant”). - متادیتا پشتیبانی نمیشود، بنابراین فراخوانیهای
getWithMetadataهمیشهnullرا برمیگردانند و هیچ پشتیبانی از ارسال متادیتا درputوجود ندارد. - عملیات
listدر KV Instant تمام کلیدهای منطبق را در یک فضای نام برمیگرداند؛ هیچ صفحهبندی (pagination) وجود ندارد.
برای نمونههای API اضافی، به مستندات Workers KV مراجعه کنید.
قیمتگذاری — هزینههای خواندن ۶۰ درصد کمتر از Workers KV کلاسیک است
حالت KV Instant قیمتگذاری شده است تا با بارهای کاری دادههای کوچک و سنگین خواندن که در سرویسدهی به آنها برتری دارد، مطابقت داشته باشد. از آنجا که ما دادهها را به هر مکان Cloudflare منتشر میکنیم، با استفاده از همان فروشگاه کلید-مقدار Quicksilver که سالها صرف یادگیری نحوه بهرهبرداری از آن در مقیاس در مسیر بحرانی هر درخواست کردهایم، میتوانیم قیمتگذاری برای خواندن را ۶۰ درصد کمتر از Workers KV و بسیار کمتر از سایر محصولات پیکربندی جهانی ارائه دهیم.
در مقابل، ذخیرهسازی و عملیات کلاس A بهطور قابلتوجهی گرانتر از Workers KV هستند. اگر نیاز به ذخیره حجم زیادی از دادهها دارید یا باید آنها را مکرراً بهروز کنید، Workers KV همچنان گزینه بسیار مناسبی است. هر حالت برای نوع بسیار متفاوتی از دادهها و الگوی دسترسی طراحی شده است.
فضاهای نام KV Instant در سه بعد قیمتگذاری میشوند: ذخیرهسازی داده، عملیات کلاس A و عملیات کلاس B.
Class B operations (reads) | Class A operations (put, delete, list) | Storage | |
Workers KV Instant | $0.20 per million | $0.10 per operation | $100 per MB, per month |
Workers KV | $0.50 per million | $5.00 per million | $0.50 per GB, per month |
ذخیرهسازی (Storage)
ذخیرهسازی با نرخ ۱۰۰ دلار به ازای هر مگابایت در ماه صورتحساب میشود. هر کلید میتواند تا ۳۰۰ بایت باشد و مقادیر میتوانند هر اندازهای داشته باشند که باعث نشود فضای نام در کل از یک مگابایت تجاوز کند. فضاهای نام KV Instant میتوانند تا ۱۰۰۰۰ جفت کلید-مقدار از هر نوعی را در خود جای دهند.
عملیات کلاس A
عملیات کلاس A (put، delete و list) با قیمت ۰.۱۰ دلار به ازای هر عملیات شارژ میشوند. هر کلید نوشته شده یا حذف شده به عنوان یک عملیات کلاس A حساب میشود. هر درخواست list به عنوان یک عملیات کلاس A حساب میشود، صرف نظر از اینکه چه تعداد کلید در پاسخ برگردانده میشود. یک عملیات list واحد میتواند تمام جفتهای کلید-مقدار را در یک فضای نام در یک صفحه واحد برگرداند.
از آنجا که عملیات نوشتن باید از یک سیستم ثبت واحد عبور کند، KV Instant همچنین فرکانس نوشتن را به یک نوشتن به ازای هر فضای نام در ثانیه محدود میکند. این شبیه به محدودیت Workers KV کلاسیک یعنی یک نوشتن به ازای هر کلید در ثانیه است و استدلال در مورد ترتیب بهروزرسانی را در برنامه شما آسانتر میکند.
عملیات کلاس B
عملیات کلاس B (get) با قیمت ۰.۲۰ دلار به ازای هر میلیون کلید درخواستی شارژ میشود که ۶۰ درصد ارزانتر از حالت پیشفرض Workers KV است. هنگام درخواست چندین کلید در یک عملیات get واحد، هر کلید درخواستی به عنوان یک عملیات کلاس B صورتحساب میشود.
Workers KV Instant در بتا خصوصی است
حالت KV Instant امروز در نسخه بتا خصوصی (private beta) راهاندازی میشود. ما مشتاقیم که کار با مشتریانی را که میخواهند آن را امتحان کنند آغاز کنیم، سپس آن را به طور گسترده تری باز کنیم و دوست داریم نظرات شما را بشنویم. شما میتوانید برای نسخه بتا خصوصی ثبتنام کنید و به ما بگویید چه چیزی میسازید!
منبع: blog.cloudflare.com
