
ุฏุนููุง ูุฑู ู ุง ูู ุงูุญููู ููุฐู ุงูู ุดููุฉ.
ุชูุฒูุน ุงูุฃุดูุงุก "ุญุณุจ ุงูุณุนุฉ"
ู ู ุฃุฌู ุนุฏู ุงูุฎูุถ ูู ุงูุชุฌุฑูุฏุงุช ุบูุฑ ุงูู ุซูุฑุฉ ููุงูุชู ุงู ุ ุณููุธุฑ ูู ุงูุฃู ุฑ ุจุงุณุชุฎุฏุงู ู ุซุงู ู ูู ุฉ ู ุญุฏุฏุฉ - ุงูู ุฑุงูุจุฉ . ุฃูุง ู ุชุฃูุฏ ู ู ุฃูู ุณุชููู ูุงุฏุฑูุง ุนูู ุฑุจุท ุงูุฃุณุงููุจ ุงูู ูุชุฑุญุฉ ุจู ูุงู ู ุงูู ุญุฏุฏุฉ ุจููุณู.
ูุงุฆูุงุช ุงูู ุฑุงูุจุฉ "ุงูู ูุงูุฆุฉ"
ู ุซุงู ุนูู ุฐูู ุฌุงู ุนู ุงูู ูุงููุณ ุงูุฎุงุต ุจูุง ูู Zabbix ุ ุงูุฐูู ูุดุชุฑููู ุชุงุฑูุฎูุงู ูู ุจููุฉ ู ุดุชุฑูุฉ ู ุน ุฌุงู ุนู ุณุฌูุงุช PostgreSQL. ูู ุงููุงูุน
ุ ูููุฏ ูู ูุงุฆู ู ุฑุงูุจุฉ (ู ุถูู) ูู zabbix ุชูุฑูุจูุง ุจุดูู ู ุณุชูุฑ ููุณ ู ุฌู ูุนุฉ ุงูู ูุงููุณ ุจููุณ ุงูุชุฑุฏุฏ ุทูุงู ุงูููุช:

ูู ุง ุชุฑู ูู ุงูุฑุณู ุงูุจูุงูู ุ ูุง ูุชุฌุงูุฒ ุงููุฑู ุจูู ููู ุงูุญุฏ ุงูุฃุฏูู ูุงูุญุฏ ุงูุฃูุตู ูุนุฏุฏ ุงูู ูุงููุณ ุงูุชู ุชู ุฅูุดุงุคูุง 15ูช . ูุฐูู ุ ูู ูููุง ุงุนุชุจุงุฑ ุฌู ูุน ุงููุงุฆูุงุช ู ุชุณุงููุฉ ูู ููุณ "ุงูุจุจุบุงูุงุช" .
"ุงุฎุชูุงู" ููู ุจูู ุงูุฃุดูุงุก
ุนูู ุนูุณ ุงููู ูุฐุฌ ุงูุณุงุจู ุ ูุฅู ุงูู ุถููุงุช ุงูู ุฑุงูุจุฉ ุจุนูุฏุฉ ูู ุงูุจุนุฏ ุนู ุงูุชุฌุงูุณ ุจุงููุณุจุฉ ูู ุฌู ุนู ุงูุณุฌูุงุช .
ุนูู ุณุจูู ุงูู ุซุงู ุ ูู ูู ูู ุถูู ูุงุญุฏ ุฅูุดุงุก ู ูููู ุฎุทุฉ ููู ููุง ูู ุงูุณุฌู ุ ูุนุดุฑุงุช ุงูุขูุงู ุฃุฎุฑู ุ ูุจุนุถูุง - ุญุชู ุงููููู ู ููุง. ูุงูุฎุทุท ููุณูุง ู ุฎุชููุฉ ุชู ุงู ูุง ู ู ุญูุซ ุงูุญุฌู ูุงูุชุนููุฏ ูู ู ุญูุซ ุงูุชูุฒูุน ุนูู ู ุฏุงุฑ ุงูููุช ู ู ุงูููู . ูุฐูู ุงุชุถุญ ุฃู ุงูุญู ู "ููุชุฒ" ุจููุฉ ูู ุจุนุถ ุงูุฃุญูุงู:

ุญุณููุง ุ ูุธุฑูุง ูุฃู ุงูุญู ู ูู ูู ุฃู ูุชุบูุฑ ูุซูุฑูุง ุ ูุฃูุช ุจุญุงุฌุฉ ุฅูู ู ุนุฑูุฉ ููููุฉ ุฅุฏุงุฑุชู ...
ู ูุณู
ูุญู ูููู ุนูู ุงูููุฑ ุฃููุง ูุญุชุงุฌ ุจูุถูุญ ุฅูู ุชูุณูุน ูุทุงู ูุธุงู ุงูุชุฌู ูุน ุ ูุธุฑูุง ูุฃู ุนูุฏุฉ ูุงุญุฏุฉ ู ููุตูุฉ ู ุน ุงูุญู ู ุงููุงู ู ุณุชุชููู ููู ูุง ู ุง ุนู ุงูุชุฃููู . ูููุฐุง ูุญุชุงุฌ ุฅูู ู ูุณู - ุดุฎุต ูุฏูุฑ ุญุฏููุฉ ุงูุญููุงูุงุช ุจุฃูู ููุง.
ุงุชุถุญ ุฃู ุดูุฆูุง ู ุซู ูุฐุง:

ูู ุนุงู ู ุญู ูู "ูู ุงูุจุจุบุงูุงุช" ูููุณุจุฉ ู ุฆููุฉ ู ู ูุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉ ุจุดูู ุฏูุฑู ูุนูุฏ ุชุนููู ุงูุณูุฏ ุ ูุคูุงุก - ุฅูู ุงูู ุฌู ุน. ููู ููู ุ ุนูู ุฃุณุงุณ ูุฐู ุงูุจูุงูุงุช ุ ุฅุตุฏุงุฑ ุฃู ุฑ ู ุซู "ูุถุน ู ุถูู ุฌุฏูุฏ ุนูู ุนุงู ู ุบูุฑ ู ุญู ู ุฑูู 4" ุฃู "ูุฌุจ ููู ุงูู ุถูู ุฃ ุฅูู ุงูุนุงู ู ุฑูู 3" .
ููุง ุชุญุชุงุฌ ุฃูุถูุง ุฅูู ุฃู ุชุชุฐูุฑ ุฃูู ุ ุนูู ุนูุณ ู ุฑุงูุจุฉ ุงููุงุฆูุงุช ุ ูุฅู ุงูู ุฌู ุนุงุช ุฃููุณูู ููุณ ูุฏููู "ุทุงูุฉ" ู ุชุณุงููุฉ ุนูู ุงูุฅุทูุงู - ุนูู ุณุจูู ุงูู ุซุงู ุ ูุฏ ูููู ูุฏูู 8 ููู ููุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉ ูู ุฃุญุฏูุง ุ ูู ู ูุงุญูุฉ ุฃุฎุฑู - 4 ููุท ุ ูุญุชู ุชุฑุฏุฏ ุฃูู. ูุฅุฐุง ูู ุช ุจุชุญู ูููู ุจุงูู ูุงู "ุจุงูุชุณุงูู" ุ ูุณูุจุฏุฃ ุงูุซุงูู ูู "ุงูุตู ุช" ุ ูุณูููู ุงูุฃูู ุฎุงู ูุงู. ูู ู ููุง ูุชุจุน ...
ู ูุงู ุงูู ูุณู
ูู ุงููุงูุน ุ ููุงู ู ูู ุฉ ูุงุญุฏุฉ ููุท - ูุถู ุงู ุงูุชูุฒูุน ุงูู ุชุณุงูู ููุญู ู ุจุงููุงู ู (ูู ูุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉูช) ุจูู ุฌู ูุน ุงูุนู ุงู ุงูู ุชุงุญูู. ุฅุฐุง ุชู ููุง ู ู ุญููุง ุชู ุงู ูุง ุ ูุณูุชู ุชููุงุฆููุง ุงูุญุตูู ุนูู ุชูุญูุฏ ุชูุฒูุน ุญู ู ูุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉ ุนูู ุงูู ุฌู ุนุงุช.
ู ู ุงููุงุถุญ ุฃูู ุญุชู ูู ูุงู ูู ูุงุฆู ูููุฏ ููุณ ุงูุญู ู ุ ุจู ุฑูุฑ ุงูููุช ุ ูุฏ "ูู ูุช" ุจุนุถูุง ุ ูุชุธูุฑ ุจุนุถ ุงูุนูุงุตุฑ ุงูุฌุฏูุฏุฉ. ูุฐูู ุ ูุฌุจ ุฃู ุชููู ูุงุฏุฑูุง ุนูู ุฅุฏุงุฑุฉ ุงูู ููู ุจุงููุงู ู ุจุดูู ุฏููุงู ููู ูุงูุญูุงุธ ุนูู ุงูุชูุงุฒู ุจุงุณุชู ุฑุงุฑ .
ุงูุชูุงุฒู ุงูุฏููุงู ููู
ูู ูููุง ุญู ู ุดููุฉ ุจุณูุทุฉ (zabbix) ุจุดูู ุชุงูู:
- ูุญุณุจ ุงูุณุนุฉ ุงููุณุจูุฉ ููู ุฌุงู ุน "ูู ุงูู ูุงู "
- ุชูุณูู ุฌู ูุน ุงูู ูุงู ุจูููู ุง ุจุงูุชูุงุณุจ
- ููุฒุน ุจุงูุชุณุงูู ุจูู ุงูุนู ุงู

ูููู ู ุงุฐุง ุชูุนู ูู ุญุงูุฉ ูุฌูุฏ ูุงุฆูุงุช "ุบูุฑ ู ุชูุงูุฆุฉ ุจุดุฏุฉ" ุ ู ุซู ุฌุงู ุน ุงูุณุฌูุงุชุ ..
ุชูููู ุงูุชูุญูุฏ
ุฃุนูุงู ุ ุงุณุชุฎุฏู ูุง ู ุตุทูุญ " ุงูุชูุฒูุน ุงูู ูุชุธู ุงูุฃูุตู " ุทูุงู ุงูููุช ุ ูููู ููู ูู ูู ููู ุฑุก ุฃู ููุงุฑู ุฑุณู ููุง ุจูู ุชูุฒูุนูู ุ ุฃููู ุง "ุฃูุซุฑ ุงูุชุธุงู ูุง"ุ
ูุชูููู ุงูุชูุญูุฏ ูู ุงูุฑูุงุถูุงุช ุ ูุงู ููุงู ู ูุฐ ูุชุฑุฉ ุทูููุฉ ุดูุก ู ุซู ุงูุงูุญุฑุงู ุงูู ุนูุงุฑู . ู ู ูู ูุณูู ูููุฑุงุกุฉ:
S[X] = sqrt( sum[ ( x - avg[X] ) ^ 2 of X ] / count[X] )
ูุธุฑูุง ูุฃู ุนุฏุฏ ุงูุนู ุงู ูู ูู ู ู ุงูู ุฌู ุนูู ูู ูู ุฃู ูุฎุชูู ุฃูุถูุง ุจุงููุณุจุฉ ููุง ุ ูุฌุจ ุชุณููุฉ ุงูุชุดุงุฑ ุงูุญู ู ููุณ ููุท ุจูููู ุ ูููู ุฃูุถูุง ุจูู ุงูู ุฌู ุนูู ููู .
ุฃู ุฃู ุชูุฒูุน ุงูุญู ู ุนูู ุนู ุงู ุงูู ุฌู ุนูู
[ (10%, 10%, 10%, 10%, 10%, 10%) ; (20%) ]ููุณ ุฌูุฏูุง ุฃูุถูุง ุ ุญูุซ ุชุจูู ุฃู ุงูุฃูู ูู 10 ูช ุ ูุงูุซุงูู - 20 ูช ุ ููู ุถุนู ุงููุณุจุฉ ุงููุณุจูุฉ.
ูุฐูู ุ ููุฏู ู ุณุงูุฉ ู ุชุฑูุฉ ูุงุญุฏุฉ ูุชูุฏูุฑ ุนุงู ูู "ุงูุชูุญูุฏ":
d([%wrk], [%col]) = sqrt( S[%wrk] ^ 2 + S[%col] ^ 2 )ููุฐุง ูุนูู ุฃู ููู
ุงูุญุฑุงู ุงูุฌุฐุฑ ุงูุชุฑุจูุนู ูู
ุฌู
ูุนุงุช ู
ู ููู
ุงูุญู
ู ูุฌู
ูุน ุงูุนู
ุงู ููุฌู
ูุน ุงูุฌุงู
ุนูู ูููุธุฑ ุฅูููุง ุนูู ุฃููุง ุฅุญุฏุงุซูุงุช ูู
ุชุฌู ุ ุณูุญุงูู ุชูููู ุทููู.
ุงููู ุฐุฌุฉ
ุฅุฐุง ูุงู ูุฏููุง ุงููููู ู ู ุงูุฃุดูุงุก ุ ููู ูููุง ุญููุฆุฐู "ูุดุฑ" ุงูููุฉ ุงูุบุงุดู ุฉ ุจูู ุงูุนู ุงู ุจุญูุซ ูููู ุงูู ููุงุณ ูู ุญุฏู ุงูุฃุฏูู . ููู ูุฏููุง ุขูุงู ุงูุฃุดูุงุก ุ ูุฐุง ูุฅู ูุฐู ุงูุทุฑููุฉ ูู ุชูุฌุญ. ููููุง ูุนูู ุฃู ุงูู ุฌู ุน ูุงุฏุฑ ุนูู "ููู" ูุงุฆู ู ู ุนุงู ู ุฅูู ุขุฎุฑ - ูููุนู ู ุนูู ุชุตู ูู ูุฐุง ุงูุฎูุงุฑ ุจุงุณุชุฎุฏุงู ุทุฑููุฉ ุงูุชุฏุฑุฌ ุงููููู .
ู ู ุงููุงุถุญ ุฃููุง ูุฏ ูุง ูุฌุฏ ุงูุญุฏ ุงูุฃุฏูู "ุงูู ุซุงูู" ููู ููุงุณ ุ ููู ุงูู ููุงุณ ุงูู ุญูู ู ุคูุฏ. ููู ูู ุฃู ูุชุบูุฑ ุงูุญู ู ููุณู ูุซูุฑูุง ุจู ุฑูุฑ ุงูููุช ุจุญูุซ ูุง ุชูุฌุฏ ุญุงุฌุฉ ู ุทูููุง ููุจุญุซ ุนู "ู ุซุงูู" ููุชุฑุฉ ุบูุฑ ู ุญุฏูุฏุฉ .
ุจู ุนูู ุ ุนูููุง ููุท ุชุญุฏูุฏ ุฃู ูุงุฆู ูุฅูู ุฃู ุนุงู ู ูููู "ุงูุงูุชูุงู" ุฃูุซุฑ ูุนุงููุฉ. ูุฏุนูุง ูุฌุนููุง ูู ูุฐุฌูุง ุชุงูููุง ูุดุงู ููุง:
- ( host, worker)
- host worker' ยซยป
ยซยป . - ยซ ยป
- d ยซยป
ูุตุทู ุฌู ูุน ุงูุฃุฒูุงุฌ ุจุชุฑุชูุจ ุชุตุงุนุฏู ููู ููุงุณ . ู ู ุงููุงุญูุฉ ุงูู ุซุงููุฉ ุ ูุฌุจ ุนูููุง ุฏุงุฆู ูุง ุชูููุฐ ููู ุงูุฒูุฌ ุงูุฃูู ูุฃูู ูุนุทู ุงูุญุฏ ุงูุฃุฏูู ู ู ู ููุงุณ ุงููุฏู. ูุณูุก ุงูุญุธ ุ ูู ุงููุงูุน ุ ูุฅู ุนู ููุฉ ุงูููู ููุณูุง "ุชููู ุงูู ูุงุฑุฏ" ุ ูุฐุง ูุง ูุฌุจ ุชุดุบูููุง ูููุณ ุงููุงุฆู ุฃูุซุฑ ู ู ูุชุฑุฉ "ุชุจุฑูุฏ" ู ุนููุฉ .
ูู ูุฐู ุงูุญุงูุฉ ุ ูู ูููุง ุฃู ูุฃุฎุฐ ุงูุฒูุฌ ุงูุซุงูู ูุงูุซุงูุซ ... ุจุชุฑุชูุจ - ุฅุฐุง ูุงู ุงูู ููุงุณ ุงููุฏู ููุท ุณููุฎูุถ โโุจุงููุณุจุฉ ุฅูู ุงูููู ุฉ ุงูุญุงููุฉ.
ุฅุฐุง ูู ููู ููุงู ู ูุงู ููุชูููู - ูููุง ูู ุงูุญุฏ ุงูุฃุฏูู ุงูู ุญูู!
ู ุซุงู ูู ุงูุตูุฑุฉ:

ููุณ ู ู ุงูุถุฑูุฑู ุนูู ุงูุฅุทูุงู ุจุฏุก ุงูุชูุฑุงุฑุงุช "ุนูู ุทูู ุงูุทุฑูู". ุนูู ุณุจูู ุงูู ุซุงู ุ ูู ููู ุฅุฌุฑุงุก ุชุญููู ู ุชูุณุท โโููุญู ู ุนูู ู ุฏุงุฑ ูุชุฑุฉ ุฒู ููุฉ ุชุจูุบ ุฏูููุฉ ูุงุญุฏุฉ ุ ูุนูุฏ ุงูุชู ุงูู ุ ูู ุจุฅุฌุฑุงุก ุนู ููุฉ ููู ูุงุญุฏุฉ.
ุงูุชุญุณููุงุช ุงูุฏูููุฉ
ู ู ุงููุงุถุญ ุฃู ุงูุฎูุงุฑุฒู ูุฉ ุฐุงุช ุงูุชุนููุฏ
T() x W()ููุณุช ุฌูุฏุฉ ุฌุฏูุง. ูููู ูุฌุจ ุฃูุง ุชูุณู ุชุทุจูู ุจุนุถ ุงูุชุญุณููุงุช ุงููุงุถุญุฉ ุจุดูู ุฃู ุจุขุฎุฑ ูุงูุชู ูู
ูููุง ุชุณุฑูุนูุง ูู ุจุนุถ ุงูุฃุญูุงู.
ุจุฏูู "ุจุจุบุงูุงุช"
ุฅุฐุง ุฃูุชุฌ ูุงุฆู / ู ูู ุฉ / ู ุถูู ุญู ููุฉ "0 ูุทุนุฉ" ุนูู ุงููุงุตู ุงูุฒู ูู ุงูู ูุงุณ ุ ููุง ูู ูู ูููู ุฅูู ู ูุงู ู ุง - ููุง ูุญุชุงุฌ ุญุชู ุฅูู ุงููุธุฑ ููู ูุชุญูููู.
ุงูุชุญููู ุงูุฐุงุชู
ุนูุฏ ุฅูุดุงุก ุฃุฒูุงุฌ ุ ููุณุช ููุงู ุญุงุฌุฉ ูุชูููู ููุงุกุฉ ููู ูุงุฆู ุฅูู ููุณ ุงูุนุงู ู ุ ุญูุซ ููุฌุฏ ุจุงููุนู . ุจุนุฏ ูู ุดูุก ุ ุณูููู ุจุงููุนู
T x (W - 1)- ุชุงูู ุ ูููู ูุทูู!
ุญู ููุฉ ูุง ูู ูู ุชู ููุฒูุง
ูุธุฑูุง ูุฃููุง ูููู ุจูู ุฐุฌุฉ ููู ุงูุญู ู ุ ูุงููุงุฆู ู ุฌุฑุฏ ุฃุฏุงุฉ ุ ููุง ูุงุฆุฏุฉ ู ู ู ุญุงููุฉ ููู ูุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉูช "ุงูู ุชุทุงุจูุฉ" - ุณุชุธู ููู ุงูู ูุงููุณ ูู ุง ูู ุชู ุงู ูุง ุ ูุฅู ูุงู ุฐูู ูุชูุฒูุน ู ุฎุชูู ูููุงุฆูุงุช.
ุฃู ุฃูู ูููู ุชูููู ูู ูุฐุฌ ูุงุญุฏ ููู ุฌู ูุนุฉ (wrkSrc ุ wrkDst ุูช cpu) . ุญุณููุง ุ ูู ููู ุงุนุชุจุงุฑ "ู ุชุณุงููุฉ" ุ ุนูู ุณุจูู ุงูู ุซุงู ุูช ููู ูุญุฏุฉ ุงูู ุนุงูุฌุฉ ุงูู ุฑูุฒูุฉ ุงูุชู ุชุทุงุจู ุญุชู ู ูุฒูุฉ ุนุดุฑูุฉ ูุงุญุฏุฉ.
ุชุทุจูู ู
ุซุงู JavaScript
var col = {
'c1' : {
'wrk' : {
'w1' : {
'hst' : {
'h1' : 5
, 'h2' : 1
, 'h3' : 1
}
, 'cpu' : 80.0
}
, 'w2' : {
'hst' : {
'h4' : 1
, 'h5' : 1
, 'h6' : 1
}
, 'cpu' : 20.0
}
}
}
, 'c2' : {
'wrk' : {
'w1' : {
'hst' : {
'h7' : 1
, 'h8' : 2
}
, 'cpu' : 100.0
}
, 'w2' : {
'hst' : {
'h9' : 1
, 'hA' : 1
, 'hB' : 1
}
, 'cpu' : 50.0
}
}
}
};
// ""
let $iv = (obj, fn) => Object.values(obj).forEach(fn);
let $mv = (obj, fn) => Object.values(obj).map(fn);
// initial reparse
for (const [cid, c] of Object.entries(col)) {
$iv(c.wrk, w => {
w.hst = Object.keys(w.hst).reduce((rv, hid) => {
if (typeof w.hst[hid] == 'object') {
rv[hid] = w.hst[hid];
return rv;
}
// ,
if (w.hst[hid]) {
rv[hid] = {'qty' : w.hst[hid]};
}
return rv;
}, {});
});
c.wrk = Object.keys(c.wrk).reduce((rv, wid) => {
// ID -
rv[cid + ':' + wid] = c.wrk[wid];
return rv;
}, {});
}
//
let S = col => {
let wsum = 0
, wavg = 0
, wqty = 0
, csum = 0
, cavg = 0
, cqty = 0;
$iv(col, c => {
$iv(c.wrk, w => {
wsum += w.cpu;
wqty++;
});
csum += c.cpu;
cqty++;
});
wavg = wsum/wqty;
wsum = 0;
cavg = csum/cqty;
csum = 0;
$iv(col, c => {
$iv(c.wrk, w => {
wsum += (w.cpu - wavg) ** 2;
});
csum += (c.cpu - cavg) ** 2;
});
return [Math.sqrt(wsum/wqty), Math.sqrt(csum/cqty)];
};
// -
let distS = S => Math.sqrt(S[0] ** 2 + S[1] ** 2);
//
let iterReOrder = col => {
let qty = 0
, max = 0;
$iv(col, c => {
c.qty = 0;
c.cpu = 0;
$iv(c.wrk, w => {
w.qty = 0;
$iv(w.hst, h => {
w.qty += h.qty;
});
w.max = w.qty * (100/w.cpu);
c.qty += w.qty;
c.cpu += w.cpu;
});
c.cpu = c.cpu/Object.keys(c.wrk).length;
c.max = c.qty * (100/c.cpu);
qty += c.qty;
max += c.max;
});
$iv(col, c => {
c.nrm = c.max/max;
$iv(c.wrk, w => {
$iv(w.hst, h => {
h.cpu = h.qty/w.qty * w.cpu;
h.nrm = h.cpu * c.nrm;
});
});
});
// ""
console.log(S(col), distS(S(col)));
//
let wrk = {};
let hst = {};
for (const [cid, c] of Object.entries(col)) {
for (const [wid, w] of Object.entries(c.wrk)) {
wrk[wid] = {
wid
, cid
, 'wrk' : w
, 'col' : c
};
for (const [hid, h] of Object.entries(w.hst)) {
hst[hid] = {
hid
, wid
, cid
, 'hst' : h
, 'wrk' : w
, 'col' : c
};
}
}
}
// worker
let move = (col, hid, wid) => {
let w = wrk[wid]
, h = hst[hid];
let wsrc = col[h.cid].wrk[h.wid]
, wdst = col[w.cid].wrk[w.wid];
wsrc.cpu -= h.hst.cpu;
wsrc.qty -= h.hst.qty;
wdst.qty += h.hst.qty;
// "" CPU
if (h.cid != w.cid) {
let csrc = col[h.cid]
, cdst = col[w.cid];
csrc.qty -= h.hst.qty;
csrc.cpu -= h.hst.cpu/Object.keys(csrc.wrk).length;
wsrc.hst[hid].cpu = h.hst.cpu * csrc.nrm/cdst.nrm;
cdst.qty += h.hst.qty;
cdst.cpu += h.hst.cpu/Object.keys(cdst.wrk).length;
}
wdst.cpu += wsrc.hst[hid].cpu;
wdst.hst[hid] = wsrc.hst[hid];
delete wsrc.hst[hid];
};
// (host, worker)
let moveCheck = (orig, hid, wid) => {
let w = wrk[wid]
, h = hst[hid];
// -
if (h.wid == w.wid) {
return;
}
let col = JSON.parse(JSON.stringify(orig));
move(col, hid, wid);
return S(col);
};
// (hsrc,hdst,%cpu)
let checked = {};
// ( -> )
let moveRanker = col => {
let currS = S(col);
let order = [];
for (hid in hst) {
for (wid in wrk) {
// ( 0.1%) ""
let widsrc = hst[hid].wid;
let idx = widsrc + '|' + wid + '|' + hst[hid].hst.cpu.toFixed(1);
if (idx in checked) {
continue;
}
let _S = moveCheck(col, hid, wid);
if (_S === undefined) {
_S = currS;
}
checked[idx] = {
hid
, wid
, S : _S
};
order.push(checked[idx]);
}
}
order.sort((x, y) => distS(x.S) - distS(y.S));
return order;
};
let currS = S(col);
let order = moveRanker(col);
let opt = order[0];
console.log('best move', opt);
//
if (distS(opt.S) < distS(currS)) {
console.log('move!', opt.hid, opt.wid);
move(col, opt.hid, opt.wid);
console.log('after move', JSON.parse(JSON.stringify(col)));
return true;
}
else {
console.log('none!');
}
return false;
};
// -
while(iterReOrder(col));ูุชูุฌุฉ ูุฐูู ุ ูุชู ุชูุฒูุน ุงูุญู ู ุนูู ุฎุฒุงูุงุชูุง ุจููุณ ุงูุทุฑููุฉ ุชูุฑูุจูุง ูู ูู ูุญุธุฉ ุฒู ููุฉ ุ ู ู ุง ูุคุฏู ุฅูู ุชุณููุฉ ุงููู ู ุงููุงุดุฆุฉ ุนูู ุงูููุฑ:
