ویرایش به تصویر قبلی که چندین سیستم را برای انتخاب نشان می داد.
شکل 2: حالت ایده آل یک رابط کلیدی-مقدار واحد است که پیچیدگی را هم برای مشتریان و هم برای صاحبان پلت فرم کاهش می دهد. وقتی بتوانیم منابع خود را به عنوان یک شرکت تجمیع کنیم و در یک پلتفرم واحد سرمایه گذاری کنیم، می توانیم سریعتر حرکت کنیم و بهتر بسازیم.
انتقال از چهار سیستم به سیستم ایده آل بالا به دو مرحله تقسیم شد: مرحله اول، هدف قرار دادن داده های فقط خواندنی، و دوم، هدف قرار دادن داده های خواندن-نوشتن. طراحی لوگو طراحان لوگو هر مرحله نیازمند استراتژی مهاجرت منحصر به فرد خود بود تا کمترین اختلال را برای مشتریان ایجاد کند.
فاز 1: انتقال داده فقط خواندنی (کاملاً بدون درز)
مرحله فقط خواندنی ابتدا به این دلیل بود که سادهتر بود (اطلاعات غیرقابل تغییر آسانتر از دریافت نوشتههای زنده دادههای قابل تغییر است) و به این دلیل که اکثر مشتریان را هدف قرار میداد (حدود 70 درصد از Terrapin استفاده میکردند). از آنجایی که Terrapin بسیار پرکار بود و در پایگاه کد ما مستقر بود، اگر همه API های خود را برای دسترسی به KVStore مهاجرت کنند، زمان و تلاش زیادی را با ارزش افزایشی بسیار کمی می طلبید.
ما تصمیم گرفتیم در عوض اکثر مشتریان Terrapin را به طور یکپارچه مهاجرت کنیم: برای کاربرانی که با Terrapin API تماس میگیرند هیچ تغییری لازم نیست، اما بدون اطلاع تماسگیرندگان، سرویس Terrapin API با یک کتابخانه KVStore API تعبیهشده برای بازیابی دادهها از Rockstore افزوده شد. و از آنجایی که Terrapin یک سیستم بارگذاری دستهای است، ما همچنین یک کلاس پایه مرکزی پیدا کردیم و گردشهای کاری را تغییر مسیر دادیم تا دادهها را به جای Terrapin در Rockstore دوبار بارگذاری کنیم (و سپس در نهایت Terrapin را قطع کردیم).
نموداری که زیربخشی از نمودار قبلی را نشان میدهد که چهار سیستم ارزش کلیدی را نشان میدهد. در این نمودار، روی مشتریانی که با Rockstore و Terrapin API تماس میگیرند بزرگنمایی میکنیم و نشان میدهیم که با معرفی لایهای بین Terrapin API و Terrapin leaf Storage که مشتریان را هدایت میکند تا به جای ذخیره برگ Rockstore تماس بگیرند، میتوانیم بدون نیاز به مشتریان به انتقال داده دست یابیم. هر اقدامی
شکل 3: با معرفی یک لایه مسیریابی بین APIهای Terrapin و ذخیرهسازی برگ Terrapin، میتوانیم به انتقال داده دست یابیم و سیستم ذخیرهسازی پرهزینه و کمپایدار Terrapin را برای تأثیر فوری کسبوکار حذف کنیم، بدون اینکه از مشتریان بخواهیم اقدامی انجام دهند. مبادله در اینجا بدهی فناوری و لایه غیرمستقیم است: ما اکنون از مشتریان میخواهیم که استفاده خود از Terrapin API را پاک کنند تا مستقیماً KVStore API را فراخوانی کنند.
از آنجایی که Rockstore نسبت به Terrapin عملکرد و مقرون به صرفهتر بود، کاربران شاهد کاهش 30 تا 90 درصدی تاخیر بودند. هنگامی که زیرساخت ذخیره سازی Terrapin را از کار انداختیم، شرکت همچنین شاهد صرفه جویی سالانه 7 میلیون دلاری بود، همه بدون نیاز کاربران به برداشتن انگشت (به استثنای چند مورد). معاوضه این است که ما اکنون مقداری بدهی فنی داریم تا اطمینان حاصل کنیم که کاربران با حذف APIهای Terrapin منسوخ شده و روی KVStore API کد خود را پاک می کنند تا دیگر لایه ای غیرمستقیم نداشته باشیم.
فاز 2: انتقال داده خواندن و نوشتن (تا حدی بدون درز)
سمت خواندن و نوشتن تصویر متفاوتی ارائه کرد: کمتر از 200 مورد استفاده برای مقابله وجود داشت، و تعداد سایتهای تماس کمتر افراطی بود، اما ایجاد برابری ویژگیها برای یک سیستم خواندن-نوشتن در مقابل فقط خواندن شامل توسعههای جدی بود. . Rockstore برای اینکه بتواند با UserMetaStore (در اصل HBase) همتراز باشد، به یک قالب جدید با ستون گسترده، حالتهای سازگاری بیشتر، پشتیبانی از عکس فوری آفلاین و تضمینهای دوام بالاتر نیاز داشت.
در حالی که تیم برای توسعه این ویژگیها وقت گذاشت، ما تصمیم گرفتیم "گلوله را گاز بگیریم" و از همه کاربران بخواهیم از همان ابتدا از UserMetaStore's API به KVStore API مهاجرت کنند. مزیت انجام این کار این است که یک حرکت کم خطر و کم تلاش است. به لطف قدرت انتزاع، ما یک پروکسی معکوس را پیاده سازی کردیم به طوری که مشتریانی که به KVStore API حرکت می کنند در واقع هنوز UserMetaStore زیر سرپوش را فراخوانی می کنند. ( طراحی سایت سفارش طراحی سایت ) با ایجاد این تغییر کوچک در حال حاضر، مشتریان قراردادی ماندگار میخریدند که برای آینده قابل پیشبینی مجدداً به چنین تغییراتی نیاز نخواهد داشت.
نموداری که Rockstore و UserMetastore را در کنار یکدیگر نشان میدهد که هر دو توسط لایه KVStore API در بالا انتزاع شدهاند. به مشتریان نشان داده میشود که از تماس مستقیم UMS API به تماس با KVStore API، که میتواند درخواستها را به UMS و Rockstore پراکسی کند، حرکت میکند و امکان مهاجرت زیر سر خود را فراهم میکند.
شکل 4: به جای اتخاذ همان رویکردی که با Terrapin در شکل 3 انجام دادیم، تصمیم گرفتیم که از مشتریان بخواهیم API های خود را از قبل منتقل کنند، برای یکسان سازی سیستم های ذخیره سازی خواندن-نوشتن منطقی تر است. هنگامی که مشتریان به لایه انتزاعی KVStore API ما رفتند، ما آزاد بودیم که دادههای آنها را از UserMetaStore به Rockstore منتقل کنیم.
برخی از بزرگترین چالش ها در واقع فنی نبودند. یافتن صاحبان دادهها یک تمرین باستانشناسی بود و به دلیل اولویتهای رقابتی، پاسخگویی صدها مالک برای تکمیل بخشی از آنها دشوار بود. انجام پروژه انجام پروژه متلب اما وقتی این کار انجام شد و زمانی که پلتفرم راک استور آماده شد، تیم به طور کامل از حالت انسداد خارج شد تا بدون دخالت مشتری، داده ها را از UserMetaStore به Rockstore پر کند. ما هم نذر کردیم