เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เบ„เบทเปƒเบ™ เบ‚เปเป‰เบ„เบงเบฒเบกเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”, เบกเบตเบšเบฑเบ™เบซเบฒเบเบฑเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปเบˆเบเบขเบฒเบ, เปƒเบซเป‰เป‚เบ—เบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบ™เบตเป‰ Alvin. เป€เบงเบฅเบฒเบ™เบตเป‰เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบšเบšเบฑเบ™เบซเบฒเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบœเบนเป‰เบŠเบฒเบเบˆเบฒเบเบเปˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเป„เบ”เป‰เปเบˆเป‰เบ‡เปƒเบซเป‰เบ‚เป‰เบญเบเบ—เบฒเบš.

เบกเบทเป‰เบซเบ™เบถเปˆเบ‡เบ‚เป‰เบญเบเบ•เบทเปˆเบ™เบ™เบญเบ™เบเบฑเบšเบญเบตเป€เบกเบงเบ—เบตเปˆเบšเปเปˆเบžเปเปƒเบˆเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเบเบฑเบš Alvin, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบงเบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบงเปƒเบ™เป„เบงเป†เบ™เบตเป‰. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบฅเบนเบเบ„เป‰เบฒเบกเบตเบ›เบฐเบชเบปเบšเบเบฒเบ™ 99th เป€เบ›เบตเป€เบŠเบฑเบ™ latency เปƒเบ™เบžเบฒเบเบžเบทเป‰เบ™เบ‚เบญเบ‡ 50 ms, เบ”เบตเบเบงเปˆเบฒเบ‡เบปเบšเบ›เบฐเบกเบฒเบ™ latency เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบ—เบตเปˆเบ‚เป‰เบญเบเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปƒเบ™ latency, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ—เบธเบเบ—เบปเปˆเบงเป„เบ›.

เบเปˆเบญเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเบˆเบฐเป€เบญเบปเบฒ Alvin เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เบ‚เป‰เบญเบเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบเบฑเบš 40k queries เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต (QPS), เบ—เบฑเบ‡เบซเบกเบปเบ”เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ latency เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ 10ms. เบ‚เป‰เบญเบเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเบšเปเปˆเป€เบซเบฑเบ™เบ”เบตเบเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เปเบ•เปˆเป€เบšเบดเปˆเบ‡เบˆเบปเบ”เบซเบกเบฒเบเบชเบฐเบšเบฑเบšเบญเบทเปˆเบ™, เบ‚เป‰เบญเบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบชเบดเปˆเบ‡เปƒเบซเบกเปˆ: เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™, QPS เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบ•เปˆเปเบฒเบเบงเปˆเบฒเบ‚เบญเบ‡เบ‚เป‰เบญเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบขเบนเปˆเบ—เบตเปˆ 40k QPS, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเบ—เบตเปˆ 1k. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบญเบทเปˆเบ™, เป€เบงเบฅเบฒเบ™เบตเป‰เบ”เป‰เบงเบ QPS เบ•เปˆเปเบฒ, เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเป€เบญเบปเบฒเปƒเบˆเบžเบงเบเป€เบ‚เบปเบฒ.

เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบ‚เบฝเบ™เบšเบฅเบฑเบญเบเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบ„เบดเบ”เปเบฅเป‰เบงเบงเปˆเบฒเบ•เบปเบงเป€เบฅเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ•เป‰เบญเบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ—เบปเบ”เบชเบญเบšเบฅเบนเบเบ„เป‰เบฒ virtual เบ‚เบญเบ‡เบ‚เป‰เบญเบเป€เบฅเบทเป‰เบญเบเป†, เบ”เป‰เบงเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฝเบงเบเบฑเบ™: เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ•เปเปˆเบฒเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒ, เปเบ•เปˆเป€เบžเบตเปˆเบกเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบกเบต latency เบซเบผเบฒเบเบเบงเปˆเบฒ 10 ms. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ–เป‰เบฒเบขเบนเปˆเบ—เบตเปˆ 40k QPS เบ›เบฐเบกเบฒเบ™ 50 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเป€เบเบตเบ™ 50 ms, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบขเบนเปˆเบ—เบตเปˆ 1k QPS เบกเบต 100 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเบนเบ‡เบเบงเปˆเบฒ 50 ms เบ—เบธเบเป†เบงเบดเบ™เบฒเบ—เบต. Paradox!

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เบฎเบฑเบ”เปเบ„เบšเบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒ latency เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบเบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบš, เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบชเบฑเป‰เบ™เบ‚เบญเบ‡เบœเบนเป‰เบ•เป‰เบญเบ‡เบชเบปเบ‡เป„เบช. เบ‚เปเปƒเบซเป‰เป€เบˆเบฒเบฐเป€เบฅเบดเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡ Alvin เป€เบฅเบฑเบเบ™เป‰เบญเบ:

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ I/O transitions เบ—เบตเปˆเบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเป‰เบง (เบเบฒเบ™เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบ / เบเบฒเบ™เบŠเบญเบเบซเบฒเปเบœเปˆเบ™, เปเบฅเบฐเบญเบทเปˆเบ™เป†). เบฅเบญเบ‡เบ„เบดเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบขเบนเปˆเปƒเบช. เบ™เบญเบเบˆเบฒเบ I/O เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ, Alvin เบ”เปเบฒเป€เบ™เบตเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก: เบฅเบฒเบงเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ™เบตเป‰เบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™เบเบธเปˆเบกเบ”เบฝเบงเบเบฑเบ™เบเบฑเบš Alvin, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบงเบฅเบฒ latency เบ„เบงเบ™เบˆเบฐเบกเบตเบซเบ™เป‰เบญเบเบเบงเปˆเบฒเบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบœเบนเป‰เบ•เป‰เบญเบ‡เบชเบปเบ‡เป„เบช:

  1. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเป„เบ›เบซเบฒ Alvin.
  2. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบ Alvin เป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™.
  3. เบ„เบปเป‰เบ™เบซเบฒเปƒเบ™เปเบœเปˆเบ™เปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™.
  4. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบเบ„เบฑเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒ Alvin.
  5. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบ Alvin เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ.

เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ‚เป‰เบฒเบกเบญเบญเบเบšเบฒเบ‡เบˆเบธเบ”.

เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบกเบฑเบ™

เบชเบดเปˆเบ‡เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เปเบกเปˆเบ™เบ›เปˆเบฝเบ™ Alvin เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ping-ping เบ—เบตเปˆเบšเปเปˆเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เป€เบกเบทเปˆเบญเบกเบฑเบ™เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เปเบฒเบ•เบญเบšเบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เบ–เป‰เบฒเป€เบงเบฅเบฒ latency เบซเบผเบธเบ”เบฅเบปเบ‡, เปเบกเบ‡เป„เบกเป‰เปƒเบ™ Alvin เบซเบผเบทเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบฑเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบšเปเปˆเป€เบ„เบตเบเป„เบ”เป‰เบเบดเบ™. เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบšเปเปˆเบกเบตเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ping-ping. เบ™เบตเป‰โ€‹เบซเบกเบฒเบโ€‹เบ„เบงเบฒเบกโ€‹เบงเปˆเบฒโ€‹เบชเบฒเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบžเบตเปˆเบกโ€‹เบ—เบฐโ€‹เบงเบตโ€‹เบเบฒเบ™ latencyโ€‹, เปเบฅเบฐโ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบ•เป‰เบญเบ‡โ€‹เบชเบปเบ‡โ€‹เป„เบชโ€‹เบ–เบทเบโ€‹เบ•เบฑเบ”โ€‹เบญเบญเบโ€‹เป€เบ›เบฑเบ™โ€‹เป€เบ„เบดเปˆเบ‡โ€‹เบซเบ™เบถเปˆเบ‡โ€‹:

  1. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒเป„เบ›เบซเบฒ Alvin.
  2. เป‚เบ—เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบˆเบฒเบ Alvin เบเบฑเบšเบฅเบนเบเบ„เป‰เบฒ.

เบเบดเปˆเบ‡เปƒเบซเบเปˆ! เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเปเบกเปˆเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ. เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเป€เบเบทเบญเบšเบˆเบฐเบฎเบนเป‰เป€เบซเบ”เบœเบปเบ™เปเบฅเป‰เบง.

เบ. เบž. เบž

เบ”เบฝเบงเบ™เบตเป‰เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเปเบ™เบฐเบ™เบณเป€เบˆเบปเป‰เบฒเปƒเบซเป‰เบเบฑเบšเบœเบนเป‰เบซเบผเบดเป‰เบ™เปƒเปเปˆ: เบ. เบž. เบž. เบ™เบตเป‰เปเบกเปˆเบ™เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบˆเบฒเบ Google เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเบทเปˆเบชเบฒเบ™เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ CPR. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ gRPC เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบ”เบตเปเบฅเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเบ—เบตเปˆเปƒเบŠเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ™เบตเป‰เปเบฅเบฐเบ‚เป‰เบญเบเบ„เบฒเบ”เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบฐเป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบตเปˆเบชเบธเบ” - เป€เบงเบปเป‰เบฒเบซเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”.

เบกเบต gRPC เปƒเบ™ stack เป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เปเบฒเบ–เบฒเบกเปƒเบซเบกเปˆ: เบšเบฒเบ‡เบ—เบตเบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบเบซเบผเบทเบ‚เป‰เบญเบเป€เบญเบ‡ gRPC เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบšเบฑเบ™เบซเบฒ latency? เป€เบžเบตเปˆเบกเบœเบนเป‰เบ•เป‰เบญเบ‡เบชเบปเบ‡เป„เบชเปƒเปเปˆเปƒเบชเปˆเบฅเบฒเบเบŠเบทเปˆ:

  1. เบฅเบนเบเบ„เป‰เบฒเป‚เบ—เบซเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” gRPC
  2. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” gRPC เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ—เบซเบฒเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบขเบนเปˆเปƒเบ™เบฅเบนเบเบ„เป‰เบฒ gRPC เปƒเบ™เป€เบŠเบตเบšเป€เบงเบต
  3. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” gRPC เบ•เบดเบ”โ€‹เบ•เปเปˆ Alvin (เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ‚เบญเบ‡โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เปเบกเปˆโ€‹เบ‚เปˆเบฒเบโ€‹เบ‚เบญเบ‡ ping-pongโ€‹)

เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบนเบเบ„เป‰เบฒ / Alvin เบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเปเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบฅเบนเบเบ„เป‰เบฒ - เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡ async.

เบซเบกเบฒเบเป€เบซเบ”: เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบเป€เบฅเบฑเบเบ™เป‰เบญเบเป€เบžเบฒเบฐเบงเปˆเบฒ gRPC เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบญเบ‡ (เปเบกเปˆโ€‹เปเบšเบšโ€‹?) threading เบ•เบปเบงโ€‹เปเบšเบšโ€‹, เปƒเบ™โ€‹เบ—เบตเปˆ stack เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เปเบกเปˆเบ™ intertwinedโ€‹. gRPC เปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰. เบชเปเบฒเบฅเบฑเบš sake เบ‚เบญเบ‡เบ„เบงเบฒเบกเบ‡เปˆเบฒเบเบ”เบฒเบ, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ•เบดเบ”เบเบฑเบšเบฎเบนเบšเปเบšเบšเบ™เบตเป‰.

Profiling เบˆเบฐเปเบเป‰เป„เบ‚เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡

เป€เบกเบทเปˆเบญเบ‚เป‰เบฒเบกเบฎเป‰เบฒเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™, เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเป€เบเบทเบญเบšเบˆเบฐเป€เบฎเบฑเบ”เปเบฅเป‰เบง: โ€œเบ”เบฝเบงเบ™เบตเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบ! เปƒเบซเป‰เบ™เบณเปƒเบŠเป‰เป‚เบ›เบฃเป„เบŸเบฅเปŒ เปเบฅเบฐเบŠเบญเบเบซเบฒเบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเป€เบเบตเบ”เบ‚เบถเป‰เบ™.โ€ I เบžเบฑเบ”เบฅเบปเบกเปƒเบซเบเปˆเบ‚เบญเบ‡เป‚เบ›เบฃเป„เบŸเบฅเปŒเบ„เบงเบฒเบกเปเบกเปˆเบ™เบเปเบฒ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ CPUs เปเบกเปˆเบ™เป„เบงเบซเบผเบฒเบเปเบฅเบฐเบชเปˆเบงเบ™เบซเบผเบฒเบเบกเบฑเบเบˆเบฐเบšเปเปˆเปเบกเปˆเบ™เบ„เปเบ‚เบงเบ”. เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญเป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบ•เป‰เบญเบ‡เบขเบธเบ”เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบญเบฑเบ™เบญเบทเปˆเบ™. CPU Profiling เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เปเบ™เบงเบ™เบฑเป‰เบ™: เบกเบฑเบ™เบšเบฑเบ™เบ—เบถเบเบ—เบธเบเบขเปˆเบฒเบ‡เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡ เบชเบฐเบซเบผเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™ เปเบฅเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบŠเบฑเบ”เป€เบˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบฑเบเบŠเป‰เบฒเป€เบเบตเบ”เบ‚เบทเป‰เบ™.

เบ‚เป‰เบญเบเป€เบญเบปเบฒเบชเบตเปˆเป‚เบ›เป„เบŸ: เบ—เบตเปˆเบกเบต QPS เบชเบนเบ‡ (latency เบ•เปˆเปเบฒ) เปเบฅเบฐเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ ping-pong เบ—เบตเปˆเบกเบต QPS เบ•เปˆเปเบฒ (latency เบชเบนเบ‡), เบ—เบฑเบ‡เบ‚เป‰เบฒเบ‡เบฅเบนเบเบ„เป‰เบฒเปเบฅเบฐเบ‚เป‰เบฒเบ‡เป€เบŠเบตเบŸเป€เบงเบต. เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบต, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เป„เบ”เป‰เป€เบญเบปเบฒเป‚เบ›เป„เบŸเป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ•เบปเบงเบขเปˆเบฒเบ‡. เป€เบกเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบšเป‚เบ›เบผเป„เบŸเบฅเปŒ, เบ‚เป‰เบญเบเบกเบฑเบเบˆเบฐเบŠเบญเบเบซเบฒ stack call เบœเบดเบ”เบ›เบปเบเบเบฐเบ•เบด. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบ”เป‰เบฒเบ™เบ—เบตเปˆเบšเปเปˆเบ”เบตเบ—เบตเปˆเบกเบต latency เบชเบนเบ‡, เบกเบตเบซเบผเบฒเบเบ•เบปเบงเบ›เปˆเบฝเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™ (10 เป€เบ—เบทเปˆเบญเบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™). เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบชเบฐเบซเบผเบฑเบšเบชเบฐเบžเบฒเบšเบเบฒเบ™เปเบกเปˆเบ™เป€เบเบทเบญเบšเบ„เบทเบเบฑเบ™. เปƒเบ™เบ„เบงเบฒเบกเบขเป‰เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

เบเบฒเบ™เบ”เบตเบšเบฑเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบก

เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเบชเบดเป‰เบ™เบซเบงเบฑเบ‡. เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบญเบทเปˆเบ™เปƒเบ”, เปเบฅเบฐเปเบœเบ™เบเบฒเบ™เบ•เปเปˆเป„เบ›เบ‚เบญเบ‡เบ‚เป‰เบญเบเปเบกเปˆเบ™เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบงเบดเบ™เบดเบ”เป„เบชเบšเบฑเบ™เบซเบฒเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™.

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒ

เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบ‚เป‰เบญเบเบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบš 50ms latency เบชเบฐเป€เบžเบฒเบฐ. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบฅเบฒเบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบ•เบฑเบ”เบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบญเบญเบเบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบˆเบปเบ™เบเปˆเบงเบฒเบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ„เบดเบ”เป„เบ”เป‰เบงเปˆเบฒเบชเปˆเบงเบ™เปƒเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ™เบตเป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ—เบตเปˆเป„เบ”เป‰เบœเบปเบ™.

เบ•เบฒเบกเบ›เบปเบเบเบฐเบ•เบด, เปƒเบ™เบ—เบฒเบ‡เบซเบฅเบฑเบ‡, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบงเบฒเบ‡เบฅเบนเบเบ„เป‰เบฒเบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš Alvin - เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเปƒเบซเป‰ localhost. เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡ latency เปเบกเปˆเบ™เบซเบกเบปเบ”เป„เบ›!

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”เบเบฑเบšเป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เบ—เบฑเบเบชเบฐเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบ

เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เบเบญเบกเบฎเบฑเบš: เบ„เบงเบฒเบกเบฎเบนเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบเบเปˆเบฝเบงเบเบฑเบšเป€เบ•เบฑเบเป‚เบ™เป‚เบฅเบขเบตเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบ‚เบตเป‰เบฎเป‰เบฒเบ, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเปเบกเปˆเบ™เบเบฒเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ‚เป‰เบญเบเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ—เบธเบเป†เบกเบทเป‰. เปเบ•เปˆเป€เบ„เบทเบญเบ‚เปˆเบฒเบเปเบกเปˆเบ™เบœเบนเป‰เบ•เป‰เบญเบ‡เบชเบปเบ‡เป„เบชเบซเบผเบฑเบ, เปเบฅเบฐเบ‚เป‰เบญเบเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เปเบเป‰เป„เบ‚เบกเบฑเบ™.

เป‚เบŠเบเบ”เบต, เบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบฎเบฑเบเบœเบนเป‰เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰. เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ ping เปเบฅเบฐ tracert เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡เป€เบ„เบทเบญเบ‚เปˆเบฒเบ.

เบ—เปเบฒเบญเบดเบ”, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบง PsPing เป„เบ›เบซเบฒเบžเบญเบ” TCP เบ‚เบญเบ‡ Alvin. เบ‚เป‰เบญเบเปƒเบŠเป‰เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ - เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบžเบดเป€เบชเบ”. เปƒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบžเบฑเบ™ pings, เบšเปเปˆเบกเบตเบญเบฑเบ™เปƒเบ”เป€เบเบตเบ™ 10 ms, เบเบปเบเป€เบงเบฑเป‰เบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบปเบšเบญเบธเปˆเบ™เบ‚เบถเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡ latency เบ‚เบญเบ‡ 50 ms เปƒเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ 99th: เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเบ—เบธเบเป† 100 เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบžเบงเบเป€เบฎเบปเบฒเบ„เบงเบ™เบˆเบฐเป„เบ”เป‰เป€เบซเบฑเบ™เบ›เบฐเบกเบฒเบ™เบซเบ™เบถเปˆเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบกเบต latency 50 ms.

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบก เบ„เบงเบฒเบกเปเบ™เปˆเบ™เบญเบ™: เบญเบฒเบ”เบˆเบฐเบกเบตเบšเบฑเบ™เบซเบฒเบขเบนเปˆเปƒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ nodes เบ•เบฒเบกเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ Alvin เปเบฅเบฐเบฅเบนเบเบ„เป‰เบฒ. เปเบ•เปˆเบœเบนเป‰เบ•เบดเบ”เบ•เบฒเบกเบเบฑเบ‡เบเบฑเบšเบ„เบทเบ™เบกเบฒเบกเบทเป€เบ›เบปเปˆเบฒ.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” gRPC, เบซเบผเบทเป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒ. เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบเบฑเบ‡เบงเบปเบ™เบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบšเปเปˆเบกเบตเบงเบฑเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰.

เบ”เบฝเบงเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™ OS เปƒเบ”

gRPC เบ™เบณเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เปƒเบ™ Linux, เปเบ•เปˆเบชเบณเบฅเบฑเบš Windows เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”. เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ”เบณเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบ—เบตเปˆเป„เบ”เป‰เบœเบปเบ™: เบ‚เป‰เบญเบเป„เบ”เป‰เบชเป‰เบฒเบ‡เป€เบ„เบทเปˆเบญเบ‡ virtual. Linux, เบฅเบงเบšเบฅเบงเบก Alvin เบชเบณเบฅเบฑเบš Linux เปเบฅเบฐ เป„เบ”เป‰เป€เบ›เบตเบ”เบกเบฑเบ™เบญเบญเบ.

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™: เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ›เบดเบ‡เบ›เบญเบ‡ Linux เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเบ„เบทเบเบฑเบšเป‚เบซเบ™เบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™ Windows, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™. เบกเบฑเบ™เบ›เบฒเบเบปเบ”เบงเปˆเบฒเบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” gRPC เบชเบณเบฅเบฑเบš Windows.

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบญเบ‡ Nagle

เบ•เบฐเบซเบผเบญเบ”เป€เบงเบฅเบฒเบ™เบตเป‰เบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเบ‚เป‰เบญเบเบ‚เบฒเบ”เบ—เบธเบ‡เบŠเบฒเบ” gRPC. เบ”เบฝเบงเบ™เบตเป‰เบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡เปเบ—เป‰เป† gRPC เบ—เบธเบ‡เบซเบฒเบเป„เบ› Windowsเบ‚เป‰เบญเบเบžเบปเบšเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” RPC เบžเบฒเบเปƒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบเปเบฑเป‰เบ™เปƒเบˆเบงเปˆเบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบชเบณเบฅเบฑเบšเบ—เบธเบเบ—เบธเบ‡เบ—เบตเปˆเบ•เบฑเป‰เบ‡เป„เบงเป‰. Winsockเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเป„เบ”เป‰เป€เบžเบตเปˆเบกเบ—เบธเบ‡เบ—เบฑเบ‡เปเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบชเปˆ gRPC เปเบฅเบฐ เบ™เบณเปƒเบŠเป‰ Alvin เปƒเบชเปˆ Windows, เปƒเบ™เป€เบŠเบตเบšเป€เบงเบตเบ›เบดเบ‡เบ›เบญเบ‡เบ„เบปเบ‡เบ—เบตเปˆเบžเบฒเบเปƒเบ•เป‰ Windows!

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบซเบผเบฒเบเปเบกเปˆเบ™เบซเบ™เป‰เบญเบ. เป€เบกเบทเปˆเบญเบเบฒเบ™เบซเบผเบธเบ”เบœเปˆเบญเบ™เบเบฒเบ™เป‚เบซเบผเบ”เบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบžเบตเปˆเบกเป€เบงเบฅเบฒ latency

เป€เบเบทเบญเบš เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง: เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเป€เบญเบปเบฒเบ—เบธเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบกเบฒเบญเบญเบเป€เบ—เบทเปˆเบญเบฅเบฐเบญเบฑเบ™ เบˆเบปเบ™เบเบงเปˆเบฒเบเบฒเบ™เบ–เบปเบ”เบ–เบญเบเบเบฑเบšเบ„เบทเบ™เบกเบฒเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบŠเบตเป‰เบšเบญเบเบชเบฒเป€เบซเบ”เป„เบ”เป‰. เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™ infamous TCP_NODELAY, เบชเบฐเบซเบผเบฑเบš algorithm เบ‚เบญเบ‡ Nagle.

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบญเบ‡ Nagle เบžเบฐเบเบฒเบเบฒเบกเบซเบผเบธเบ”เบœเปˆเบญเบ™เบˆเปเบฒเบ™เบงเบ™เปเบžเบฑเบเป€เบเบฑเบ”เบ—เบตเปˆเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™เป€เบ„เบทเบญเบ‚เปˆเบฒเบเป‚เบ”เบเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒเบเบฒเบ™เบชเบปเปˆเบ‡เบ‚เปเป‰เบ„เบงเบฒเบกเบˆเบปเบ™เบเปˆเบงเบฒเบ‚เบฐเบซเบ™เบฒเบ”เปเบžเบฑเบเป€เบเบฑเบ”เป€เบเบตเบ™เบˆเปเบฒเบ™เบงเบ™เป„เบšเบ•เปŒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบ”เบตเบชเปเบฒเบฅเบฑเบšเบœเบนเป‰เปƒเบŠเป‰เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบ, เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบ—เปเบฒเบฅเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบเป‰เบญเบ™เบงเปˆเบฒ OS เบˆเบฐเบŠเบฑเบเบŠเป‰เบฒเบšเบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก, เป€เบŠเบดเปˆเบ‡เบเปเปˆเปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบŠเบฑเบเบŠเป‰เบฒเปƒเบ™ QPS เบ•เปˆเปเบฒ. U gRPC เบ—เบธเบ‡เบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เป„เบงเป‰เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ” Linux เบชเบณเบฅเบฑเบšเบŠเบฑเบญเบเป€เบเบฑเบ” TCP, เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบณเบฅเบฑเบš Windowsเบ‚เป‰เบญเบเบ„เบทเบญเบฑเบ™เบ™เบตเป‰ เปเบเป‰เป„เบ‚.

เบชเบฐเบซเบฅเบธเบš

latency เบชเบนเบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเบ—เบตเปˆ QPS เบ•เปเปˆเบฒเปเบกเปˆเบ™เป€เบเบตเบ”เบกเบฒเบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ OS. เปƒเบ™เบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡, profileing เบšเปเปˆเป„เบ”เป‰เบเบงเบ”เบžเบปเบšเบ„เบงเบฒเบกเบฅเปˆเบฒเบŠเป‰เบฒเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเป€เบฎเบฑเบ”เบขเบนเปˆเปƒเบ™เป‚เบซเบกเบ” kernel เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบขเบนเปˆเปƒเบ™ เบฎเบนเบšเปเบšเบšเบœเบนเป‰เปƒเบŠเป‰. เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒ algorithm เบ‚เบญเบ‡ Nagle เบชเบฒเบกเบฒเบ”เบชเบฑเบ‡เป€เบเบ”เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™ ETW captures, เปเบ•เปˆเบกเบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ.

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡ localhost, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป„เบ”เป‰เปเบ•เบฐเบฅเบฐเบซเบฑเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบเบ•เบปเบงเบˆเบดเบ‡เปเบฅเบฐ algorithm เบ‚เบญเบ‡ Nagle เบšเปเปˆเป„เบ”เป‰เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบšเบฑเบ™เบซเบฒ latency เบซเบฒเบเป„เบ›เป€เบกเบทเปˆเบญเบฅเบนเบเบ„เป‰เบฒเป€เบ‚เบปเป‰เบฒเบซเบฒ Alvin เบœเปˆเบฒเบ™ localhost.

เปƒเบ™เบ„เบฑเป‰เบ‡เบ•เปเปˆเป„เบ›เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบทเป‰เบ™เบ‚เบญเบ‡ latency เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเบซเบผเบธเบ”เบฅเบปเบ‡, algorithm เบ‚เบญเบ‡ Nagle เบ„เบงเบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบŠเบทเปˆเบœเบนเป‰เบ•เป‰เบญเบ‡เบชเบปเบ‡เป„เบชเบ‚เบญเบ‡เบ—เปˆเบฒเบ™!

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster