рдХреЛрдгрддреНрдпрд╛рд╣реА рднрд╛рд╖реЗрдд рдЙрдЪреНрдЪ-рд▓реЛрдб рдкреНрд░рдХрд▓реНрдк рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯреАрдХреЛрди рдЖрдгрд┐ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рдзрдирд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдЬреЗрд╡реНрд╣рд╛ PHP рдордзреАрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ рддреЗрд╡реНрд╣рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рдЗрддрдХреА рдмрд┐рдШрдбреВ рд╢рдХрддреЗ рдХреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде,
рдкреНрд░рд╕рдВрдЧрд╛рдЪрд╛ рдирд╛рдпрдХ рд╕рд┐рдореНрдлрдиреА 2.3 рдлреНрд░реЗрдорд╡рд░реНрдХрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ PHP рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЖрд╣реЗ, рдЬреЛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдпреЛрдЬрдирд╛рдВрдордзреНрдпреЗ рдЕрдЬрд┐рдмрд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдирд╛рд╣реА. рдмрд▒реНрдпрд╛рдЪ рдорд╛рдирдХ рд╕рддреНрд░ рд╕рдВрдЪрдпрдирд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪрд╛ рдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдЭрд╛рд▓рд╛ "рд╕рд░реНрд╡ рдХрд╛рд╣реА рдХреЕрд╢рд┐рдВрдЧ" рдзреЛрд░рдг memcached рдордзреНрдпреЗ: рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдгрд┐ API рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж, рд╡рд┐рд╡рд┐рдз рдзреНрд╡рдЬ, рдХреЛрдб рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕рдордХреНрд░рдорд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд▓реЙрдХ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА. рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рдореЗрдордХреЕрд╢реЗрдбрдЪреЗ рдмреНрд░реЗрдХрдбрд╛рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдирд╕рд╛рдареА рдШрд╛рддрдХ рдард░рддреЗ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдХреЕрд╢реЗ рдХрдореА рдЭрд╛рд▓реНрдпрд╛рдореБрд│реЗ рдЧрдВрднреАрд░ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛рдд: рдбреАрдмреАрдПрдордПрд╕ рд╕реАрдорд╡рд░ рдлреБрдЯрдгреЗ рд╕реБрд░реВ рд╣реЛрддреЗ, рдПрдкреАрдЖрдп рд╕реЗрд╡рд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрд╡рд░ рдмрдВрджреА рдШрд╛рд▓реВ рд▓рд╛рдЧрддрд╛рдд рдЗ. рдкрд░рд┐рд╕реНрдерд┐рддреА рд╕реНрдерд┐рд░ рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА рджрд╣рд╛рдкрдЯ рдорд┐рдирд┐рдЯреЗ рд▓рд╛рдЧреВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рдпрд╛ рдХрд╛рд│рд╛рдд рд╕реЗрд╡рд╛ рдЕрддреНрдпрдВрдд рдордВрдж рдХрд┐рдВрд╡рд╛ рдкреВрд░реНрдгрдкрдгреЗ рдЕрдиреБрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓.
рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рдереЛрдбреНрдпрд╛ рдкреНрд░рдпрддреНрдирд╛рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреНрд╖реИрддрд┐рдЬрд░рд┐рддреНрдпрд╛ рдореЛрдЬрдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛, рдореНрд╣рдгрдЬреЗ рд╕реЛрд░реНрд╕ рдХреЛрдбрдордзреНрдпреЗ рдХрдореАрдд рдХрдореА рдмрджрд▓ рдЖрдгрд┐ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрддрди рдХрд░реВрди. рдХреЕрд╢реЗ рдХреЗрд╡рд│ рдЕрдкрдпрд╢рд╛рдВрдирд╛рдЪ рдкреНрд░рддрд┐рд░реЛрдзрдХ рдмрдирд╡рд╛, рдкрд░рдВрддреБ рддреНрдпрд╛рддреВрди рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рджреЗрдЦреАрд▓ рдХрд░рд╛.
рдореЗрдордХреЕрд╢реЗрдбрдордзреНрдпреЗ рдХрд╛рдп рдЪреВрдХ рдЖрд╣реЗ?
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, PHP рд╕рд╛рдареА memcached рд╡рд┐рд╕реНрддрд╛рд░ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛ рдЖрдгрд┐ рд╕рддреНрд░ рд╕рдВрдЪрдпрдирд╛рд╕ рд╕рдорд░реНрдерди рджреЗрддреЗ. рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рдХреА рд╣реЕрд╢рд┐рдВрдЧрдЪреА рдпрдВрддреНрд░рдгрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд▒реНрдпрд╛рдЪ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕рдорд╛рди рд░реАрддреАрдиреЗ рдбреЗрдЯрд╛ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреА рд╕рдореВрд╣рд╛рддреАрд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЕрджреНрд╡рд┐рддреАрдпрдкрдгреЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддреЗ рдЖрдгрд┐ рдмрд┐рд▓реНрдЯ-рдЗрди рдлреЗрд▓рдУрд╡реНрд╣рд░ рдЯреВрд▓реНрд╕ рдХреЕрд╢рд┐рдВрдЧ рд╕реЗрд╡реЗрдЪреА рдЙрдЪреНрдЪ рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛рдд (рдкрд░рдВрддреБ, рджреБрд░реНрджреИрд╡рд╛рдиреЗ, рдорд╛рд╣рд┐рддреА рдЙрдкрд▓рдмреНрдз рдирд╛рд╣реА).
рд╕реЗрд╢рди рд╕реНрдЯреЛрд░реЗрдЬрд╕рд╣ рдЧреЛрд╖реНрдЯреА рдереЛрдбреНрдпрд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдЖрд╣реЗрдд: рддреБрдореНрд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░реВ рд╢рдХрддрд╛ memcached.sess_number_of_replicas
, рдкрд░рд┐рдгрд╛рдореА рдбреЗрдЯрд╛ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдЕрдиреЗрдХ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ рдЖрдгрд┐ рдПрдХ рдореЗрдордХреЕрд╢реЗрдб рдЙрджрд╛рд╣рд░рдг рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕, рдбреЗрдЯрд╛ рдЗрддрд░рд╛рдВрдХрдбреВрди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓. рддрдерд╛рдкрд┐, рд╕рд░реНрд╡реНрд╣рд░ рдбреЗрдЯрд╛рд╢рд┐рд╡рд╛рдп рдСрдирд▓рд╛рдЗрди рдкрд░рдд рдЖрд▓реНрдпрд╛рд╕ (рд╕рд╛рдорд╛рдиреНрдпрдд: рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░ рд╣реЛрддреЗ), рдХрд╛рд╣реА рдХреА рддреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддреАрд▓. рдХрд┐рдВрдмрд╣реБрдирд╛ рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╣реЛрдИрд▓ рд╕рддреНрд░ рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рдгреЗ, рдЪреБрдХрд▓реНрдпрд╛рд╕ рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░рддрд┐рдХреГрддреАрдХрдбреЗ "рдЬрд╛рдгреНрдпрд╛рдЪрд╛" рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рдирд╛рд╣реА.
рдорд╛рдирдХ рд▓рд╛рдпрдмреНрд░рд░реА рд╕рд╛рдзрдиреЗ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдЙрджреНрджреЗрд╢ рдЖрд╣реЗрдд рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ: рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдХреЕрд╢реЗ рдореЛрдареНрдпрд╛ рдЖрдХрд╛рд░рд╛рдд рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рд╣реЛрд╕реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЛрдбрдордзреВрди рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рддрдерд╛рдкрд┐, рдЖрдордЪреНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд, рд╕рдВрдЧреНрд░рд╣рд┐рдд рдбреЗрдЯрд╛рдЪреА рдорд╛рддреНрд░рд╛ рдЕрдиреЗрдХ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯреНрд╕рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдирд╛рд╣реА рдЖрдгрд┐ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рдиреЛрдбреНрд╕рдЪреЗ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ. рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдХрд╛рдорд╛рдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдд рдХрд┐рдорд╛рди рдПрдХ рдХреЕрд╢реЗ рдЗрдиреНрд╕реНрдЯрдиреНрд╕ рд░рд╛рдЦрддрд╛рдирд╛ рдореЗрдордХреЕрд╢реЗрдбрдЪреА рдЙрдкрд▓рдмреНрдзрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рд╣реЗ рдПрдХрдореЗрд╡ рдЙрдкрдпреБрдХреНрдд рдорд╛рдирдХ рд╕рд╛рдзрдиреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рддрдерд╛рдкрд┐, рдпрд╛ рд╕рдВрдзреАрдЪрд╛рд╣реА рдлрд╛рдпрджрд╛ рдШреЗрдгреЗ рд╢рдХреНрдп рдирд╡реНрд╣рддреЗ... рдпреЗрдереЗ рдкреНрд░рдХрд▓реНрдкрд╛рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХрдЪреА рдкреБрд░рд╛рддрдирддрд╛ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рд░рдЦреА рдЖрд╣реЗ, рдореНрд╣рдгреВрдирдЪ рд╕рд░реНрд╡реНрд╣рд░рдЪреНрдпрд╛ рдкреВрд▓рд╕рд╣ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рд╕ рдХрд╛рд░реНрдп рдХрд░рдгреЗ рдЕрд╢рдХреНрдп рд╣реЛрддреЗ. рд╕рддреНрд░ рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рдгреНрдпрд╛рдмрджреНрджрд▓ рджреЗрдЦреАрд▓ рд╡рд┐рд╕рд░реВ рдирдХрд╛: рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдЪреНрдпрд╛ рдореЛрдареНрдпрд╛ рд▓реЙрдЧрдЖрдЙрдЯрдореБрд│реЗ рдЧреНрд░рд╛рд╣рдХрд╛рдЪреА рдирдЬрд░ рд╡рд│рд▓реА.
рддрджреНрд╡рддрдЪ рддреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ рдореЗрдордХреЕрд╢реЗрдб рдЖрдгрд┐ рдмрд╛рдпрдкрд╛рд╕ рдкреНрд░рддрд┐рдХреГрддреАрдВрдордзреНрдпреЗ рд░реЗрдХреЙрд░реНрдбрдЪреА рдкреНрд░рддрд┐рдХреГрддреА рдЪреВрдХ рдХрд┐рдВрд╡рд╛ рдЪреВрдХ рдЭрд╛рд▓реНрдпрд╛рд╕. рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реА рд░рдгрдиреАрддреА рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рд╕ рдорджрдд рдХреЗрд▓реА
mcrouter
рдлреЗрд╕рдмреБрдХрдиреЗ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рд╣рд╛ рдореЗрдордХреЕрд╢реЗрдб рд░рд╛рдЙрдЯрд░ рдЖрд╣реЗ. рд╣реЗ memcached рдордЬрдХреВрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдЪреЗ рд╕рдорд░реНрдерди рдХрд░рддреЗ, рдЬреЗ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ рд╕реНрдХреЗрд▓ рдореЗрдордХреЕрд╢реЗрдб рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рдиреНрд╕ рд╡реЗрдбреЗ рдкреНрд░рдорд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА. 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 рдореЗрдордХреЕрд╢реЗрдбрдЪреА рд╡рд┐рдирдВрддреА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реА рдЬрд╛рдИрд▓ - рд╕рд░реНрд╡рд╛рдВрдирд╛ рдкреВрд▓ рдордзреНрдпреЗ рд╕рд░реНрд╡реНрд╣рд░. рдЖрдореНрд╣реА рдкреВрд▓рдордзреАрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рдХрд░реВ рд╢рдХрддреЛ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рджреЛрди: рд╕реНрдЯреЛрд░реЗрдЬ рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣рддреЗрдЪрд╛ рддреНрдпрд╛рдЧ рдХрд░рдгреЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рдорд┐рд│рддреЗ╨╛рд╡рд┐рдирдВрддреНрдпрд╛рдВрдкрд╛рд╕реВрди рдЧрд╣рд╛рд│ рдХреАрдВрдкрд░реНрдпрдВрдд рдЙрдЪреНрдЪ рдЧрддреА рдЖрдгрд┐ рдХрдореА рд▓реЛрдб.
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 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрд╛рдпрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓рдкреЗрдХреНрд╖рд╛ рд╣рд│реВ рдЖрд╣реЗ рдЖрдгрд┐ рд╕рд╛рддрддреНрдпрдкреВрд░реНрдг рдХреА рд╣реЕрд╢рд┐рдВрдЧрдЪреЗ рдорд╛рдирдХ рд╕рд╛рдзрди рдХреЗрд╡рд│ рдмрд╛рдпрдирд░реА рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рдкрд░рдВрддреБ рд╣реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд░рдгрд╛рд╕рд╛рдареА рд╕рдорд╕реНрдпрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдд рдирд╛рд╣реА.
рдпреБрдХреНрддреА рдмреЕрдЧрдордзреНрдпреЗ рдЖрд╣реЗ: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдПрдПрд╕рд╕реАрдЖрдпрдЖрдп рдкреНрд░реЛрдЯреЛрдХреЙрд▓рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ рдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╛рд░реНрдп рдХрд░реЗрд▓.... рддрдерд╛рдкрд┐, рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдордзреНрдпреЗ рдЙрддреНрддрд░реЗ рд╢реЛрдзрдгреНрдпрд╛рдЪреА рд╕рд╡рдп
рд╣реЛрдп, рдпреЛрдЧреНрдп рдкрд░реНрдпрд╛рдпрд╛рдЪреЗ рдирд╛рд╡ рдЖрд╣реЗ memcached.sess_binary_protocol
. рддреЗ рдЕрдХреНрд╖рдо рдХреЗрд▓реЗ рдЬрд╛рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рддреНрдпрд╛рдирдВрддрд░ рд╕рддреНрд░реЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддреАрд▓. рдлрдХреНрдд рд╢рд┐рд▓реНрд▓рдХ рдЖрд╣реЗ mcrouter рд╕рд╣ рдХрдВрдЯреЗрдирд░ PHP рд╕рд╣ рдкреЙрдбрдордзреНрдпреЗ рдареЗрд╡рдгреЗ!
рдирд┐рд╖реНрдХрд░реНрд╖
рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ, рдлрдХреНрдд рдкрд╛рдпрд╛рднреВрдд рдмрджрд▓рд╛рдВрд╕рд╣ рдЖрдореНрд╣реА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡реВ рд╢рдХрд▓реЛ: рдореЗрдордХреЕрд╢реЗрдб рдлреЙрд▓реНрдЯ рдЯреЙрд▓рд░рдиреНрд╕рдЪреА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рд▓реА рдЧреЗрд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рдХреЕрд╢реЗ рд╕реНрдЯреЛрд░реЗрдЬрдЪреА рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣рддрд╛ рд╡рд╛рдврд▓реА рдЖрд╣реЗ. рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдЪреНрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдлрд╛рдпрджреНрдпрд╛рдВрд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдпрд╛рдореБрд│реЗ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдпреБрдХреНрддреАрд╕рд╛рдареА рдЬрд╛рдЧрд╛ рдорд┐рд│рд╛рд▓реА: рдЬреЗрд╡реНрд╣рд╛ рд╕рд░реНрд╡ рдШрдЯрдХрд╛рдВрдХрдбреЗ рд░рд╛рдЦреАрд╡ рдЬрд╛рдЧрд╛ рдЕрд╕рддреЗ, рддреЗрд╡реНрд╣рд╛ рдкреНрд░рд╢рд╛рд╕рдХрд╛рдЪреЗ рдЬреАрд╡рди рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╕рд░рд▓реАрдХреГрдд рд╣реЛрддреЗ. рд╣реЛрдп, рдпрд╛ рдкрджреНрдзрддреАрдордзреНрдпреЗ рддреНрдпрд╛рдЪреЗ рддреЛрдЯреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд, рддреЗ "рдХреНрд░реЕрдЪ" рд╕рд╛рд░рдЦреЗ рджрд┐рд╕реВ рд╢рдХрддреЗ, рдкрд░рдВрддреБ рдЬрд░ рддреЗ рдкреИрд╕реЗ рд╡рд╛рдЪрд╡рддреЗ, рд╕рдорд╕реНрдпрд╛ рджрдлрди рдХрд░рддреЗ рдЖрдгрд┐ рдирд╡реАрди рдХрд╛рд░рдгреАрднреВрдд рд╣реЛрдд рдирд╛рд╣реА - рдХрд╛ рдирд╛рд╣реА?
PS
рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:
- "рдбреЕрдк рд╕рд╣ рд╕рд░рд╛рд╡ рдХрд░рд╛" (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рд╕рд┐рдореНрдлрдиреА-рдбреЗрдореЛ рд╡рд╛рдкрд░рдгреЗ):
рднрд╛рдЧ рез (рд╕рд╛рдзреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреЗ) ╨╕рднрд╛рдЧ 2 (рд╣реЗрд▓реНрдо рд╡рд╛рдкрд░реВрди рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╡рд░ рддреИрдирд╛рдд рдХрд░рдгреЗ) ; - ┬л
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕рд╣ рдЬреАрд╡рдирд╛рдкрд╛рд╕реВрди: HTTP рд╕рд░реНрд╡реНрд╣рд░рдиреЗ рд╕реНрдкреЕрдирд┐рд╢ рд▓реЛрдХрд╛рдВрдирд╛ рдХрд╕реЗ рдЕрдиреБрдХреВрд▓ рдХреЗрд▓реЗ рдирд╛рд╣реА ┬╗.
рд╕реНрддреНрд░реЛрдд: www.habr.com