
рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдЙрдЪреНрдЪ-рд▓реЛрдб рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм PHP рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕реНрдерд┐рддрд┐ рдЗрддрдиреА рд╡рд┐рдХрдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рдХрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдиреЛрдЯ рдореЗрдВ рд╣рдо рдореЗрдордХреИрд╢реНрдб рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╕рддреНрд░ рднрдВрдбрд╛рд░рдг рдФрд░ рдбреЗрдЯрд╛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдЪрд┐рдд рджрд░реНрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдордиреЗ рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ "рд╡рд╛рд░реНрдб" рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред
рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдирд╛рдпрдХ рд╕рд┐рдореНрдлрдиреА 2.3 рдлреНрд░реЗрдорд╡рд░реНрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ PHP рдПрдкреНрд▓реАрдХреЗрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рд╡реНрдпрд╡рд╕рд╛рдп рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рд╕рддреНрд░реЛрдВ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рднрдВрдбрд╛рд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдЗрд╕рдХрд╛ рдкреВрд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ "рд╕рдм рдХреБрдЫ рдХреИрд╢ рдХрд░реЗрдВ" рдиреАрддрд┐ рдореЗрдордХреИрдЪреНрдб рдореЗрдВ: рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдБ, рд╡рд┐рднрд┐рдиреНрди рдЭрдВрдбреЗ, рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рд▓реЗ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдореЗрдордХреИрдЪреНрдб рд╡рд┐рдлрд▓рддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдШрд╛рддрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреИрд╢ рдХреЗ рдиреБрдХрд╕рд╛рди рд╕реЗ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддреЗ рд╣реИрдВ: DBMS рд╕реАрдо рдкрд░ рджрд░рд╛рд░ рдкрдбрд╝рдиреЗ рд▓рдЧрддрд╛ рд╣реИ, API рд╕реЗрд╡рд╛рдПрдБ - рдкреНрд░рддрд┐рдмрдВрдз рдЕрдиреБрд░реЛрдз, рдЖрджрд┐ред рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рдорд┐рдирдЯ рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рджреМрд░рд╛рди рд╕реЗрд╡рд╛ рдмрд╣реБрдд рдзреАрдореА рд╣реЛ рдЬрд╛рдПрдЧреА рдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реЛ рдЬрд╛рдПрдЧреАред
рд╣рдореЗрдВ рдпрд╣ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдХрдо рдкреНрд░рдпрд╛рд╕ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдпрд╛рдиреА рд╕реЛрд░реНрд╕ рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд░рдХреНрд╖рдгред рдХреИрд╢ рдХреЛ рди рдХреЗрд╡рд▓ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдкреНрд░рддрд┐ рдкреНрд░рддрд┐рд░реЛрдзреА рдмрдирд╛рдПрдВ, рдмрд▓реНрдХрд┐ рдЗрд╕рд╕реЗ рдбреЗрдЯрд╛ рд╣рд╛рдирд┐ рдХреЛ рднреА рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
рдореЗрдордХреИрдЪреНрдб рдореЗрдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, PHP рдХреЗ рд▓рд┐рдП рдореЗрдордХреИрдЪреНрдб рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдбреЗрдЯрд╛ рдФрд░ рд╕рддреНрд░реЛрдВ рдХреЗ рд╡рд┐рддрд░рд┐рдд рднрдВрдбрд╛рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕реБрд╕рдВрдЧрдд рдХреБрдВрдЬреА рд╣реИрд╢рд┐рдВрдЧ рдХрд╛ рддрдВрддреНрд░ рдбреЗрдЯрд╛ рдХреЛ рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рдореВрд╣ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреБрдВрдЬреА рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝реЗрд▓рдУрд╡рд░ рдЙрдкрдХрд░рдг рдХреИрд╢рд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреА рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ).
рд╕рддреНрд░ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рдЪреАрдЬрд╝реЗрдВ рдереЛрдбрд╝реА рдмреЗрд╣рддрд░ рд╣реИрдВ: рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ memcached.sess_number_of_replicas, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдбреЗрдЯрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдПрдХ рдореЗрдордХреИрдЪреНрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдбреЗрдЯрд╛ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рд╕рд░реНрд╡рд░ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЗ рдСрдирд▓рд╛рдЗрди рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИ), рддреЛ рдХреБрдЫ рдХреБрдВрдЬрд┐рдпрд╛рдБ рдЙрд╕рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХреА рдЬрд╛рдПрдБрдЧреАред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рд╕рддреНрд░ рдбреЗрдЯрд╛ рдХреА рд╣рд╛рдирд┐, рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдХ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рддрд┐рдХреГрддрд┐ рдкрд░ рдЬрд╛рдиреЗ рдХреА рдХреЛрдИ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрдкрдХрд░рдг рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рд▓рдХреНрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ: рд╡реЗ рдЖрдкрдХреЛ рдХреИрд╢ рдХреЛ рд╡рд┐рд╢рд╛рд▓ рдЖрдХрд╛рд░ рдореЗрдВ рдмрдврд╝рд╛рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕реНрдерд┐рдд рдХреЛрдб рд╕реЗ рдЙрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдХрдИ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдПрдХ рдпрд╛ рджреЛ рдиреЛрдбреНрд╕ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдЬреЛ рдПрдХрдорд╛рддреНрд░ рдЙрдкрдпреЛрдЧреА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдХреИрд╢ рдХреЗ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП рдореЗрдордХреИрдЪ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдереЗ... рдпрд╣рд╛рдБ рд╣рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдкреНрд░рд╛рдЪреАрдирддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред рдЖрдЗрдП рд╕рддреНрд░ рдбреЗрдЯрд╛ рдХреЗ рдиреБрдХрд╕рд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рди рднреВрд▓реЗрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рдореВрд╣рд┐рдХ рд▓реЙрдЧ рдЖрдЙрдЯ рд╕реЗ рдЧреНрд░рд╛рд╣рдХ рдХреА рдЖрдБрдЦреЗрдВ рдЭрдкрдХ рдЧрдИрдВред
рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдореЗрдордХреИрдЪреНрдб рд▓реЗрдЦрди рдкреНрд░рддрд┐рдХреГрддрд┐ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХрд┐рд╕реА рдЪреВрдХ рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВред рд╣рдореЗрдВ рдЗрд╕ рд░рдгрдиреАрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА .
рдореИрдХреНрд░рд╛рдЙрдЯрд░
рдпрд╣ рдлреЗрд╕рдмреБрдХ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рдореЗрдордХреИрдЪреНрдб рд░рд╛рдЙрдЯрд░ рд╣реИред рдпрд╣ рдореЗрдордХреИрдЪреНрдб рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдореЗрдордХреИрдЪреНрдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВ рдкрд╛рдЧрд▓ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдПред mcrouter рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд╡рд╣ рд╡рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- рд░рд┐рдХреЙрд░реНрдб рдХреА рдкреНрд░рддрд┐рдХреГрддрд┐;
- рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдореВрд╣ рдХреЗ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдирд╛ред
рдЪрд▓реЛ рдХрд╛рдо рдкрд░ рд▓рдЧреЗрдВ!
mcrouter рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рдореИрдВ рд╕реАрдзреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░ рдЬрд╛рдКрдБрдЧрд╛:
{
"pools": {
"pool00": {
"servers": [
"mc-0.mc:11211",
"mc-1.mc:11211",
"mc-2.mc:11211"
},
"pool01": {
"servers": [
"mc-1.mc:11211",
"mc-2.mc:11211",
"mc-0.mc:11211"
},
"pool02": {
"servers": [
"mc-2.mc:11211",
"mc-0.mc:11211",
"mc-1.mc:11211"
},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": [
"MissFailoverRoute|Pool|pool02",
"MissFailoverRoute|Pool|pool00",
"MissFailoverRoute|Pool|pool01"
]
}
}
}
}рддреАрди рдкреВрд▓ рдХреНрдпреЛрдВ? рд╕рд░реНрд╡рд░ рджреЛрд╣рд░рд╛рдП рдХреНрдпреЛрдВ рдЬрд╛рддреЗ рд╣реИрдВ? рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ, mcrouter рдЕрдиреБрд░реЛрдз рдХрдорд╛рдВрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрд╕ рдкрде рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдЙрд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ
OperationSelectorRoute. - GET рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ
RandomRoute, рдЬреЛ рд╕рд░рдгреА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдмреАрдЪ рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдкреВрд▓ рдпрд╛ рд░реВрдЯ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИchildrenрдЗрд╕ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдмрджрд▓реЗ рдореЗрдВ рдПрдХ рд╣реИрдВрдбрд▓рд░ рд╣реИMissFailoverRoute, рдЬреЛ рдкреВрд▓ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЙрд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдП, рдЬрд┐рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред - рдпрджрд┐ рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
MissFailoverRouteрддреАрди рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдкреВрд▓ рдХреЗ рд╕рд╛рде, рд╕рднреА рдЕрдиреБрд░реЛрдз рдкрд╣рд▓реЗ рдореЗрдордХреИрд╢реНрдб рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдЖрдПрдВрдЧреЗ, рдФрд░ рдмрд╛рдХреА рдХреЛ рдбреЗрдЯрд╛ рди рд╣реЛрдиреЗ рдкрд░ рдЕрд╡рд╢рд┐рд╖реНрдЯ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕реВрдЪреА рдореЗрдВ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рд▓реЛрдб, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рдкрддреЗ рдХреЗ рд╕рд╛рде рддреАрди рдкреВрд▓ рддреИрдпрд╛рд░ рдХрд┐рдП рдЬрд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рдПред - рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрд░реЛрдз (рдФрд░ рдпрд╣ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
AllMajorityRouteрдпрд╣ рд╣реИрдВрдбрд▓рд░ рдкреВрд▓ рдореЗрдВ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдо рд╕реЗ рдХрдо N/2 + 1 рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИредAllSyncRouteрд▓реЗрдЦрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд╕рдм рд╕рдореВрд╣ рд╕рд░реНрд╡рд░ - рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛SERVER_ERROR. рд╣рд╛рд▓рд╛рдБрдХрд┐ mcrouter рдбреЗрдЯрд╛ рдХреЛ рдЙрдкрд▓рдмреНрдз рдХреИрд╢ рдореЗрдВ рдбрд╛рд▓ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЙрд▓рд┐рдВрдЧ PHP рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддреНрд░реБрдЯрд┐ рд▓реМрдЯрд╛рдПрдЧрд╛ рдФрд░ рдиреЛрдЯрд┐рд╕ рддреИрдпрд╛рд░ рдХрд░реЗрдВ.AllMajorityRouteрдпрд╣ рдЗрддрдирд╛ рд╕рдЦреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдЖрдзреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпреЛрдЬрдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреИрд╢ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП, рдореЗрдордХреИрд╢реНрдб рдХреЗ рд▓рд┐рдП N рдЕрдиреБрд░реЛрдз рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ - рдЬреЛ рдХрд┐ рд╣рд░ рдкреВрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ред рдЖрдк рдкреВрд▓ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ рддрдХ: рднрдВрдбрд╛рд░рдг рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ b рдорд┐рд▓рддрд╛ рд╣реИ╨╛рдЕрдзрд┐рдХ рдЧрддрд┐ рдФрд░ рдЧреБрдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдХрдо рд▓реЛрдбред
NB: mcrouter рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ╨╕ (рдмрдВрдж рд╡рд╛рд▓реЗ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ), рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЗ рдПрдХ рдкреВрд░реЗ рдЦрдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдХрд░рд╛рдЙрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╕рдВрдЪрд╛рд▓рди
рд╣рдорд╛рд░рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рдФрд░ рд╕реНрд╡рдпрдВ рдореЗрдордХреИрдЪреНрдб) рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ - рддрджрдиреБрд╕рд╛рд░, mcrouter рднреА рд╡рд╣реАрдВ рд╕реНрдерд┐рдд рд╣реИред рдХрдВрдЯреЗрдирд░ рдЕрд╕реЗрдВрдмрд▓реА рд╣рдо рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ , рдЬрд┐рд╕рдХрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
NB: рд▓реЗрдЦ рдореЗрдВ рджреА рдЧрдИ рд╕реВрдЪреА рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреА рдЧрдИ рд╣реИ .
configVersion: 1
project: mcrouter
deploy:
namespace: '[[ env ]]'
helmRelease: '[[ project ]]-[[ env ]]'
---
image: mcrouter
from: ubuntu:16.04
mount:
- from: tmp_dir
to: /var/lib/apt/lists
- from: build_dir
to: /var/cache/apt
ansible:
beforeInstall:
- name: Install prerequisites
apt:
name: [ 'apt-transport-https', 'tzdata', 'locales' ]
update_cache: yes
- name: Add mcrouter APT key
apt_key:
url: https://facebook.github.io/mcrouter/debrepo/xenial/PUBLIC.KEY
- name: Add mcrouter Repo
apt_repository:
repo: deb https://facebook.github.io/mcrouter/debrepo/xenial xenial contrib
filename: mcrouter
update_cache: yes
- name: Set timezone
timezone:
name: "Europe/Moscow"
- name: Ensure a locale exists
locale_gen:
name: en_US.UTF-8
state: present
install:
- name: Install mcrouter
apt:
name: [ 'mcrouter' ]()
тАжрдФрд░ рд╣рдо рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬрдирд░реЗрдЯрд░ рд╣реИ (рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЕрдзрд┐рдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕реБрдВрджрд░ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ):
{{- $count := (pluck .Values.global.env .Values.memcached.replicas | first | default .Values.memcached.replicas._default | int) -}}
{{- $pools := dict -}}
{{- $servers := list -}}
{{- /* ╨Ч╨░╨┐╨╛╨╗╨╜╤П╨╡╨╝ ╨╝╨░╤Б╤Б╨╕╨▓ ╨┤╨▓╤Г╨╝╤П ╨║╨╛╨┐╨╕╤П╨╝╨╕ ╤Б╨╡╤А╨▓╨╡╤А╨╛╨▓: "0 1 2 0 1 2" */ -}}
{{- range until 2 -}}
{{- range $i, $_ := until $count -}}
{{- $servers = append $servers (printf "mc-%d.mc:11211" $i) -}}
{{- end -}}
{{- end -}}
{{- /* ╨б╨╝╨╡╤Й╨░╤П╤Б╤М ╨┐╨╛ ╨╝╨░╤Б╤Б╨╕╨▓╤Г, ╨┐╨╛╨╗╤Г╤З╨░╨╡╨╝ N ╤Б╤А╨╡╨╖╨╛╨▓: "[0 1 2] [1 2 0] [2 0 1]" */ -}}
{{- range $i, $_ := until $count -}}
{{- $pool := dict "servers" (slice $servers $i (add $i $count)) -}}
{{- $_ := set $pools (printf "MissFailoverRoute|Pool|pool%02d" $i) $pool -}}
{{- end -}}
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mcrouter
data:
config.json: |
{
"pools": {{- $pools | toJson | replace "MissFailoverRoute|Pool|" "" -}},
"route": {
"type": "OperationSelectorRoute",
"default_policy": "AllMajorityRoute|Pool|pool00",
"operation_policies": {
"get": {
"type": "RandomRoute",
"children": {{- keys $pools | toJson }}
}
}
}
}()
рд╣рдо рдЗрд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ:
# php -a
Interactive mode enabled
php > # ╨Я╤А╨╛╨▓╨╡╤А╤П╨╡╨╝ ╨╖╨░╨┐╨╕╤Б╤М ╨╕ ╤З╤В╨╡╨╜╨╕╨╡
php > $m = new Memcached();
php > $m->addServer('mcrouter', 11211);
php > var_dump($m->set('test', 'value'));
bool(true)
php > var_dump($m->get('test'));
string(5) "value"
php > # ╨а╨░╨▒╨╛╤В╨░╨╡╤В! ╨в╨╡╤Б╤В╨╕╤А╤Г╨╡╨╝ ╤А╨░╨▒╨╛╤В╤Г ╤Б╨╡╤Б╤Б╨╕╨╣:
php > ini_set('session.save_handler', 'memcached');
php > ini_set('session.save_path', 'mcrouter:11211');
php > var_dump(session_start());
PHP Warning: Uncaught Error: Failed to create session ID: memcached (path: mcrouter:11211) in php shell code:1
Stack trace:
#0 php shell code(1): session_start()
#1 {main}
thrown in php shell code on line 1
php > # ╨Э╨╡ ╨╖╨░╨▓╨╛╨┤╨╕╤В╤Б╤ПтАж ╨Я╨╛╨┐╤А╨╛╨▒╤Г╨╡╨╝ ╨╖╨░╨┤╨░╤В╤М session_id:
php > session_id("zzz");
php > var_dump(session_start());
PHP Warning: session_start(): Cannot send session cookie - headers already sent by (output started at php shell code:1) in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Failed to write session lock: UNKNOWN READ FAILURE in php shell code on line 1
PHP Warning: session_start(): Unable to clear session lock record in php shell code on line 1
PHP Warning: session_start(): Failed to read session data: memcached (path: mcrouter:11211) in php shell code on line 1
bool(false)
php >рддреНрд░реБрдЯрд┐ рдкрд╛рда рдХреА рдЦреЛрдЬ рд╕реЗ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА тАЬ"рд╕рдмрд╕реЗ рдЖрдЧреЗ рдереА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреА рдЕрдирд╕реБрд▓рдЭреА рд╕рдорд╕реНрдпрд╛ - рдореЗрдордХреИрдЪреНрдб рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓.
NB: рдореЗрдордХреИрдЪреНрдб рдореЗрдВ ASCII рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдорд╛ рд╣реИ, рдФрд░ рд╕реБрд╕рдВрдЧрдд рдХреБрдВрдЬреА рд╣реИрд╢рд┐рдВрдЧ рдХреЗ рдорд╛рдирдХ рд╕рд╛рдзрди рдХреЗрд╡рд▓ рдмрд╛рдЗрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЪрд╛рд▓ рдмреИрдЧ рдореЗрдВ рд╣реИ: рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ ASCII рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ рдФрд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрддреНрддрд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрджрдд рдХреНрд░реВрд░ рдордЬрд╝рд╛рдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЖрдкрдХреЛ рд╡рд╣рд╛рдБ рд╕рд╣реА рдЙрддреНрддрд░ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛... рдЬрдм рддрдХ рдХрд┐, рдмреЗрд╢рдХ, рдЖрдк рдЕрдВрдд рддрдХ рд╕реНрдХреНрд░реЙрд▓ рди рдХрд░реЗрдВ, рдЬрд╣рд╛рдБ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдпреЛрдЧрджрд╛рди рдХрд┐рдП рдЧрдП рдиреЛрдЯреНрд╕" рд╡рдлрд╛рджрд╛рд░ рд░рд╣реЗрдВрдЧреЗ рдФрд░ .
рд╣рд╛рдВ, рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рд╣реА рдирд╛рдо рд╣реИ memcached.sess_binary_protocol. рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╕рддреНрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред рдмрд╕ рдЗрддрдирд╛ рд╣реА рдмрд╛рдХреА рд╣реИ рдХрд┐ PHP рдХреЗ рд╕рд╛рде рдкреЙрдб рдореЗрдВ mcrouter рдХреЗ рд╕рд╛рде рдХрдВрдЯреЗрдирд░ рдбрд╛рд▓рдирд╛ рд╣реИ!
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХреЗрд╡рд▓ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ: рдореЗрдордХреИрдЪреНрдб рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░реЗрдВрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ, рдХреИрд╢ рд╕реНрдЯреЛрд░реЗрдЬ рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдмрдврд╝ рдЧрдИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд▓рд╛рднреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕рдиреЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкреИрдВрддрд░реЗрдмрд╛рдЬрд╝реА рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рджреА: рдЬрдм рд╕рднреА рдШрдЯрдХреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд░рд┐рдЬрд░реНрд╡ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдХрд╛ рдЬреАрд╡рди рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ, рдпрд╣ рдПрдХ "рдмреИрд╕рд╛рдЦреА" рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдкреИрд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрдмрд╛рддрд╛ рд╣реИ рдФрд░ рдирдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдмрдирддрд╛ рд╣реИ - рддреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдкреБрдирд╢реНрдЪ
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рднреА рдкрдврд╝реЗрдВ:
- "dapp рдХреЗ рд╕рд╛рде рдЕрднреНрдпрд╛рд╕ рдХрд░реЗрдВ" (рд╕рд┐рдореНрдлрдиреА-рдбреЗрдореЛ рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП): ╨╕ ;
- ┬л'.
рд╕реНрд░реЛрдд: www.habr.com
