Adam & Nginx
Nginx Nginx
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Адам. Π’ΡƒΡ‚ Π·Π°ΠΌΠΎΡ€ΠΎΡ‡ΠΊΠΈ с ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌΠΈ Π²Ρ‹Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· кэша для микросСрвиса с большой Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ – моТСшь Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ с ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ врСмя?
Adam Adam
ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, сСйчас быстро разбСрёмся. Основной ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ – это коэффициСнт ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ: количСство ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ, Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ Π½Π° сумму ΠΎΠ±Ρ‰Π΅Π³ΠΎ числа запросов ΠΈ вытСснСний. Для высоконагруТСнного микросСрвиса этот коэффициСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ 95%, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ. ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ сам ΠΏΠΎ сСбС Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ всСй ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹ – Π½ΡƒΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ вытСснСния. Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ вытСснСния Ρ€Π°Π²Π½Π° стоимости вытСснСния плюс ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ вытСснённому ΠΊΠ»ΡŽΡ‡Ρƒ. ΠŸΡ€ΠΈ большом ΠΎΠ±ΡŠΡ‘ΠΌΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ получСния ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ³Π΄Π° эффСктивная ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ рассчитываСтся ΠΊΠ°ΠΊ: (1 минус коэффициСнт ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ) ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π½Π° ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ вытСснСния. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ, которая ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ эту ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ. LRU ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Ссли Ρƒ тСбя Π΄Π°Π½Π½Ρ‹Π΅ с сильной Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ – просто Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ, O(1) Π½Π° доступ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π°Π»ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½Ρ‹Ρ… всплСсках Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. LFU Π»ΡƒΡ‡ΡˆΠ΅, Ссли Ρƒ тСбя Π½Π΅Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ доступа, ΠΈ Ρ‚Ρ‹ Π³ΠΎΡ‚ΠΎΠ² ΠΏΠΎΠΆΠ΅Ρ€Ρ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ нСбольшим количСством Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎ ΡƒΡ‡Ρ‘Ρ‚Ρƒ. Для ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹Ρ… ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСроятностноС ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Clock ΠΈΠ»ΠΈ ARC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΈ ΠΏΡ€ΠΈ этом ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉ с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ, симулируй ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ ΠΈ смотри ΠΊΠ°ΠΊ Π½Π° коэффициСнт ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΈ Π½Π° врСмя, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ вытСснСнии. Если Π½Π°Ρ‚ΠΊΠ½Ρ‘ΡˆΡŒΡΡ Π½Π° ΠΏΠ»Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ кэша ΠΈΠ»ΠΈ добавь ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² памяти плюс Redis). Π­Ρ‚ΠΎ даст ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ баланс ΠΌΠ΅ΠΆΠ΄Ρƒ коэффициСнтом ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ, ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ вытСснСния ΠΈ ΠΎΠ±Ρ‰Π΅ΠΉ пропускной ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒΡŽ.
Nginx Nginx
Π—Π²ΡƒΡ‡ΠΈΡ‚ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Π½ΠΎ слСди, Ρ‡Ρ‚ΠΎΠ±Ρ‹ расходы Π½Π° высСлСниС Π½Π΅ Π²Ρ‹ΡˆΠ»ΠΈ Π·Π° Ρ€Π°ΠΌΠΊΠΈ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ коэффициСнту успСха, ΠΈΠ½Π°Ρ‡Π΅ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π°Ρ‡Π½Ρ‘Ρ‚ расти быстрСС, Ρ‡Π΅ΠΌ моя Π²Ρ‹Π΄Π΅Ρ€ΠΆΠΊΠ°. Π”Π°Π²Π°ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ убСдимся, Ρ‡Ρ‚ΠΎ тСория Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½. Π£Π΄Π°Ρ‡ΠΈ, ΠΈ ΠΏΠΎΠΌΠ½ΠΈ: кэш Ρ…ΠΎΡ€ΠΎΡˆ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, насколько Ρ…ΠΎΡ€ΠΎΡˆΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Ρ‹ Π² Π½Π΅Π³ΠΎ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΡˆΡŒ.