рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

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

рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

(рдЕрдВрдЧреНрд░реЗрдЬрд╝реА)

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

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

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

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

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

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдПрдХ рд╕рдВрдХрд▓рд┐рдд рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред

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

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

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

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]]

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

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

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

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

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

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

рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рд╕реЗ рдПрдХ JSON рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕рд╛рде REST API рд╣реИ:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

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

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

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

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

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

рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреЛрд░реНрдЯ рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ EndPointрдЕрдиреНрдп рдиреЛрдбреНрд╕ рдХреЗ:

  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)
  }

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

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

  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 - рдПрдХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рдЬреЛ рдЖрдкрдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкреНрд░рднрд╛рд╡реЛрдВ (рд▓рдЧрднрдЧ рдПрдХ рд╕рдиреНрдпрд╛рд╕реА) рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ Monad/ConcurrentEffect.

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

  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
}

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

рд╣реЛрд╕реНрдЯ рдирд╛рдо рд╕рдВрдХрд▓реНрдк

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

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 рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ. (Ctrl-C рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред)

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

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

  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реР, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдиреЛрдб рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕реЗрдореАред рд▓реЙрдиреНрдЪрд░ рдРрдк.

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

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

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

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

рдмрдЧ рдЯреНрд░реИрдХрд░ рдореЗрдВ рдЯрд┐рдХрдЯ -> рдкреАрдЖрд░ -> рд╕рдореАрдХреНрд╖рд╛ -> рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп ->
рдПрдХреАрдХрд░рдг -> рдкрд░рд┐рдирд┐рдпреЛрдЬрди

рд╕рдВрдХрд▓рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдореБрдЦреНрдп рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:

  1. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╕рднреА рдиреЛрдбреНрд╕ рдХреЛ рдПрдХ рд╣реА рд╕реНрд░реЛрдд рд╕реЗ рд╕рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

  2. рдХреЗрд╡рд▓ рдПрдХ рдиреЛрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, "рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрд╣рд╛рд╡" рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

  3. рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЫреЛрдЯреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ.

  4. рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рд╕рдордЧреНрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрдВрдЧреЗ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рдЕрдзреАрди рд╣реЛрдВрдЧреЗред

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

рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдБ

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

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

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

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

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

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

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

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

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

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

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

рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдФрд░ рд╡рд┐рдкрдХреНрд╖реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд▓рд╛рдн

рд╕рдВрдХрд▓рд┐рдд рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИ:

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

рд╣рд╛рдирд┐рдпрд╛рдБ рдПрд╡рдВ рд╕реАрдорд╛рдПрдБ

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

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

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

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

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

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

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

рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

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

рд╕реНрд╡реАрдХреГрддрд┐рдпрд╛рдБ

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ