рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕

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

рдПрдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕

(╨╜╨░ ╤А╤Г╤Б╤Б╨║╨╛╨╝)

рдкрд░рд┐рдЪрдп

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

рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдмреЗрд╢рдХ, рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд░рдирдЯрд╛рдЗрдо рдкрд░ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХреНрд╕рдЯреНрд░рдкрд▓реЗрд╢рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд░рдирдЯрд╛рдЗрдо рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рджреЛрдиреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд░рдЦреЗ рдЬрд╛рдПрдВред

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

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

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд░рдЦрдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред

рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕

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

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХреБрдЫ рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВред рдиреЛрдбреНрд╕ рдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId

рдпрд╛ рдХреЗрд╡рд▓

case class NodeId(hostName: String)

рдпрд╛ рдпрд╣рд╛рдБ рддрдХ

object Singleton
type NodeId = Singleton.type

рдпреЗ рдиреЛрдб рд╡рд┐рднрд┐рдиреНрди рднреВрдорд┐рдХрд╛рдПрдБ рдирд┐рднрд╛рддреЗ рд╣реИрдВ, рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЯреАрд╕реАрдкреА/HTTP рдХрдиреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

рдЬрд╣рд╛рдВ Port рдмрд╕ рдПрдХ рд╣реИ Int рдЕрдиреБрдордд рд╕реАрдорд╛ рдХреЗ рднреАрддрд░:

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

рдкрд░рд┐рд╖реНрдХреГрдд рдкреНрд░рдХрд╛рд░

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

HTTP (REST) тАЛтАЛрдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕реЗрд╡рд╛ рдХреЗ рдкрде рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

рдкреНрд░реЗрдд рдкреНрд░рдХрд╛рд░

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

рд╕рдмрд╕реЗ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ JSON рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде REST API рд╣реИ:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдкреНрд░рдпреЛрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдПрдХ рд╕рд░рд▓ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдЕрдиреБрд░реЛрдз рд╕рдВрджреЗрд╢ рдХреЛ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рд╕рд╛рджреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

  type EchoProtocol[A] = SimpleHttpGetRest[A, A]

  trait EchoConfig[A] extends ServiceConfig {
    def portNumber: PortNumber = 8081
    def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
    def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
  }

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

рд╣рдо рдЗрдХреЛ рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдкреНрд░рдХрд╛рд░ рднреА рд╡реИрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИ echoService. рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╕рдорд╛рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдирд┐рд╢реНрдЪрд┐рдВрдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЗрди рджреЛрдиреЛрдВ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВ рддреЛ рд╡реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреАред

рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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

  type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]

  trait ServiceImpl[F[_]] {
    type Config
    def resource(
      implicit
      resolver: AddressResolver[F],
      timer: Timer[F],
      contextShift: ContextShift[F],
      ec: ExecutionContext,
      applicative: Applicative[F]
    ): ResourceReader[F, Config, Unit]
  }

рдЬрд╣рд╛рдВ

  • Config тАФ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  • AddressResolver - рдПрдХ рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝рддреЗ рд░рд╣реЗрдВ)ред

рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЖрддреЗ рд╣реИрдВ cats:

  • F[_] - рдкреНрд░рднрд╛рд╡ рдкреНрд░рдХрд╛рд░ (рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ F[A] рдмрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ () => A. рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ cats.IO.)
  • Reader[A,B] тАФ рдХрдореЛрдмреЗрд╢ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░реНрдпрд╛рдпрд╡рд╛рдЪреА рд╣реИ A => B
  • cats.Resource - рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ
  • Timer - рд╕реЛрдиреЗ/рд╕рдордп рдорд╛рдкрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  • ContextShift - рдХрд╛ рдПрдирд╛рд▓реЙрдЧ ExecutionContext
  • Applicative - рдкреНрд░рднрд╛рд╡ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЖрд╡рд░рдг (рд▓рдЧрднрдЧ рдПрдХ рд╕рдиреНрдпрд╛рд╕реА) (рд╣рдо рдЕрдВрддрддрдГ рдЗрд╕реЗ рдХрд┐рд╕реА рдФрд░ рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ)

рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдЬреЛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреА:

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(рджреЗрдЦреЗрдВ рд╕реЛрд░реНрд╕ рдХреЛрдб рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП - рдЗрдХреЛ рд╕реЗрд╡рд╛,
рдЗрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдЖрдЬреАрд╡рди рдирд┐рдпрдВрддреНрд░рдХ.)

рдиреЛрдб рдПрдХ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ рдЪрд▓рд╛рддрд╛ рд╣реИ (рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдХреЗрдХ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

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

рдиреЛрдб рдкрддрд╛ рд╕рдВрдХрд▓реНрдк

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

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

рдРрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВред

  1. рдпрджрд┐ рд╣рдо рддреИрдирд╛рддреА рд╕реЗ рдкрд╣рд▓реЗ, рдиреЛрдб рд╣реЛрд╕реНрдЯ рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдХреЗ рджреМрд░рд╛рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕реНрдХрд╛рд▓рд╛ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдмрд┐рд▓реНрдб рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреЛ рд╕рдВрдХрд▓рди рд╕рдордп рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИ)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдореИрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ Map[NodeId, NodeAddress].
  2. рдХрднреА-рдХрднреА рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдХреЗрд╡рд▓ рдмрд╛рдж рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдиреЛрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рдиреЛрдбреНрд╕ рдХреЗ рдкрддреЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЕрднреА рддрдХ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЦреЛрдЬ рд╕реЗрд╡рд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╕рднреА рдиреЛрдбреНрд╕ рд╕реЗ рдкрд╣рд▓реЗ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдЙрд╕ рд╕реЗрд╡рд╛ рдореЗрдВ рдЕрдкрдирд╛ рдкрддрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред
  3. рдЕрдЧрд░ рд╣рдо рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ /etc/hosts, рд╣рдо рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛрд╕реНрдЯ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ my-project-main-node рдФрд░ echo-backend) рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд╕рдордп рдЗрд╕ рдирд╛рдо рдХреЛ рдЖрдИрдкреА рдкрддреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдмрджреНрдз рдХрд░реЗрдВред

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдЗрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдорд╛рд░реЗ рдЦрд┐рд▓реМрдирд╛ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕рднреА рдиреЛрдбреНрд╕ рдХрд╛ рдЖрдИрдкреА рдкрддрд╛ рд╕рдорд╛рди рд╣реЛрдЧрд╛ - 127.0.0.1.

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рджреЛ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рд▓реЗрдЖрдЙрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  1. рдПрдХрд▓ рдиреЛрдб рд▓реЗрдЖрдЙрдЯ, рдЬрд╣рд╛рдВ рд╕рднреА рд╕реЗрд╡рд╛рдПрдБ рдПрдХрд▓ рдиреЛрдб рдкрд░ рд░рдЦреА рдЬрд╛рддреА рд╣реИрдВред
  2. рджреЛ рдиреЛрдб рд▓реЗрдЖрдЙрдЯ, рдЬрд╣рд╛рдВ рд╕реЗрд╡рд╛ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдиреЛрдбреНрд╕ рдкрд░ рд╣реИрдВред

рдП рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХрд▓ рдиреЛрдб рд▓реЗрдЖрдЙрдЯ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдПрдХрд▓ рдиреЛрдб рд╡рд┐рдиреНрдпрд╛рд╕

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

рдпрд╣рд╛рдВ рд╣рдо рдПрдХ рдПрдХрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреЛрдиреЛрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╣рдо рдПрдХ рдЬреАрд╡рдирдЪрдХреНрд░ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛ lifetime рдЕрдВрддрд░рд╛рд▓ рдЧреБрдЬрд░рддрд╛ рд╣реИ.

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

рджреЛ рдиреЛрдбреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

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

рджреЛ рдиреЛрдбреНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

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

рд╕рдордЧреНрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред

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

рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЙрд╕реА рдЧреБрдгрд╡рддреНрддрд╛ рдЖрд╢реНрд╡рд╛рд╕рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдЯрд┐рдХрдЯ -> рдкреАрдЖрд░ -> рд╕рдореАрдХреНрд╖рд╛ -> рд╡рд┐рд▓рдп -> рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг -> рдирд┐рд░рдВрддрд░ рддреИрдирд╛рддреА

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:

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

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

рд╡рд┐рд╡рд┐рдзрддрд╛рдпреЗрдВ

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд╣рд▓реБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗ:

  1. рд▓рдХреНрд╖реНрдп рдорд╢реАрди рдкрд░ рдкрд╛рда рдлрд╝рд╛рдЗрд▓.
  2. рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреБрдВрдЬреА-рдореВрд▓реНрдп рднрдВрдбрд╛рд░рдг (рдЬреИрд╕реЗ etcd/zookeeper).
  3. рдЙрдкрдкреНрд░рдХреНрд░рд┐рдпрд╛ рдШрдЯрдХ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдП рдмрд┐рдирд╛ рдкреБрди: рдХреЙрдиреНрдлрд╝рд┐рдЧрд░/рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  4. рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд╣рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред

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

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

рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрдВрджреНрд░реАрдХреГрдд рдХреБрдВрдЬреА-рдореВрд▓реНрдп рднрдВрдбрд╛рд░рдг рдПрдХ рдЕрдЪреНрдЫрд╛ рддрдВрддреНрд░ рд╣реИред рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рди рдХрд┐рд╕реЗ рдорд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ C => A => B рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдмрджрд▓рддреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ C "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди", рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рдмрд╛рд░-рдмрд╛рд░ рдмрджрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ A - рдмрд╕ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ред рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбреЗрдЯрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП A. рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрд╡реГрддреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдбреЗрдЯрд╛ рдЖрдо рддреМрд░ рдкрд░ рдПрдХ рд╕реНрд░реЛрдд (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рд╕реЗ рдЖрддрд╛ рд╣реИ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдПрдХ рдЕрд▓рдЧ рд╕реНрд░реЛрдд (рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ) рд╕реЗ рдЖрддрд╛ рд╣реИред рдЖрд░рдВрднреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЬрдЯрд┐рд▓рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИред рдРрд╕реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдирдХреЗ рд╡рд┐рддрд░рдг рддрдВрддреНрд░, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЧрд▓рдд рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдЙрди рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░реЗрдВ рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

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

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

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

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

рдлрд╛рдпрджреЗ рдиреБрдХрд╕рд╛рди

рдпрд╣рд╛рдВ рд╣рдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХреБрдЫ рдлрд╛рдпрджреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢ рдбрд╛рд▓рдирд╛ рдФрд░ рдХреБрдЫ рдиреБрдХрд╕рд╛рдиреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рдлрд╛рдпрджреЗ

рд╕рдВрдкреВрд░реНрдг рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдХрд▓рди рдпреЛрдЧреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:

  1. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╕реНрдереИрддрд┐рдХ рдЬрд╛рдБрдЪред рдЗрд╕рд╕реЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдорд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╣реА рд╣реИред
  2. рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рд╕рдореГрджреНрдз рднрд╛рд╖рд╛. рдЖрдорддреМрд░ рдкрд░ рдЕрдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рддрдХ рд╣реА рд╕реАрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВред
    рд╕реНрдХрд╛рд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдИ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рд╡рд┐рд╕реНрддреГрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рджрд╛рдпрд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ valрдмрд╛рд╣рд░реА рджрд╛рдпрд░реЗ (DRY) рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдмреНрджрд┐рдХ рдЕрдиреБрдХреНрд░рдореЛрдВ, рдпрд╛ рдХреБрдЫ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ (Seq, Map, рдЖрджрд┐).
  3. рдбреАрдПрд╕рдПрд▓. рд╕реНрдХрд╛рд▓рд╛ рдХреЛ рдбреАрдПрд╕рдПрд▓ рд▓реЗрдЦрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рд╣реИред рдХреЛрдИ рдЗрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднрд╛рд╖рд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдЕрдВрддрд┐рдо-рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛ, рддрд╛рдХрд┐ рдЕрдВрддрд┐рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрдо рд╕реЗ рдХрдо рдбреЛрдореЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рд╣реЛред
  4. рдиреЛрдбреНрд╕ рдореЗрдВ рдЕрдЦрдВрдбрддрд╛ рдФрд░ рд╕реБрд╕рдВрдЧрддрддрд╛ред рд╕рдВрдкреВрд░реНрдг рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рдмрд╛рд░ рд╕рдЦреНрддреА рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЯрд╛рдЗрдк рд╕реБрд░рдХреНрд╖рд┐рдд рдкреЛрд░реНрдЯ рдШреЛрд╖рдгрд╛рдПрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИрдВ рдХрд┐ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдиреЛрдбреНрд╕ рдПрдХ рд╣реА рднрд╛рд╖рд╛ рдмреЛрд▓реЗрдВрдЧреЗред рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрднрд░рддрд╛рдПрдБ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рд╕рд╕реЗ рдХреБрдЫ рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рднреВрд▓рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  5. рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛. рд╕рд╛рдорд╛рдиреНрдп рдкреАрдЖрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордЧреНрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рдЙрдЪреНрдЪ рдорд╛рдирдХ рднреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
  6. рдПрдХ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрдиред рдЬрдм рднреА рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдиреЛрдбреНрд╕ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред
  7. рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░рд▓реАрдХрд░рдг. рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдордЧреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ. (рдХреБрдЫ рдЬрдЯрд┐рд▓рддрд╛ рд╡реГрджреНрдзрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рд╣реА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдкреНрд░рддрд┐ рдПрдХ рд╕рдЪреЗрдд рд╡реНрдпрд╛рдкрд╛рд░-рдмрдВрдж рд╣реИред) рд╕рд╛рдорд╛рдиреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдмрд╕ рд▓рд╛рдкрддрд╛ рдЯреБрдХрдбрд╝реЗ рдЬреЛрдбрд╝реЗрдВред рд╕рдВрдХрд▓рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрд╛рдж рдХреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
  8. рд╕рдВрд╕реНрдХрд░рдгрд┐рдд рд╡рд┐рдиреНрдпрд╛рд╕. рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рд╕рдорд╛рди рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдпрд╣ рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рднреА рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рд╕реНрдерд┐рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рдХреА рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд╢реАрд▓рддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓реА рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
  9. рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ред рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдврд╛рдВрдЪрд╛ рдореЙрдбреНрдпреВрд▓рд░ рд╣реИ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
    рд╡рд┐рднрд┐рдиреНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рд╕реЗрдЯрдЕрдк/рд▓реЗрдЖрдЙрдЯ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдПрдХрд▓ рдиреЛрдб рд▓реЗрдЖрдЙрдЯ рдФрд░ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдорд▓реНрдЯреА рдиреЛрдб рд╕реЗрдЯрд┐рдВрдЧ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИред рдПрдХрд╛рдзрд┐рдХ рдЙрддреНрдкрд╛рджрди рд▓реЗрдЖрдЙрдЯ рд░рдЦрдирд╛ рдЙрдЪрд┐рдд рд╣реИред
  10. рдкрд░рд┐рдХреНрд╖рдгред рдкрд░реАрдХреНрд╖рдг рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдПрдХ рдирдХрд▓реА рд╕реЗрд╡рд╛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореЙрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЕрд▓рдЧ рдкрд░реАрдХреНрд╖рдг рд▓реЗрдЖрдЙрдЯ рдХреЛ рдПрдХ рд╕рд╛рде рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  11. рдПрдХреАрдХрд░рдг рдЬрд╛рдВрдЪред рдХрднреА-рдХрднреА рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдирд╛ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред рд╕рдВрдкреВрд░реНрдг рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рд╕рднреА рд╡рд┐рддрд░рд┐рдд рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдгреАрдп рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ
    рдЬрдм рдХреЛрдИ рд╕реЗрд╡рд╛ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рддреА рд╣реИ.

рдиреБрдХрд╕рд╛рди

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

  1. рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕. рдпрд╣ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ. рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рднреА рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рддреБрд░рдВрдд рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдХрдард┐рди рдмрдирд╛ рджреЗрддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрдХрд▓рди рдФрд░ рдкреБрдирдГ рддреИрдирд╛рддреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣реА рд╡рд┐рд╢реЗрд╖рддрд╛ рднреА рд╣реИ рдФрд░ рдмреЛрдЭ рднреА.
  2. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреАрдврд╝реА. рдЬрдм рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреБрдЫ рд╕реНрд╡рдЪрд╛рд▓рди рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдмрд╛рдж рдХреЗ рд╕рдВрдХрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдЗрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдЪрд░рдг рдХреЛ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рдпрд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
  3. рдЙрдкрдХрд░рдг. рдЖрдЬ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрдХрд░рдг рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИрдВ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ-рдЖрдзрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ
    рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрдЧрд╛.
  4. рдорд╛рдирд╕рд┐рдХрддрд╛ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЬрд░реВрд░рдд рд╣реИ. рдбреЗрд╡рд▓рдкрд░реНрд╕ рдФрд░ DevOps рдЯреЗрдХреНрд╕реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЙрдиреНрд╣реЗрдВ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
  5. рд╕рдВрдХрд▓рди рдпреЛрдЧреНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреА рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ:

  1. рдпрджрд┐ рд╣рдо рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рдиреЛрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреНрд╡рд╛рд░рд╛ рдорд╛рдВрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣рдореЗрдВ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ HList рдпрд╛ рд▓рдХреНрд╖рдг рдФрд░ рдХреЗрдХ рдкреИрдЯрд░реНрди рдХреЗ рдмрдЬрд╛рдп рдиреЛрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдбреАрдЯреА (рдХреЗрд╕ рдХреНрд▓рд╛рд╕)ред
  2. рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреБрдЫ рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛: (package, import, object рдШреЛрд╖рдгрд╛рдПрдБ;
    override defрдЙрди рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реИрдВ)ред рдЗрд╕реЗ рдбреАрдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  3. рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рд╕рдорд╛рди рдиреЛрдбреНрд╕ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рдЧрддрд┐рд╢реАрд▓ рдкреБрдирд░реНрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

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

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

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

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рдзрдиреНрдпрд╡рд╛рдж

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

рд╕реНрд░реЛрдд: www.habr.com