เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เดกเดฟเดธเตเดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฐเดธเด•เดฐเดฎเดพเดฏ เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏ เดคเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เดญเดพเดทเดฏเดฟเตฝ (เดธเตเด•เดพเดฒ) เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเต‡เดฐเดฟเดŸเตเดŸเต เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดชเต‹เดธเตเดฑเตเดฑเต เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเตฝเด•เตเด•เดฏเตเด‚ เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเดฒเต‡เด•เตเด•เต เด’เดฐเต เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเดฟเดง เดตเดถเด™เตเด™เตพ เดšเตผเดšเตเดš เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เดกเดฟเดธเตเดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเดกเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

(เด‡เด‚เด—เตเดฒเต€เดทเต)

เด†เดฎเตเด–เด‚

เด’เดฐเต เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เดณเตเดฎเดพเดฏเดฟ เดธเดฎเดจเตเดตเดฏเดฟเดชเตเดชเดฟเดšเตเดš เดถเดฐเดฟเดฏเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดพเดฃเต. DevOps เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เตพ (เดŸเต†เดฑเดพเดซเต‹เด‚, เด…เตปเดธเดฟเดฌเดฟเตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเตเดชเต‹เดฒเตเดณเตเดณ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚) เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เดธเตเดตเดฏเดฎเต‡เดต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต (เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เด“เดฐเต‹ เดจเต‹เดกเดฟเดจเตเด‚ เดชเตเดฐเดคเตเดฏเต‡เด•เด‚). เดŽเดฒเตเดฒเดพ เด†เดถเดฏเดตเดฟเดจเดฟเดฎเดฏ เดจเต‹เดกเตเด•เดณเตเด‚ เด’เดฐเต‡ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต (เด’เดฐเต‡ เดชเดคเดฟเดชเตเดชเต เด‰เตพเดชเตเดชเต†เดŸเต†). เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดชเตŠเดฐเตเดคเตเดคเด•เตเด•เต‡เดŸเต เดžเด™เตเด™เดณเตเดŸเต† เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเตฝ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚. JVM เดฒเต‹เด•เดคเตเดคเต, เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏ เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดŸเต† เด…เดคเต‡ เดชเดคเดฟเดชเตเดชเต เดŽเดฒเตเดฒเดพเดฏเดฟเดŸเดคเตเดคเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚ เดŽเดจเตเดจเดคเดพเดฃเต เดˆ เด†เดตเดถเตเดฏเด•เดคเดฏเตเดŸเต† เด’เดฐเต เด…เดจเดจเตเดคเดฐเดซเดฒเด‚.

เด’เดฐเต เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต? เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดžเด™เตเด™เตพ เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเดจเตเดจเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เตพเด•เตเด•เตเด‚ เดฏเต‚เดฃเดฟเดฑเตเดฑเต เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เด‰เดฃเตเดŸเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต. (เดฑเตบเดŸเตˆเดฎเดฟเดฒเต‡เด•เตเด•เต เดŸเต†เดธเตเดฑเตเดฑเต เดซเดฒเด™เตเด™เตพ เดŽเด•เตเดธเตเดŸเตเดฐเดพเดชเต‹เดณเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต เด˜เดŸเตเดŸเดคเตเดคเดฟเดฒเตเด‚ เดฑเตบเดŸเตˆเดฎเดฟเดฒเตเด‚ เดžเด™เตเด™เตพ เดธเดฎเดพเดจเดฎเดพเดฏ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เดจเตฝเด•เดฃเด‚.)

เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เตŠเดชเตเดชเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เดŽเดฒเตเดฒเดพเดฏเดฟเดŸเดคเตเดคเตเด‚ เด’เดฐเต‡ เด•เตเดฒเดพเดธเตเดชเดพเดคเตเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต. เดฑเตบเดŸเตˆเดฎเดฟเตฝ เด’เดฐเต‡ เด•เตเดฒเดพเดธเตเดชเดพเดคเตเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเด•เดฏเดพเดฃเต เดจเดฎเตเดฎเตพ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเต. (เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เด•เตเดฒเดพเดธเตโ€Œเดชเดพเดคเตเดคเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดจเต‹เดกเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏเตเด‚ เดธเดพเดงเตเดฏเดฎเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เด‡เดคเต เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเตเด‚ เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเตเด•เดณเตเดŸเต†เดฏเตเด‚ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเด•เตพ เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต.) เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เด’เดฐเต‡ เด•เตเดฒเดพเดธเตเดชเดพเดคเตเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต.

เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเด•เดธเดฟเด•เตเด•เตเดจเตเดจเต. เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเดฐเดฟเดฃเดพเดฎเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดตเดฟเดง เด˜เดŸเตเดŸเด™เตเด™เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เดžเด™เตเด™เตพ เดชเดคเดฟเดชเตเดชเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเตเดŸเต† เดตเตเดฏเดคเตเดฏเดธเตเดค เดชเดคเดฟเดชเตเดชเตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเตเดจเตเดจเดคเตเด‚ เดฏเตเด•เตเดคเดฟเดธเดนเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดชเดคเดฟเดชเตเดชเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดจเตเดจเต† เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเด•. เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเตฝ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดณเตเดณเต‚ เดŽเด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เดชเดคเดฟเดชเตเดชเต เดจเดฎเตเดชเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดžเด™เตเด™เตพ เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเตŠเดกเด•เตเดทเตป เด‡เตปเดธเตโ€Œเดฑเตเดฑเตปเดธเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เดชเดฒเดคเตเด‚ เดตเต‡เดฃเตเดŸเดฟเดตเดฐเตเด‚
เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดถเดพเด–เด•เดณเตเด‚ เดชเดคเดฟเดชเตเดชเดฟเดจเต เดชเตเดฑเดฎเต‡ เด’เดฐเต เด…เดงเดฟเด• เดฒเต‡เดฌเดฒเตเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดฌเตเดฐเดพเดžเตเดšเดฟเดจเตเดฑเต† เดชเต‡เดฐเต). เด‡เดคเตเดตเดดเดฟ เดจเดฎเตเด•เตเด•เต เด•เตƒเดคเตเดฏเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเตเดฏเด•เตเดคเดฎเดพเดฏเดฟ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เด“เดฐเต‹ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดเดกเดจเตเดฑเดฟเดซเดฏเดฑเตเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดจเต‹เดกเตเด•เตพ, เดชเต‹เตผเดŸเตเดŸเตเด•เตพ, เดฌเดพเดนเตเดฏ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ, เดฒเตˆเดฌเตเดฐเดฑเดฟ เดชเดคเดฟเดชเตเดชเตเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเด‚เดฏเต‹เดœเดจเดตเตเดฎเดพเดฏเดฟ เด…เดฆเตเดตเดฟเดคเต€เดฏเดฎเดพเดฏเดฟ เดฏเต‹เดœเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เด’เดฐเต เดฌเตเดฐเดพเดžเตเดšเต เดฎเดพเดคเตเดฐเดฎเต‡ เด‰เดณเตเดณเต‚เดตเต†เดจเตเดจเตเด‚ เด’เดฐเต เดกเต‹เดŸเตเดŸเต เด•เตŠเดฃเตเดŸเต เดตเต‡เตผเดคเดฟเดฐเดฟเดšเตเดš เดฎเต‚เดจเตเดจเต เดธเด‚เด–เตเดฏเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเดพเดงเดพเดฐเดฃ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเดฎเต†เดจเตเดจเตเด‚ เดžเด™เตเด™เตพ เด…เดจเตเดฎเดพเดจเดฟเด•เตเด•เตเด‚ (1.2.3).

เด†เดงเตเดจเดฟเด• เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเด•เดณเดฟเตฝ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเตเด•เตพ เด…เดชเต‚เตผเดตเตเดตเดฎเดพเดฏเดฟ เดธเตเดตเดฎเต‡เดงเดฏเดพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดฎเดฟเด•เตเด•เดชเตเดชเต‹เดดเตเด‚ เด…เดต เดตเดฟเดจเตเดฏเดพเดธเดธเดฎเดฏเดคเตเดคเต เดœเดจเดฑเต‡เดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดต เดฎเต‡เดฒเดฟเตฝ เดธเตเดชเตผเดถเดฟเด•เตเด•เดฟเดฒเตเดฒ (เด…เดคเดฟเดจเดพเตฝ เด’เดจเตเดจเตเด‚ เดคเด•เตผเด•เตเด•เดฐเตเดคเต). เด’เดฐเต เดธเตเดตเดพเดญเดพเดตเดฟเด• เดšเต‹เดฆเตเดฏเด‚ เด‰เดฏเตผเดจเตเดจเตเดตเดฐเตเดจเตเดจเต: เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เด‡เดชเตเดชเต‹เดดเตเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเต‹เตผเดฎเดพเดฑเตเดฑเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเต? เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ เด•เด‚เดชเตˆเตฝ-เดŸเตˆเด‚ เดšเต†เด•เตเด•เตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดชเตเดฐเดฏเต‹เดœเดจเดคเตเดคเดฟเดจเตเด‚ เดฑเต†เด—เตเดฒเตผ เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เด’เดฐเต เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เดฌเดฆเดฒเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต.

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เด’เดฐเต เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚ เดžเด™เตเด™เตพ เดชเดฐเตเดฏเดตเต‡เด•เตเดทเดฃเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

เดˆ เดตเดฟเดญเดพเด—เด‚ เด’เดฐเต เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเตฝเด•เตเดจเตเดจเต. เดฐเดฃเตเดŸเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต - เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดตเตเด‚ เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจ เด•เตเดฒเดฏเดจเตเดฑเตเด‚. เดˆ เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ, เดฐเดฃเตเดŸเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด“เดชเตเดทเดจเตเด•เตพ เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด“เดชเตเดทเดจเดฟเตฝ, เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เด’เดฐเต‡ เดจเต‹เดกเดฟเตฝ เดธเตเดฅเดฟเดคเดฟเดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดฎเดฑเตเดฑเตŠเดฐเต เด“เดชเตเดทเดจเดฟเตฝ - เดตเตเดฏเดคเตเดฏเดธเตเดค เดจเต‹เดกเตเด•เดณเดฟเตฝ.

เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดจเต‹เดกเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดšเดฟเดฒ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเต‹เดกเตเด•เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚ NodeId:

sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId

เด…เดฅเดตเดพ

case class NodeId(hostName: String)

เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเต‹เดฒเตเด‚

object Singleton
type NodeId = Singleton.type

เดจเต‹เดกเตเด•เตพ เดตเดฟเดตเดฟเดง เดฑเต‹เดณเตเด•เตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เด…เดต เดธเต‡เดตเดจเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดฏเตเด•เตเด•เดฟเดŸเดฏเดฟเตฝ TCP/HTTP เด•เดฃเด•เตเดทเดจเตเด•เตพ เดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เด’เดฐเต TCP เด•เดฃเด•เตเดทเตป เดตเดฟเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด•เตเดฑเดžเตเดžเดคเต เด’เดฐเต เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเดฑเต†เด™เตเด•เดฟเดฒเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดธเต†เตผเดตเดฑเตเด‚ เด’เดฐเต‡ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เดพเตป เด† เดชเต‹เตผเดŸเตเดŸเดฟเตฝ เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดชเตเดฐเดคเดฟเดซเดฒเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เตเดฒเดพเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เด•เดฃเด•เตเดทเตป เดตเดฟเดตเดฐเดฟเด•เตเด•เตเด‚:

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

เดŽเดตเดฟเดŸเต† Port - เด’เดฐเต เดชเต‚เตผเดฃเตเดฃเดธเด‚เด–เตเดฏ Int เดธเตเดตเต€เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต† เดถเตเดฐเต‡เดฃเดฟ เดธเต‚เดšเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต:

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

เดถเตเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดš เดคเดฐเด™เตเด™เตพ

เดฒเตˆเดฌเตเดฐเดฑเดฟ เด•เดพเดฃเตเด• เดชเดฐเดฟเดทเตโ€Œเด•เตเด•เดฐเดฟเดšเตเดšเต ะธ เดŽเดจเตเดฑเต† เดฑเดฟเดชเตเดชเต‹เตผเดŸเตเดŸเต. เดšเตเดฐเตเด•เตเด•เดคเตเดคเดฟเตฝ, เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏเดคเตเดคเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจ เดคเดฐเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพ เดšเต‡เตผเด•เตเด•เดพเตป เดฒเตˆเดฌเตเดฐเดฑเดฟ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดธเดพเดงเตเดตเดพเดฏ เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ 16-เดฌเดฟเดฑเตเดฑเต เดชเต‚เตผเดฃเตเดฃเดธเด‚เด–เตเดฏเด•เดณเดพเดฃเต. เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดพเดฏเดฟ, เดถเตเดฆเตเดงเต€เด•เดฐเดฟเดšเตเดš เดฒเตˆเดฌเตเดฐเดฑเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเตผเดฌเดจเตเดงเดฎเดฒเตเดฒ, เดชเด•เตเดทเต‡ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดฎเตเดชเตˆเดฒเดฑเดฟเดจเตเดฑเต† เด•เดดเดฟเดตเต เด‡เดคเต เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต.

HTTP (REST) โ€‹โ€‹เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เตพเด•เตเด•เดพเดฏเดฟ, เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเดฑเดฟเดจเต เดชเตเดฑเดฎเต‡, เดžเด™เตเด™เตพเด•เตเด•เต เดธเต‡เดตเดจเดคเตเดคเดฟเดฒเต‡เด•เตเด•เตเดณเตเดณ เดชเดพเดคเดฏเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚:

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

เดซเดพเดจเตเดฑเด‚ เดคเดฐเด™เตเด™เตพ

เด•เด‚เดชเตˆเตฝ เดธเดฎเดฏเดคเตเดคเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดคเดฟเดฐเดฟเดšเตเดšเดฑเดฟเดฏเดพเตป, เดžเด™เตเด™เตพ เด•เตเดฒเดพเดธเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเตเดค เด’เดฐเต เดคเดฐเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดฑเตบเดŸเตˆเดฎเดฟเตฝ เดžเด™เตเด™เตพ เด’เดฐเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‡เตปเดธเตโ€Œเดฑเตเดฑเตปเดธเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเตเดคเดคเดพเดฃเต เดˆ เดคเต€เดฐเตเดฎเดพเดจเดคเตเดคเดฟเดจเต เด•เดพเดฐเดฃเด‚, เดŽเดจเตเดจเดพเตฝ เด•เด‚เดชเตˆเดฒเตผ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เดณเตเดŸเต† เด…เดจเตเดฏเต‹เดœเตเดฏเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เด…เดจเตเดšเดฟเดคเดฎเดพเดฏ เด’เดฐเต เดธเต‡เดตเดจเด‚ เด†เดถเตเดฐเดฟเดคเดคเตเดตเดฎเดพเดฏเดฟ เด•เตˆเดฎเดพเดฑเดพเตป เดžเด™เตเด™เตพเด•เตเด•เต เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

Json เดธเต€เดฐเดฟเดฏเดฒเตˆเดธเต‡เดทเดจเต‹เดŸเตเด•เต‚เดŸเดฟเดฏ REST API เด†เดฃเต เดชเตŠเดคเตเดตเดพเดฏ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เดณเดฟเตฝ เด’เดจเตเดจเต:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

เดŽเดตเดฟเดŸเต† RequestMessage - เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดคเดฐเด‚, ResponseMessage - เดชเตเดฐเดคเดฟเด•เดฐเดฃ เดคเดฐเด‚.
เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดตเดฟเดตเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดค เดจเตฝเด•เตเดจเตเดจ เดฎเดฑเตเดฑเต เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดตเดฟเดตเดฐเดฃเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเดจเตเดฑเต† เดฒเดณเดฟเดคเดฎเดพเดฏ เด’เดฐเต เดชเดคเดฟเดชเตเดชเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

เด‡เดตเดฟเดŸเต† เด…เดญเตเดฏเตผเดคเตเดฅเดจ url-เตฝ เดšเต‡เตผเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด†เดฃเต, เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ HTTP เดชเตเดฐเดคเดฟเด•เดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดฌเต‹เดกเดฟเดฏเดฟเดฒเต† เดฑเดฟเดŸเตเดŸเต‡เตบ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เด†เดฃเต.

เดธเต‡เดตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเต‡เดตเดจ เดจเดพเดฎเด‚, เดชเต‹เตผเดŸเตเดŸเตเด•เตพ, เดกเดฟเดชเตปเดกเตปเดธเดฟเด•เตพ เดŽเดจเตเดจเดฟเดตเดฏเดพเตฝ เดตเดฟเดตเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดˆ เด˜เดŸเด•เด™เตเด™เดณเต† เดชเดฒ เดคเดฐเดคเตเดคเดฟเตฝ เดธเตเด•เดพเดฒเดฏเดฟเตฝ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เดพเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, HList-s, เดฌเต€เดœเด—เดฃเดฟเดค เดกเดพเดฑเตเดฑ เดคเดฐเด™เตเด™เตพ). เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดžเด™เตเด™เตพ เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เตบ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เดณเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚ traitเดŽเดธเต. (เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เตบ เดˆ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเดฎเดพเดฏ เด˜เดŸเด•เดฎเดฒเตเดฒ. เด‡เดคเต เดธเดพเดงเตเดฏเดฎเดพเดฏ เด’เดฐเต เดจเดŸเดชเตเดชเดพเด•เตเด•เตฝ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.)

เดธเต‡เดตเดจเด™เตเด™เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด†เดถเตเดฐเดฟเดคเดคเตเดตเดคเตเดคเต† เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจ เดฐเต€เดคเดฟเด•เดณเดพเดฏเดฟ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เดพเด‚ EndPointเดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เดณเตเดŸเต†:

  type EchoProtocol[A] = SimpleHttpGetRest[A, A]

  trait EchoConfig[A] extends ServiceConfig {
    def portNumber: PortNumber = 8081
    def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
    def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
  }

เด’เดฐเต เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเต‡เดฃเตเดŸเดคเต เด’เดฐเต เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเดฑเตเด‚ เดชเต‹เตผเดŸเตเดŸเต เดŽเด•เตเด•เต‹ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเดจเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเตเดฑเต† เดธเต‚เดšเดจเดฏเตเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต. เดžเด™เตเด™เตพ เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเต‹เตผเดŸเตเดŸเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเต‡เด•เตเด•เดฟเดฒเตเดฒ, เด•เดพเดฐเดฃเด‚... เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เดฐเต€เดคเดฟเด•เตพ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเตป เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต (เด…เดฎเต‚เตผเดคเตเดค เดฐเต€เดคเดฟเด•เตพ). เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เด’เดฐเต เด•เต‹เตบเด•เตเดฐเต€เดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เด•เด‚เดชเตˆเดฒเตผ เดžเด™เตเด™เดณเต‹เดŸเต เด…เดฎเต‚เตผเดคเตเดค เดฐเต€เดคเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เด’เดฐเต เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ เดจเตฝเด•เดพเดจเตเด‚ เด†เดตเดถเตเดฏเดชเตเดชเต†เดŸเตเด‚. เดžเด™เตเด™เตพ เดฐเต€เดคเดฟ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเดคเดฟเดจเดพเตฝ, เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดžเด™เตเด™เตพ เดฎเดฑเตเดฑเตŠเดฐเต เดชเต‹เตผเดŸเตเดŸเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดฟเดฏเต‡เด•เตเด•เดฟเดฒเตเดฒ. เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚.

เด•เตเดฒเดฏเดจเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดžเด™เตเด™เตพ เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดคเตเดคเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต:

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

เด•เดฏเดฑเตเดฑเตเดฎเดคเดฟ เดšเต†เดฏเตเดค เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เด…เดคเต‡ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณเดคเดพเดฃเต เด†เดถเตเดฐเดฟเดคเดคเตเดตเด‚ echoService. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เดŽเด•เตเด•เต‹ เด•เตเดฒเดฏเดจเตเดฑเดฟเดฒเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต‡ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ, เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เตพ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด‰เดฑเดชเตเดชเดฟเด•เตเด•เดพเด‚.

เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ

เดธเต‡เดตเดจเด‚ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเดฟเดจเตเด‚ เด’เดฐเต เดซเด‚เด—เตเดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฃเต. (เดธเต‡เดตเดจเด‚ เดจเดฟเตผเดคเตเดคเดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด•เตเด•เต เดจเดฟเตผเดฃเตเดฃเดพเดฏเด•เดฎเดพเดฃเต.) เดตเต€เดฃเตเดŸเตเด‚, เด…เดคเตเดคเดฐเดฎเตŠเดฐเต เดธเดตเดฟเดถเต‡เดทเดค เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดจเดฟเดฐเดตเดงเดฟ เด“เดชเตเดทเดจเตเด•เตพ เด‰เดฃเตเดŸเต (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดฐเด‚ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดจเดฎเตเด•เตเด•เต เดŸเตˆเดชเตเดชเต เด•เตเดฒเดพเดธเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚). เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด†เดตเดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดžเด™เตเด™เตพ เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เตบ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚. เด’เดฐเต เด•เตเดฒเดพเดธเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดžเด™เตเด™เตพ เดธเต‡เดตเดจเดคเตเดคเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเด‚ cats.Resource, เด•เดพเดฐเดฃเด‚ เดชเตเดฐเดถเตโ€Œเดจเด™เตเด™เตพ เด‰เดฃเตเดŸเดพเดฏเดพเตฝ เด‰เดฑเดตเดฟเดŸเด™เตเด™เดณเตเดŸเต† เดฑเดฟเดฒเต€เดธเต เดธเตเดฐเด•เตเดทเดฟเดคเดฎเดพเดฏเดฟ เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดฎเดพเตผเด—เด™เตเด™เตพ เดˆ เด•เตเดฒเดพเดธเต เด‡เดคเดฟเดจเด•เด‚ เดจเตฝเด•เตเดจเตเดจเต. เด’เดฐเต เดฑเดฟเดธเต‹เดดเตเดธเต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ เด’เดฐเต เดฑเต†เดกเดฟเดฎเต†เดฏเตเดกเต เดฑเตบเดŸเตˆเด‚ เดธเดจเตเดฆเตผเดญเดตเตเด‚ เดจเตฝเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดธเตผเดตเต€เดธเต เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเดชเตเดชเต เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เด‡เดคเตเดชเต‹เดฒเต†เดฏเดพเด•เดพเด‚:

  type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]

  trait ServiceImpl[F[_]] {
    type Config
    def resource(
      implicit
      resolver: AddressResolver[F],
      timer: Timer[F],
      contextShift: ContextShift[F],
      ec: ExecutionContext,
      applicative: Applicative[F]
    ): ResourceReader[F, Config, Unit]
  }

เดŽเดตเดฟเดŸเต†

  • Config - เดˆ เดธเต‡เดตเดจเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดฐเด‚
  • AddressResolver - เดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เดณเตเดŸเต† เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เด•เดฃเตเดŸเต†เดคเตเดคเดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดฑเตบเดŸเตˆเด‚ เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต (เดšเตเดตเดŸเต† เด•เดพเดฃเตเด•)

เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฎเดฑเตเดฑเต เดคเดฐเด™เตเด™เดณเตเด‚ cats:

  • F[_] - เด‡เดซเด•เตเดฑเตเดฑเดฟเดจเตเดฑเต† เดคเดฐเด‚ (เดฒเดณเดฟเดคเดฎเดพเดฏ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ F[A] เด’เดฐเต เดšเดŸเด™เตเด™เต เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚ () => A. เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ cats.IO.)
  • Reader[A,B] - เดซเด‚เด—เตเดทเดจเตเดฑเต† เด•เต‚เดŸเตเดคเดฒเต‹ เด•เตเดฑเดตเต‹ เดชเดฐเตเดฏเดพเดฏเดฎเดพเดฏเดฟ A => B
  • cats.Resource - เดจเต‡เดŸเดพเดจเตเด‚ เดฑเดฟเดฒเต€เดธเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดตเดฟเดญเดตเด‚
  • Timer - เดŸเตˆเดฎเตผ (เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเด‚ เด‰เดฑเด™เตเด™เดพเดจเตเด‚ เดธเดฎเดฏ เด‡เดŸเดตเต‡เดณเด•เตพ เด…เดณเด•เตเด•เดพเดจเตเด‚ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต)
  • ContextShift - เด…เดจเดฒเต‹เด—เต ExecutionContext
  • Applicative - เดตเตเดฏเด•เตเดคเดฟเด—เดค เด‡เดซเด•เตเดฑเตเดฑเตเด•เตพ (เดเดคเดพเดฃเตเดŸเต เด’เดฐเต เดฎเตŠเดฃเดพเดกเต) เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เดซเด•เตเดฑเตเดฑเต เดคเดฐเด‚ เด•เตเดฒเดพเดธเต. เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเตฝ เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต Monad/ConcurrentEffect.

เดˆ เดซเด‚เด—เตเดทเตป เดธเดฟเด—เตเดจเต‡เดšเตเดšเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดจเตเดจเตเด‚ เดšเต†เดฏเตเดฏเดพเดคเตเดค เด’เดฐเต เดธเต‡เดตเดจเด‚:

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(เดธเต†เดฎเดฟ. เด‰เดฑเดตเดฟเดŸเด‚, เด‡เดคเดฟเตฝ เดฎเดฑเตเดฑเต เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต - เดชเตเดฐเดคเดฟเดงเตเดตเดจเดฟ เดธเต‡เดตเดจเด‚, เดŽเด•เตเด•เต‹ เด•เตเดฒเดฏเดจเตเดฑเต
ะธ เด†เดœเต€เดตเดจเดพเดจเตเดค เด•เตบเดŸเตเดฐเต‹เดณเดฑเตเด•เตพ.)

เดจเดฟเดฐเดตเดงเดฟ เดธเต‡เดตเดจเด™เตเด™เตพ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เด’เดฐเต เดตเดธเตเดคเตเดตเดพเดฃเต เดจเต‹เดกเต (เดตเดฟเดญเดตเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดถเตƒเด‚เด–เดฒเดฏเตเดŸเต† เดธเดฎเดพเดฐเด‚เดญเด‚ เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เตบ เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต):

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

เดˆ เดจเต‹เดกเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดฎเดพเดฏ เดคเดฐเด‚ เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•. เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเต‡เดตเดจเดคเตเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดคเดฐเด™เตเด™เดณเดฟเตฝ เด’เดจเตเดจเต เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดฎเดฑเดจเตเดจเดพเตฝ, เด’เดฐเต เด•เด‚เดชเตˆเดฒเต‡เดทเตป เดชเดฟเดถเด•เต เด‰เดฃเตเดŸเดพเด•เตเด‚. เด•เต‚เดŸเดพเดคเต†, เด†เดตเดถเตเดฏเดฎเดพเดฏ เดŽเดฒเตเดฒเดพ เดกเดพเดฑเตเดฑเดฏเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‰เดšเดฟเดคเดฎเดพเดฏ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดšเดฟเดฒ เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เดจเตฝเด•เดฟเดฏเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดจเต‹เดกเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ.

เดนเต‹เดธเตเดฑเตเดฑเต เดจเต†เดฏเดฟเด‚ เดฑเต†เดธเดฒเตเดฏเต‚เดทเตป

เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดนเต‹เดธเตเดฑเตเดฑเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฏเดฅเดพเตผเดคเตเดฅ IP เดตเดฟเดฒเดพเดธเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต‡เด•เตเด•เดพเตพ เดชเดฟเดจเตเดจเต€เดŸเต เดตเดฟเดฒเดพเดธเด‚ เด…เดฑเดฟเดฏเดพเตป เดธเดพเดงเตเดฏเดคเดฏเตเดฃเตเดŸเต. เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดตเดฟเดฒเดพเดธเดคเตเดคเดฟเดฒเต‡เด•เตเด•เต เดจเต‹เดกเต เดเดกเดฟ เดฎเดพเดชเตเดชเต เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดซเด‚เด—เตเดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฃเต:

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

เดˆ เดซเด‚เด—เตเดทเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เดจเดฟเดฐเดตเดงเดฟ เดฎเดพเตผเด—เด™เตเด™เดณเตเดฃเตเดŸเต:

  1. เดตเดฟเดจเตเดฏเดพเดธเดคเตเดคเดฟเดจเต เดฎเตเดฎเตเดชเต เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เดžเด™เตเด™เตพเด•เตเด•เต เด…เดฑเดฟเดฏเดพเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฎเตเด•เตเด•เต เดธเตเด•เดพเดฒ เด•เต‹เดกเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚
    เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เดคเตเดŸเตผเดจเตเดจเต เดฌเดฟเตฝเดกเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•. เด‡เดคเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดŸเต†เดธเตเดฑเตเดฑเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.
    เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดซเด‚เด—เตเดทเตป เดธเตเดฅเดฟเดฐเดฎเดพเดฏเดฟ เด…เดฑเดฟเดฏเดชเตเดชเต†เดŸเตเด‚ เด•เต‚เดŸเดพเดคเต† เด•เต‹เดกเดฟเตฝ เด’เดฐเต เดฎเดพเดชเตเดชเดฟเด‚เด—เต เด†เดฏเดฟ เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ Map[NodeId, NodeAddress].
  2. เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ, เดจเต‹เดกเต เด†เดฐเด‚เดญเดฟเดšเตเดšเดคเดฟเดจเตเดถเต‡เดทเด‚ เดฎเดพเดคเตเดฐเดฎเต‡ เดฏเดฅเดพเตผเดคเตเดฅ เดตเดฟเดฒเดพเดธเด‚ เด…เดฑเดฟเดฏเต‚.
    เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เตพเด•เตเด•เต เดฎเตเดฎเตเดชเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต "เด•เดฃเตเดŸเต†เดคเตเดคเตฝ เดธเต‡เดตเดจเด‚" เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚, เด•เต‚เดŸเดพเดคเต† เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เดˆ เดธเต‡เดตเดจเดคเตเดคเดฟเตฝ เดฐเดœเดฟเดธเตเดฑเตเดฑเตผ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เดณเตเดŸเต† เดตเดฟเดฒเดพเดธเด™เตเด™เตพ เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.
  3. เดจเดฎเตเด•เตเด•เต เดชเดฐเดฟเดทเตเด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ /etc/hosts, เด…เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเตเตปเด•เต‚เดŸเตเดŸเดฟ เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดณเตเดณ เดนเต‹เดธเตเดฑเตเดฑเตเดจเดพเดฎเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ (เดชเต‹เดฒเต† my-project-main-node ะธ echo-backend) เด•เต‚เดŸเดพเดคเต† เดˆ เดชเต‡เดฐเตเด•เตพ เดฒเดฟเด™เตเด•เต เดšเต†เดฏเตเดฏเตเด•
    เดตเดฟเดจเตเดฏเดพเดธ เดธเดฎเดฏเดคเตเดคเต IP เดตเดฟเดฒเดพเดธเด™เตเด™เตพเด•เตเด•เตŠเดชเตเดชเด‚.

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดžเด™เตเด™เตพ เดˆ เด•เต‡เดธเตเด•เตพ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏเดฟ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดจเดฎเตเดฎเดณเตเดŸเต†
เด’เดฐเต เด•เดณเดฟเดชเตเดชเดพเดŸเตเดŸ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ, เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เด’เดฐเต‡ เดเดชเดฟ เดตเดฟเดฒเดพเดธเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚ - 127.0.0.1.

เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเดพเดฏเตเดณเตเดณ เดฐเดฃเตเดŸเต เด“เดชเตเดทเดจเตเด•เตพ เดžเด™เตเด™เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเต:

  1. เดŽเดฒเตเดฒเดพ เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เด’เดฐเต เดจเต‹เดกเดฟเตฝ เดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต.
  2. เดตเตเดฏเดคเตเดฏเดธเตเดค เดจเต‹เดกเตเด•เดณเดฟเตฝ เดŽเด•เตเด•เต‹ เดธเต‡เดตเดจเดตเตเด‚ เดŽเด•เตเด•เต‹ เด•เตเดฒเดฏเดจเตเดฑเตเด‚ เดนเต‹เดธเตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดŽเดจเตเดจเดคเดฟเดจเดพเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดจเต‹เดกเต:

เดธเดฟเด‚เด—เดฟเตพ เดจเต‹เดกเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

เด•เตเดฒเดฏเดจเตเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดŸเตˆเด‚ เดŸเต เดฒเตˆเดตเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เด™เตเด™เดจเต† เด‡เดŸเดตเต‡เดณเดฏเตเด•เตเด•เต เดถเต‡เดทเด‚ lifetime เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเด•เตเด•เตเด•. (Ctrl-C เดŽเดฒเตเดฒเดพ เดตเดฟเดญเดตเด™เตเด™เดณเตเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดธเตเดตเดคเดจเตเดคเตเดฐเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.)

เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด’เดฐเต‡ เด•เต‚เดŸเตเดŸเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป, เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚ เดฐเดฃเตเดŸเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดจเต‹เดกเตเด•เตพ:

เดฐเดฃเตเดŸเต เดจเต‹เดกเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

เดชเตเดฐเดงเดพเดจเด‚! เดธเต‡เดตเดจเด™เตเด™เตพ เดŽเด™เตเด™เดจเต† เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•. เด’เดฐเต เดจเต‹เดกเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏ เดธเต‡เดตเดจเด‚ เดฎเดฑเตเดฑเตŠเดฐเต เดจเต‹เดกเดฟเดจเตเดฑเต† เดกเดฟเดชเตปเดกเตปเดธเดฟ เดฐเต€เดคเดฟเดฏเตเดŸเต† เดจเดฟเตผเดตเตเดตเดนเดฃเดฎเดพเดฏเดฟ เดžเด™เตเด™เตพ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดกเดฟเดชเตปเดกเตปเดธเดฟ เดคเดฐเด‚ เด•เด‚เดชเตˆเดฒเตผ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เดคเดฐเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดฑเตบ เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ, เดกเดฟเดชเตปเดกเตปเดธเดฟเดฏเดฟเตฝ เดถเดฐเดฟเดฏเดพเดฏ เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดจเต‹เดกเต เดเดกเดฟ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดˆ เดธเตเด•เต€เดฎเดฟเดจเต เดจเดจเตเดฆเดฟ, เดžเด™เตเด™เตพ เดชเต‹เตผเดŸเตเดŸเต เดจเดฎเตเดชเตผ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด’เดฐเต เดชเตเดฐเดพเดตเดถเตเดฏเด‚ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดถเดฐเดฟเดฏเดพเดฏ เดชเต‹เตผเดŸเตเดŸเต เดฑเดซเตผ เดšเต†เดฏเตเดฏเดพเตป เดŽเดชเตเดชเต‹เดดเตเด‚ เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดฐเดฃเตเดŸเต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดจเต‹เดกเตเด•เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ

เดˆ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดพเดฏเดฟ, เดฎเดพเดฑเตเดฑเด™เตเด™เดณเดฟเดฒเตเดฒเดพเดคเต† เดžเด™เตเด™เตพ เด…เดคเต‡ เดธเต‡เดตเดจ เดจเดฟเตผเดตเตเดตเดนเดฃเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเต†เดฑเตเดฑเต เดธเต‡เดตเดจเด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ เดฐเดฃเตเดŸเต เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเตเด•เตพ เด‡เดชเตเดชเต‹เตพ เดžเด™เตเด™เดณเตเดŸเต† เดชเด•เตเด•เดฒเตเดฃเตเดŸเต เดŽเดจเตเดจเดคเดพเดฃเต เด’เดฐเต‡เดฏเตŠเดฐเต เดตเตเดฏเดคเตเดฏเดพเดธเด‚:

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

เด†เดฆเตเดฏ เดจเต‹เดกเต เดธเต†เตผเดตเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต, เดธเต†เตผเดตเตผ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดคเตเดฐเดฎเต‡ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเต‚. เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต† เดจเต‹เดกเต เด•เตเดฒเดฏเดจเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เดฎเดฑเตเดฑเตŠเดฐเต เดญเดพเด—เด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด•เต‚เดŸเดพเดคเต† เดฐเดฃเตเดŸเต เดจเต‹เดกเตเด•เตพเด•เตเด•เตเด‚ เดฒเตˆเดซเต เดŸเตˆเด‚ เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดธเต†เตผเดตเตผ เดจเต‹เดกเต เดจเดฟเตผเดคเตเดคเตเดจเตเดจเดคเต เดตเดฐเต† เด…เดจเดฟเดถเตเดšเดฟเดคเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต SIGTERM'เด“เด‚, เด•เตเดฑเดšเตเดšเต เดธเดฎเดฏเดคเตเดคเดฟเดจเต เดถเต‡เดทเด‚ เด•เตเดฒเดฏเดจเตเดฑเต เดจเต‹เดกเต เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเต. เดธเต†เดฎเดฟ. เดฒเต‹เดžเตเดšเตผ เด†เดชเตเดชเต.

เดชเตŠเดคเตเดตเดพเดฏ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ

เดˆ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเดฎเต€เดชเดจเด‚ เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเต† เดŽเด™เตเด™เดจเต† เดฌเดพเดงเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดจเต‹เด•เตเด•เดพเด‚.

เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฌเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เด•เต‹เดกเดฟเดจเตŠเดชเตเดชเด‚ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเต (.jar) เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเตฝ เด‡เดŸเตเดจเตเดจเดคเต เด…เตผเดคเตเดฅเดฎเดพเด•เตเด•เตเดจเตเดจเดคเดพเดฏเดฟ เดคเต‹เดจเตเดจเตเดจเตเดจเต. เด•เดพเดฐเดฃเด‚ เด’เดฐเต‡ เด•เต‹เดกเดฟเดจเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดจเดฎเตเด•เตเด•เต เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพ เด‰เดฃเตเดŸเดพเด•เดพเด‚. เดตเต€เดฃเตเดŸเตเด‚, เดตเตเดฏเดคเตเดฏเดธเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดถเดพเด–เด•เตพเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดชเตเดฐเดพเดตเดธเตเดคเตเด•เตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเตเดŸเต† เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดชเดคเดฟเดชเตเดชเตเด•เดณเต† เด†เดถเตเดฐเดฏเดฟเด•เตเด•เตเดจเตเดจเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต‹เดŸเตŠเดชเตเดชเด‚ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด† เดชเดคเดฟเดชเตเดชเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเตป เดžเด™เตเด™เตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เตเดฎเตเดชเต‹เดดเต†เดฒเตเดฒเดพเด‚ เดˆ เดชเดคเดฟเดชเตเดชเตเด•เตพ เดถเดพเดถเตเดตเดคเดฎเดพเดฏเดฟ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเด‚.

เดเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเดตเตเด‚ เด’เดฐเต เด•เต‹เดกเต เดฎเดพเดฑเตเดฑเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เด“เดฐเต‹เดจเตเดจเตเด‚
เดธเดพเดงเดพเดฐเดฃ เด—เตเดฃเดฎเต‡เดจเตเดฎ เด‰เดฑเดชเตเดชเตเดจเตฝเด•เตเดจเตเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ เดฎเดพเดฑเตเดฑเด‚ เดตเดฐเตเดคเตเดคเตเด‚:

เดฌเด—เต เดŸเตเดฐเดพเด•เตเด•เดฑเดฟเดฒเต† เดŸเดฟเด•เตเด•เดฑเตเดฑเต -> เดชเดฟเด†เตผ -> เด…เดตเดฒเต‹เด•เดจเด‚ -> เดชเตเดฐเดธเด•เตเดคเดฎเดพเดฏ เดถเดพเด–เด•เดณเตเดฎเดพเดฏเดฟ เดฒเดฏเดฟเดชเตเดชเดฟเด•เตเด•เตเด• ->
เดธเด‚เดฏเต‹เดœเดจเด‚ -> เดตเดฟเดจเตเดฏเดพเดธเด‚

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เด…เดจเดจเตเดคเดฐเดซเดฒเด™เตเด™เตพ เด‡เดตเดฏเดพเดฃเต:

  1. เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตเดฅเดฟเดฐเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เด’เดฐเตŠเดฑเตเดฑ เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เด’เดฐเต‡ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เดตเดธเตเดคเตเดค เด•เดพเดฐเดฃเด‚.

  2. เด’เดฐเต เดจเต‹เดกเดฟเตฝ เดฎเดพเดคเตเดฐเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเต เดชเตเดฐเดถเตเดจเดฎเดพเดฃเต. เด…เดคเดฟเดจเดพเตฝ, "เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดกเตเดฐเดฟเดซเตเดฑเตเดฑเต" เดธเดพเดงเตเดฏเดคเดฏเดฟเดฒเตเดฒ.

  3. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดšเต†เดฑเดฟเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเดคเต เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต.

  4. เดฎเตŠเดคเตเดคเดคเตเดคเดฟเดฒเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดฎเดฟเด•เตเด• เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดตเดฒเต‹เด•เดจเดคเตเดคเดฟเดจเต เดตเดฟเดงเต‡เดฏเดฎเดพเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด‚.

เดชเตเดฐเตŠเดกเด•เตเดทเตป เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดŽเดจเดฟเด•เตเด•เต เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดถเต‡เด–เดฐเด‚ เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต‹? เดˆ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดชเดพเดธเตโ€Œเดตเต‡เดกเตเด•เดณเตเด‚ เดฎเดฑเตเดฑเต เดธเต†เตปเดธเดฟเดฑเตเดฑเต€เดตเต เดตเดฟเดตเดฐเด™เตเด™เดณเตเด‚ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚, เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดžเด™เตเด™เตพ เด†เด•เตโ€Œเดธเดธเตเดธเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเดฟเดจเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ, เด…เดจเตเดคเดฟเดฎ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเตฝ เด…เตผเดคเตเดฅเดฎเตเดฃเตเดŸเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดฐเดฃเตเดŸเต เดญเดพเด—เด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเด•เตเด•เดพเด‚-เด’เดจเตเดจเต เดชเตŠเดคเตเดตเดพเดฏเดฟ เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตเด‚ เด’เดจเตเดจเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดค เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเตเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเต. เด‡เดคเต เดฎเดฟเด•เตเด• เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเดฐเต†เดฏเตเด‚ เดชเตŠเดคเตเดตเดพเดฏ เด•เตเดฐเดฎเต€เด•เดฐเดฃเด™เตเด™เดณเดฟเดฒเต‡เด•เตเด•เต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเด‚. เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏ เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดธเตเดตเดญเดพเดตเดตเดฟเดถเต‡เดทเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดตเต‡เตผเดคเดฟเดฐเดฟเดตเต เดจเต‡เดŸเดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต.

เดธเดพเดงเตเดฏเดฎเดพเดฏ เดตเตเดฏเดคเดฟเดฏเดพเดจเด™เตเด™เตพ

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดšเดฟเดฒ เดชเตŠเดคเต เดฌเดฆเดฒเตเด•เดณเตเดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚:

  1. เดŸเดพเตผเด—เต†เดฑเตเดฑเต เดฎเต†เดทเต€เดจเดฟเตฝ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเตฝ.
  2. เด•เต‡เดจเตเดฆเตเดฐเต€เด•เตƒเดค เด•เต€-เดฎเต‚เดฒเตเดฏเด‚ เดธเตเดฑเตเดฑเต‹เตผ (etcd/zookeeper).
  3. เดชเตเดฐเต‹เดธเดธเตเดธเต เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เดตเต€เดฃเตเดŸเตเด‚ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดจเต‹/เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดจเต‹ เด•เดดเดฟเดฏเตเดจเตเดจ เดชเตเดฐเต‹เดธเดธเต เด˜เดŸเด•เด™เตเด™เตพ.
  4. เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเด‚ เดชเดคเดฟเดชเตเดชเต เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเดคเตเดคเดฟเดจเตเด‚ เดชเตเดฑเดคเตเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดšเต†เดฑเดฟเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เด•เดพเดฐเตเดฏเดฎเดพเดฏ เดตเดดเด•เตเด•เด‚ เดจเตฝเด•เตเดจเตเดจเต. เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผเด•เตเด•เต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดจเต‹เดกเดฟเดฒเต‡เด•เตเด•เต เดฒเต‹เด—เดฟเตป เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด‰เดšเดฟเดคเดฎเดพเดฏ เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดพเดจเตเด‚ เดธเต‡เดตเดจเด‚ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดตเดฒเดฟเดฏ เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เต, เด…เดคเตเดคเดฐเด‚ เดตเดดเด•เตเด•เด‚ เด…เดญเดฟเด•เดพเดฎเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฟเดฒเตเดฒ. เดตเดฐเตเดคเตเดคเดฟเดฏ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดฎเดฑเตเดฑเต เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเดฟเตฝ เดฏเดพเดคเตŠเดฐเต เด…เดŸเดฏเดพเดณเด™เตเด™เดณเตเด‚ เด…เดตเดถเต‡เดทเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ. เดฎเดพเดฑเตเดฑเด™เตเด™เดณเต† เด†เดฐเตเด‚ เด…เดตเดฒเต‹เด•เดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดฟเดฒเตเดฒ. เด†เดฐเดพเดฃเต เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฟเดฏเดคเต†เดจเตเดจเตเด‚ เดŽเดจเตเดคเต เด•เดพเดฐเดฃเดคเตเดคเดพเดฒเดพเดฃเต เดŽเดจเตเดจเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเตป เดชเตเดฐเดฏเดพเดธเดฎเดพเดฃเต. เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดชเดฐเต€เด•เตเดทเดฟเดšเตเดšเดฟเดŸเตเดŸเดฟเดฒเตเดฒ. เดธเดฟเดธเตเดฑเตเดฑเด‚ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดฎเดฑเตเดฑเต เดจเต‹เดกเตเด•เดณเดฟเตฝ เด…เดจเตเดฌเดจเตเดง เดฎเดพเดฑเตเดฑเด‚ เดตเดฐเตเดคเตเดคเดพเตป เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเตผ เดฎเดฑเดจเตเดจเต‡เด•เตเด•เดพเด‚.

(เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดญเดพเดตเดฟเดฏเดฟเตฝ เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดคเดฏเต† เด‡เดฒเตเดฒเดพเดคเดพเด•เตเด•เดฟเดฒเตเดฒ เดŽเดจเตเดจเดคเตเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดพเดฃเต. เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเดฟเดจเตเดฑเต† เด…เดคเต‡ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด’เดฐเต เดชเดพเดดเตโ€Œเดธเดฑเตเด‚ เดตเดพเดฒเดฟเดกเต‡เดฑเตเดฑเดฑเตเด‚ เดšเต‡เตผเดคเตเดคเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚. Config, เด•เต‚เดŸเดพเดคเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดณเตเดณ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเต‡เด•เตเด•เดพเตพ เด…เตฝเดชเตเดชเด‚ เด•เตเดฑเดตเดพเดฃเต†เดจเตเดจเต เด‡เดคเต เด‰เดŸเดจเดŸเดฟ เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเต, เด•เดพเดฐเดฃเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพเด•เตเด•เต เด…เดงเดฟเด• เด•เต‹เดกเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.)

เด’เดฐเต เดกเดฟเดธเตเดŸเตเดฐเดฟเดฌเตเดฏเต‚เดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดฎเต†เดฑเตเดฑเดพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดฒเตเดฒเตŠเดฐเต เดธเด‚เดตเดฟเดงเดพเดจเดฎเดพเดฃเต เด•เต‡เดจเตเดฆเตเดฐเต€เด•เตƒเดค เด•เต€-เดตเดพเดฒเตเดฏเต‚ เดธเตเดฑเตเดฑเต‹เตผ. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ เดตเต†เดฑเตเด‚ เดกเดพเดฑเตเดฑ เดŽเดจเตเดคเดพเดฃเต†เดจเตเดจเตเด‚ เดจเดฎเตเดฎเตพ เดคเต€เดฐเตเดฎเดพเดจเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดซเด‚เด—เตเดทเตป เดจเดŸเดคเตเดคเดพเด‚ C => A => B, เด•เต‚เดŸเดพเดคเต† เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ C เด…เดชเต‚เตผเดตเตเดตเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเด‚ เดกเดพเดฑเตเดฑเดฏเตเด‚ A - เดชเดฒเดชเตเดชเต‹เดดเตเด‚. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดจเดฎเตเด•เตเด•เต เดชเดฑเดฏเดพเด‚ C - เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ, เด•เต‚เดŸเดพเดคเต† A - เดกเดพเดฑเตเดฑ. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต†เดจเตเดจเต เดคเต‹เดจเตเดจเตเดจเตเดจเต, เด…เดต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดกเดพเดฑเตเดฑเดฏเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดšเตเดšเต เดคเดตเดฃ เดฎเดพเดคเตเดฐเดฎเต‡ เดฎเดพเดฑเตเดจเตเดจเตเดณเตเดณเต‚. เด•เต‚เดŸเดพเดคเต†, เดกเดพเดฑเตเดฑ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เด’เดฐเต เด‰เดฑเดตเดฟเดŸเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ (เด‰เดชเดฏเต‹เด•เตเดคเดพเดตเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚), เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ (เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดกเตเดฎเดฟเดจเดฟเดธเตเดŸเตเดฐเต‡เดฑเตเดฑเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚) เดตเดฐเตเดจเตเดจเต.

เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เดพเดคเต† เดคเดจเตเดจเต† เด…เดชเต‚เตผเดตเตเดตเดฎเดพเดฏเดฟ เดฎเดพเดฑเตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดคเดฏเดฟเดฒเต‡เด•เตเด•เต เดจเดฏเดฟเดšเตเดšเต‡เด•เตเด•เดพเด‚, เด•เดพเดฐเดฃเด‚ เดจเดฎเตเด•เตเด•เต เดŽเด™เตเด™เดจเต†เดฏเต†เด™เตเด•เดฟเดฒเตเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดจเตฝเด•เตเด•เดฏเตเด‚ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดคเต†เดฑเตเดฑเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚. เด…เดคเดฟเดจเดพเตฝ, เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดตเต€เด•เตเดทเดฃเด•เต‹เดฃเดฟเตฝ เดจเดฟเดจเตเดจเต, เดชเตเดฐเต‹เด—เตเดฐเดพเด‚ เด“เดชเตเดชเดฑเต‡เดทเตป เดธเดฎเดฏเดคเตเดคเต เดฎเดพเดฑเตเดฑเดพเตป เด•เดดเดฟเดฏเตเดจเตเดจ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด…เตผเดคเตเดฅเดฎเตเดฃเตเดŸเต (เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด…เดคเตเดคเดฐเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเต† เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ).

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดžเด™เตเด™เตพ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต, เดกเตˆเดจเดพเดฎเดฟเด•เต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดคเดฎเตเดฎเดฟเตฝ เดตเต‡เตผเดคเดฟเดฐเดฟเด•เตเด•เตเด‚. เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจ เดธเดฎเดฏเดคเตเดคเต เดธเต‡เดตเดจเดคเตเดคเดฟเดจเตเดฑเต† เดฏเตเด•เตเดคเดฟเด•เตเด•เต เดชเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เดฎเดพเดฑเตเดฑเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เด…เดคเตเดคเดฐเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเต† เดžเด™เตเด™เตพ เดกเตˆเดจเดพเดฎเดฟเด•เต เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเด‚. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด“เดชเตโ€Œเดทเดจเตเด•เตพ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด†เดฏเดคเดฟเดจเดพเตฝ เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจเดคเดพเดฃเต. เดกเตˆเดจเดพเดฎเดฟเด•เต เดฑเต€เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดพเดฏเดฟ, เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฟเด‚เด—เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเตเด•เตพ เดŽเด™เตเด™เดจเต† เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเดฟเดจเต เดธเดฎเดพเดจเดฎเดพเดฏเดฟ, เดชเตเดคเดฟเดฏ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเดฟเดจเตเดฑเต† เดญเดพเด—เด™เตเด™เตพ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดธเด‚เดตเดฟเดงเดพเดจเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚. (เดžเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เดคเดคเตเดธเดฎเดฏ เดชเตเดจเตผเด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚ เด’เดดเดฟเดตเดพเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เด‰เดšเดฟเดคเด‚, เด•เดพเดฐเดฃเด‚ เด‡เดคเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เดตเตผเดฆเตเดงเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต. เดธเดพเดงเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ, เดชเตเดฐเต‹เดธเดธเตเดธเตเด•เตพ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เด’เดŽเดธเต เด•เดดเดฟเดตเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต.)

เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดชเตเดฐเดงเดพเดจ เดตเดถเด‚, เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเดฟเดจเต เดถเต‡เดทเด‚ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดฑเต€เดฌเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเดพเตป เดŽเดŸเตเด•เตเด•เตเดจเตเดจ เดธเดฎเดฏเดฎเดพเดฃเต (เดกเต—เตบเดŸเตˆเด‚). เดตเดพเดธเตเดคเดตเดคเตเดคเดฟเตฝ, เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดชเตเดคเดฟเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดชเตเดฐเดพเดฌเดฒเตเดฏเดคเตเดคเดฟเตฝ เดตเดฐเตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเตเดจเดฐเดพเดฐเด‚เดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเดฏ เดชเตเดฐเดถเตโ€Œเดจเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดคเต€เดตเตเดฐเดคเดฏเดฟเตฝ เดตเตเดฏเดคเตเดฏเดพเดธเดชเตเดชเต†เดŸเตเดŸเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เดšเดฟเดฒ เดธเดพเดนเดšเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ, เดฒเต‹เดกเต เด•เตเดฑเดตเตเดณเตเดณ เดธเดฎเดฏเดคเตเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดฑเต€เดฌเต‚เดŸเตเดŸเต เดทเต†เดกเตเดฏเต‚เตพ เดšเต†เดฏเตเดฏเดพเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดคเตเดŸเตผเดšเตเดšเดฏเดพเดฏ เดธเต‡เดตเดจเด‚ เดจเตฝเด•เดฃเดฎเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเด‚ AWS ELB เด•เดฃเด•เตเดทเตป เดตเดฑเตเดฑเดฟเดชเตเดชเต‹เด•เตเดจเตเดจเต. เด…เดคเต‡ เดธเดฎเดฏเด‚, เดจเดฎเตเด•เตเด•เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดฑเต€เดฌเต‚เดŸเตเดŸเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดฟเดตเดฐเตเดฎเตเดชเต‹เตพ, เดžเด™เตเด™เตพ เดˆ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด’เดฐเต เดธเดฎเดพเดจเตเดคเดฐ เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเดฎเดพเดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดฌเดพเดฒเตปเดธเดฑเดฟเดจเต† เด…เดคเดฟเดฒเต‡เด•เตเด•เต เดฎเดพเดฑเตเดฑเตเด•เดฏเตเด‚ เดชเดดเดฏ เด•เดฃเด•เตเดทเดจเตเด•เตพ เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเด•เตเดจเตเดจเดคเตเดตเดฐเต† เด•เดพเดคเตเดคเดฟเดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดŽเดฒเตเดฒเดพ เดชเดดเดฏ เด•เดฃเด•เตเดทเดจเตเด•เดณเตเด‚ เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเดšเตเดšเดคเดฟเดจเต เดถเต‡เดทเด‚, เดžเด™เตเด™เตพ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดชเดดเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚ เด…เดŸเดšเตเดšเตเดชเต‚เดŸเตเดŸเตเดจเตเดจเต.

เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเดฒเต‹ เดชเตเดฑเดคเตเดคเต‹ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด‚ เดจเดฎเตเด•เตเด•เต เด‡เดชเตเดชเต‹เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเด‚. เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เดžเด™เตเด™เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเดฑเต† เด…เดธเด‚เดฌเตเดฒเดฟ เดธเดฎเดฏเดคเตเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด•เตƒเดคเตเดฏเดค เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด…เดตเดธเดฐเดฎเต†เด™เตเด•เดฟเดฒเตเด‚ เดžเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเดšเตเดšเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดค เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเต เดชเตเดฑเดคเตเดคเดพเดฃเต†เด™เตเด•เดฟเตฝ, เด†เดฐเดพเดฃเต เดˆ เดซเดฏเดฒเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเดฟเดฏเดคเต†เดจเตเดจเตเด‚ เดŽเดจเตเดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต†เดจเตเดจเตเด‚ เดŸเตเดฐเดพเด•เตเด•เต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต. เด…เดคเต เดŽเดคเตเดฐ เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต? เดžเด™เตเด™เดณเตเดŸเต† เด…เดญเดฟเดชเตเดฐเดพเดฏเดคเตเดคเดฟเตฝ, เดชเดฒ เดชเตเดฐเตŠเดกเด•เตเดทเตป เดธเดฟเดธเตเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เตเด‚ เดธเตเดธเตเดฅเดฟเดฐเดตเตเด‚ เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณเดคเตเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต เดชเตเดฐเดงเดพเดจเดฎเดพเดฃเต.

เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเดฑเต† เดชเดคเดฟเดชเตเดชเต เด…เดคเต เดŽเดชเตเดชเต‹เตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเดšเตเดšเต, เด…เดคเดฟเตฝ เดŽเดจเตเดคเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดเดคเตŠเด•เตเด•เต† เดซเด‚เด—เตโ€Œเดทเดจเตเด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดจเด•เตเดทเดฎเดฎเดพเด•เตเด•เดฟ/เด…เดชเตเดฐเดพเดชเตโ€Œเดคเดฎเดพเด•เตเด•เดฟ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเต† เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดพเดฑเตเดฑเดคเตเดคเดฟเดจเต เด†เดฐเดพเดฃเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเด•เตพ เดŽเดจเตเดจเดฟเดต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เด’เดฐเต เด†เตผเดŸเตเดŸเดฟเดซเดพเด•เตโ€Œเดฑเตเดฑเดฟเดจเตเดณเตเดณเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เตเดฑเดšเตเดšเต เดชเดฐเดฟเดถเตเดฐเดฎเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต, เด…เดคเดฟเดจเดพเตฝ เดจเดฟเด™เตเด™เตพ เด…เดฑเดฟเดตเตเดณเตเดณ เด’เดฐเต เดคเต€เดฐเตเดฎเดพเดจเด‚ เดŽเดŸเตเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดชเตเดฐเต‹เดธเต เด†เตปเดกเต เด•เต‹เตปเดธเต

เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเดฏเตเดŸเต† เด—เตเดฃเดฆเต‹เดทเด™เตเด™เดณเดฟเตฝ เดžเดพเตป เดคเดพเดฎเดธเดฟเด•เตเด•เดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เด—เตเดฃเด™เตเด™เดณเตเดฎเตเดฃเตเดŸเต

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เดตเดฟเดคเดฐเดฃ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เดชเตเดฐเดงเดพเดจ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเดŸเต† เด’เดฐเต เดฒเดฟเดธเตเดฑเตเดฑเต เดšเตเดตเดŸเต†เดฏเตเดฃเตเดŸเต:

  1. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดฐเดฟเดถเต‹เดงเดจ. เด…เดคเต เด‰เดฑเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต
    เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดถเดฐเดฟเดฏเดพเดฃเต.
  2. เดธเดฎเตเดชเดจเตเดจเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดญเดพเดท. เดธเดพเดงเดพเดฐเดฃเด—เดคเดฟเดฏเดฟเตฝ, เดฎเดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฐเต€เดคเดฟเด•เตพ เดชเดฐเดฎเดพเดตเดงเดฟ เดธเตเดŸเตเดฐเดฟเด‚เด—เต เดตเต‡เดฐเดฟเดฏเดฌเดฟเตพ เดธเดฌเตเดธเตเดฑเตเดฑเดฟเดฑเตเดฑเตเดฏเต‚เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดชเดฐเดฟเดฎเดฟเดคเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. Scala เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดจเดฟเด™เตเด™เดณเตเดŸเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เดตเดฟเดชเตเดฒเดฎเดพเดฏ เดญเดพเดทเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดฒเดญเตเดฏเดฎเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต เดจเดฎเตเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚
    เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพเด•เตเด•เตเดณเตเดณ เดธเตเดตเดญเดพเดตเดตเดฟเดถเต‡เดทเดคเด•เตพ, เด—เตเดฐเต‚เดชเตเดชเต เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเดฒเต‡เด•เตเด•เต เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เดŽเตปเด•เตเดฒเต‹เดธเดฟเด‚เด—เต เดธเตเด•เต‹เดชเตเดชเดฟเตฝ เด’เดฐเดฟเด•เตเด•เตฝ เดฎเดพเดคเตเดฐเด‚ (DRY) เดชเตเดฐเด–เตเดฏเดพเดชเดฟเดšเตเดš เดตเดพเดฒเตเด•เดณเต† เดจเดฎเตเด•เตเด•เต เดชเดฐเดพเดฎเตผเดถเดฟเด•เตเด•เดพเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดจเต‡เดฐเดฟเดŸเตเดŸเต เดเดคเต เด•เตเดฒเดพเดธเตเด•เดณเตเด‚ เดคเตฝเด•เตเดทเดฃเด‚ เดšเต†เดฏเตเดฏเดพเด‚ (Seq, Map, เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เด•เตเดฒเดพเดธเตเด•เตพ).
  3. เดกเดฟเดŽเดธเตเดŽเตฝ. เด’เดฐเต DSL เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดจเตเดจ เดจเดฟเดฐเดตเดงเดฟ เดญเดพเดทเดพ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดธเตเด•เดพเดฒเดฏเดฟเดฒเตเดฃเตเดŸเต. เดˆ เดธเดตเดฟเดถเต‡เดทเดคเด•เตพ เดชเตเดฐเดฏเต‹เดœเดจเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เดŸเดพเตผเด—เต†เดฑเตเดฑเต เด—เตเดฐเต‚เดชเตเดชเดฟเดจเต เด•เต‚เดŸเตเดคเตฝ เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดญเดพเดท เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚, เด…เด™เตเด™เดจเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดกเตŠเดฎเต†เดฏเตเตป เดตเดฟเดฆเด—เตเดงเตผเด•เตเด•เต เดตเดพเดฏเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดธเตเดชเต†เดทเตเดฏเดฒเดฟเดธเตเดฑเตเดฑเตเด•เตพเด•เตเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดตเดฒเต‹เด•เดจ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเดฟเตฝ เดชเด™เตเด•เต†เดŸเตเด•เตเด•เดพเด‚.
  4. เดจเต‹เดกเตเด•เตพ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เดธเดฎเด—เตเดฐเดคเดฏเตเด‚ เดธเดฎเดจเตเดตเดฏเดตเตเด‚. เด’เดฐเต เดฎเตเดดเตเดตเตป เดตเดฟเดคเดฐเดฃ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเดจเตเดฑเต†เดฏเตเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเตŠเดฑเตเดฑ เดชเต‹เดฏเดฟเดจเตเดฑเดฟเตฝ เดธเด‚เดญเดฐเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เด—เตเดฃเด‚, เดŽเดฒเตเดฒเดพ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เด’เดฐเดฟเด•เตเด•เตฝ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดต เด†เดตเดถเตเดฏเดฎเตเดณเตเดณเดฟเดŸเดคเตเดคเต†เดฒเตเดฒเดพเด‚ เดตเต€เดฃเตเดŸเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต เดŽเดจเตเดจเดคเดพเดฃเต. เดชเต‹เตผเดŸเตเดŸเตเด•เตพ เดชเตเดฐเด–เตเดฏเดพเดชเดฟเด•เตเด•เดพเตป เดซเดพเดจเตเดฑเด‚ เดคเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดฒเตเดฒเดพ เดถเดฐเดฟเดฏเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเดฟเดฒเตเด‚ เดจเต‹เดกเตเด•เตพ เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดพเดฏ เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต. เดจเต‹เดกเตเด•เตพเด•เตเด•เดฟเดŸเดฏเดฟเตฝ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดจเดฟเตผเดฌเดจเตเดงเดฟเดค เด†เดถเตเดฐเดฟเดคเดคเตเดตเด‚ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดŽเดฒเตเดฒเดพ เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เดฌเดจเตเดงเดฟเดชเตเดชเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต.
  5. เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ. เด’เดฐเต เดชเตŠเดคเต เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดตเดฐเตเดคเตเดคเตเดจเตเดจเดคเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดจเดฟเดฒเดตเดพเดฐเด‚ เด•เตˆเดตเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต.
  6. เด’เดฐเต‡เดธเดฎเดฏเด‚ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดชเตเดกเต‡เดฑเตเดฑเต. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เตพเด•เตเด•เต เดถเต‡เดทเด‚ เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เดตเดฟเดจเตเดฏเดพเดธเด‚ เดŽเดฒเตเดฒเดพ เดจเต‹เดกเตเด•เดณเตเด‚ เด…เดชเตเดกเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดคเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เดจเตเดจเต เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต.
  7. เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเต เดชเดพเดดเตโ€Œเดธเดฟเด‚เด—เต, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตฝ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดคเต†เดฑเตเดฑเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ. เด‡เดคเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเดฑเต† เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด•เตเดฑเดฏเตเด•เตเด•เตเดจเตเดจเต. (เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเตฝ เดจเดฟเดฐเต€เด•เตเดทเดฟเดšเตเดš เดšเดฟเดฒ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเด™เตเด•เต€เตผเดฃเตเดฃเดค เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เด…เดฒเตเดฒ, เดฎเดฑเดฟเดšเตเดšเต เดตเดฒเดฟเดฏ เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดธเตเดฐเด•เตเดท เดจเตฝเด•เดพเดจเตเดณเตเดณ เด†เด—เตเดฐเดนเดคเตเดคเดพเตฝ เดจเดฏเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เดฌเต‹เดงเดชเต‚เตผเดตเดฎเดพเดฏ เดคเต€เดฐเตเดฎเดพเดจเด‚ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต.) เดธเดพเดงเดพเดฐเดฃ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต - เด•เดพเดฃเดพเดคเดพเดฏเดคเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด• เดญเดพเด—เด™เตเด™เตพ. เด…เดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เดคเต เดถเดฐเดฟเด•เตเด•เตเด‚ เด†เดตเดถเตเดฏเดฎเตเดณเตเดณ เดธเดฎเดฏเด‚ เดตเดฐเต† เด…เดจเดพเดตเดถเตเดฏ เดญเดพเด—เด™เตเด™เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เดฎเดพเดฑเตเดฑเดฟเดตเดฏเตเด•เตเด•เตเด•.
  8. เดตเต‡เตผเดธเดฟเดซเตˆเดกเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดพเดฑเตเดฑเด™เตเด™เตพ เดฎเดฑเตเดฑเต‡เดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดฎเดพเดฑเตเดฑเด™เตเด™เดณเตเดŸเต† เดธเดพเดงเดพเดฐเดฃ เดตเดฟเดงเดฟ เดชเดฟเดจเตเดคเตเดŸเดฐเตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดจเดฎเตเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเดจเตเดจ เด”เดŸเตเดŸเตโ€ŒเดชเตเดŸเตเดŸเต เด’เดฐเต เด…เดฆเตเดตเดฟเดคเต€เดฏ เดชเดคเดฟเดชเตเดชเตเดณเตเดณ เด’เดฐเต เดชเตเดฐเดพเดตเดธเตเดคเตเดตเดพเดฃเต. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด†เดตเดถเตเดฏเดฎเต†เด™เตเด•เดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฑเต† เดฎเตเตป เดชเดคเดฟเดชเตเดชเดฟเดฒเต‡เด•เตเด•เต เดฎเดŸเด™เตเด™เดพเตป เด‡เดคเต เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดชเต‹เดฒเตเด‚ เดจเดฎเตเด•เตเด•เต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚, เดธเดฟเดธเตเดฑเตเดฑเด‚ เด…เดคเต‡เดชเต‹เดฒเต† เดคเดจเตเดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚. เด’เดฐเต เดธเตเดฅเดฟเดฐเดคเดฏเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด’เดฐเต เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดชเตเดฐเดตเดšเดจเดพเดคเตเดฎเด•เดคเดฏเตเด‚ เดตเดฟเดถเตเดตเดพเดธเตเดฏเดคเดฏเตเด‚ เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เด•เด‚เดชเตˆเดฒเต‡เดทเตป เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดจเดฟเดถเตเดšเดฏเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดจเดฟเตผเดฎเตเดฎเดพเดฃเดคเตเดคเดฟเตฝ เด‡เดคเต เดตเตเดฏเดพเดœเดฎเดพเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฃเต.
  9. เดฎเต‹เดกเตเดฒเดพเดฐเดฟเดฑเตเดฑเดฟ. เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเต เดฎเต‹เดกเตเดฒเดพเตผ เด†เดฃเต, เด•เต‚เดŸเดพเดคเต† เดฎเตŠเดกเตเดฏเต‚เดณเตเด•เตพ เดตเตเดฏเดคเตเดฏเดธเตเดค เดฐเต€เดคเดฟเด•เดณเดฟเตฝ เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเดšเตเดšเต เดตเตเดฏเดคเตเดฏเดธเตเดค เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เด’เดฐเต เดฐเต‚เดชเดคเตเดคเดฟเตฝ เด’เดฐเตŠเดฑเตเดฑ เดจเต‹เดกเดฟเดฒเตเด‚ เดฎเดฑเตเดฑเตŠเดจเตเดจเดฟเตฝ เด’เดจเตเดจเดฟเดฒเดงเดฟเด•เด‚ เดจเต‹เดกเตเด•เดณเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเดฟเดธเตเดฑเตเดฑเด‚ เด•เตเดฐเดฎเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เด‰เตฝเดชเตเดชเดพเดฆเดจ เดธเดจเตเดฆเตผเดญเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเดฟเดฐเดตเดงเดฟ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.
  10. เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต. เดตเตเดฏเด•เตเดคเดฟเด—เดค เดธเต‡เดตเดจเด™เตเด™เตพ เดฎเต‹เด•เตเด•เต เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดฒเต‚เดŸเต†, เดชเดฐเดฟเดถเต‹เดงเดจเดฏเตเด•เตเด•เต เดธเต—เด•เดฐเตเดฏเดชเตเดฐเดฆเดฎเดพเดฏ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเดฐเดตเดงเดฟ เดชเดคเดฟเดชเตเดชเตเด•เตพ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฒเดญเดฟเด•เตเด•เตเด‚.
  11. เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เต. เดฎเตเดดเตเดตเตป เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดค เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเด‚ เด’เดฐเตŠเดฑเตเดฑ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด‰เดณเตเดณเดคเต, เด‡เดจเตเดฑเด—เตเดฐเต‡เดทเตป เดŸเต†เดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดจเตเดฑเต† เดญเดพเด—เดฎเดพเดฏเดฟ เดŽเดฒเตเดฒเดพ เด˜เดŸเด•เด™เตเด™เดณเตเด‚ เดจเดฟเดฏเดจเตเดคเตเดฐเดฟเดค เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด…เดจเตเด•เดฐเดฟเด•เตเด•เดพเตป เดŽเดณเตเดชเตเดชเดฎเดพเดฃเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดšเดฟเดฒ เดจเต‹เดกเตเด•เตพ เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เด’เดฐเต เดธเดพเดนเดšเดฐเตเดฏเด‚.

เดชเต‹เดฐเดพเดฏเตเดฎเด•เดณเตเด‚ เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเตเด‚

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฎเดฑเตเดฑเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเดฎเต€เดชเดจเด™เตเด™เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฃเต, เดšเดฟเดฒ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เต เด…เดจเตเดฏเต‹เดœเตเดฏเดฎเดฒเตเดฒเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเด‚. เดšเดฟเดฒ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เดšเตเดตเดŸเต†:

  1. เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป. เดšเดฟเดฒเดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เดŽเดฒเตเดฒเดพ เดธเด‚เดฐเด•เตเดทเดฃ เดธเด‚เดตเดฟเดงเดพเดจเด™เตเด™เดณเต†เดฏเตเด‚ เดฎเดฑเดฟเด•เดŸเดจเตเดจเต เด‰เตฝเดชเดพเดฆเดจเดคเตเดคเดฟเดฒเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเต‡เด—เดคเตเดคเดฟเตฝ เดถเดฐเดฟเดฏเดพเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดˆ เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดฒเต‚เดŸเต† เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดšเตเดฐเตเด™เตเด™เดฟเดฏเดคเต, เด•เด‚เดชเตˆเดฒเต‡เดทเดจเตเด‚ เดธเตเดตเดฏเดฎเต‡เดตเดฏเตเดณเตเดณ เดตเดฟเดจเตเดฏเดพเดธเดตเตเด‚ เด‡เดจเดฟเดฏเตเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดฐเตเด‚. เด‡เดคเต เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเตเดฑเต† เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฏ เดธเดตเดฟเดถเต‡เดทเดคเดฏเตเด‚ เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ เดฆเต‹เดทเดตเตเดฎเดพเดฃเต.
  2. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดœเดจเดฑเต‡เดทเตป. เด’เดฐเต เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เดŸเต‚เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเตฝ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ, เดฌเดฟเตฝเดกเต เดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดธเด‚เดฏเต‹เดœเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด•เต‚เดŸเตเดคเตฝ เดถเตเดฐเดฎเด™เตเด™เตพ เด†เดตเดถเตเดฏเดฎเดพเดฏเดฟ เดตเดจเตเดจเต‡เด•เตเด•เดพเด‚.
  3. เด‰เดชเด•เดฐเดฃเด™เตเด™เตพ. เดจเดฟเดฒเดตเดฟเตฝ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดค เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเตเด‚ เดŸเต†เด•เตเดจเดฟเด•เตเด•เตเด•เดณเตเด‚ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณเดคเดพเดฃเต. เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตโ€Œเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เด…เดคเตเดคเดฐเด‚ เดŽเดฒเตเดฒเดพ เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เดณเตเด‚/เดŸเต†เด•เตโ€Œเดจเดฟเด•เตเด•เตเด•เดณเตเด‚ เดฒเดญเตเดฏเดฎเดพเด•เดฟเดฒเตเดฒ.
  4. เดจเดฟเดฒเดชเดพเดŸเตเด•เดณเดฟเตฝ เดฎเดพเดฑเตเดฑเด‚ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดกเต†เดตเดฒเดชเตเดชเตผเดฎเดพเดฐเตเด‚ DevOps-เด‰เด‚ เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดซเดฏเดฒเตเด•เดณเตเดฎเดพเดฏเดฟ เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฃเต. เด’เดฐเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจ เด†เดถเดฏเด‚ เด…เตฝเดชเตเดชเด‚ เด…เดชเตเดฐเดคเต€เด•เตเดทเดฟเดคเดตเตเด‚ เด…เดธเดพเดงเดพเดฐเดฃเดตเตเดฎเดพเด•เดพเด‚, เด…เดคเต เดจเดฟเดฐเดธเดฟเด•เตเด•เดพเตป เด•เดพเดฐเดฃเดฎเดพเดฏเต‡เด•เตเด•เดพเด‚.
  5. เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดธเตเด–เด•เดฐเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป (CI/CD) เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดชเตเดฐเด•เตเดฐเดฟเดฏเดฏเตเดŸเต† เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เด“เดŸเตเดŸเต‹เดฎเต‡เดทเตป เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด…เดคเต เดคเดฟเด•เดšเตเดšเตเด‚ เด…เดธเต—เด•เดฐเตเดฏเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚.

เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดŽเดจเตเดจ เด†เดถเดฏเดตเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฎเดฟเดฒเตเดฒเดพเดคเตเดค, เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเตเดฑเต† เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดฎเดฟเดคเดฟเด•เดณเดฟเตฝ เดจเดฎเตเด•เตเด•เต เดคเดพเดฎเดธเดฟเด•เตเด•เดพเด‚:

  1. เดจเต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเตเดค เด…เดจเดพเดตเดถเตเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดตเดฟเดตเดฐเด™เตเด™เตพ เดžเด™เตเด™เตพ เดจเตฝเด•เดฟเดฏเดพเตฝ, เดจเดทเตโ€ŒเดŸเดฎเดพเดฏ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตฝ เด•เดฃเตเดŸเต†เดคเตเดคเตเดจเตเดจเดคเดฟเดจเต เด•เด‚เดชเตˆเดฒเตผ เดžเด™เตเด™เดณเต† เดธเดนเดพเดฏเดฟเด•เตเด•เดฟเดฒเตเดฒ. เด•เต‡เด•เตเด•เต เดชเดพเดฑเตเดฑเต‡เตบ เด‰เดชเต‡เด•เตเดทเดฟเดšเตเดšเต เด•เต‚เดŸเตเดคเตฝ เด•เตผเด•เตเด•เดถเดฎเดพเดฏ เดคเดฐเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, HList เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดฌเต€เดœเด—เดฃเดฟเดค เดกเดพเดฑเตเดฑ เดคเดฐเด™เตเด™เตพ (เด•เต‡เดธเต เด•เตเดฒเดพเดธเตเด•เตพ).
  2. เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดฎเดฟเดฒเตเดฒเดพเดคเตเดค เดตเดฐเดฟเด•เตพ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดซเดฏเดฒเดฟเดฒเตเดฃเตเดŸเต: (package, import,เดตเดธเตเดคเต เดชเตเดฐเด–เตเดฏเดพเดชเดจเด™เตเด™เตพ; override defเดธเตเดฅเดฟเดฐ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดณเตเดณ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เตพเด•เตเด•เตเดณเตเดณเดคเดพเดฃเต). เดจเดฟเด™เตเด™เดณเตเดŸเต‡เดคเดพเดฏ DSL เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เด‡เดคเต เดญเดพเด—เดฟเด•เดฎเดพเดฏเดฟ เด’เดดเดฟเดตเดพเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต. เด•เต‚เดŸเดพเดคเต†, เดฎเดฑเตเดฑเต เดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด‚ (เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, XML) เดซเดฏเตฝ เด˜เดŸเดจเดฏเดฟเตฝ เดšเดฟเดฒ เดจเดฟเดฏเดจเตเดคเตเดฐเดฃเด™เตเด™เตพ เดเตผเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต.
  3. เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต† เด‰เดฆเตเดฆเต‡เดถเตเดฏเด™เตเด™เตพเด•เตเด•เดพเดฏเดฟ, เดธเดฎเดพเดจ เดจเต‹เดกเตเด•เดณเตเดŸเต† เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดจเตเดฑเต† เดกเตˆเดจเดพเดฎเดฟเด•เต เดฑเต€เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดžเด™เตเด™เตพ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ.

เดคเต€เดฐเตเดฎเดพเดจเด‚

เดˆ เดชเต‹เดธเตเดฑเตเดฑเดฟเตฝ, เดธเตเด•เดพเดฒ เดŸเตˆเดชเตเดชเต เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดตเดฟเดชเตเดฒเดฎเดพเดฏ เด•เดดเดฟเดตเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต‹เดดเตเดธเต เด•เต‹เดกเดฟเดฒเต† เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต† เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด†เดถเดฏเด‚ เดžเด™เตเด™เตพ เดชเดฐเตเดฏเดตเต‡เด•เตเดทเดฃเด‚ เดšเต†เดฏเตเดคเต. xml เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเตเด•เตพ เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟเดฏเตเดณเตเดณ เดชเดฐเดฎเตเดชเดฐเดพเด—เดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฐเต€เดคเดฟเด•เตพเด•เตเด•เต เดชเด•เดฐเดฎเดพเดฏเดฟ เดˆ เดธเดฎเต€เดชเดจเด‚ เดตเดฟเดตเดฟเดง เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚. เดžเด™เตเด™เดณเตเดŸเต† เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเตเด•เดพเดฒเดฏเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดฟเดฏเต†เด™เตเด•เดฟเดฒเตเด‚, เด…เดคเต‡ เด†เดถเดฏเด™เตเด™เตพ เดธเดฎเดพเดนเดฐเดฟเดšเตเดš เดฎเดฑเตเดฑเต เดญเดพเดทเด•เดณเดฟเดฒเต‡เด•เตเด•เต (เด•เต‹เดŸเตเดฒเดฟเตป, เดธเดฟ#, เดธเตเดตเดฟเดซเตเดฑเตเดฑเต, ...) เด•เตˆเดฎเดพเดฑเดพเตป เด•เดดเดฟเดฏเตเด‚. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเตเด•เดณเดฟเตฝ เด’เดจเตเดจเดฟเตฝ เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดˆ เดธเดฎเต€เดชเดจเด‚ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต, เด…เดคเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดŸ เดญเดพเด—เด™เตเด™เตพ เดšเต‡เตผเดคเตเดคเต เดŸเต†เด•เตเดธเตเดฑเตเดฑเต เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดชเต‹เด•เตเด•.

เดธเตเดตเดพเดญเดพเดตเดฟเด•เดฎเดพเดฏเตเด‚, เด’เดฐเต เด•เด‚เดชเตˆเตฝ เดšเต†เดฏเตเดค เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเต เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดตเดฟเด•เดธเดจ เดชเตเดฐเด•เตเดฐเดฟเดฏ เด†เดตเดถเตเดฏเดฎเดพเดฃเต. เดชเด•เดฐเดฎเดพเดฏเดฟ, เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเตเด•เดณเตเดŸเต† เด‰เดฏเตผเดจเตเดจ เดจเดฟเดฒเดตเดพเดฐเดตเตเด‚ เดตเดฟเดถเตเดตเดพเดธเตเดฏเดคเดฏเตเด‚ เด‰เดฑเดชเตเดชเดพเด•เตเด•เตเดจเตเดจเต.

เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเดจเตเดจ เดธเดฎเต€เดชเดจเด‚ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚:

  1. เด•เด‚เดชเตˆเตฝ-เดŸเตˆเด‚ เดšเต†เด•เตเด•เตเด•เตพ เดจเดŸเดคเตเดคเดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดฎเดพเด•เตเดฐเต‹เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเด‚.
  2. เด…เดจเตเดคเดฟเดฎ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด†เด•เตเดธเดธเต เดšเต†เดฏเตเดฏเดพเดตเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด…เดตเดคเดฐเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต DSL เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.
  3. เด“เดŸเตเดŸเต‹เดฎเดพเดฑเตเดฑเดฟเด•เต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด•เตเดฐเดฎเต€เด•เดฐเดฃเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดกเตˆเดจเดพเดฎเดฟเด•เต เดฑเดฟเดธเต‹เดดเตเดธเต เดฎเดพเดจเต‡เดœเตเดฎเต†เดจเตเดฑเต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚. เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต† เดจเต‹เดกเตเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเด‚ เดฎเดพเดฑเตเดฑเตเดจเตเดจเดคเดฟเดจเต (1) เด“เดฐเต‹ เดจเต‹เดกเดฟเดจเตเด‚ เด…เดฒเตเดชเด‚ เดตเตเดฏเดคเตเดฏเดธเตเดคเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดฒเดญเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต; (2) เดชเตเดคเดฟเดฏ เดจเต‹เดกเตเด•เดณเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เดตเดฟเดตเดฐเด™เตเด™เตพ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเต‡เดœเตผเด•เตเด•เต เดฒเดญเดฟเดšเตเดšเต.

เด…เด‚เด—เต€เด•เดพเดฐเด™เตเด™เตพ

เดกเตเดฐเดพเดซเตเดฑเตเดฑเต เดฒเต‡เด–เดจเดคเตเดคเต† เด•เตเดฐเดฟเดฏเดพเดคเตเดฎเด•เดฎเดพเดฏเดฟ เดตเดฟเดฎเตผเดถเดฟเดšเตเดšเดคเดฟเดจเต เด†เตปเดกเตเดฐเดฟ เดธเดพเด•เตโ€Œเดธเต‹เดจเต‹เดตเต, เดชเดตเตฝ เดชเต‹เดชเต‹เดตเต, เด†เดจเตเดฑเตบ เดจเต†เด–เต‡เดตเต เดŽเดจเตเดจเดฟเดตเดฐเต‹เดŸเต เดจเดจเตเดฆเดฟ เดชเดฑเดฏเดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•