memcached เจจเฉ‚เฉฐ เจ–เจฟเจคเจฟเจœเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจ•เฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ mcrouter เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

memcached เจจเฉ‚เฉฐ เจ–เจฟเจคเจฟเจœเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจ•เฉ‡เจฒ เจ•เจฐเจจ เจฒเจˆ mcrouter เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ

เจ•เจฟเจธเฉ‡ เจตเฉ€ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจš เจ‰เฉฑเจš-เจฒเฉ‹เจก เจตเจพเจฒเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจตเจฟเจ•เจธเจค เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจชเจนเฉเฉฐเจš เจ…เจคเฉ‡ เจตเจฟเจธเจผเฉ‡เจธเจผ เจธเจพเจงเจจเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจœเจฆเฉ‹เจ‚ PHP เจตเจฟเฉฑเจš เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจฆเฉ€ เจ—เฉฑเจฒ เจ†เจ‰เจ‚เจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจธเจฅเจฟเจคเฉ€ เจ‡เฉฐเจจเฉ€ เจตเจฟเจ—เฉœ เจธเจ•เจฆเฉ€ เจนเฉˆ เจ•เจฟ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจตเจฟเจ•เจพเจธ เจ•เจฐเจจเจพ เจชเฉˆเจ‚เจฆเจพ เจนเฉˆ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ†เจชเจฃเจพ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจธเจฐเจตเจฐ. เจ‡เจธ เจจเฉ‹เจŸ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจตเจฟเฉฑเจš เจตเจฟเจคเจฐเจฟเจค เจธเฉˆเจธเจผเจจ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจ…เจคเฉ‡ เจกเฉ‡เจŸเจพ เจ•เฉˆเจธเจผเจฟเฉฐเจ— เจจเจพเจฒ เจœเจพเจฃเฉ‡-เจชเจ›เจพเจฃเฉ‡ เจฆเจฐเจฆ เจฌเจพเจฐเฉ‡ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• "เจตเจพเจฐเจก" เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจ‡เจนเจจเจพเจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจนเฉˆเฅค

เจฎเฉŒเจ•เฉ‡ เจฆเจพ เจนเฉ€เจฐเฉ‹ เจธเจฟเจฎเจซเจจเฉ€ 2.3 เจซเจฐเฉ‡เจฎเจตเจฐเจ• 'เจคเฉ‡ เจ…เจงเจพเจฐเจค เจ‡เฉฑเจ• PHP เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจนเฉˆ, เจœเฉ‹ เจ•เจฟ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจฆเฉ€เจ†เจ‚ เจตเจชเจพเจฐเจ• เจฏเฉ‹เจœเจจเจพเจตเจพเจ‚ เจตเจฟเฉฑเจš เจฌเจฟเจฒเจ•เฉเจฒ เจธเจผเจพเจฎเจฒ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ•เจพเจซเจผเฉ€ เจฎเจฟเจ†เจฐเฉ€ เจธเฉˆเจธเจผเจจ เจธเจŸเฉ‹เจฐเฉ‡เจœเจผ เจฆเฉ‡ เจ‡เจฒเจพเจตเจพ, เจ‡เจธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ "เจธเจญ เจ•เฉเจ เจ•เฉˆเจธเจผ เจ•เจฐเจจเจพ" เจจเฉ€เจคเฉ€ memcached เจตเจฟเฉฑเจš: เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ…เจคเฉ‡ API เจธเจฐเจตเจฐเจพเจ‚ เจฒเจˆ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ, เจตเฉฑเจ–-เจตเฉฑเจ– เจซเจฒเฉˆเจ—, เจ•เฉ‹เจก เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจธเจผเจจ เจจเฉ‚เฉฐ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผ เจ•เจฐเจจ เจฒเจˆ เจคเจพเจฒเฉ‡ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจ•เฉเจเฅค เจ…เจœเจฟเจนเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจฆเจพ เจŸเฉเฉฑเจŸเจฃเจพ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเฉฐเจšเจพเจฒเจจ เจฒเจˆ เจ˜เจพเจคเจ• เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ•เฉˆเจธเจผ เจฆเจพ เจจเฉเจ•เจธเจพเจจ เจ—เฉฐเจญเฉ€เจฐ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจตเฉฑเจฒ เจ–เฉœเจฆเจพ เจนเฉˆ: DBMS เจธเฉ€เจฎเจพเจ‚ 'เจคเฉ‡ เจซเจŸเจฃเจพ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, API เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ 'เจคเฉ‡ เจชเจพเจฌเฉฐเจฆเฉ€ เจฒเจ—เจพเจ‰เจฃเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเจฟเฉฐเจฆเฉ€เจ†เจ‚ เจนเจจ, เจ†เจฆเจฟ. เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจธเจฅเจฟเจฐ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ•เจˆ เจฎเจฟเฉฐเจŸ เจฒเฉฑเจ— เจธเจ•เจฆเฉ‡ เจนเจจ, เจ…เจคเฉ‡ เจ‡เจธ เจธเจฎเฉ‡เจ‚ เจฆเฉŒเจฐเจพเจจ เจธเฉ‡เจตเจพ เจฌเจนเฉเจค เจนเฉŒเจฒเฉ€ เจœเจพเจ‚ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ…เจฃเจ‰เจชเจฒเจฌเจง เจนเฉ‹เจตเฉ‡เจ—เฉ€เฅค

เจธเจพเจจเฉ‚เฉฐ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€ เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจคเจจ เจจเจพเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจ–เจฟเจคเจฟเจœเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจธเจ•เฉ‡เจฒ เจ•เจฐเจจ เจฆเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ, i.e. เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจฌเจฆเจฒเจพเจ… เจ…เจคเฉ‡ เจชเฉ‚เจฐเฉ€ เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจจเฉ‚เฉฐ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจฐเฉฑเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค เจ•เฉˆเจธเจผ เจจเฉ‚เฉฐ เจจเจพ เจธเจฟเจฐเจซ เจ…เจธเจซเจฒเจคเจพเจตเจพเจ‚ เจชเฉเจฐเจคเฉ€ เจฐเฉ‹เจงเจ• เจฌเจฃเจพเจ“, เจฌเจฒเจ•เจฟ เจ‡เจธ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจจเฉ‚เฉฐ เจ˜เฉฑเจŸ เจคเฉ‹เจ‚ เจ˜เฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹เฅค

memcached เจตเจฟเฉฑเจš เจ•เฉ€ เจ—เจฒเจค เจนเฉˆ?

เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡, PHP เจฒเจˆ เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจกเจฟเจธเจŸเจฐเฉ€เจฌเจฟเจŠเจŸเจก เจกเฉ‡เจŸเจพ เจ…เจคเฉ‡ เจธเฉˆเจธเจผเจจ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจจเฉ‚เฉฐ เจฌเจพเจ•เจธ เจคเฉ‹เจ‚ เจฌเจพเจนเจฐ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจ•เจธเจพเจฐ เจ•เฉเฉฐเจœเฉ€ เจนเฉˆเจธเจผเจฟเฉฐเจ— เจฒเจˆ เจตเจฟเจงเฉ€ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจธเจฎเจพเจจ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเฉฐเจกเจฃ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ, เจนเจฐเฉ‡เจ• เจ–เจพเจธ เจ•เฉเฉฐเจœเฉ€ เจจเฉ‚เฉฐ เจธเจฎเฉ‚เจน เจฆเฉ‡ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเจฐเจตเจฐ เจฒเจˆ เจตเจฟเจฒเฉฑเจ–เจฃ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเฉฐเจฌเฉ‹เจงเจฟเจค เจ•เจฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจฌเจฟเจฒเจŸ-เจ‡เจจ เจซเฉ‡เจฒเจ“เจตเจฐ เจŸเฉ‚เจฒ เจ•เฉˆเจšเจฟเฉฐเจ— เจธเฉ‡เจตเจพ เจฆเฉ€ เจ‰เฉฑเจš เจ‰เจชเจฒเจฌเจงเจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ (เจชเจฐ, เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจ•เฉ‹เจˆ เจกเจพเจŸเจพ เจจเจนเฉ€เจ‚).

เจธเจผเฉˆเจธเจผเจจ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจจเจพเจฒ เจšเฉ€เจœเจผเจพเจ‚ เจฅเฉ‹เฉœเฉ€เจ†เจ‚ เจฌเจฟเจนเจคเจฐ เจนเจจ: เจคเฉเจธเฉ€เจ‚ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ memcached.sess_number_of_replicas, เจœเจฟเจธ เจฆเฉ‡ เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจพเจฐ เจตเจฟเฉฑเจš เจ•เจˆ เจธเจฐเจตเจฐเจพเจ‚ เจ‰เฉฑเจคเฉ‡ เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจ‰เจฆเจพเจนเจฐเจฃ เจฆเฉ‡ เจ…เจธเจซเจฒ เจนเฉ‹เจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจกเฉ‡เจŸเจพ เจจเฉ‚เฉฐ เจฆเฉ‚เจœเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจŸเฉเจฐเจพเจ‚เจธเจซเจฐ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจœเฉ‡เจ•เจฐ เจธเจฐเจตเจฐ เจฌเจฟเจจเจพเจ‚ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ”เจจเจฒเจพเจˆเจจ เจตเจพเจชเจธ เจ†เจ‰เจ‚เจฆเจพ เจนเฉˆ (เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฎเฉเฉœ เจšเจพเจฒเฉ‚ เจนเฉ‹เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจนเฉเฉฐเจฆเจพ เจนเฉˆ), เจคเจพเจ‚ เจ•เฉเจ เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจ‡เจธเจฆเฉ‡ เจนเฉฑเจ• เจตเจฟเฉฑเจš เจฎเฉเฉœ เจตเฉฐเจกเฉ€เจ†เจ‚ เจœเจพเจฃเจ—เฉ€เจ†เจ‚เฅค เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ‡เจธ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉ‹เจตเฉ‡เจ—เจพ เจธเฉˆเจธเจผเจจ เจกเจพเจŸเจพ เจฆเจพ เจจเฉเจ•เจธเจพเจจ, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจฎเจฟเจธ เจนเฉ‹เจฃ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ•เจฟเจธเฉ‡ เจนเฉ‹เจฐ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€ 'เจคเฉ‡ "เจœเจพเจฃ" เจฆเจพ เจ•เฉ‹เจˆ เจคเจฐเฉ€เจ•เจพ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค

เจฎเจฟเจ†เจฐเฉ€ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจธเฉฐเจฆ เจฎเฉเฉฑเจ– เจคเฉŒเจฐ 'เจคเฉ‡ เจ‰เจฆเฉ‡เจธเจผ เจนเจจ เจนเจฐเฉ€เจœเฉฑเจŸเจฒ เจธเจ•เฉ‡เจฒเจฟเฉฐเจ—: เจ‰เจน เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ•เฉˆเจธเจผ เจจเฉ‚เฉฐ เจตเจฟเจธเจผเจพเจฒ เจ†เจ•เจพเจฐ เจตเจฟเฉฑเจš เจตเจงเจพเจ‰เจฃ เจ…เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจนเฉ‹เจธเจŸ เจ•เฉ€เจคเฉ‡ เจ•เฉ‹เจก เจคเฉ‹เจ‚ เจ‡เจธ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจธเจพเจกเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš, เจธเจŸเฉ‹เจฐ เจ•เฉ€เจคเฉ‡ เจกเฉ‡เจŸเจพ เจฆเฉ€ เจฎเจพเจคเจฐเจพ เจ•เจˆ เจ—เฉ€เจ—เจพเจฌเจพเจˆเจŸ เจคเฉ‹เจ‚ เจตเฉฑเจง เจจเจนเฉ€เจ‚ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เฉฑเจ• เจœเจพเจ‚ เจฆเฉ‹ เจจเฉ‹เจกเจพเจ‚ เจฆเฉ€ เจ•เจพเจฐเจ—เฉเจœเจผเจพเจฐเฉ€ เจ•เจพเจซเจผเฉ€ เจนเฉˆ. เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจ•เฉฐเจฎ เจ•เจฐเจจ เจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจ‡เฉฑเจ• เจ•เฉˆเจธเจผ เจ‰เจฆเจพเจนเจฐเจจ เจจเฉ‚เฉฐ เจ•เจพเจ‡เจฎ เจฐเฉฑเจ–เจฆเฉ‡ เจนเฉ‹เจ เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจฆเฉ€ เจ‰เจชเจฒเจฌเจงเจคเจพ เจจเฉ‚เฉฐ เจฏเจ•เฉ€เจจเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเจฟเจฐเจซ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจฎเจฟเจ†เจฐเฉ€ เจŸเฉ‚เจฒ เจนเฉ‹ เจธเจ•เจฆเฉ‡ เจนเจจเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจธ เจฎเฉŒเจ•เฉ‡ เจฆเจพ เจตเฉ€ เจซเจพเจ‡เจฆเจพ เจ‰เจ เจพเจ‰เจฃเจพ เจธเฉฐเจญเจต เจจเจนเฉ€เจ‚ เจธเฉ€... เจ‡เฉฑเจฅเฉ‡ เจ‡เจน เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจตเจฐเจคเฉ‡ เจ—เจ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ€ เจชเฉเจฐเจพเจคเจจเจคเจพ เจจเฉ‚เฉฐ เจฏเจพเจฆ เจ•เจฐเจจ เจฏเฉ‹เจ— เจนเฉˆ, เจœเจฟเจธ เจ•เจพเจฐเจจ เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ‡ เจ‡เฉฑเจ• เจชเฉ‚เจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจธเฉฐเจญเจต เจธเฉ€เฅค เจ†เจ“ เจธเฉˆเจธเจผเจจ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจจเฉเจ•เจธเจพเจจ เจฌเจพเจฐเฉ‡ เจตเฉ€ เจจเจพ เจญเฉเฉฑเจฒเฉ€เจ: เจ‰เจชเจญเฉ‹เจ—เจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจตเจฟเจธเจผเจพเจฒ เจฒเฉŒเจ—เจ†เจ‰เจŸ เจคเฉ‹เจ‚ เจ—เจพเจนเจ• เจฆเฉ€ เจ…เฉฑเจ– เจฎเจฐเฉ‹เฉœ เจ—เจˆเฅค

เจ†เจฆเจฐเจธเจผเจ• เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจฒเฉ‹เฉœ เจธเฉ€ เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจ…เจคเฉ‡ เจฌเจพเจˆเจชเจพเจธ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจฐเจฟเจ•เจพเจฐเจกเจพเจ‚ เจฆเฉ€ เจจเจ•เจฒ เจ—เจฒเจคเฉ€ เจœเจพเจ‚ เจ—เจฒเจคเฉ€ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš. เจ‡เจธ เจฐเจฃเจจเฉ€เจคเฉ€ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจธเจพเจกเฉ€ เจฎเจฆเจฆ เจ•เฉ€เจคเฉ€ mcrouter.

mcrouter

เจ‡เจน เจซเฉ‡เจธเจฌเฉเฉฑเจ• เจฆเฉเจ†เจฐเจพ เจ†เจชเจฃเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฒเจˆ เจตเจฟเจ•เจธเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจ‡เฉฑเจ• เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจฐเจพเจŠเจŸเจฐ เจนเฉˆเฅค เจ‡เจน memcached เจŸเฉˆเจ•เจธเจŸ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ, เจœเฉ‹ เจ†เจ—เจฟเจ† เจฆเจฟเฉฐเจฆเจพ เจนเฉˆ เจธเจ•เฉ‡เจฒ memcached เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจชเจพเจ—เจฒ เจ…เจจเฉเจชเจพเจค เจจเฉ‚เฉฐ. เจฎเฉˆเจ•เจฐเฉ‹เจŸเจฐ เจฆเจพ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเฉ‡เจฐเจตเจพ เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจ‡เจน เจเจฒเจพเจจ. เจนเฉ‹เจฐ เจšเฉ€เจœเจผเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจตเจฟเจ†เจชเจ• เจ•เจพเจฐเจœเจ•เฉเจธเจผเจฒเจคเจพ เจ‡เจน เจ‰เจน เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ เจœเฉ‹ เจธเจพเจจเฉ‚เฉฐ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ:

  • เจฐเจฟเจ•เจพเจฐเจก เจฆเฉ€ เจจเจ•เจฒ;
  • เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจ—เจฒเจคเฉ€ เจ†เจ‰เจ‚เจฆเฉ€ เจนเฉˆ เจคเจพเจ‚ เจ—เจฐเฉเฉฑเจช เจฆเฉ‡ เจฆเฉ‚เจœเฉ‡ เจธเจฐเจตเจฐเจพเจ‚ 'เจคเฉ‡ เจซเจพเจฒเจฌเฉˆเจ• เจ•เจฐเฉ‹เฅค

เจ•เฉฐเจฎ 'เจคเฉ‡ เจœเจพเจ“!

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: เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฎเฉˆเจ•เจฐเฉ‹เจŸเจฐ เจธเจฟเฉฑเจ–เจฃ เจฒเจˆ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจฒเจฟเฉฐเจ• เจตเฉ€ เจฎเจฟเจฒ เจธเจ•เจฆเฉ‡ เจนเจจ เจตเจฟเจ•เฉ€ 'เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ ะธ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฎเฉเฉฑเจฆเฉ‡ (เจฌเฉฐเจฆเจพเจ‚ เจธเจฎเฉ‡เจค), เจตเฉฑเจ–-เจตเฉฑเจ– เจธเฉฐเจฐเจšเจจเจพเจตเจพเจ‚ เจฆเฉ‡ เจชเฉ‚เจฐเฉ‡ เจญเฉฐเจกเจพเจฐ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆเฅค

เจฎเฉˆเจ•เจฐเฉ‹เจŸเจฐ เจฌเจฃเจพเจ‰เจฃเจพ เจ…เจคเฉ‡ เจšเจฒเจพเจ‰เจฃเจพ

เจธเจพเจกเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ (เจ…เจคเฉ‡ เจฎเฉˆเจฎเจ•เฉˆเจšเจก) เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจฟเฉฑเจš เจšเจฒเจฆเฉ€ เจนเฉˆ - เจ‡เจธ เจ…เจจเฉเจธเจพเจฐ, เจฎเฉˆเจ•เจฐเฉ‹เจŸเจฐ เจตเฉ€ เจ‰เฉฑเจฅเฉ‡ เจธเจฅเจฟเจค เจนเฉˆเฅค เจฒเจˆ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจ…เจธเฉ€เจ‚ เจตเจฐเจคเจฆเฉ‡ เจนเจพเจ‚ werf, เจœเจฟเจธ เจฒเจˆ เจธเฉฐเจฐเจšเจจเจพ เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจตเฉ‡เจ—เฉ€:

NB: เจฒเฉ‡เจ– เจตเจฟเฉฑเจš เจฆเจฟเฉฑเจคเฉ€เจ†เจ‚ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจชเฉเจฐเจ•เจพเจธเจผเจฟเจค เจ•เฉ€เจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเจจ flant/mcrouter.

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

(werf.yaml)

... เจ…เจคเฉ‡ เจ‡เจธ เจจเฉ‚เฉฐ เจธเจ•เฉˆเจš เจฌเจพเจนเจฐ เจนเฉˆเจฒเจฎ เจšเจพเจฐเจŸ. เจฆเจฟเจฒเจšเจธเจช เจ—เฉฑเจฒ เจ‡เจน เจนเฉˆ เจ•เจฟ เจชเฉเจฐเจคเฉ€เจ•เฉเจฐเจฟเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจธเจฟเจฐเจซ เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจœเจจเจฐเฉ‡เจŸเจฐ เจนเฉˆ (เจœเฉ‡เจ•เจฐ เจ•เจฟเจธเฉ‡ เจ•เฉ‹เจฒ เจ‡เฉฑเจ• เจตเจงเฉ‡เจฐเฉ‡ เจธเฉฐเจ–เฉ‡เจช เจ…เจคเฉ‡ เจธเจผเจพเจจเจฆเจพเจฐ เจตเจฟเจ•เจฒเจช เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš เจธเจพเจ‚เจเจพ เจ•เจฐเฉ‹):

{{- $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 }}
         }
       }
     }
   }

(10-mcrouter.yaml)

เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจŸเฉˆเจธเจŸ เจตเจพเจคเจพเจตเจฐเจฃ เจตเจฟเฉฑเจš เจฐเฉ‹เจฒ เจ†เจŠเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจœเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚:

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

เจ—เจฒเจคเฉ€ เจฆเฉ‡ เจชเจพเจ  เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจจ เจจเจพเจฒ เจ•เฉ‹เจˆ เจจเจคเฉ€เจœเจพ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเจฟเจ†, เจชเจฐ เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจฒเจˆ "mcrouter php"เจ…เฉฑเจ—เฉ‡ เจตเจฟเฉฑเจš เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเฉ€ เจธเจญ เจคเฉ‹เจ‚ เจชเฉเจฐเจพเจฃเฉ€ เจ…เจฃเจธเฉเจฒเจเฉ€ เจธเจฎเฉฑเจธเจฟเจ† เจธเฉ€ - เจธเจนเจพเจ‡เจคเจพ เจฆเฉ€ เจ˜เจพเจŸ memcached เจฌเจพเจˆเจจเจฐเฉ€ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ.

NB: memcached เจตเจฟเฉฑเจš ASCII เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจฌเจพเจˆเจจเจฐเฉ€ เจ‡เฉฑเจ• เจจเจพเจฒเฉ‹เจ‚ เจนเฉŒเจฒเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‡เจ•เจธเจพเจฐ เจ•เฉเฉฐเจœเฉ€ เจนเฉˆเจธเจผเจฟเฉฐเจ— เจฆเฉ‡ เจฎเจฟเจ†เจฐเฉ€ เจธเจพเจงเจจ เจธเจฟเจฐเจซเจผ เจฌเจพเจˆเจจเจฐเฉ€ เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค เจชเจฐ เจ‡เจน เจ•เจฟเจธเฉ‡ เจ–เจพเจธ เจ•เฉ‡เจธ เจฒเจˆ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพเฅค

เจšเจพเจฒ เจฌเฉˆเจ— เจตเจฟเฉฑเจš เจนเฉˆ: เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฌเฉฑเจธ ASCII เจชเฉเจฐเฉ‹เจŸเฉ‹เจ•เฉ‹เจฒ เจคเฉ‡ เจธเจตเจฟเจš เจ•เจฐเจจเจพ เจนเฉˆ เจ…เจคเฉ‡ เจธเจญ เจ•เฉเจ เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพ.... เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ‡เจธ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš, เจตเจฟเฉฑเจš เจœเจตเจพเจฌ เจฒเฉฑเจญเจฃ เจฆเฉ€ เจ†เจฆเจค php.net 'เจคเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจ‡เฉฑเจ• เจฌเฉ‡เจฐเจนเจฟเจฎ เจฎเจœเจผเจพเจ• เจ–เฉ‡เจกเจฟเจ†. เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เฉฑเจฅเฉ‡ เจธเจนเฉ€ เจœเจตเจพเจฌ เจจเจนเฉ€เจ‚ เจฎเจฟเจฒเฉ‡เจ—เจพ... เจœเจฆเฉ‹เจ‚ เจคเฉฑเจ•, เจฌเฉ‡เจธเจผเจ•, เจคเฉเจธเฉ€เจ‚ เจ…เฉฐเจค เจคเฉฑเจ• เจธเจ•เฉเจฐเฉ‹เจฒ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡, เจœเจฟเฉฑเจฅเฉ‡ เจญเจพเจ— เจตเจฟเฉฑเจš "เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฏเฉ‹เจ—เจฆเจพเจจ เจจเฉ‹เจŸเจธ" เจตเจซเจผเจพเจฆเจพเจฐ เจนเฉ‹ เจœเจพเจตเฉ‡เจ—เจพ เจ…เจคเฉ‡ เจ—เจฒเจค เจขเฉฐเจ— เจจเจพเจฒ เจจเจพเจชเจธเฉฐเจฆ เจœเจตเจพเจฌ.

เจนเจพเจ‚, เจธเจนเฉ€ เจตเจฟเจ•เจฒเจช เจฆเจพ เจจเจพเจฎ เจนเฉˆ memcached.sess_binary_protocol. เจ‡เจน เจ…เจฏเฉ‹เจ— เจนเฉ‹เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจธเฉˆเจธเจผเจจ เจ•เฉฐเจฎ เจ•เจฐเจจเจพ เจธเจผเฉเจฐเฉ‚ เจ•เจฐ เจฆเฉ‡เจฃเจ—เฉ‡เฅค เจœเฉ‹ เจฌเจšเจฟเจ† เจนเฉˆ เจ‰เจน เจนเฉˆ เจฎเฉˆเจ•เจฐเฉ‹เจŸเจฐ เจตเจพเจฒเฉ‡ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจจเฉ‚เฉฐ PHP เจจเจพเจฒ เจ‡เฉฑเจ• เจชเฉŒเจก เจตเจฟเฉฑเจš เจชเจพเจ‰เจฃเจพ!

เจธเจฟเฉฑเจŸเจพ

เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจธเจฟเจฐเจซเจผ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจฌเจฆเจฒเจพเจ… เจจเจพเจฒ, เจ…เจธเฉ€เจ‚ เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจนเฉฑเจฒ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจนเฉ‹ เจ—เจ: เจฎเฉˆเจฎเจ•เฉˆเจšเจก เจซเจพเจฒเจŸ เจธเจนเจฟเจฃเจธเจผเฉ€เจฒเจคเจพ เจฆเฉ‡ เจจเจพเจฒ เจฎเฉเฉฑเจฆเจพ เจนเฉฑเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจ…เจคเฉ‡ เจ•เฉˆเจธเจผ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฆเฉ€ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจตเจงเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจฆเฉ‡ เจธเจชเฉฑเจธเจผเจŸ เจซเจพเจ‡เจฆเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจ‡เจธ เจจเฉ‡ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ เจ•เฉฐเจฎ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจšเจพเจฒ-เจšเจฒเจฃ เจฒเจˆ เจœเจ—เฉเจนเจพ เจฆเจฟเฉฑเจคเฉ€: เจœเจฆเฉ‹เจ‚ เจธเจพเจฐเฉ‡ เจญเจพเจ—เจพเจ‚ เจ•เฉ‹เจฒ เจฐเจฟเจœเจผเจฐเจต เจนเฉเฉฐเจฆเจพ เจนเฉˆ, เจคเจพเจ‚ เจชเฉเจฐเจฌเฉฐเจงเจ• เจฆเจพ เจœเฉ€เจตเจจ เจฌเจนเฉเจค เจธเจฐเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจนเจพเจ‚, เจ‡เจธ เจตเจฟเจงเฉ€ เจฆเฉ€เจ†เจ‚ เจ†เจชเจฃเฉ€เจ†เจ‚ เจ•เจฎเฉ€เจ†เจ‚ เจตเฉ€ เจนเจจ, เจ‡เจน เจ‡เฉฑเจ• "เจฌเจธเจพเจ–เจพ" เจตเจฐเจ—เจพ เจฒเฉฑเจ— เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจœเฉ‡ เจ‡เจน เจชเฉˆเจธเฉ‡ เจฆเฉ€ เจฌเจšเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจธเจฎเฉฑเจธเจฟเจ† เจจเฉ‚เฉฐ เจฆเฉฑเจฌเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจจเจตเฉ€เจ‚เจ†เจ‚ เจชเฉˆเจฆเจพ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ - เจ•เจฟเจ‰เจ‚ เจจเจนเฉ€เจ‚?

PS

เจธเจพเจกเฉ‡ เจฌเจฒเฉŒเจ— 'เจคเฉ‡ เจตเฉ€ เจชเฉœเฉเจนเฉ‹:

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹