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

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


рд╕рдордЧреНрд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдХреНрд░рд┐рдпрд╛


( рд░реВрд╕реА рдореЗрдВ )


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


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


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


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


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

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


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


 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] 

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


рд╕реЗрд╡рд╛ рдирд╛рдо рдХреЛ рд╕реЗрд╡рд╛ рдирд╛рдо, рдкреЛрд░реНрдЯреНрд╕ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдФрд░ рдХреБрдЫ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреЗрд▓ рдореЗрдВ рдЗрди рд╕рднреА рддрддреНрд╡реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рддрд░реАрдХреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 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 рддрд░рд╣ рд╣реА echoService ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрд╕реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдорд╛рдВрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рд╣рдо рдЗрди рджреЛ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред


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

рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╢рд╛рди рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред (рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред) рдлрд┐рд░ рд╕реЗ рджрд┐рдП рдЧрдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рдХрд╛рд░ рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╣рдо рдлрд┐рд░ рд╕реЗ рдХреЗрдХ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд╣рдо cats.Resource рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред cats.Resource рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 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 - Config рдкреНрд░рдХрд╛рд░ рдЬреЛ рдЗрд╕ рд╕реЗрд╡рд╛ рд╕реНрдЯрд╛рд░реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ
  • AddressResolver - рдПрдХ рд░рдирдЯрд╛рдЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрддреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ (рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдкрдврд╝рддреЗ рд░рд╣реЗрдВ)ред

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


  • F[_] - рдкреНрд░рднрд╛рд╡ рдкреНрд░рдХрд╛рд░ (рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ F[A] рдмрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ () => A ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо cats.IO рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред cats.IO )
  • Reader[A,B] - рдХрдореЛрдмреЗрд╢ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди A => B рдкрд░реНрдпрд╛рдп рд╣реИ
  • cats.Resource - рдЕрдзрд┐рдЧреНрд░рд╣рдг рдФрд░ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ
  • Timer - рд╕реЛрдиреЗ / рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  • ContextShift - ContextShift рдЕрдиреБрд░реВрдк
  • 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. рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдмрд╛рд╣рд░ рд╡рд┐рдиреНрдпрд╛рд╕ред

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


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


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


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


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


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


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


рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖


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


рд▓рд╛рдн


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


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

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


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


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

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


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

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


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


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


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


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

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


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

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


All Articles