تاریخچهی واقعی استعارهی Pets vs Cattle
خلاصهٔ کاملتر
نویسنده (Randy Bias) میگه سال ۲۰۱۱ یا ۲۰۱۲ دنبال یه راه ساده میگشته که به مشتریها توضیح بده AWS و اپهای cloud native چرا اساساً با چیزی که قبلاً بوده فرق دارن. تو یه ارائه از Bill Baker دربارهی Scaling SQL Server به استعارهای برخورده که حسابی به دلش نشسته: مقایسهی یه حیوون خونگی (pet) با یه گله گاو (cattle). Bill اصلاً دربارهی کلاد حرف نمیزده، بحثش معماری scale-up در برابر scale-out بوده.
نویسنده میگه نکتهی ظریفی که خودش روش تأکید کرده این بوده که این استعاره رو ببره تو فضای کلاد و روی دور ریختنی بودن گاوها و یکتا بودن پتها دست بذاره. به گفتهی اون، این مهمتر از scale-up یا scale-out ـه؛ اونها فقط عوارض جانبی نگاه تو به سرورن. اگه یه سرور رو چیزی ببینی که هر لحظه میشه نابودش کرد و جاش یکی دیگه آورد، عضو گلهست؛ اگه ضروری و جایگزینناپذیر ببینیش، یه پت ـه.
تعریف دقیقش اینه: پتها سرور یا جفتسرورهایی هستن که دستی ساخته و نگهداری میشن و هیچوقت نباید بیفتن، مثل mainframe یا یه جفت HA active/passive. cattle آرایهای از بیشتر از دو سروره که با ابزار خودکار ساخته میشه و برای خراب شدن طراحی شده؛ موقع خرابی هیچ آدمی لازم نیست دخالت کنه، چون سیستم خودش دور خرابی رو میپیچه، سرور خراب رو ریاستارت میکنه یا با triple replication داده رو تکثیر میکنه.
نویسنده میگه نکتهی کلیدی اینه که تو دنیای قدیم، افزونگی از راه «دوتا داشتن از هر چیز» (همون جفت HA کلاسیک) کافی نیست. باید فرض کنی خرابی حتماً اتفاق میافته و هر سرور و هر جزء باید بتونه بدون اثر گذاشتن روی کل سیستم از کار بیفته.
بعد نویسنده گله میکنه که این استعاره داره بد استفاده میشه. مثالش پست تیم Kubernetes دربارهی Pet Sets ـه: میگه چیزایی که اونجا بهعنوان نمونهی stateful معرفی شدن (Cassandra و Kafka و MongoDB) دقیقاً مصداق cattle ـن، چون همه برای خرابی طراحی شدن. پس عملاً Kubernetes داره دیتااستورهای cattle رو با اسم «Pet Set» پشتیبانی میکنه و این آدمها رو گیج میکنه.
به گفتهی نویسنده، اگه بگیم پت یعنی سیستمی که «دستکاری خاص میخواد» بهجای سیستمی که «نباید بیفته»، تفاوت دنیای قدیم و جدید رو خراب کردیم. اون میگه هر کسی میتونه استعاره رو واسهی کار خودش بِکِشه و بِکِشه، ولی اصل ماجرا یعنی دور ریختنی بودن سرور (مفهومی که گوگل پیشروش بوده) باید حفظ بشه.
نکات کلیدی:
- اصل استعاره دور ریختنی بودن سروره، نه scale-up در برابر scale-out
- پت: سرور یکتا و دستی که نباید بیفته؛ cattle: آرایهی خودکار که برای خرابی طراحی شده
- افزونگی با یه جفت HA کافی نیست؛ باید فرض کنی خرابی حتمیه
- نویسنده میگه Pet Set در Kubernetes در واقع دیتااستورهای cattle رو پوشش میده، نه پت واقعی
- کجفهمی استعاره ارزش آموزشیش رو کم میکنه




