ืื ืืกื
ืืื!
ืืืืืจ ืื ืืฉืชืฃ ืืช ืื ืืกืืื ืฉืื ืืื ืืืช ืืจืืืืงืืืจืช ืืืงืจื-ืฉืืจืืช ืืคืจืืืงื ืืืืฆืขืืช ืจืฉืชืืช ืขืฆืืืืช.
ืืืื ื ืืืจ ืขื ืืจืืฉืืช ืืืจืืืืงืืืจื, ื ืกืชืื ืขื ืืืืืจืืืช ืืื ืืืช ืฉืื ืืช, ื ื ืชื ืื ืืื ืืืืจืืืืื ืฉื ืืืจืืืืงืืืจื ืืืืืืจืช, ืืื ื ืขืจืื ืืช ืืืืืื ืืืื ืืื ืฉื ืืคืชืจืื.
ืชืื ื ืงืจืืื!
ืืื ืืืืื ืขื ืืืขืื ืืคืชืจืื ื
ืืจืขืืื ืืืจืืื ืืื ืืืขืจืื ืืช ืืืืจืงืืืืืืช ืฉื ืืื ืขื ืกืืื ืฉื ืขืฉืจ ื ืงืืืืช ืขื ืกืื ืชืืื ื.
ืืืืืจ ืื ื ืชืจืืง ืืชืืืืจ ืื ืืช ืืจืฉืชืืช ืืขืฆืืืืช ืืื ื ืขืฉื ืฉืืืืฉ ืืื ืืช ืชืืืื ืืื ืช ืื ืชืื ืื ืืืืืฉืจื. ืขื ืืืช, ืืืื ืืืคืจืกืืืื ืืืืื ืืืืื ื ืืืืจ ืื ืชื ืืช ืฆืื ืืจ ืืืขืจืื ืืจืื ืืขืืืงื.
ืืขืช ื ืขืืืจ ืขื ืฆืื ืืจ ืืืขืจืื ืืจืื ืืขืืืื ื, ืื ืชืืงื ืืืื ืืจืืงืฆืื ืฉื ืฉืืจืืชื ืืืงืจื ืืืงืฉืจ ืฉื ืืจืืืืงืืืจืช ืืคืจืืืงื ืืืืืืช.
ืืืืื ืืขืืืื ืขื ืฆืื ืืจ ืืขืจืืช ืืืืจืงืืืืืืช, ืืืฉืืื ืคืืจืงื ืืืจืืืืื ืืืืื:
- ืืืืจืช ืคืจืฆืืคืื ืืชืืื ืืช
- ืืืจืื ืฉื ืื ืืื
- ืขืื ืืช ืืชืืฆืื
ืืจืืฉืื ื ืคืชืจ ืขื ืืื ืืืืืืช ืฉื ืืืืื ืื ืืจืืฉ
ืชืจืฉืื ืคืื ืงืฆืืื ืื ืฉื ืฆืื ืืจ ืืขืจืื
ื ืืชืื ืืจืืฉืืช ืืจืืืืงืืืจืช ืืคืจืืืงื
ืืืืืืจ ืืืืื
ืืืืืจ ืืืื ืฉื ืคืจืืืงื ML
ืืคืจืืืงื ืืื ืืื ื ืืืฆื ืื ืืืื - ืืืืื ืืขืืืฃ ืืช ืฆืื ืืจ ืืืขืจืื ืืฉืืจืืช ืืงืืื, ืฉืืจืฉ ืืฉืงืืข ืืืจืืืืงืืืจื. ืืืื ืืืจืืฉืืช ืืืกืืกืืืช ืืืืืช:
- ืืืกืื ืืืื ืื ืืืืื - ืื ืืฉืืจืืชืื ืฆืจืืืื ืืืชืื ืืืื ืื ืืืงืื ืืื, ืื ืฆืจืืืื ืืืืืช ื ืืืื ืื ืืชืื
- ืืคืฉืจืืช ืงื ื ืืืื ืืืคืงื ืฉื ืฉืืจืืช ืืืขืจืื - ืืฆืืืืจ ืืืงืืืง ืืกืืืจ ืืืืชืจ
- ืืฉ ืืืงืฆืืช ืืช ืืืชื ืืืืช ืืฉืืื ืืขืื ืืืขืจืืช ืื ืชืืื ื ืขื ืื ืช ืืื ืืข ืืจืืืื ืืืืืงืช ืืืื ืืืกืงืช ืืกืงื ืืช
- ืคืจืืกื ืืืืจื (ืืืืฉ) ืื ืฉื ืฉืืจืืชืื ืกืคืฆืืคืืื ืืื ืฉื ืืืืกื ืืช ืืืื
- ืืืืืืช, ืืืืืช ืืฆืืจื, ืืืฉืชืืฉ ืืืืืืืงืืื ื ืคืืฆืื ืืฉืืจืืชืื ืฉืื ืื
ืืืจืืืืืช
ืืืืจ ื ืืชืื ืืืจืืฉืืช, ืืชืืจืจ ืื ืืจืืืืงืืืจืช ืืืืงืจื-ืฉืืจืืช ืืชืืืื ืืืขื ืืฆืืจื ืืืฉืืืช.
ืขื ืื ืช ืืืืคืืจ ืืืืื ืจืืฉ ืืืืชืจืื, ื ืืืจ ื-API ืฉื Telegram ื-frontend.
ืจืืฉืืช, ืืืื ื ืกืชืื ืขื ืืืืืืจืื ืืืื ืืช ืฉื ืืืจืืืืงืืืจื ืืืืืืจืช, ืืืืจ ืืื ื ืขืืืจ ืืชืืืืจ ืฉื ืื ืืื ืืืจืืืืื, ืืื ื ื ืกื ืืช ืืชืืืื ืฉื ืขืืืื ืชืืื ื ืืืฆืื.
ืชืจืฉืื ืืื ื ืฉื ืืืจืืืืงืืืจื ืืืืืืจืช
ืืืื ื ืืืจ ืืคืืจืื ืจื ืืืชืจ ืขื ืื ืืื ืืืจืืืื ืืชืจืฉืื, ืื ืฆืืื ืืืชื ืืืจืืืช ืืืืื ืืชืืืื ืืขืจืืช ืชืืื ื.
Microservice "attrai-telegram-bot"
ืฉืืจืืช ืืืงืจื ืื ืืงืคื ืืช ืื ืืืื ืืจืืงืฆืืืช ืขื ื-API ืฉื Telegram. ืืฉื ื 2 ืชืจืืืฉืื ืขืืงืจืืื: ืขืืืื ืขื ืชืืื ื ืืืชืืืช ืืืฉืืช ืืขืืืื ืขื ืชืืฆืื ืฉื ืฆืื ืืจ ืืขืจืื. ืืืื ื ืกืชืื ืขื ืฉื ื ืืชืจืืืฉืื ืืืื ืืื ืืืืืื.
ืืขืช ืงืืืช ืืืืขื ืืืชืืืช ืืืฉืืช ืขื ืชืืื ื:
- ืืชืืฆืข ืกืื ืื, ืืืืจืื ืืืืืืงืืช ืืืืืช:
- ืืืื ืืช ืฉื ืืืื ืชืืื ื ืืืคืืืืื
- ืืกืคืจ ืชืืื ืืช ืืืฉืชืืฉ ืฉืืืจ ื ืืฆืืืช ืืชืืจ
- ืืืฉืจ ืขืืืจืื ืืช ืืกืื ืื ืืจืืฉืื ื, ืืชืืื ื ื ืฉืืจืช ืืืืืืื ืืืืงืจ
- ืืืคืงืช ืืฉืืื ืืชืืจ "ืืืขืจืื" ืืืืืืช ืืื ืืืชืจ ืืช ืื ืชืื ืืชืืื ื ืฉื ืืฆืืช ืืืจื ืฉืื ื
- ืื ืืฉืืืื ืฉืืขืื ืืืฉืืื ืืืฆืืื, ืืืฉืชืืฉ ืืงืื ืืืืขื ืขื ืืื ืขืืืื ืืชืืื ื ืืืฉืืขืจ, ืืฉืจ ืืืืฉื ืขื ืกืื ืืกืคืจ ืืืฉืืืืช ืืชืืจ. ืื ืืชืจืืฉืช ืฉืืืื, ืืืฉืชืืฉ ืืงืื ืืืืขื ืืคืืจืฉืช ืขื ืืื ืฉืืืืช ืืืืขื ืขื ืืืืข ืขื ืื ืฉืขืืื ืืืฉืชืืฉ.
ืืื ืื, ืฉืืจืืช ืืืืงืจื ืืื, ืืื ืขืืื ืกืืจื, ืืืืื ืืชืืจ "ืืืจื_ืืขืจืื", ืฉืืืืขื ืืืฉืืืืช ืฉืขืืจื ืืฆืื ืืจ ืืืขืจืื.
ืืืฉืจ ืืงืืืื ืืฉืืื ืืืฉื ื-"after_estimate":
- ืื ืืชืืื ื ืืขืืืืช ืืืฆืืื, ืื ื ืฉืืืืื ืืช ืืชืืฆืื ืืืฉืชืืฉ; ืื ืื, ืื ื ืืืืืขืื ืขื ืฉืืืื.
- ืืกืจืช ืืชืืื ื ืฉืืื ืชืืฆืื ืฉื ืฆืื ืืจ ืืืขืจืื
ืืขืจืื microservice "attrai-estimator"
ืฉืืจืืช ืืืืงืจื ืืื ืืื ืขืืื ืกืืจื ืืืืื ืืชืืื ืืช ืื ืื ืฉืงืฉืืจ ืืฆืื ืืจ ืืขืจืืช ืืชืืื ืืช. ืืฉ ืืื ืจืง ืืืืืจืืชื ืขืืื ืืื - ืืืื ื ื ืชื ืืืชื.
ืืืฉืจ ืืงืืืื ืืฉืืื ืืืฉื ื-"to_estimate":
- ืืืื ื ืขืืืจ ืืช ืืชืืื ื ืืจื ืฆืื ืืจ ืืืขืจืื:
- ืืขืื ืช ืืชืืื ื ืืืืืจืื
- ืื ื ืืืืืื ืืช ืืชืืื ื ืืืืื ืื ืืจืฉ
- ืืฆืืืช ืื ืืคื ืื (MTCNN)
- ืื ื ืืขืจืืืื ืืช ืื ืืคืจืฆืืคืื (ืื ื ืขืืืคืื ืืช ืืคืจืฆืืคืื ืฉื ืืฆืื ืืฉืื ืืืืจืื ืืืฆืืื ืืืกืืงืื ืืช ResNet34)
- ืขืื ืืช ืืชืืื ื ืืกืืคืืช
- ืืืื ื ืฆืืืจ ืืช ืืชืืืืช ืืชืืืืืช
- ืฆืืืจ ืืจืืืืื ื
- ืืืืงืช ืชืืื ื ืืืชืืืช ืืืฉืืช (ืืงืืจืืช).
- ืฉืืืจืช ืืคืื ืืฆืื ืืจ ืืืขืจืื
- ืฉืื ื ืืช ืืืฉืืื ืืชืืจ "ืืืืจ_ืืขืจืื", ืืืื ืืงืฉืืืื ืืืืงืจื-ืฉืืจืืช "attrai-telegram-bot" ืฉื ืืื ืืขืื.
Graylog (+ mongoDB + Elasticsearch)
ืืืืืจื ื ืคืื ืขืืื, ืืื ืขื ืืจืืืื
ืืื ืฉืขืื ืืขืืจ ืจืง ืขื ืืืกื ืืช ื-ELK, ืืืืชื ืื ืืืืื ืืืืืืช ืืกื ืืื ืืืื ืืขืืืื ืขื Graylog. ืืืืจ ืืืืื ืฉืืืื ืืื ืืขืืืื ืืช ืฉื ืชืืื ืืช Kibana ืขื ืคื ื ืืืฉืง ืืืื ืืจื ื ืฉื Graylog.
RabbitMQ
ืืคืจืืืงื ืื ืืื ืฉืืืฉ ื
Redis
ืืคืขืืื ืืฉ ืฆืืจื ืืืฉืชืืฉ ืืืืืืืงืืื ื ืคืืฆืื ืืืืืฉืืื ืืื ื ื ืชืื ืื ืืกืืืืื ืืืืงืจื-ืฉืืจืืชื Python ืฉืื ืื.
ืืืืืื, Redis ืืืืกื ืช ืืคืช hash ืืฆืืจืช "telegram_user_id => ืืกืคืจ ืืืฉืืืืช ืืคืขืืืืช ืืชืืจ", ืืืืคืฉืจืช ืืืืืื ืืช ืืกืคืจ ืืืงืฉืืช ืืืฉืชืืฉ ืืื ืืขืจื ืืกืืื ืืืื ืืื ืืข ืืชืงืคืืช DoS.
ืืืื ื ื ืกื ืืช ืืชืืืื ืฉื ืขืืืื ืชืืื ื ืืืฆืื
- ืืืฉืชืืฉ ืฉืืื ืชืืื ื ืืืื ืืืืืจื
- "attrai-telegram-bot" ืืงืื ืืืืขื ืื-API ืฉื Telegram ืืื ืชื ืืืชื
- ืืืฉืืื ืขื ืืชืืื ื ืืชืืืกืคืช ืืชืืจ ืืืกืื ืืจืื ื "ืืืขืจืื"
- ืืืฉืชืืฉ ืืงืื ืืืืขื ืขื ืืื ืืืขืจืื ืืืชืืื ื
- "attrai-estimator" ืืืงื ืืฉืืื ืืืชืืจ ืฉื "ืืืขืจืื", ืืจืืฅ ืืช ืืืขืจืืืช ืืจื ืืฆืื ืืจ ืืืคืืง ืืช ืืืฉืืื ืืชืืจ "ืืืจื_ืืขืจืื"
- "attrai-telegram-bot" ืืืืื ืืชืืจ "ืืืจ_ืืขืจืื", ืฉืืื ืืช ืืชืืฆืื ืืืฉืชืืฉ
ืืืคืื
ืืืกืืฃ, ืืืืจ ืกืงืืจืช ืืืจืืืืงืืืจื, ืชืืืื ืืขืืืจ ืืืืง ืืืขื ืืื ืื ืคืืืช โ DevOps
ื ืืื ืืืงืจ
ืืืืฆืขืืช "ื ืืื", ื ืืชื ืืืืง ืืช ืื ืืฆืืชืื ืืืฉืืื ืฉืื ื ื-2 ืกืืืื - ืขืืื ืืื ืื. ืืืืื ืืช ืืืกืื ืืจืืฉืื ื ืคืจืกืืช ืงืืืฆืืช ืฉื ืืืืืืช (ืขืจืืืืช), ืืืื ืืช ืืืกืื ืืฉื ื ืืืจืืืืช ืขื ืงื ื ืืืื, ืืืืื ื
ืืฉืืื ืขื ืื ืื ืื ืืื ืืื ืืฉืืืฉื ืขืืืืื
ืืืื ืืืฉืืื ืืืื ืืืื ืืืคืฉืจื ืืื ืฆืืืช ืืื; ืืืื ื ืืืืืช ืชืคืขื ืื ืืื ืืช ืืื ืื ืื ืืื ืืขืืื. ืืืชืืกืก ืขื ืืืื ืืคืจืืืงื ืืืจืืฉืืช ืืืื ืืืื ืืกืืืื ืืช ืชืงืืืช, ืืืืื ืืืฉืชืืฉ ืืืืฉื ืื.
ืืืื ืงืืืื, ืืืื ืฉืืื ืืกืคืงืช ืืืืฆืืจ ืืจืืฉืื ื, ืฉืืืืชื ืืืืฆืข ืืื ื, ืื ืืื ืืขืืืช ืืงืฉืืจืืช ืืืจืืื ืืืฉืืื ืืื (ืืื ืื ืื ืืืืจ ืฉืืจืืื ืืื ืืงืืื ืืฉืื ืืืคื ืืื ืืื ืื ื-ืืืื ืคืจืืืงืืื, ืืืคืืคืื ืืืจืืฉืืช ืกืืืื ืืช ืชืงืืืช).
Docker Stack
ืืืฆื ื ืืื, ืืื ืืืจืื ืขื ืคืจืืกืช ืขืจืืืืช (ืกืืื ืฉื ืฉืืจืืชื ืขืืื ื)
ืืื ืชืืื ืืชืฆืืจืืช docker-compose, ืื ืฉืืืคืฉืจ ืื ืืืฉืชืืฉ ืื ืืกืฃ ืืืคืฉืจืืืืช ืืคืจืืกื.
ืืืืืื, ืืืืฆืขืืช ืคืจืืืจืื ืืื, ืืืฉืืืื ืขืืืจ ืื ืืื ืืืืคืขื ืืืงืจื-ืฉืืจืืชื ืืืขืจืื ืืื ืืืืืืื (ืื ื ืืงืฆืื N ืืืืืช ื-N ืืืคืขืื, ืืฉืืจืืช ืืืืงืจื-ืขืฆืื ืื ื ืืืืืืื ืืช ืืกืคืจ ืืืืืืช ืืฉืืืืฉ ืขื-ืืื PyTorch ืืืืช)
attrai_estimator:
image: 'erqups/attrai_estimator:1.2'
deploy:
replicas: 4
resources:
limits:
cpus: '4'
restart_policy:
condition: on-failure
โฆ
ืืฉืื ืืฆืืื ืฉ- Redis, RabbitMQ ื- Graylog ืื ืฉืืจืืชืื ืืืืืชืืื ืืื ื ืืชื ืืืชืืื ืืืชื ืืงืืืช ืืื "ืืืืื ืืืจืงืืืื"
ืืืฉืจืช ืืช ืืฉืืื - ืืื ืื Kubernetes?
ื ืจืื ืฉืฉืืืืฉ ื-Kubernetes ืืคืจืืืงืืื ืงืื ืื ืืืื ืื ืืื ืืื ืชืงืืจื; ื ืืชื ืืืฉืื ืืช ืื ืืคืื ืงืฆืืื ืืืืช ืืืจืืฉื ื-Docker Swarm, ืฉืืื ืื ืืืืืืชื ืืืฉืชืืฉ ืขืืืจ ืืชืืืจ ืืืืืืช ืืืฉ ืื ืื ืืืกืื ืื ืืกื ื ืืื.
ืชืฉืชืืช
ืื ืื ื ืคืจืก ืขื VDS ืขื ืืืืคืืื ืื ืืืืื:
- ืืขืื: ืืขืื 4 ืืืืืช Intelยฎ Xeonยฎ Gold 5120 @ 2.20GHz
- RAM: 8 GB
- SSD: 160 ื'ืืื-ืืชืื
ืืืืจ ืืืืงืืช ืขืืืก ืืงืืืืืช, ื ืจืื ืืื ืฉืขื ืืจื ืจืฆืื ื ืฉื ืืฉืชืืฉืื, ืืืืื ื ืืื ืชืกืคืืง.
ืืื, ืืื ืืืืจ ืืคืจืืกื, ืคืจืกืืชื ืงืืฉืืจ ืืืื ืืืืืืช ืืืืื' ืืคืืคืืืจืืื ืืืืชืจ ื-CIS (ืื, ืืืชื ืืื), ืืืืจ ืืื ืื ืฉืื ืืชืขื ืืื ื ืืชืื ืืกืคืจ ืฉืขืืช ืืฉืืจืืช ืขืืื ืืืฆืืื ืขืฉืจืืช ืืืคื ืชืืื ืืช. ืืื ืขื ืืืช, ืืจืืขื ืฉืื, ืืฉืืื ืืขืื ื-RAM ืื ืืื ืืฉืืืืฉ ืืคืืื ืืืืฆื.
ืขืื ืงืฆืช ืืจืคืืงื
ืืกืคืจ ืืืฉืชืืฉืื ืืืืืืืืื ืืืงืฉืืช ืืขืจืื ืืื ืืคืจืืกื, ืชืืื ืืืื
ืืชืคืืืืช ืืื ืืกืงื ืช ืฆืื ืืจ ืืขืจืื
ืืืฆืืื
ืืกืืืื, ืื ื ืืืื ืืืืจ ืฉืืืจืืืืงืืืจื ืืืืืฉื ืืชืืืืจ ืฉื ืืืืืืช ืืฆืืืงื ืืช ืขืฆืื ืืืืืื - ืื ืืจืืขื ืืฉืื ืื ืืื ื ืคืืืืช ืื ื ืคืืืืช ืืืื ืืขืืืื.
ืื ื ืืืฉื ืฉืคืจืืืงืืื ืงืื ืื ืืืื ืื ืืื ืืืฉืชืืฉืื ืืืกืงื ืืืื ืืืช ืฉื ืจืฉืชืืช ืขืฆืืืืช ืขื ืืืขืื ืืชืืืื ืฉืืื ืืืืืื ืืืืฅ ืืืฆืืื ืืช ืืคืจืงืืืงืืช ืืืชืืืจืืช ืืืืืจ ืื.
ืืืกืืฃ ืื ืืชืืืื ืืืืืจ ืืื ืืจืื ืืืชืจ, ืื ืืื ืื ืืคืจืกื ืงืจืืื ืืจืืื, ืืืืืชื ืืืฉืืื ืืื ื ืงืืืืช ืืืืืจ ืื - ื ืืืืจ ืืืืื ืืคืจืกืืืื ืขืชืืืืื.
ืืชื ืืืื ืืชืงืืข ืืช ืืืื ืืืืืจื - @AttraiBot, ืื ืืขืืื ืืคืืืช ืขื ืกืืฃ ืกืชืื 2020. ืืจืฉื ืื ืืืืืืจ ืืื ืฉืื ืืืืืกื ืื ื ืชืื ื ืืฉืชืืฉ - ืื ืืชืืื ืืช ืืืงืืจืืืช, ืืื ืืชืืฆืืืช ืฉื ืฆืื ืืจ ืืืขืจืื - ืืื ื ืืจืก ืืืืจ ืขืืืื.
ืืงืืจ: www.habr.com