рдХреВрд░рд┐рдпрд░: рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡рд╛рд╕



рдЕрдиреБрд╡рд╛рджрдХ рдХрд╛ рдиреЛрдЯ


рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рдж рдЕрдЦрдВрдб рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдИ рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдмрдиреЗ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рднрд╛рдЧреЛрдВ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реЛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рднрд╛рдЧ рд╕реНрд╡рдпрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдорд╢реАрдиреЛрдВ рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 2015 рдореЗрдВ рдЬрд╛рд░реА Google рд╕реЗ рдЬреАрдЖрд░рдкреАрд╕реА - рдУрдкрди-рд╕реЛрд░реНрд╕-рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╡рд╣ рддреБрд░рдВрдд рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ:

  • рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ;
  • рдХреНрд▓рд╛рдЗрдВрдЯ рднрд╛рдЧ рдФрд░ рд╕рд░реНрд╡рд░ рднрд╛рдЧ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП 11 рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ;
  • рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛;
  • рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЗрдВрдЯрд░реИрдХреНрд╢рди рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЬреАрдЖрд░рдкреАрд╕реА рдореБрдЭреЗ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдврд╛рдВрдЪрд╛ рд▓рдЧрд╛, рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рджрд┐рд▓рдЪрд╕реНрдкреА рдереАред рд▓реЗрдЦ рдореЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВ, рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп, рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдФрд░ рдЙрддреНрдкрд╛рджрдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг, рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рд╕рдорд╛рдзрд╛рди рд╕реЗ рдирдП рдореЗрдВ рдкреНрд░рд╡рд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред

рддреНрдпрд╛рдЧ
рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ gRPC рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреБрдЫ рдмрд┐рдВрджреБ рдЖрдкрдХреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬреАрдЖрд░рдкреАрд╕реА рдпрд╛ рдЕрдиреНрдп рд╕рдорд╛рди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрд╛рдЪреЗ рдереНрд░рд┐рдлреНрдЯ) рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЦреБрдж рдХреЛ рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░рд╛рдПрдВ (рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рджреЛ рдЫреЛрдЯреЗ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛: "рдЬреАрдЖрд░рдкреАрд╕реА рдХреНрдпрд╛ рд╣реИ?" рдФрд░ "рдЬреАрдЖрд░рдкреАрд╕реА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ" )ред

рдореВрд▓ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХрдард┐рди рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓реЗрдХреНрд╕реА рдЗрд╡рд╛рдиреЛрд╡ рдЙрд░реНрдл SaveTheRbtz рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред

рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рд▓рд╛рдЦреЛрдВ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛-рдЙрдиреНрдореБрдЦ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдХреВрд░рд┐рдпрд░, рдПрдХ рдЬреАрдкреАрд╕реА-рдЖрдзрд╛рд░рд┐рдд рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рдЬреАрдЖрд░рдкреАрд╕реА рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА, рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди рдФрд░ рдкрд┐рдЫрд▓реЗ рдЖрд░рдкреАрд╕реА рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрд╛ред

рдиреЛрдЯ: рдкреЛрд╕реНрдЯ рдореЗрдВ рдкрд╛рдпрдерди рдФрд░ рдЧреЛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рд╣реИрдВред рд╣рдо рдЬрдВрдЧ рдФрд░ рдЬрд╛рд╡рд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЬреАрдЖрд░рдкреАрд╕реА рдХреЛ рд╕рдбрд╝рдХ


рдХреВрд░рд┐рдпрд░ рдкрд╣рд▓рд╛ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдЕрдЦрдВрдб рдкрд╛рдЗрдерди рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВ, рд╣рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЖрдзрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА - рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛ред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдореИрдиреБрдЕрд▓ рдХреНрд░рдорд╛рдВрдХрди рдФрд░ deserialization рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдерд╛ред рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрд╡реЗрдЬрд╝-рдЖрдзрд╛рд░рд┐рдд рд▓реЙрдЧрд┐рдВрдЧ , рдЕрдкрд╛рдЪреЗ рдереНрд░рд┐рдлрд╝реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рд╣рдорд╛рд░рд╛ рдореБрдЦреНрдп рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдПрдХ HTTP / 1.1 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдмрдирд╛рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдЪреБрдирд╛ред рд╣рдо рд╕реНрд╡реИрдЧрд░ (рдЬрд┐рд╕реЗ рдЕрдм рдУрдкрдирдПрдкреАрдЖрдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЛ рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдПрдХ рдирдпрд╛ рдорд╛рдирдХ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдереНрд░рд┐рдлреНрдЯ рдпрд╛ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреАрдЖрд░рдкреАрд╕реА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдореБрдЦреНрдп рддрд░реНрдХ рдкреВрд░реНрд╡-рд╡рд┐рджреНрдпрдорд╛рди рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдереАред рд╕рд╛рде рд╣реА, рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ HTTP / 2 рдФрд░ рдЯреВ-рд╡реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдереЗред

рдиреЛрдЯ: рдЕрдЧрд░ рдЙрд╕ рд╕рдордп fbthrift рдореМрдЬреВрдж рдереА, рддреЛ рд╣рдо рд╢рд╛рдпрдж Thrift рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗред

рдХреНрдпрд╛ рдХреВрд░рд┐рдпрд░ рдЬреАрдЖрд░рдкреАрд╕реА рдореЗрдВ рд▓рд╛рддрд╛ рд╣реИ


рдХреВрд░рд┐рдпрд░ рдПрдХ рдЖрд░рдкреАрд╕реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд╣реАрдВ рд╣реИ; рдпрд╣ рдореМрдЬреВрджрд╛ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдзрди рд╣реИред рдпрд╣ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣рдорд╛рд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рд╕реЗрд╡рд╛ рдЦреЛрдЬ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╕рдВрдЧреНрд░рд╣, рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдХреВрд░рд┐рдпрд░ рдмрдирд╛рдпрд╛ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╣рдо рдПрдХ GRPC рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд░реВрдк рдореЗрдВ Bandaid рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗрд╡рд╛рдПрдВ рд╡рд┐рд▓рдВрдмрддрд╛ рдкрд░ RPC рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реАрдзреЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреА рд╣реИрдВред

рд╣рдореЗрдВ рд░реВрдЯреАрди рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдЬрд░реВрд░реА рдерд╛, рдЬрд┐рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рдХреВрд░рд┐рдпрд░ рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдХреА рд╕рднреА рдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдХреЛ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реБрд░рдХреНрд╖рд╛: рд╕реЗрд╡рд╛ рдкрд╣рдЪрд╛рди рдФрд░ рдЯреАрдПрд▓рдПрд╕ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг


рдХреВрд░рд┐рдпрд░ рд╣рдорд╛рд░реЗ рдорд╛рдирдХ рд╕реЗрд╡рд╛ рдкрд╣рдЪрд╛рди рддрдВрддреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╣рдорд╛рд░реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЯреАрдПрд▓рдПрд╕ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЯреАрдПрд▓рдПрд╕ рдореЗрдВ, рдЬрд╣рд╛рдВ рд╣рдо рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рдордиреЗ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд▓рдЧрд╛рдП рд╣реИрдВред рд╕рднреА рдЖрдВрддрд░рд┐рдХ RPC рдХреЛ PFS рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЯреАрдПрд▓рдПрд╕ рдХрд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕реНрдХрд░рдг 1.2 рдФрд░ рдЕрдзрд┐рдХ рд╣реИред рд╣рдордиреЗ ECDHE-ECDSA-AES128-GCM-SHA256 рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрддреЗ рд╣реБрдП рд╕рдордорд┐рдд рдФрд░ рдЕрд╕рдордорд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рднреА рд╕реАрдорд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдЕрдиреБрд░реЛрдз рдХреА рдкрд╣рдЪрд╛рди рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд░реНрд╡рд░ рдпрд╣ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐рдпрд╛рдВ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рд▓рд┐рд╕реНрдЯ (ACL) рдФрд░ рдЧрддрд┐ рд╕реАрдорд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╡рд┐рддрд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (AFS) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднреА рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╕реЗрд╡рд╛ рдорд╛рд▓рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛, рд╕реЗрдХрдВрдб рдореЗрдВ рд▓реЛрдб рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреВрд░рд┐рдпрд░ рд╕реВрдЪрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред

рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ ACLs, рдЧрддрд┐ рд╕реАрдорд╛, рд╕рд╛рдВрдЦреНрдпрд┐рдХреА, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдпрд╣ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдпрд╣рд╛рдБ рдПрд╕реАрдПрд▓ рд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЧрддрд┐ рд╕реАрдорд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣рдорд╛рд░реЗ рдСрдкреНрдЯрд┐рдХрд▓ рдкреИрдЯрд░реНрди рдорд╛рдиреНрдпрддрд╛ рд╕реЗрд╡рд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

limits:  dropbox_engine_ocr:    # All RPC methods.    default:      max_concurrency: 32      queue_timeout_ms: 1000      rate_acls:        # OCR clients are unlimited.        ocr: -1        # Nobody else gets to talk to us.        authenticated: 0        unauthenticated: 0 



рд╣рдо SVID рдкреНрд░рд╛рд░реВрдк (рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ SPIFFE ) рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрдИ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдврд╛рдВрдЪреЗ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

рдЕрд╡рд▓реЛрдХрди: рдЖрдВрдХрдбрд╝реЗ рдФрд░ рдЯреНрд░реИрдХрд┐рдВрдЧ


рдХреЗрд╡рд▓ рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд▓реЙрдЧ, рдЖрдБрдХрдбрд╝реЗ, рдЯреНрд░реЗрд╕ рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдХреВрд░рд┐рдпрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдЖрдБрдХрдбрд╝реЛрдВ рдХрд╛ рдХрд▓реЗрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рджреЛрдиреЛрдВ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЖрдБрдХрдбрд╝реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, рдЖрдкрдХреЛ рдХреВрд░рд┐рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд▓реЛрдб, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╡рд┐рд▓рдВрдм рд╕рдордп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред



рдХреВрд░рд┐рдпрд░ рдХреЗ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ рдЙрдкрд▓рдмреНрдзрддрд╛ рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛, рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХрддрд╛рд░ рдЖрдХрд╛рд░ рдкрд░ рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд░реЗрдЦрд╛рдВрдХрди рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдПред

рд╣рдорд╛рд░реА рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдлрд╛рдпрджреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕реНрдереИрддрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдФрд░ рдЯреНрд░реЗрд╕ рдЧреНрд░рд╛рдлред рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред



рдкреБрд░рд╛рдиреЗ RPC рд╕рд┐рд╕реНрдЯрдо рдиреЗ API рдкрд░ рдХреЗрд╡рд▓ request_id рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЗрд╕рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓реЙрдЧ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рдХреВрд░рд┐рдпрд░ рдореЗрдВ, рд╣рдордиреЗ OpenTracing рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдПрдкреАрдЖрдИ рдкреЗрд╢ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рд▓рд┐рдЦреАрдВ, рдФрд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╣рдордиреЗ рдХреИрд╕реЗрдВрдбреНрд░рд╛ рдФрд░ рдЬреЗрдЧрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рдорд╛рдзрд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред



рдЕрдиреБрд░реЗрдЦрдг рд╣рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдЖрд░реЗрдЦ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд╕реЗрд╡рд╛ рдХреА рд╕рднреА рд╕рдХрд░реНрдордХ рдирд┐рд░реНрднрд░рддрд╛ рджреЗрдЦрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлрд╝рдВрдХреНрд╢рди рддреИрдирд╛рддреА рдХреЗ рдмрд╛рдж рдЕрд╡рд╛рдВрдЫрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред

рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рд╕рдордп рд╕реАрдорд╛ рдФрд░ рд╡рд┐рдпреЛрдЧ


рдХреВрд░рд┐рдпрд░ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЖрдо рдЧреНрд░рд╛рд╣рдХ рдХрд╛рд░реНрдпреЛрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдордЖрдЙрдЯ) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЗрдВрджреНрд░реАрдп рд╕реНрдерд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рдзреАрд░реЗ-рдзреАрд░реЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЕрдХреНрд╕рд░ рдЙрднрд░рддреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ "рдорд░рдгреЛрдкрд░рд╛рдВрдд" рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред

рд╕рдордп рд╕реАрдорд╛


рдкреНрд░рддреНрдпреЗрдХ рдЬреАрдЖрд░рдкреАрд╕реА рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЧреНрд░рд╛рд╣рдХ рдХреА рд╕рдордп рд╕реАрдорд╛ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реЛрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдХреВрд░рд┐рдпрд░ рд╕реНрдЯрдмреНрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХреА рд╕рдордп рд╕реАрдорд╛ рднреА рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд╣рд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднреАрддрд░, рд╕рдордп рд╕реАрдорд╛ рдПрдХ рдореВрд▓ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЛ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╕реЗ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред WithDeadline рд╡рд┐рдзрд┐ рд╕реЗ рдХреЛрдирдЯреЗрдХреНрд╕реНрдЯ ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЙрдкрдпреБрдХреНрдд рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдкреВрд░реЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрд░рдкреАрд╕реА рд╕реЗ рднреА рдЖрдЧреЗ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░рд╛ ORM MySQL рдПрдХ SQL рдХреНрд╡реЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдПрдХ RPC рд╕рдВрджрд░реНрдн рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реА SQL рдкреНрд░реЙрдХреНрд╕реА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ "рдорд╛рд░" рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдФрд░ рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЙрд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ RPC рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ SQL рдХреНрд╡реЗрд░реА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИред

рд╡рд┐рдпреЛрдЧ


рдкрд┐рдЫрд▓реА RPC рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдПрдХ рдФрд░ рдЖрдо рд╕рдорд╕реНрдпрд╛ рдереА, рдмрд╛рд░-рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдШрд╛рддреАрдп рд╡рд┐рд▓рдВрдм рдФрд░ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

рд╣рдордиреЗ рдХреВрд░рд┐рдпрд░ рдореЗрдВ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдмреБрджреНрдзрд┐рдорд╛рди рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рд╕реЗрд╡рд╛ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд▓ рдХреЗ рдмреАрдЪ LIFO рдмрдлрд░ (рдЕрдВрддрд┐рдо рдмрд╛рд░, рдкрд╣рд▓реЗ рдмрд╛рд╣рд░) рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖред



рдЕрдзрд┐рднрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, LIFO рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХрддрд╛рд░, рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рди рдХреЗрд╡рд▓ рдЖрдХрд╛рд░ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рднреА рд╣реИ (рдЕрдиреБрд░реЛрдз рдХрддрд╛рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдЦрд░реНрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред

рдорд╛рдЗрдирд╕ LIFO - рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЛ рдмрджрд▓рдирд╛ред рдпрджрд┐ рдЖрдк рдореВрд▓ рдЖрджреЗрд╢ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ CoDel рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ ред рд╡рд╣рд╛рдВ рднреА, рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдХреНрд░рдо рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред



рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг: рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реАрдзреЗ рдХреЛрд░рд┐рдпрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИрдВред

рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрдХ рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдпрд╛ рдПрдХ рдпреВрдирд┐рдХреНрд╕ рд╕реЙрдХреЗрдЯ (рдлрд╝рд╛рдЗрд▓ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкрд░ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдЯреАрдПрд▓рдПрд╕ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реА рдирд╣реАрдВ)ред

рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди


рдЗрд╕рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдФрд░ рд╕реАрдкреАрдпреВ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ HTTP рдпрд╛ gRPC рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдо рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рдХреИрдирд░реА рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ - рдХреЛрдб рдХреЗ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рдЦреЛрдЬ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЧреЛрд▓рдВрдЧ-рдЖрдзрд╛рд░рд┐рдд рд╕реЗрд╡рд╛рдПрдВ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ GCPercent рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреА рд╣реИрдВ ред

рдкреБрд╕реНрддрдХрд╛рд▓рдп


RPC рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрдмреНрд░реЗрд░реА-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдпрд╛рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЙрд▓реЙрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЖрдВрддрд░рд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдбрдВрдк рдореЗрдВ рдбрдВрдк рдХрд░ рд╕рдХрддреА рд╣реИ ред рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдордХреНрдЦреА рдкрд░ рд╕реЗрд╡рд╛ рд▓реЙрдЧрд┐рдВрдЧ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рдЖрд░рдкреАрд╕реА


рдмреЗрд╢рдХ, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдФрд░ рдПрдиреНрдХреЛрдбреЗрдб рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрд░рдкреАрд╕реА рд╕реНрддрд░ рдкрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреЗ рдЙрдкрдХрд░рдг рд╢реБрд░реВ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдПрдкреАрдЖрдИ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг Channelz рд╕рдорд╛рдзрд╛рди рд╣реИ ред

рдЖрд╡реЗрджрди рд╕реНрддрд░


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрддрд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА (рд╕реНрд░реЛрдд рдпрд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ, рдПрдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди, рдЖрджрд┐ рдХреЗ рд╣реИрд╢ рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИред рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп рдЕрдЦрдВрдбрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди


рдЖрд╡рд╢реНрдпрдХ рдкреИрдорд╛рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдЬреАрдЖрд░рдкреАрд╕реА рдврд╛рдВрдЪреЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдХреЗ, рд╣рдордиреЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдбрд╝рдЪрдиреЗрдВ рдкрд╛рдИрдВред

рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рдХрд╛ рд╕рдВрд╕рд╛рдзрди рдЙрдкрднреЛрдЧ


рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрдИ рд░рд┐рд╢реНрддреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ, рд╕рдВрдпреБрдХреНрдд рд╕реАрдкреАрдпреВ рд▓реЛрдб рдХрд╛рдлреА рдЧрдВрднреАрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдЬрдм рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реЗрд╡рд╛ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рддреЗ рд╣реБрдП)ред

рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ ECDSA P-256 рдХреЗ рд╕рд╛рде RSA-2048 рдкреНрд░рдореБрдЦ рдЬреЛрдбрд╝реЗ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдпрд╣рд╛рдВ рдЙрдирдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ (рдзреНрдпрд╛рди рджреЗрдВ: рдЖрд░рдПрд╕рдП рдХреЗ рд╕рд╛рде, рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕рддреНрдпрд╛рдкрди рддреЗрдЬ рд╣реИ)ред

рдЖрд░рдПрд╕рдП:

 ~/c0d3/boringssl bazel run -- //:bssl speed -filter 'RSA 2048' Did ... RSA 2048 signing operations in ..............  (1527.9 ops/sec) Did ... RSA 2048 verify (same key) operations in .... (37066.4 ops/sec) Did ... RSA 2048 verify (fresh key) operations in ... (25887.6 ops/sec) 

ECDSA:

 ~/c0d3/boringssl bazel run -- //:bssl speed -filter 'ECDSA P-256' Did ... ECDSA P-256 signing operations in ... (40410.9 ops/sec) Did ... ECDSA P-256 verify operations in .... (17037.5 ops/sec) 

рдЪреВрдВрдХрд┐ RSA-2048 рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрди ECDSA P-256 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рддреАрди рдЧреБрдирд╛ рддреЗрдЬ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдСрдкрд░реЗрд╢рди рдХреА рдЧрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░реВрдЯ рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд▓рд┐рдП RSA рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ: рдЖрдк рд╡рд┐рднрд┐рдиреНрди рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдкреНрд░рд╛рдЗрдореЗрдЯрд░реАрдЬ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛рдПрдВ рдмрдирд╛рдПрдВрдЧреЗ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдореА рд╕реБрд░рдХреНрд╖рд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╕реНрддрд░ рд╕рдмрд╕реЗ рдХрдо рд╣реЛрдЧрд╛ред рдФрд░ рдпрджрд┐ рдЖрдк рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд░реВрдЯ рдФрд░ рдЕрдВрддрд┐рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг RSA-4096 (рдФрд░ рдЙрдЪреНрдЪрддрд░) рдХреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдордиреЗ рдпрд╣ рднреА рдкрд╛рдпрд╛ рдХрд┐ рдЯреАрдПрд▓рдПрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (рдФрд░ рд╕рдВрдХрд▓рди рдЭрдВрдбреЗ) рдЪреБрдирдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рджреЛрдиреЛрдВ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдмрд░реЗрдПрд╕рдПрд╕рдПрд▓ рдПрдХ рд╣реА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХреЗ рд╕рд╛рде рдореИрдХрдУрдПрд╕ рдПрдХреНрд╕ рдореЛрдЬрд╡реЗ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред

рд▓рд┐рдмреНрд░реЗрдПрд╕рдПрд╕рдПрд▓ 2.6.4:

 ~ openssl speed rsa2048 LibreSSL 2.6.4 ...                 sign verify sign/s verify/s rsa 2048 bits 0.032491s 0.001505s     30.8 664.3 

рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ 1.1.1a:

  ~ openssl speed rsa2048 OpenSSL 1.1.1a  20 Nov 2018 ...                 sign verify sign/s verify/s rsa 2048 bits 0.000992s 0.000029s   1208.0 34454.8 

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рддрд░реАрдХрд╛ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ! рд╣рдордиреЗ рдЬреАрдЖрд░рдкреАрд╕реА-рдХреЛрд░ рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА-рдкрд╛рдпрдерди рдореЗрдВ рд╕рддреНрд░ рдмрд╣рд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рддреИрдирд╛рддреА рдХреЗ рджреМрд░рд╛рди рд╕реАрдкреАрдпреВ рдкрд░ рд▓реЛрдб рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рд╕реНрддрд╛ рд╣реИ


рдХрдИ рд▓реЛрдЧ рдЧрд▓рддреА рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдорд╣рдВрдЧрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЖрдзреБрдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд░ рд▓рдЧрднрдЧ рддреБрд░рдВрдд рд╕рдордорд┐рдд рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдорд╛рдирдХ рдкреНрд░реЛрд╕реЗрд╕рд░ 40 Gb / s рдкреНрд░рддрд┐ рдХреЛрд░ рдХреА рдЧрддрд┐ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ:

 ~/c0d3/boringssl bazel run -- //:bssl speed -filter 'AES' Did ... AES-128-GCM (8192 bytes) seal operations in ... 4534.4 MB/s 

рдлрд┐рд░ рднреА, рд╣рдореЗрдВ рдЕрднреА рднреА 50 рдЬреАрдмреА / рдПрд╕ рдХреА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрдЖрд░рдкреАрд╕реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдерд╛ред рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдпрджрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рдЧрддрд┐ рд▓рдЧрднрдЧ рдХреЙрдкреА рд╕реНрдкреАрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореЗрдореНрдЪреА рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдП ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рд╕реНрд╡рдпрдВ рдЬреАрдЖрд░рдкреАрд╕реА рдореЗрдВ рдХреБрдЫ рдмрджрд▓рд╛рд╡ рдХрд┐рдПред

рдкреНрд░рдорд╛рдгрд┐рдд рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдиреЗ рдХрдИ рдЕрдкреНрд░рд┐рдп рд╕рдорд╕реНрдпрд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрд╕реЗрд╕рд░, рдбреАрдПрдордП рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рднреНрд░рд╖реНрдЯрд╛рдЪрд╛рд░) рд╕реЗ рдмрдЪрд╛ рдерд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЬреАрдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЖрдВрддрд░рд┐рдХ рд╕рдВрдкрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреАрдПрд▓рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рдЙрдЪреНрдЪ рд╡рд┐рд▓рдВрдмрддрд╛ рдбреЗрдЯрд╛ рдЪреИрдирд▓ (BDP)


рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ: рдореВрд▓ рдЙрдкрд╢реАрд░реНрд╖рдХ рдореЗрдВ рдмреИрдВрдбрд╡рд┐рдбреНрде-рджреЗрд░реА рдЙрддреНрдкрд╛рдж рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рд░реВрд╕реА рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдЕрдиреБрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред

рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдмреИрдХрдмреЛрди рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдХрдИ рдбреЗрдЯрд╛ рд╕реЗрдВрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред рдХрднреА-рдХрднреА рд╡рд┐рднрд┐рдиреНрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рдиреЛрдбреНрд╕ рдХреЛ рдЖрд░рдкреАрд╕реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд▓рд┐рдПред рдЯреАрд╕реАрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╕рд┐рд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдиреЗрдХреНрд╢рди рдореЗрдВ рд╕рдВрдЪрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ (/ proc / sys / net / ipv4 / tcp_ {r, w} mem ), рд╣рд╛рд▓рд╛рдВрдХрд┐ HTTP / 2 рдкрд░ рдЖрдзрд╛рд░рд┐рдд gRPC рдХрд╛ рдЕрдкрдирд╛ рдЙрдкрдХрд░рдг рд╣реИ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдгред Grpc-go рдореЗрдВ BDP рдХреА рдКрдкрд░реА рд╕реАрдорд╛ рд╕рдЦреНрддреА рд╕реЗ 16 MB рддрдХ рд╕реАрдорд┐рдд рд╣реИ , рдЬреЛ рдПрдХ рдЕрдбрд╝рдЪрди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░ рд╕рдХрддреА рд╣реИред

net.Server рдЧреЛрд▓рдВрдЧ рдпрд╛ grpc.Server


рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╣рдорд╛рд░реЗ Go рдХреЛрдб рдореЗрдВ, рд╣рдордиреЗ HTTP / 1.1 рдФрд░ gRPC рдХреЛ рдПрдХ рдПрдХрд▓ рдиреЗрдЯ рд╕реЗрд╡рд░ рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рдХрд┐рдпрд╛ ред рд╕рдорд╛рдзрд╛рди рдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдордЭ рдмрдирд╛рдИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред HTTP / 1.1 рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА рдХреЛ рдЬреАрдЖрд░рдкреАрд╕реА рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ред рдХрднреА-рдХрднреА рдХреВрд░рд┐рдпрд░ рдмреИрдВрдбрд╡рд┐рдбреНрде рдФрд░ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИред

golang / protobuf рдпрд╛ рдЧреЛрдЧреЛ / protobuf


рдЬреАрдЖрд░рдкреАрд╕реА рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рдФрд░ рдЕрдирдорд░рд╢рд▓рд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд рдмрдврд╝ рд╕рдХрддреА рд╣реИред рдЧреЛ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреВрд░рд┐рдпрд░ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдкреАрдпреВ рд▓реЛрдб рдХреЛ рдЧреЛрдЧреЛ / рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ рдореЗрдВ рдмрджрд▓рдХрд░ рдХрдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЧреЛрдЧреЛ / рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреБрдЫ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдерд╛ , рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдпрдереЛрдЪрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг


рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо рдХреВрд░рд┐рдпрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдВрдЧреЗ, рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрдЯрдмреНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдордиреЗ рдХреВрд░рд┐рдпрд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдерд╛ред

рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдг


рдкрд░реАрдХреНрд╖рдг рд╕реЗрд╡рд╛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдПрдХ рдЕрдВрд╢ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 service Test {   option (rpc_core.service_default_deadline_ms) = 1000;   rpc UnaryUnary(TestRequest) returns (TestResponse) {       option (rpc_core.method_default_deadline_ms) = 5000;   }   rpc UnaryStream(TestRequest) returns (stream TestResponse) {       option (rpc_core.method_no_deadline) = true;   }   ... } 

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдХреВрд░рд┐рдпрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордп рд╕реАрдорд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреВрд░реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 option (rpc_core.service_default_deadline_ms) = 1000; 

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕рдордп рд╕реАрдорд╛ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрдкреВрд░реНрдг рд╕реЗрд╡рд╛ рдХреА рд╕рдордп рд╕реАрдорд╛ рдХреЛ рд░рджреНрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ):

 option (rpc_core.method_default_deadline_ms) = 5000; 

рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрдм рд╕рдордп-рд╕реАрдорд╛ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╕рдордп), рдбреЗрд╡рд▓рдкрд░ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

 option (rpc_core.method_no_deadline) = true; 

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рдеред

рдареВрдВрда рдкреАрдврд╝реА


рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреВрд░рд┐рдпрд░ рдЬреАрдЖрд░рдкреАрд╕реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдЬрд╛рд╡рд╛ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕рдореЗрдВ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рдПрдкреАрдЖрдИ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╢рдХреНрддрд┐ рд╣реИ) рдкрд░ рднрд░реЛрд╕рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯрдмреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕реНрдЯреИрдмреНрд╕ рдХреА рддреБрд▓рдирд╛ рдорд╛рдирдХ рдЧреЛрд▓рд╛рдВрдЧ рд╕реНрдЯрдмреНрд╕ рд╕реЗ рдХрд░реЗрдВред

рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ gRPC рд╕рд░реНрд╡рд░ рд╕реНрдЯрдмреНрд╕ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

 func _Test_UnaryUnary_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {       in := new(TestRequest)       if err := dec(in); err != nil {               return nil, err       }       if interceptor == nil {               return srv.(TestServer).UnaryUnary(ctx, in)       }       info := &grpc.UnaryServerInfo{               Server: srv,               FullMethod: "/test.Test/UnaryUnary",       }       handler := func(ctx context.Context, req interface{}) (interface{}, error) {               return srv.(TestServer).UnaryUnary(ctx, req.(*TestRequest))       }       return interceptor(ctx, in, info, handler) } 

рд╕рднреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдВрджрд░ рд╣реЛрддрд╛ рд╣реИ: рдкреНрд░реЛрдЯреЛрдмреБрдлрд╝ рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдирд╛, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ (рдХреЛрдб рдореЗрдВ interceptor рдЪрд░ рджреЗрдЦреЗрдВ), рдпреВрдиреЗрд░реА рд╣реИрдВрдбрд▓рд░ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ред

рдЕрдм рдХреВрд░рд┐рдпрд░ рд╕реНрдЯрдмреНрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 func _Test_UnaryUnary_dbxHandler(       srv interface{},       ctx context.Context,       dec func(interface{}) error,       interceptor grpc.UnaryServerInterceptor) (       interface{},       error) {       defer processor.PanicHandler()       impl := srv.(*dbxTestServerImpl)       metadata := impl.testUnaryUnaryMetadata       ctx = metadata.SetupContext(ctx)       clientId = client_info.ClientId(ctx)       stats := metadata.StatsMap.GetOrCreatePerClientStats(clientId)       stats.TotalCount.Inc()       req := &processor.UnaryUnaryRequest{               Srv: srv,               Ctx: ctx,               Dec: dec,               Interceptor: interceptor,               RpcStats: stats,               Metadata: metadata,               FullMethodPath: "/test.Test/UnaryUnary",               Req: &test.TestRequest{},               Handler: impl._UnaryUnary_internalHandler,               ClientId: clientId,               EnqueueTime: time.Now(),       }       metadata.WorkPool.Process(req).Wait()       return req.Resp, req.Err } 

рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛рдлрд╝реА рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкреИрдирд┐рдХ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдпрд╣ рд╣рдореЗрдВ рдмрд╛рдж рдХреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдФрд░ рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдп рднрдВрдбрд╛рд░ рдореЗрдВ рд╕рднреА рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:

 defer processor.PanicHandler() 

рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреИрдирд┐рдХ рд╣реИрдВрдбрд▓рд░ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдорд╛рдирдХ рдЧреЛрд▓рдВрдЧ / рдиреЗрдЯ HTTP рд╣реИрдВрдбрд▓рд░ рд╕рдорд╕реНрдпрд╛ рдХреА рдЕрдирджреЗрдЦреА рдХрд░реЗрдЧрд╛ рдФрд░ рдирдП рдЕрдиреБрд░реЛрдзреЛрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд╖рддрд┐рдЧреНрд░рд╕реНрдд рдФрд░ рдЕрд╕рдВрдЧрдд) рдХреА рд╕реЗрд╡рд╛ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ред

рдлрд┐рд░ рд╣рдо рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рд╕рдВрджрд░реНрдн рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

 ctx = metadata.SetupContext(ctx) clientId = client_info.ClientId(ctx) 

рд╣рдо рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдПрдХрддреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдБрдХрдбрд╝реЗ (рдФрд░ рдЕрдзрд┐рдХ рджрдХреНрд╖рддрд╛ рдХреЗ рд▓рд┐рдП рдХреИрд╢) рднреА рдмрдирд╛рддреЗ рд╣реИрдВ:

 stats := metadata.StatsMap.GetOrCreatePerClientStats(clientId) 

рдпрд╣ рд░реЗрдЦрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ (рдпрд╛рдиреА, TLS рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рдХреЗ рд▓рд┐рдП рдЖрдБрдХрдбрд╝реЗ рдмрдирд╛рддреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░реАрдХреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЗ рднреА рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╕реНрдЯрдм рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╕рднреА рддрд░реАрдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреЗрдЯрд┐рдХрд▓реА рдкрд╣рд▓реЗ рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдзреАрдорд╛ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рдЕрдиреБрд░реЛрдз рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдХрд╛рд░реНрдп рдкреВрд▓ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ:

 req := &processor.UnaryUnaryRequest{       Srv:        srv,       Ctx:        ctx,       Dec:        dec,       Interceptor:    interceptor,       RpcStats:       stats,       Metadata:       metadata,       ... } metadata.WorkPool.Process(req).Wait() 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдордиреЗ рдкреНрд░реЛрдЯреЛрдмреЙрдлрд╝ рдХреЛ рдбреАрдХреЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рди рд╣реА рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХреНрдЬрд╝рд┐рдЯ рдкреВрд▓, рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реАрдорд╛ рдХреЛ рдХрд╛рд░реНрдп рдкреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреАрдЖрд░рдкреАрд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯреАрдПрдкреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЬрдмрд░рджрд╕реНрдд рдЧрддрд┐ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреНрдпреВрдирддрдо рд╕рдВрд╕рд╛рдзрди рдЦрдкрдд рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдЧрддрд┐ рд╕реАрдорд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛрдб


рд╣рдорд╛рд░реЗ рд╕реНрдЯрдм рдЬрдирд░реЗрдЯрд░ рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 enum ErrorCode { option (rpc_core.rpc_error) = true; UNKNOWN = 0; NOT_FOUND = 1 [(rpc_core.grpc_code)="NOT_FOUND"]; ALREADY_EXISTS = 2 [(rpc_core.grpc_code)="ALREADY_EXISTS"]; ... STALE_READ = 7 [(rpc_core.grpc_code)="UNAVAILABLE"]; SHUTTING_DOWN = 8 [(rpc_core.grpc_code)="CANCELLED"]; } 

рджреЛрдиреЛрдВ рдЬреАрдЖрд░рдкреАрд╕реА рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╕реЗрд╡рд╛ рдХреЗ рднреАрддрд░ рдкреНрд░рдЪрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИрдВ, рдФрд░ рдПрдкреАрдЖрдИ рд╕реАрдорд╛ рдкрд░, рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ UNKNOWN рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЙрдирдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдкрд╛рдпрдерди рдкрд░рд┐рд╡рд░реНрддрди


рдкрд╛рдпрдерди рд╕реНрдЯрдмреНрд╕ рд╕рднреА рдХреВрд░рд┐рдпрд░ рд╣реИрдВрдбрд▓рд░реНрд╕ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 from dropbox.context import Context from dropbox.proto.test.service_pb2 import (       TestRequest,       TestResponse, ) from typing_extensions import Protocol class TestCourierClient(Protocol):   def UnaryUnary(           self,           ctx, # type: Context           request, # type: TestRequest           ):       # type: (...) -> TestResponse       ... 

рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ ctx рдХреА рдЖрджрдд рд╣реЛ рдЧрдИ, рдЬреИрд╕реЗ рд╡реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рдереЗред

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реНрдЯрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореИрдкреА рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдХрд┐ рдкреНрд░рдореБрдЦ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдСрдлрд╕реЗрдЯ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдЖрдИрдбреАрдИ (рдЬреИрд╕реЗ PyCharm) рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╕рд░рд▓ рд╣реИред

рд╕реНрдереИрддрд┐рдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реГрддреНрддрд┐ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдЦрд╕рд░рд╛ рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 class TestMessage(Message):   field: int   def __init__(self,       field : Optional[int] = ...,       ) -> None: ...   @staticmethod   def FromString(s: bytes) -> TestMessage: ... 

рдпреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрдИ рд╕рд╛рдорд╛рдиреНрдп рдмрдЧреЛрдВ рд╕реЗ рдмрдЪреЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рдХрд╛ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ ред

рдпрд╣ рдХреЛрдб рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рдкреНрд░рд╡рд╛рд╕рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛


рдирдпрд╛ RPC рд╕реНрдЯреИрдХ рдмрдирд╛рдирд╛ рдХреЛрдИ рдЖрд╕рд╛рди рдХрд╛рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕рд┐рдЯреА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдкреВрд░реНрдг рд╕рдВрдХреНрд░рдордг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдЧреЗ рднреА рдЦрдбрд╝реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рд╕реЗ рдХреВрд░рд┐рдпрд░ рддрдХ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЪреВрдВрдХрд┐ рдкреНрд░рд╡рд╛рд╕рди рдЕрдХреНрд╕рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред

рдЪрд░рдг 0: рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдХреЛ рдлреНрд░реАрдЬ рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдХреЛ рдлреНрд░реАрдЬ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЪрд▓рддреА рд▓рдХреНрд╖реНрдп рдкрд░ рд╢реВрдЯ рди рдХрд░реЗрдВред рдЗрд╕рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдХреВрд░рд┐рдпрд░ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЬреИрд╕реА рд╕рднреА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдХреЗрд╡рд▓ рдХреВрд░рд┐рдпрд░ рдкрд░ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдереАрдВред

рдЪрд░рдг 1: рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдФрд░ рдХреВрд░рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕


рд╣рдордиреЗ рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдФрд░ рдХреВрд░рд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╣рдорд╛рд░реА рдХреЛрдб рдкреАрдврд╝реА рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдереА рдХрд┐ рд╕реНрдЯрдмреНрд╕ рдХреЗ рджреЛрдиреЛрдВ рд╕рдВрд╕реНрдХрд░рдг рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ:

 type TestServer interface {  UnaryUnary(     ctx context.Context,     req *test.TestRequest) (     *test.TestResponse,     error)  ... } 

рдЪрд░рдг 2: рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ


рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкреБрд░рд╛рдиреЗ рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреЛ рдПрдХ рдирдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЕрдХреНрд╕рд░, рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдерд╛, рдЬреЛ рд╕реЗрд╡рд╛ рдФрд░ рдЙрд╕рдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдЪрд░рдг рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдХреЛ рдмрджрд▓рдХрд░ рдЬреЛрдЦрд┐рдо рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗред

рдХрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдЧрд▓рддрд┐рдпрд╛рдВ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░ рд╣рдорд╛рд░реА рдЪреЗрддрд╛рд╡рдиреА рдкрд░ рдзреНрдпрд╛рди рджрд┐рдП рдмрд┐рдирд╛, рдПрдХ рд╕рд╛рде рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЪрд░рдг 3: рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЖрд░рдкреАрд╕реА рдХреВрд░рд┐рдпрд░ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░реЗрдВ


рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдордиреЗ рдПрдХ рд╣реА рдорд╢реАрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреЛрд░реНрдЯ рдкрд░ рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб RPC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдмрджрд▓рдХрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 class MyClient(object): def __init__(self): -   self.client = LegacyRPCClient('myservice') +   self.client = CourierRPCClient('myservice') 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде, рдЖрдк рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╢реБрд░реБрдЖрдд SLA рдХреЗ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рд╣реЛрддреА рд╣реИред

рдЪрд░рдг 4: рд╕рдлрд╛рдИ


, , RPC ( ). тАФ .

рдирд┐рд╖реНрдХрд░реНрд╖


, Courier тАФ RPC-, , Dropbox.

, Courier:

  1. тАФ . .
  2. тАФ , .
  3. , . Codegen.
  4. . , , . , : .
  5. RPC- тАФ , . . .


Courier, gRPC , , , .

gRPC Python , C++ Python Rust . ALTS TLS- (, ).

Source: https://habr.com/ru/post/hi438474/


All Articles