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

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

рддрд╕реНрд╡реАрд░ рдореЗрдВ, рдЕрдВрдбрд╛рдХрд╛рд░ рдХрдиреНрд╡реЗрдпрд░ рдбрд┐рдЬрд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ред
рдЯреЗрдореНрдкрд▓реЗрдЯ "рдХрдиреНрд╡реЗрдпрд░" рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддреА рд╣реИ рдФрд░ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдХреБрдЫ рдЬрдирд░реЗрдЯрд░ (рд╕реВрдЪрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд) рдФрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдкреНрд░реЛрд╕реЗрд╕рд░ (рд╕реВрдЪрдирд╛ рдкреНрд░реЛрд╕реЗрд╕рд░) рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдирд░реЗрдЯрд░ рдЧреЛ рдкрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЛрдЧрд╛ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ (рдХреЗрд╡рд▓ рдПрдХ) рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЛрдЧрд╛ рдЬреЛ рдХрддрд╛рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдлреИрдХреНрдЯрд░рд╛рдЗрдЬреЗрд╢рди рдХрд░рддрд╛ рд╣реИред рд╢реБрджреНрдз рдЧреЛ рдкрд░, рдпрд╣ рдкреИрдЯрд░реНрди рдЪреИрдирд▓реЛрдВ (рдЪрд╛рди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред рдКрдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдЬреАрдердм рдХрд╛ рд▓рд┐рдВрдХ рд╣реИред рдпрд╣рд╛рдВ, рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рдЪреИрдирд▓реЛрдВ рдХреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рдПрдЧреАред
рдлреИрди-рдЗрди - рдлреИрди-рдЖрдЙрдЯ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЧреЛ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдХрд╛ рдЕрд░реНрде рд╣реИ рдЧреЛрд░реЛрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░рдг, рдЗрд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдиреАрдЪреЗред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рднреА рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдлрд┐рд░ рд╕реЗ, рдЪреИрдирд▓ рдХреЛ рдХрддрд╛рд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЧреЛрд░реЛрдиреЗрдЯреНрд╕ рдЬрдЧрд╣ рдкрд░ рдмрдиреЗ рд░рд╣реЗред
рдЕрдм рдЕрдкрд╛рдЪреЗ рдХрд╛рдлреНрдХрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдХрдлрд╝реНрдХрд╛ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрддреНрдХреГрд╖реНрдЯ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдЯреВрд▓ рд╣реИрдВ, рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЗрдирджреЗрди рд▓реЙрдЧ (рдмрд┐рд▓реНрдХреБрд▓ RDBMS рдХреА рддрд░рд╣) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрддрд╛рд░ рдореЙрдбрд▓ рдФрд░ рдкреНрд░рдХрд╛рд╢рдХ / рдЧреНрд░рд╛рд╣рдХ рдореЙрдбрд▓ рджреЛрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджреЗрд╢ рд╕рдореВрд╣ рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рджрд╕реНрдп (рд╕рдорд╛рдирд╛рдВрддрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдмрд╛рд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реЗ рдХрдИ рд╕рдореВрд╣ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рдлреНрдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдкреИрдХреЗрдЬ "github.com/segmentio/kafka-go" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рджреВрд╕рд░реА рдУрд░, Redis, рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рд╕реНрддрдВрдн рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдХреБрдВрдЬрд┐рдпреЛрдВ рдФрд░ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рддрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдиреНрдп рд╣реИрдВред рд░реЗрдбрд┐рд╕ рдХреЛ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдореЗрдВ рд╕рдмрд╕реЗ рддреЗрдЬ (рдпрд╛ рд╕рдмрд╕реЗ) рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдБрдХрдбрд╝реЛрдВ, рдореАрдЯреНрд░рд┐рдХ, рд╕рдВрджреЗрд╢ рдкреНрд░рд╡рд╛рд╣ рдЖрджрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИред
рд░реЗрдбрд┐рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ "github.com/go-redis/redis" рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдЪреВрдБрдХрд┐ рдпрд╣ рд▓реЗрдЦ рдПрдХ рддреНрд╡рд░рд┐рдд рд╢реБрд░реБрдЖрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо DockerHub рд╕реЗ рддреИрдпрд╛рд░ рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛрдиреЛрдВ рд╕рд┐рд╕реНрдЯрдореЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ docker-compose.yml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рд╡реАрдПрдо рдкрд░ рдХрдВрдЯреЗрдирд░ рдореЛрдб рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдкрд░ рдбреЙрдХрдЯрд░-рдХрдВрдкреЛрдЬ (рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбреЙрдХрд░ рд╡реАрдПрдо рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:
version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka:latest ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_CREATE_TOPICS: "Generated:1:1,Solved:1:1,Unsolved:1:1" KAFKA_DELETE_TOPIC_ENABLE: "true" volumes: - /var/run/docker.sock:/var/run/docker.sock redis: image: redis ports: - "6379:6379"
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ, рдЗрд╕рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
docker-compose up -d
рддреАрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП: рдХрд╛рдлреНрдХрд╛ (рдХрддрд╛рд░), рдЬрд╝реБрдХреАрдкрд░ (рдХрд╛рдлреНрдХрд╛ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд░реНрд╡рд░) рдФрд░ (рд░реЗрдбрд┐рд╕)ред
рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ:
docker-compose ps
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Name State Ports -------------------------------------------------------------------------------------- docker-compose_kafka_1 Up 0.0.0.0:9092->9092/tcp docker-compose_redis_1 Up 0.0.0.0:6379->6379/tcp docker-compose_zookeeper_1 Up 0.0.0.0:2181->2181/tcp, 22/tcp, 2888/tcp, 3888/tcp
Yml-file рдХреЗ рдЕрдиреБрд╕рд╛рд░, рддреАрди рдХрддрд╛рд░реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
docker exec kafka-container_kafka_1 /opt/kafka_2.12-2.1.0/bin/kafka-topics.sh --list --zookeeper zookeeper:2181
рдЗрд╕рдореЗрдВ рдХрддрд╛рд░реЗрдВ (рд╡рд┐рд╖рдп - рдХрд╛рдлреНрдХрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╡рд┐рд╖рдп) рдЙрддреНрдкрдиреНрди, рд╣рд▓ рдФрд░ рдЕрдирд╕реБрд▓рдЭреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рд░реИрдВрдбрдо рдбрд┐рд▓реЗ рдХреЗ рд╕рд╛рде
рдбреЗрдЯрд╛ рдЬреЗрдирд░реЗрдЯрд░ рдЕрд╕реАрдо рд░реВрдк рд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рдЦрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдб рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИред рдЖрдк рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХрддрд╛рд░ рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
docker exec kafka-container_kafka_1 /opt/kafka_2.12-2.1.0/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic Generated --from-beginning
рдЕрдЧрд▓рд╛
рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ - рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдмреНрд▓реЙрдХ рдореЗрдВ рдХрддрд╛рд░ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
var wg sync.WaitGroup c := 0
рд╕рдВрджреЗрд╢ рдХрддрд╛рд░ рд╕реЗ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВрдиреЗ рдПрдХ рд╕рдВрджрд░реНрдн рдмрдирд╛рдпрд╛ред 15 рд╕реЗрдХрдВрдб рдХреЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдХреЙрдирдЯреЗрдХреНрд╕реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯред рдпрджрд┐ рдпрд╣ рдХрддрд╛рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдпрд╣ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рде рд╣реА, рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдлреИрдХреНрдЯрд░ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд░реБрдЯрд┐рди рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрддрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рдордп рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рдЙрди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдФрд░ рдЬреЛ рд╕рдВрдЦреНрдпрд╛рдПрдВ рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдореЗрдВ рдлреИрдХреНрдЯ рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рдереАрдВ, рдЙрдиреНрд╣реЗрдВ рджреВрд╕рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред
рдЕрдиреБрдорд╛рдирд┐рдд рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
func BenchmarkFactorize(b *testing.B) { ch := make(chan []int) var factors []int for i := 1; i < bN; i++ { num := 2345678901234 go factorize(num, ch) factors = <-ch b.Logf("\n%d %+v\n\n", num, factors) } }
рдЧреЛ рдореЗрдВ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдкрд░реАрдХреНрд╖рдг рдХреА рдХрд┐рд╕реНрдореЗрдВ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рднрд╛рдЧ рдХреЛ рдХрд╛рд░рдХ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдерд╛, рдФрд░ рднрд╛рдЧ - рдирд╣реАрдВред
рдЬрд┐рди рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ DB рдирдВрдмрд░ 1 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЕрд╕рдВрдмрджреНрдз рд╕рдВрдЦреНрдпрд╛рдПрдБ DB рдирдВрдмрд░ 1 рдореЗрдВ рд╣реИрдВред
рдпрд╣рд╛рдБ рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд░реЗрдбрд┐рд╕ рдореЗрдВ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдирд╣реАрдВ рд╣реИрдВред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, DBMS рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдкрд╛рд╕ 16 рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдпреЗ рдЖрдзрд╛рд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ - 0 рд╕реЗ 15 рддрдХред
рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рдЧреЛрд░рдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ рд╕рдВрджрд░реНрдн рдФрд░ рдЪрдпрди рдХрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдереА:
рдпрд╣ рдЧреЛ рдкрд░ рдареЗрда рд╡рд┐рдХрд╛рд╕ рдХреА рдЪрд╛рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ рдЪрдпрди рд╡рд┐рд╡рд░рдг рдЪреИрдирд▓реЛрдВ рдкрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕рдХреНрд░рд┐рдп рдЪреИрдирд▓ рдХреЗ рдЕрдиреБрд░реВрдк рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╛ рддреЛ рдЧреЛрд░рдЖрдЙрдЯ рдЕрдкрдиреЗ рдЪреИрдирд▓ рдХреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛, рдпрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн рдЪреИрдирд▓ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрджрд░реНрдн рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдПрдХ рдордирдорд╛рдиреЗ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ рдФрд░ рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдХреА рдордЬрдмреВрд░ рд╕рдорд╛рдкреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд░реВрдЯреАрди рд╡рд╛рдВрдЫрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ (0 рдпрд╛ 1) рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдирдХрдореНрдкреЛрдЬреНрдб рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕ рдХрд┐рдП рдЧрдП рдирдВрдмрд░реЛрдВ рдпрд╛ (рдирдВрдмрд░ - рдирдВрдмрд░) рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдо (рд╕рдВрдЦреНрдпрд╛ - рдХрд╛рд░рдХ) рдХреЗ рдЬреЛрдбрд╝реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
func storeSolved(item data) (err error) {
рдЕрдВрддрд┐рдо рднрд╛рдЧ рдПрдХ
рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдЬрд╕рди рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рдФрд░ рдЕрдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЙрд╕рдХреЗ рдкрд╛рд╕ рджреЛ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рд╣реЛрдВрдЧреЗ:
http.HandleFunc("/solved", solvedHandler) http.HandleFunc("/unsolved", unsolvedHandler)
Redis рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ json рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде http рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
func solvedHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET") w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо:
рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ / рд╣рд▓ [{ "Key": "1604388558816", "Val": "[1,2,3,227]" }, { "Key": "545232916387", "Val": "[1,545232916387]" }, { "Key": "1786301239076", "Val": "[1,2]" }, { "Key": "698495534061", "Val": "[1,3,13,641,165331]" }]
рдЕрдм рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ рддрд▓реНрд▓реАрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рдерд╛ред
рдореИрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рд╕реЗ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЖрд▓рд╕реА рди рд╣реЛрдВ рдФрд░ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВред