پی پال کد منبع JunoDB را باز کرده است، یک DBMS مقاوم در برابر خطا که داده ها را در قالب کلید-مقدار دستکاری می کند. این سیستم در ابتدا با امنیت بالا، مقیاس پذیری افقی، تحمل خطا و توانایی مدیریت صدها هزار اتصال همزمان با تاخیرهای قابل پیش بینی طراحی شده بود. در پی پال، تقریباً تمام خدمات، از ورود کاربر گرفته تا پردازش تراکنشهای مالی، به JunoDB مرتبط هستند. کد پروژه در Go (کتابخانه کلاینت جاوا) نوشته شده و تحت مجوز Apache 2.0 توزیع شده است. در توسعه بیشتر، اصلاحات، بهبودها و تغییرات از جامعه پذیرفته خواهد شد.
معماری JunoDB مبتنی بر استفاده از یک متعادل کننده بار است که درخواست های برنامه های مشتری را می پذیرد و آنها را بین سرورهای پروکسی توزیع می کند که به طور همزمان به گروهی از سرورهای ذخیره سازی هنگام درخواست دسترسی دارند. هر پروکسی به طور همزمان به همه سرورهای ذخیره سازی ارتباط برقرار می کند و درخواست ها را به گروهی از سرورهای ذخیره سازی بر اساس شاخص پارتیشن ذخیره شده در سیستم ذخیره سازی توزیع شده پیکربندی etcd هدایت می کند.
داده ها با استفاده از هش کردن به گره های ذخیره سازی پارتیشن بندی می شوند تا حرکت داده ها را با رشد یا کوچک شدن گره ها در یک خوشه کاهش دهند. برای اطمینان از تحمل خطا، هر بخش از داده ها در چندین گره ذخیره سازی تکرار می شود، که به شما امکان می دهد در صورت خرابی سرورهای جداگانه، اطلاعات را ذخیره کنید. ایجاد ذخیرهسازیهای توزیعشده جغرافیایی پشتیبانی میشود، که در آن گروههایی از گرهها در مراکز داده مختلف قرار دارند.
در گره های ذخیره سازی، داده ها بر اساس کتابخانه RocksDB در RAM یا در حافظه محلی قرار می گیرند. با ذخیره سازی مداوم، داده ها به صورت رمزگذاری شده ذخیره می شوند (کلید رمزگذاری را می توان هم توسط مشتری تعیین کرد و هم در سطح پروکسی تنظیم کرد).
برای دسترسی به پایگاه داده از برنامه ها، یک کتابخانه کلاینت ارائه شده است که یک API برای برنامه های کاربردی در Java، Go و C++ ارائه می دهد. بخش مشتری تا حد امکان ساده شده است و منطق و تنظیمات پیچیده در صورت امکان به سمت DBMS منتقل می شود. تعامل بین مشتری و متعادل کننده یا پروکسی از طریق یک کانال ارتباطی رمزگذاری شده انجام می شود. می توانید از یک رابط خط فرمان برای مدیریت و ارسال درخواست ها استفاده کنید که عملکرد کامل API مشتری را تقلید می کند.
این سیستم برای پردازش درخواستهایی با تاخیر کم قابل پیشبینی طراحی شده است، به عنوان مثال، مجموعهای از سه گره ذخیرهسازی و یک پروکسی، که از محیطهای n1-highmem-32 (32 پردازنده Intel Xeon 2.30GHz، رم 214G و حافظه مبتنی بر SSD 450G) تشکیل شدهاند. ، توانست در هنگام پردازش 2.5 هزار اتصال TLS همزمان و جریان 95 هزار درخواست در ثانیه (با 16 اتصال همزمان و جریان 99 هزار درخواست، تاخیرهای ثابت در 200٪ موارد 15 میلی ثانیه و در 3000٪ 80 میلی ثانیه را ارائه دهد. تأخیر در هر ثانیه در 6 درصد موارد از 95 میلی ثانیه و در 15 درصد موارد از 99 میلی ثانیه تجاوز نکرد. در PayPal، خدمات مبتنی بر JunoDB حدود 350 میلیارد درخواست در روز ارائه می کنند.
منبع: opennet.ru