انبار مشترک گلوگاه نیست
وقتی یک ازدحام از چند ایجنت به هزاران ایجنت رشد میکند، غریزه این است که به سراغ یک پایگاه داده مشترک برویم. هر واقعیت را در یک جا بگذاریم، بگذاریم هر ایجنت بخواند و بنویسد، و هماهنگی به یک مسئله ذخیرهسازی تبدیل میشود. این غریزه اشتباه است. ذخیرهسازی ارزان و بهخوبی فهمیدهشده است. حالت شکست در مقیاس ازدحام نه ظرفیت است و نه توافق: ایجنتها تعریف مشترکی از این که یک واقعیت چیست، چه زمانی جاری است، یا چه کسی مجاز است بگوید وجود دارد، ندارند.
یک انبار مشترک بدون قرارداد کشف به یک زبالهدان فقط-نوشتنی تبدیل میشود. هر ایجنت میتواند اضافه کند، تعداد کمی میتوانند تفسیر کنند، و هیچکس نمیتواند بازنشسته کند. نتیجه یک پایگاه دانش نیست، بلکه تلی از ادعاهاست که روابطشان تعریفنشده است.
نویسندگان همزمان رکوردهای متناقضی تولید میکنند که هیچ ایجنت واحدی نمیتواند دربارهشان داوری کند
دو ایجنت که رویداد زیربنایی یکسانی را مشاهده میکنند، اغلب آن را متفاوت ثبت میکنند. یکی دما را بهصورت float مینویسد، دیگری بهصورت رشته با واحد. یکی زمان را به وقت محلی مهر میزند، دیگری به UTC. هیچکدام بهتنهایی غلط نیستند. با هم ناسازگارند، چون هیچ ایجنتی اختیار تصمیمگیری درباره این که کدام بازنمایی متعارف است را ندارد. انبار هر دو را صادقانه حفظ میکند، و هر خواننده پاییندستی این ابهام را به ارث میبرد.
این یک مسئله سازگاری نیست که یک مدل تراکنش قویتر حلش کند. حتی با نوشتنهای سریالپذیر، انبار نمیتواند بداند که دو رکورد یک واقعیت را توصیف میکنند مگر این که نویسندگان از پیش بر سر نحوه نامگذاری آن واقعیت توافق کرده باشند. پروتکلهای اجماع نوشتنها را مرتب میکنند؛ آنها را تفسیر نمیکنند.
بدون قواعد نامگذاری، تکراریها شبیه شواهد مستقل به نظر میرسند
این حالت شکست خطرناکتر است. اگر سه ایجنت بهطور مستقل یک واقعیت را کشف کنند و آن را زیر سه کلید متفاوت بنویسند، یک مصرفکننده پاییندستی سه رکورد میبیند. اگر آن مصرفکننده تعداد رکورد را جانشینی برای اطمینان در نظر بگیرد، نتیجه میگیرد که واقعیت بهخوبی پشتیبانی شده است. اینطور نیست. این یک مشاهده است که بهطور تصادفی کپی شده است.
تکراری-بهعنوان-شاهد یک خرابی خاموش است. خطا ایجاد نمیکند، امتیاز اطمینان را بالا میبرد. ازدحامهایی که بر شمارش تأییدها بدون یک نظم نامگذاری تکیه میکنند، در واقع افزونگی خود را اندازه میگیرند و آن را توافق مینامند.
قرارداد کشف

قرارداد کشف مجموعه قواعدی است که نحوه نامگذاری، نسخهبندی و بازنشستگی واقعیتها را پیش از رسیدن به هر انباری تعیین میکند. این یک پروتکل است، نه یک اسکیما. اسکیما توصیف میکند که یک رکورد چه شکلی دارد؛ قرارداد توصیف میکند که چه معنایی دارد و چه زمانی دیگر آن معنا را ندارد.
سه ویژگی باربر هستند.
کلید متعارف، هویت تولیدکننده، مهر زمانی
هر واقعیت باید یک کلید متعارف داشته باشد که از محتوایش مشتق شده است، نه از ایجنتی که آن را نوشته است. کلیدی مانند sensor:temperature:celsius:station-7:2024-06-01T12:00Z توسط هر ایجنتی که همان واقعیت را مشاهده کند قابل استخراج است. دو ایجنت که همان مشاهده را مینویسند، همان کلید را تولید میکنند، و انبار میتواند آنها را در یک رکورد با دو تأییدیه بهجای دو رکورد فروبکاهد.
کلید باید همراه با هویت تولیدکننده و یک مهر زمانی باشد. هویت تولیدکننده یک نام نمایشی نیست؛ ارجاعی به اجرایی است که واقعیت را منتشر کرده، بهاندازهای که بتوان ورودیها و پیکربندی آن اجرا را بازیابی کرد. مهر زمانی زمان مشاهده است، نه زمان نوشتن، چون زمان نوشتن بازتاب صفبندی است، نه واقعیت.
خواندنها نسخهای را که به آن وابستهاند اعلام میکنند
خوانندهای که یک واقعیت را مصرف میکند باید بگوید به کدام نسخه وابسته است. این خواندنهای کهنه را از یک خطر خاموش به یک انتخاب صریح تبدیل میکند. ایجنتی که نسخه ۳ را میخواند و بر اساس آن عمل میکند، بعداً قابل حسابرسی است: به نسخه ۳ وابسته بود، و نسخه ۵ آن را جانشین کرد. بدون این، خوانندهای که یک واقعیت جانشینشده را مصرف کرده، با خوانندهای که واقعیت جاری را مصرف کرده یکسان به نظر میرسد، و خطای حاصل قابل انتساب نیست.
اعلام نسخه رایگان نیست. خوانندگان را مجبور میکند حالت حمل کنند و نویسندگان را مجبور میکند گذارهای نسخه را منتشر کنند. این بدهبستان واقعی است: سیستمهایی که اعلام نسخه را حذف میکنند، توان عملیاتی میگیرند و توانایی توضیح خروجیهای خود را از دست میدهند. برای ازدحامهایی که تصمیمهایی با اثر مرکب میگیرند، توضیح ارزشمندتر از توان عملیاتی است.
بازنشستگی یک عملیات درجهیک است
واقعیتهای جانشینشده باید از استناد خارج شوند. این نیازمند یک عملیات بازنشستگی است که بهاندازه نوشتن صریح باشد. یک واقعیت حذف نمیشود؛ بهعنوان بازنشسته علامتگذاری میشود، با ارجاع به واقعیتی که آن را جانشین کرد و دلیل آن. خوانندگان پاییندستی که وابستگی نسخهای به یک واقعیت بازنشسته اعل
بازنشستگی جایی است که بیشتر انبارهای مشترک بیسروصدا شکست میخورند. حذف آسان است، اما حذف منشأ را نابود میکند. علامتگذاری بازنشستگی بدون شکستن رد حسابرسی، عملیاتی است که دانش یک ازدحام را در طول زمان منسجم نگه میدارد.

منشأ بهعنوان ویژگی باربر
یک ایجنت پاییندستی باید بتواند یک ادعا را تا اجرایی که آن را تولید کرده ردیابی کند. این یک قابلیت خوب-برای-داشتن برای اشکالزدایی نیست؛ این ویژگیای است که بقیه قرارداد را قابل اجرا میکند. اگر یک واقعیت قابل ردیابی نباشد، نمیتوان آن را نسخهبندی، بازنشسته یا داوری کرد.
پیامد عملی یک قاعده در زمان نوشتن است: واقعیتهای بدون انتساب رد میشوند. نه در زمان خواندن فیلتر میشوند، نه برای بعد قرنطینه میشوند، رد میشوند. فیلتر در زمان خواندن یک سیاست است که هر مصرفکننده باید بهدرستی و بهطور سازگار پیادهسازی کند. رد در زمان نوشتن یک ویژگی سیستم است. اولی وقتی مصرفکنندهای فراموش میکند، بیسروصدا شکست میخورد؛ دومی در مرز، با صدای بلند شکست میخورد.
این یک بدهبستان در برابر انعطاف نوشتن است. ایجنتهایی که نمیتوانند ارجاع اجرا تولید کنند، نمیتوانند مشارکت کنند. در نمونههای اولیه این محدودکننده به نظر میرسد؛ در مقیاس ازدحام تنها راه نگهداشتن پیکره تمیز است. جایگزین، انباری است که ادعاهای بدون انتساب را جمع میکند تا جایی که هیچ مصرفکنندهای نتواند سیگنال را از باقیمانده تشخیص دهد.
پیامدهای ارزیابی
کیفیت ازدحام را نمیتوان تنها بر اساس تکمیل وظیفه سنجید. ازدحامی که یک وظیفه را با استناد به یک واقعیت جانشینشده، یا با شمردن سه کپی از یک مشاهده بهعنوان سه تأیید مستقل، تکمیل میکند، بهطور تصادفی موفق شده و بهطور غیرقابل پیشبینی شکست خواهد خورد.
بنابراین ارزیابی باید معیارهای سطح-واقعیت را شامل شود: نرخ توافق بین ایجنتها بر کلیدهای متعارف، نرخ تناقض بین واقعیتهایی که یک کلید مشترک دارند اما بر سر مقدار اختلاف دارند، و نسبت واقعیتهای استنادشده که جاری هستند نه بازنشسته. اینها ویژگیهای حالت مشترک ازدحام هستند، نه خروجی هیچ ایجنت واحدی، و برای قابل اندازهگیری بودن اصلاً به قرارداد کشف نیاز دارند.
محدودیت صادقانه این است که معیارهای سطح-واقعیت سختتر از تکمیل وظیفه محاسبه میشوند. آنها نیازمند ابزارگذاری خود قرارداد و یک مرجع برای این که چه چیزی توافق محسوب میشود هستند. این هزینه، بهای دانستن این است که آیا یک ازدحام منسجم است یا صرفاً مولد.
اول قرارداد را بسازید
انبار مشترک آخرین تصمیم است، نه اولین. پیش از انتخاب یک پایگاه داده، تعریف کنید که یک واقعیت چگونه نامگذاری میشود، چه کسی میتواند آن را تولید کند، یک خواننده به کدام نسخه وابسته است، و چگونه بازنشسته میشود. آن چهار قاعده قرارداد کشف هستند. انباری که آنها را پیادهسازی میکند یک بستر هماهنگی است. انباری که این کار را نمیکند یک پوشه مشترک با نمایهسازی بهتر است.
ازدحامها شکست نمیخورند چون نمیتوانند بهاندازه کافی ذخیره کنند. آنها شکست میخورند چون نمیتوانند بر سر آنچه ذخیره کردهاند توافق کنند.
