PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ Π‘Π£Π‘Π” JunoDB

Компания PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π»Π° исходныС тСксты отказоустойчивой Π‘Π£Π‘Π” JunoDB, ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. БистСма ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ спроСктирована с оглядкой Π½Π° Π²Ρ‹ΡΠΎΠΊΡƒΡŽ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ, ΠΎΡ‚ΠΊΠ°Π·ΠΎΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сотни тысяч ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний с прСдсказуСмыми Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ. Π’ PayPal практичСски всС сСрвисы, ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ финансовых Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ, завязаны Π½Π° JunoDB. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° написан Π½Π° языкС Go (клиСнтская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π° Java) ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ Apache 2.0. ΠŸΡ€ΠΈ дальнСйшСй Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ исправлСния, ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ ΠΈ измСнСния ΠΎΡ‚ сообщСства.

АрхитСктура JunoDB основана Π½Π° использовании балансировщика Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π΅Π³ΠΎ запросы ΠΎΡ‚ клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ прокси-сСрвСрами, ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ сСрвСров хранСния ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ прокси-сСрвСр устанавливаСт соСдинСния сразу со всСми сСрвСрами хранСния ΠΈ пСрСнаправляСт запросы ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅ сСрвСров хранСния Π½Π° основС индСкса сСкционирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² распрСдСлённой систСмС хранСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ etcd.

PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ Π‘Π£Π‘Π” JunoDB

Π”Π°Π½Π½Ρ‹Π΅ ΡΠ΅ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΈΠ²ΡΠ·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊ ΡƒΠ·Π»Π°ΠΌ хранСния с использованиСм Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ, Ρ‡Ρ‚ΠΎ позволяСт ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠΈ ΠΈΠ»ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ ΡƒΠ·Π»ΠΎΠ² Π² кластСрС. Для обСспСчСния отказоустойчивости каТдая порция Π΄Π°Π½Π½Ρ‹Ρ… рСплицируСтся Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠ·Π»Π°Ρ… хранСния, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΈΠ· строя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… сСрвСров. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ созданиС Ρ‚Π΅Ρ€Ρ€ΠΈΡ‚ΠΎΡ€ΠΈΠ°Π»ΡŒΠ½ΠΎ распрСдСлённых Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏΡ‹ ΡƒΠ·Π»ΠΎΠ² Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ Π² Ρ€Π°Π·Π½Ρ‹Ρ… Π΄Π°Ρ‚Π°Ρ†Π΅Π½Ρ‚Ρ€Π°Ρ….

PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ Π‘Π£Π‘Π” JunoDB

На ΡƒΠ·Π»Π°Ρ… хранСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΈΠ»ΠΈ Π² локальном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π±Π°Π·Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ RocksDB. ΠŸΡ€ΠΈ постоянном Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ (ΠΊΠ»ΡŽΡ‡ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ прокси).

PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ Π‘Π£Π‘Π” JunoDB

Для обращСния ΠΊ Π‘Π” ΠΈΠ· ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ поставляСтся клиСнтская Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π°Ρ API для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языках Java, Go ΠΈ C++. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ максимально ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π°, Π° слоТная Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ настройки ΠΏΠΎ возмоТности вынСсСны Π½Π° сторону Π‘Π£Π‘Π”. ВзаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ балансировщиком ΠΈΠ»ΠΈ прокси осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» связи. Для управлСния ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ запросов ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ воспроизводит всС возмоТности клиСнтского API.

БистСма спроСктирована для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ запросов с прСдсказуСмыми Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, кластСр ΠΈΠ· Ρ‚Ρ€Ρ‘Ρ… ΡƒΠ·Π»ΠΎΠ² хранСния ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ прокси, сформированный ΠΈΠ· ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G ΠžΠ—Π£ ΠΈ 450G Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ Π½Π° Π±Π°Π·Π΅ SSD), смог ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ фиксированныС Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ 2.5 мс Π² 95% случаСв ΠΈ 16 мс Π² 99% ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ 200 тысяч ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… TLS-соСдинСний ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π² 15 тысяч запросов Π² сСкунду (ΠΏΡ€ΠΈ 3000 ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… соСдинСний ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ Π² 80 тысяч запросов Π² сСкунду Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ прСвысили 6 мс Π² 95% случаСв ΠΈ 15 мс Π² 99%). Π’ PayPal сСрвирсы Π½Π° Π±Π°Π·Π΅ JunoDB ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠΊΠΎΠ»ΠΎ 350 ΠΌΠΈΠ»Π»ΠΈΠ°Ρ€Π΄ΠΎΠ² запросов Π² дСнь.

PayPal ΠΎΡ‚ΠΊΡ€Ρ‹Π» ΠΊΠΎΠ΄ Π‘Π£Π‘Π” JunoDB


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ