เจเจฟเจธเฉ เจตเฉ เจญเจพเจธเจผเจพ เจตเจฟเฉฑเจ เจเฉฑเจ-เจฒเฉเจก เจตเจพเจฒเฉ เจชเฉเจฐเฉเจเฉเจเจเจพเจ เจจเฉเฉฐ เจตเจฟเจเจธเจค เจเจฐเจจ เจฒเจ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผ เจชเจนเฉเฉฐเจ เจ
เจคเฉ เจตเจฟเจธเจผเฉเจธเจผ เจธเจพเจงเจจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจชเจฐ เจเจฆเฉเจ PHP เจตเจฟเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจเฉฑเจฒ เจเจเจเจฆเฉ เจนเฉ, เจคเจพเจ เจธเจฅเจฟเจคเฉ เจเฉฐเจจเฉ เจตเจฟเจเฉ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจคเฉเจนเจพเจจเฉเฉฐ เจตเจฟเจเจพเจธ เจเจฐเจจเจพ เจชเฉเจเจฆเจพ เจนเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ,
เจฎเฉเจเฉ เจฆเจพ เจนเฉเจฐเฉ เจธเจฟเจฎเจซเจจเฉ 2.3 เจซเจฐเฉเจฎเจตเจฐเจ 'เจคเฉ เจ เจงเจพเจฐเจค เจเฉฑเจ PHP เจเจชเจฒเฉเจเฉเจธเจผเจจ เจนเฉ, เจเฉ เจเจฟ เจ เจชเจกเฉเจ เจเจฐเจจ เจฆเฉเจเจ เจตเจชเจพเจฐเจ เจฏเฉเจเจจเจพเจตเจพเจ เจตเจฟเฉฑเจ เจฌเจฟเจฒเจเฉเจฒ เจธเจผเจพเจฎเจฒ เจจเจนเฉเจ เจนเฉเฅค เจเจพเจซเจผเฉ เจฎเจฟเจเจฐเฉ เจธเฉเจธเจผเจจ เจธเจเฉเจฐเฉเจเจผ เจฆเฉ เจเจฒเจพเจตเจพ, เจเจธ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจชเฉเจฐเฉ เจตเจฐเจคเฉเจ เจเฉเจคเฉ "เจธเจญ เจเฉเจ เจเฉเจธเจผ เจเจฐเจจเจพ" เจจเฉเจคเฉ memcached เจตเจฟเฉฑเจ: เจกเฉเจเจพเจฌเฉเจธ เจ เจคเฉ API เจธเจฐเจตเจฐเจพเจ เจฒเจ เจฌเฉเจจเจคเฉเจเจ เจฆเฉ เจเจตเจพเจฌ, เจตเฉฑเจ-เจตเฉฑเจ เจซเจฒเฉเจ, เจเฉเจก เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจจเฉเฉฐ เจธเจฟเฉฐเจเฉเจฐเฉเจจเจพเจเจเจผ เจเจฐเจจ เจฒเจ เจคเจพเจฒเฉ เจ เจคเฉ เจนเฉเจฐ เจฌเจนเฉเจค เจเฉเจเฅค เจ เจเจฟเจนเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจฎเฉเจฎเจเฉเจเจก เจฆเจพ เจเฉเฉฑเจเจฃเจพ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจธเฉฐเจเจพเจฒเจจ เจฒเจ เจเจพเจคเจ เจฌเจฃ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเฉเจธเจผ เจฆเจพ เจจเฉเจเจธเจพเจจ เจเฉฐเจญเฉเจฐ เจจเจคเฉเจเจฟเจเจ เจตเฉฑเจฒ เจเฉเจฆเจพ เจนเฉ: DBMS เจธเฉเจฎเจพเจ 'เจคเฉ เจซเจเจฃเจพ เจธเจผเฉเจฐเฉ เจนเฉ เจเจพเจเจฆเจพ เจนเฉ, API เจธเฉเจตเจพเจตเจพเจ เจฌเฉเจจเจคเฉเจเจ 'เจคเฉ เจชเจพเจฌเฉฐเจฆเฉ เจฒเจเจพเจเจฃเจพ เจธเจผเฉเจฐเฉ เจเจฐ เจฆเจฟเฉฐเจฆเฉเจเจ เจนเจจ, เจเจฆเจฟ. เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจธเจฅเจฟเจฐ เจเจฐเจจ เจตเจฟเฉฑเจ เจเจ เจฎเจฟเฉฐเจ เจฒเฉฑเจ เจธเจเจฆเฉ เจนเจจ, เจ เจคเฉ เจเจธ เจธเจฎเฉเจ เจฆเฉเจฐเจพเจจ เจธเฉเจตเจพ เจฌเจนเฉเจค เจนเฉเจฒเฉ เจเจพเจ เจชเฉเจฐเฉ เจคเจฐเฉเจนเจพเจ เจ เจฃเจเจชเจฒเจฌเจง เจนเฉเจตเฉเจเฉเฅค
เจธเจพเจจเฉเฉฐ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจธเฉ เจฅเฉเฉเฉเจนเฉ เจเจคเจจ เจจเจพเจฒ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจเจฟเจคเจฟเจเฉ เจคเฉเจฐ 'เจคเฉ เจธเจเฉเจฒ เจเจฐเจจ เจฆเฉ เจธเจฎเจฐเฉฑเจฅเจพ, i.e. เจธเจฐเฉเจค เจเฉเจก เจตเจฟเฉฑเจ เจเฉฑเจเฉ-เจเฉฑเจ เจฌเจฆเจฒเจพเจ เจ เจคเฉ เจชเฉเจฐเฉ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจฐเฉฑเจเจฟเจ เจเจฟเจ เจนเฉเฅค เจเฉเจธเจผ เจจเฉเฉฐ เจจเจพ เจธเจฟเจฐเจซ เจ เจธเจซเจฒเจคเจพเจตเจพเจ เจชเฉเจฐเจคเฉ เจฐเฉเจงเจ เจฌเจฃเจพเจ, เจฌเจฒเจเจฟ เจเจธ เจคเฉเจ เจกเฉเจเจพ เจฆเฉ เจจเฉเจเจธเจพเจจ เจจเฉเฉฐ เจเฉฑเจ เจคเฉเจ เจเฉฑเจ เจเจฐเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเฅค
memcached เจตเจฟเฉฑเจ เจเฉ เจเจฒเจค เจนเฉ?
เจเจฎ เจคเฉเจฐ 'เจคเฉ, PHP เจฒเจ เจฎเฉเจฎเจเฉเจเจก เจเจเจธเจเฉเจเจธเจผเจจ เจกเจฟเจธเจเจฐเฉเจฌเจฟเจเจเจก เจกเฉเจเจพ เจ เจคเฉ เจธเฉเจธเจผเจจ เจธเจเฉเจฐเฉเจ เจจเฉเฉฐ เจฌเจพเจเจธ เจคเฉเจ เจฌเจพเจนเจฐ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจเจฐเจฆเจพ เจนเฉเฅค เจเจเจธเจพเจฐ เจเฉเฉฐเจเฉ เจนเฉเจธเจผเจฟเฉฐเจ เจฒเจ เจตเจฟเจงเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจธเจฎเจพเจจ เจฐเฉเจช เจตเจฟเฉฑเจ เจตเฉฐเจกเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉ เจนเฉ, เจนเจฐเฉเจ เจเจพเจธ เจเฉเฉฐเจเฉ เจจเฉเฉฐ เจธเจฎเฉเจน เจฆเฉ เจเฉฑเจ เจเจพเจธ เจธเจฐเจตเจฐ เจฒเจ เจตเจฟเจฒเฉฑเจเจฃ เจฐเฉเจช เจตเจฟเฉฑเจ เจธเฉฐเจฌเฉเจงเจฟเจค เจเจฐเจฆเฉ เจนเฉ, เจ เจคเฉ เจฌเจฟเจฒเจ-เจเจจ เจซเฉเจฒเจเจตเจฐ เจเฉเจฒ เจเฉเจเจฟเฉฐเจ เจธเฉเจตเจพ เจฆเฉ เจเฉฑเจ เจเจชเจฒเจฌเจงเจคเจพ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจเจฆเฉ เจนเจจ (เจชเจฐ, เจฌเจฆเจเจฟเจธเจฎเจคเฉ เจจเจพเจฒ, เจเฉเจ เจกเจพเจเจพ เจจเจนเฉเจ).
เจธเจผเฉเจธเจผเจจ เจธเจเฉเจฐเฉเจ เจจเจพเจฒ เจเฉเจเจผเจพเจ เจฅเฉเฉเฉเจเจ เจฌเจฟเจนเจคเจฐ เจนเจจ: เจคเฉเจธเฉเจ เจเฉเจเจซเจฟเจเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉ memcached.sess_number_of_replicas
, เจเจฟเจธ เจฆเฉ เจจเจคเฉเจเฉ เจตเจเฉเจ เจกเฉเจเจพ เจจเฉเฉฐ เจเฉฑเจ เจตเจพเจฐ เจตเจฟเฉฑเจ เจเจ เจธเจฐเจตเจฐเจพเจ เจเฉฑเจคเฉ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ, เจ
เจคเฉ เจเฉฑเจ เจฎเฉเจฎเจเฉเจเจก เจเจฆเจพเจนเจฐเจฃ เจฆเฉ เจ
เจธเจซเจฒ เจนเฉเจฃ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจกเฉเจเจพ เจจเฉเฉฐ เจฆเฉเจเจฟเจเจ เจคเฉเจ เจเฉเจฐเจพเจเจธเจซเจฐ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเฉเจเจฐ เจธเจฐเจตเจฐ เจฌเจฟเจจเจพเจ เจกเฉเจเจพ เจฆเฉ เจเจจเจฒเจพเจเจจ เจตเจพเจชเจธ เจเจเจเจฆเจพ เจนเฉ (เจเจฟเจตเฉเจ เจเจฟ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจฎเฉเฉ เจเจพเจฒเฉ เจนเฉเจฃ เจคเฉเจ เจฌเจพเจ
เจฆ เจนเฉเฉฐเจฆเจพ เจนเฉ), เจคเจพเจ เจเฉเจ เจเฉเฉฐเจเฉเจเจ เจเจธเจฆเฉ เจนเฉฑเจ เจตเจฟเฉฑเจ เจฎเฉเฉ เจตเฉฐเจกเฉเจเจ เจเจพเจฃเจเฉเจเจเฅค เจ
เจธเจฒ เจตเจฟเฉฑเจ เจเจธ เจฆเจพ เจฎเจคเจฒเจฌ เจนเฉเจตเฉเจเจพ เจธเฉเจธเจผเจจ เจกเจพเจเจพ เจฆเจพ เจจเฉเจเจธเจพเจจ, เจเจฟเจเจเจเจฟ เจฎเจฟเจธ เจนเฉเจฃ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเจฟเจธเฉ เจนเฉเจฐ เจชเฉเจฐเจคเฉเจเฉเจฐเจฟเจคเฉ 'เจคเฉ "เจเจพเจฃ" เจฆเจพ เจเฉเจ เจคเจฐเฉเจเจพ เจจเจนเฉเจ เจนเฉเฅค
เจฎเจฟเจเจฐเฉ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจธเฉฐเจฆ เจฎเฉเฉฑเจ เจคเฉเจฐ 'เจคเฉ เจเจฆเฉเจธเจผ เจนเจจ เจนเจฐเฉเจเฉฑเจเจฒ เจธเจเฉเจฒเจฟเฉฐเจ: เจเจน เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเจธเจผ เจจเฉเฉฐ เจตเจฟเจธเจผเจพเจฒ เจเจเจพเจฐ เจตเจฟเฉฑเจ เจตเจงเจพเจเจฃ เจ เจคเฉ เจตเฉฑเจ-เจตเฉฑเจ เจธเจฐเจตเจฐเจพเจ 'เจคเฉ เจนเฉเจธเจ เจเฉเจคเฉ เจเฉเจก เจคเฉเจ เจเจธ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจชเฉเจฐเจฆเจพเจจ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉ เจนเจจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจธเจพเจกเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ, เจธเจเฉเจฐ เจเฉเจคเฉ เจกเฉเจเจพ เจฆเฉ เจฎเจพเจคเจฐเจพ เจเจ เจเฉเจเจพเจฌเจพเจเจ เจคเฉเจ เจตเฉฑเจง เจจเจนเฉเจ เจนเฉ, เจ เจคเฉ เจเฉฑเจ เจเจพเจ เจฆเฉ เจจเฉเจกเจพเจ เจฆเฉ เจเจพเจฐเจเฉเจเจผเจพเจฐเฉ เจเจพเจซเจผเฉ เจนเฉ. เจเจธ เจ เจจเฉเจธเจพเจฐ, เจเฉฐเจฎ เจเจฐเจจ เจฆเฉ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเฉฑเจเฉ-เจเฉฑเจ เจเฉฑเจ เจเฉเจธเจผ เจเจฆเจพเจนเจฐเจจ เจจเฉเฉฐ เจเจพเจเจฎ เจฐเฉฑเจเจฆเฉ เจนเฉเจ เจฎเฉเจฎเจเฉเจเจก เจฆเฉ เจเจชเจฒเจฌเจงเจคเจพ เจจเฉเฉฐ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเจฃ เจฒเจ เจธเจฟเจฐเจซ เจเจชเจฏเฉเจเฉ เจฎเจฟเจเจฐเฉ เจเฉเจฒ เจนเฉ เจธเจเจฆเฉ เจนเจจเฅค เจนเจพเจฒเจพเจเจเจฟ, เจเจธ เจฎเฉเจเฉ เจฆเจพ เจตเฉ เจซเจพเจเจฆเจพ เจเจ เจพเจเจฃเจพ เจธเฉฐเจญเจต เจจเจนเฉเจ เจธเฉ... เจเฉฑเจฅเฉ เจเจน เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจตเจฐเจคเฉ เจเจ เจขเจพเจเจเฉ เจฆเฉ เจชเฉเจฐเจพเจคเจจเจคเจพ เจจเฉเฉฐ เจฏเจพเจฆ เจเจฐเจจ เจฏเฉเจ เจนเฉ, เจเจฟเจธ เจเจพเจฐเจจ เจธเจฐเจตเจฐเจพเจ เจฆเฉ เจเฉฑเจ เจชเฉเจฒ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจชเฉเจฐเจพเจชเจค เจเจฐเจจเจพ เจ เจธเฉฐเจญเจต เจธเฉเฅค เจเจ เจธเฉเจธเจผเจจ เจกเฉเจเจพ เจฆเฉ เจจเฉเจเจธเจพเจจ เจฌเจพเจฐเฉ เจตเฉ เจจเจพ เจญเฉเฉฑเจฒเฉเจ: เจเจชเจญเฉเจเจคเจพเจตเจพเจ เจฆเฉ เจตเจฟเจธเจผเจพเจฒ เจฒเฉเจเจเจเจ เจคเฉเจ เจเจพเจนเจ เจฆเฉ เจ เฉฑเจ เจฎเจฐเฉเฉ เจเจเฅค
เจเจฆเจฐเจธเจผเจ เจคเฉเจฐ 'เจคเฉ เจเจธเจฆเฉ เจฒเฉเฉ เจธเฉ เจฎเฉเจฎเจเฉเจเจก เจ
เจคเฉ เจฌเจพเจเจชเจพเจธ เจชเฉเจฐเจคเฉเจเฉเจฐเจฟเจคเฉเจเจ เจตเจฟเฉฑเจ เจฐเจฟเจเจพเจฐเจกเจพเจ เจฆเฉ เจจเจเจฒ เจเจฒเจคเฉ เจเจพเจ เจเจฒเจคเฉ เจฆเฉ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ. เจเจธ เจฐเจฃเจจเฉเจคเฉ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจตเจฟเฉฑเจ เจธเจพเจกเฉ เจฎเจฆเจฆ เจเฉเจคเฉ
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: เจคเฉเจนเจพเจจเฉเฉฐ เจฎเฉเจเจฐเฉเจเจฐ เจธเจฟเฉฑเจเจฃ เจฒเจ เจเจชเจฏเฉเจเฉ เจฒเจฟเฉฐเจ เจตเฉ เจฎเจฟเจฒ เจธเจเจฆเฉ เจนเจจ
เจฎเฉเจเจฐเฉเจเจฐ เจฌเจฃเจพเจเจฃเจพ เจ เจคเฉ เจเจฒเจพเจเจฃเจพ
เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ (เจ
เจคเฉ เจฎเฉเจฎเจเฉเจเจก) เจเฉเจฌเจฐเจจเฉเจเจธ เจตเจฟเฉฑเจ เจเจฒเจฆเฉ เจนเฉ - เจเจธ เจ
เจจเฉเจธเจพเจฐ, เจฎเฉเจเจฐเฉเจเจฐ เจตเฉ เจเฉฑเจฅเฉ เจธเจฅเจฟเจค เจนเฉเฅค เจฒเจ เจเฉฐเจเฉเจจเจฐ เจ
เจธเฉเจเจฌเจฒเฉ เจ
เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ
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: memcached เจตเจฟเฉฑเจ ASCII เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฌเจพเจเจจเจฐเฉ เจเฉฑเจ เจจเจพเจฒเฉเจ เจนเฉเจฒเฉ เจนเฉ, เจ เจคเฉ เจเจเจธเจพเจฐ เจเฉเฉฐเจเฉ เจนเฉเจธเจผเจฟเฉฐเจ เจฆเฉ เจฎเจฟเจเจฐเฉ เจธเจพเจงเจจ เจธเจฟเจฐเจซเจผ เจฌเจพเจเจจเจฐเฉ เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจฆเฉ เจนเจจเฅค เจชเจฐ เจเจน เจเจฟเจธเฉ เจเจพเจธ เจเฉเจธ เจฒเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจชเฉเจฆเจพ เจจเจนเฉเจ เจเจฐเจฆเจพเฅค
เจเจพเจฒ เจฌเฉเจ เจตเจฟเฉฑเจ เจนเฉ: เจคเฉเจนเจพเจจเฉเฉฐ เจฌเฉฑเจธ ASCII เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจคเฉ เจธเจตเจฟเจ เจเจฐเจจเจพ เจนเฉ เจ
เจคเฉ เจธเจญ เจเฉเจ เจเฉฐเจฎ เจเจฐเฉเจเจพ.... เจนเจพเจฒเจพเจเจเจฟ, เจเจธ เจฎเจพเจฎเจฒเฉ เจตเจฟเฉฑเจ, เจตเจฟเฉฑเจ เจเจตเจพเจฌ เจฒเฉฑเจญเจฃ เจฆเฉ เจเจฆเจค
เจนเจพเจ, เจธเจนเฉ เจตเจฟเจเจฒเจช เจฆเจพ เจจเจพเจฎ เจนเฉ memcached.sess_binary_protocol
. เจเจน เจ
เจฏเฉเจ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ, เจเจฟเจธ เจคเฉเจ เจฌเจพเจ
เจฆ เจธเฉเจธเจผเจจ เจเฉฐเจฎ เจเจฐเจจเจพ เจธเจผเฉเจฐเฉ เจเจฐ เจฆเฉเจฃเจเฉเฅค เจเฉ เจฌเจเจฟเจ เจนเฉ เจเจน เจนเฉ เจฎเฉเจเจฐเฉเจเจฐ เจตเจพเจฒเฉ เจเฉฐเจเฉเจจเจฐ เจจเฉเฉฐ PHP เจจเจพเจฒ เจเฉฑเจ เจชเฉเจก เจตเจฟเฉฑเจ เจชเจพเจเจฃเจพ!
เจธเจฟเฉฑเจเจพ
เจเจธ เจคเจฐเฉเจนเจพเจ, เจธเจฟเจฐเจซเจผ เจฌเฉเจจเจฟเจเจฆเฉ เจขเจพเจเจเฉ เจฆเฉ เจฌเจฆเจฒเจพเจ เจจเจพเจฒ, เจ เจธเฉเจ เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉ เจเจ: เจฎเฉเจฎเจเฉเจเจก เจซเจพเจฒเจ เจธเจนเจฟเจฃเจธเจผเฉเจฒเจคเจพ เจฆเฉ เจจเจพเจฒ เจฎเฉเฉฑเจฆเจพ เจนเฉฑเจฒ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจ เจคเฉ เจเฉเจธเจผ เจธเจเฉเจฐเฉเจ เจฆเฉ เจญเจฐเฉเจธเฉเจฏเฉเจเจคเจพ เจจเฉเฉฐ เจตเจงเจพเจเจ เจเจฟเจ เจนเฉเฅค เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฆเฉ เจธเจชเฉฑเจธเจผเจ เจซเจพเจเจฆเจฟเจเจ เจคเฉเจ เจเจฒเจพเจตเจพ, เจเจธ เจจเฉ เจชเจฒเฉเจเจซเจพเจฐเจฎ 'เจคเฉ เจเฉฐเจฎ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจเจพเจฒ-เจเจฒเจฃ เจฒเจ เจเจเฉเจนเจพ เจฆเจฟเฉฑเจคเฉ: เจเจฆเฉเจ เจธเจพเจฐเฉ เจญเจพเจเจพเจ เจเฉเจฒ เจฐเจฟเจเจผเจฐเจต เจนเฉเฉฐเจฆเจพ เจนเฉ, เจคเจพเจ เจชเฉเจฐเจฌเฉฐเจงเจ เจฆเจพ เจเฉเจตเจจ เจฌเจนเฉเจค เจธเจฐเจฒ เจนเฉเฉฐเจฆเจพ เจนเฉเฅค เจนเจพเจ, เจเจธ เจตเจฟเจงเฉ เจฆเฉเจเจ เจเจชเจฃเฉเจเจ เจเจฎเฉเจเจ เจตเฉ เจนเจจ, เจเจน เจเฉฑเจ "เจฌเจธเจพเจเจพ" เจตเจฐเจเจพ เจฒเฉฑเจ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจเฉ เจเจน เจชเฉเจธเฉ เจฆเฉ เจฌเจเจค เจเจฐเจฆเจพ เจนเฉ, เจธเจฎเฉฑเจธเจฟเจ เจจเฉเฉฐ เจฆเฉฑเจฌเจฆเจพ เจนเฉ เจ เจคเฉ เจจเจตเฉเจเจเจ เจชเฉเจฆเจพ เจจเจนเฉเจ เจเจฐเจฆเจพ - เจเจฟเจเจ เจจเจนเฉเจ?
PS
เจธเจพเจกเฉ เจฌเจฒเฉเจ 'เจคเฉ เจตเฉ เจชเฉเฉเจนเฉ:
- "เจกเฉเจช เจจเจพเจฒ เจ
เจญเจฟเจเจธ เจเจฐเฉ" (เจเจฆเจพเจนเจฐเจฃ เจตเจเฉเจ เจธเจฟเจฎเจซเจจเฉ-เจกเฉเจฎเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ):
เจญเจพเจ 1 (เจธเจงเจพเจฐเจจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃเจพ) ะธเจญเจพเจ 2 (เจนเฉเจฒเจฎ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจฌเจฐเจจเฉเจเจธ เจฒเจ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจเจพ) ; - ยซ
เจเฉเจฌเจฐเจจเฉเจเจธ เจฆเฉ เจจเจพเจฒ เจเฉเจตเจจ เจคเฉเจ: เจเจฟเจตเฉเจ HTTP เจธเจฐเจตเจฐ เจจเฉ เจธเจชเฉเจจเจฟเจธเจผเฉเจเจ เจฆเจพ เจชเฉฑเจ เจจเจนเฉเจ เจฒเจฟเจ ".
เจธเจฐเฉเจค: www.habr.com