Ifihan
Hi!
Ninu nkan yii Emi yoo pin iriri mi ti kikọ faaji microservice fun iṣẹ akanṣe nipa lilo awọn nẹtiwọọki nkankikan.
Jẹ ki a sọrọ nipa awọn ibeere faaji, wo ọpọlọpọ awọn aworan apẹrẹ, ṣe itupalẹ ọkọọkan awọn paati ti faaji ti o pari, ati tun ṣe iṣiro awọn metiriki imọ-ẹrọ ti ojutu naa.
Gbadun kika!
Awọn ọrọ diẹ nipa iṣoro naa ati ojutu rẹ
Ero akọkọ ni lati ṣe iṣiro ifamọra eniyan lori iwọn-ojuami mẹwa ti o da lori fọto kan.
Ninu nkan yii a yoo lọ kuro lati ṣapejuwe mejeeji awọn nẹtiwọọki nkankikan ti a lo ati ilana igbaradi data ati ikẹkọ. Sibẹsibẹ, ninu ọkan ninu awọn atẹjade atẹle, dajudaju a yoo pada si itupalẹ opo gigun ti epo ni ipele ijinle.
Bayi a yoo lọ nipasẹ opo gigun ti epo ni ipele oke, ati pe yoo dojukọ ibaraenisepo ti awọn iṣẹ microservices ni aaye ti faaji iṣẹ akanṣe gbogbogbo.
Nigbati o ba n ṣiṣẹ lori opo gigun ti epo igbelewọn iwunilori, iṣẹ naa ti bajẹ si awọn paati wọnyi:
- Yiyan awọn oju ni awọn fọto
- Rating ti kọọkan eniyan
- Fi abajade naa han
Ni igba akọkọ ti wa ni ojutu nipasẹ awọn ipa ti kọkọ-oṣiṣẹ
Aworan iṣẹ ṣiṣe ti opo gigun ti epo igbelewọn
Onínọmbà ti awọn ibeere faaji ise agbese
Ninu igbe aye
Aye ọmọ ti ohun ML ise agbese
Ise agbese yii kii ṣe iyatọ - ipinnu naa ni lati fi ipari si opo gigun ti epo sinu iṣẹ ori ayelujara, eyiti o nilo ibọmi ara wa ni faaji. Awọn ibeere ipilẹ wọnyi ni a ṣe idanimọ:
- Ibi ipamọ iwe iṣọkan - gbogbo awọn iṣẹ yẹ ki o kọ awọn akọọlẹ ni aaye kan, wọn yẹ ki o rọrun lati ṣe itupalẹ
- O ṣeeṣe ti iwọn petele ti iṣẹ igbelewọn - bi Bottleneck ti o ṣeeṣe julọ
- Iye kanna ti awọn orisun ero isise yẹ ki o pin lati ṣe iṣiro aworan kọọkan lati yago fun awọn atako ni pinpin akoko fun itọkasi
- Yara (tun) imuṣiṣẹ ti awọn iṣẹ kan pato mejeeji ati akopọ lapapọ
- Agbara, ti o ba jẹ dandan, lati lo awọn nkan ti o wọpọ ni awọn iṣẹ oriṣiriṣi
faaji
Lẹhin itupalẹ awọn ibeere naa, o han gbangba pe faaji microservice baamu ni pipe.
Lati le yọ awọn efori ti ko wulo, API Telegram ti yan bi iwaju iwaju.
Ni akọkọ, jẹ ki a wo aworan igbekale ti faaji ti o pari, lẹhinna tẹsiwaju si apejuwe ti ọkọọkan awọn paati, ati tun ṣe ilana ilana ti sisẹ aworan aṣeyọri.
Awọn aworan atọka igbekale ti awọn ti pari faaji
Jẹ ki a sọrọ ni awọn alaye diẹ sii nipa ọkọọkan awọn paati ti aworan atọka, n tọka si Ojuse Kanṣo ninu ilana igbelewọn aworan.
Microservice "attrai-telegram-bot"
Ohun elo microservice yii ṣe akojọpọ gbogbo awọn ibaraenisepo pẹlu API Telegram. Awọn oju iṣẹlẹ akọkọ 2 wa: ṣiṣẹ pẹlu aworan aṣa ati ṣiṣẹ pẹlu abajade ti opo gigun ti epo. Jẹ ki a wo awọn oju iṣẹlẹ mejeeji ni awọn ọrọ gbogbogbo.
Nigbati o ba ngba ifiranṣẹ aṣa kan pẹlu aworan kan:
- Asẹ ni a ṣe, ti o ni awọn sọwedowo wọnyi:
- Wiwa ti iwọn aworan to dara julọ
- Nọmba awọn aworan olumulo tẹlẹ ti isinyi
- Nigbati o ba n kọja sisẹ akọkọ, aworan naa ti wa ni fipamọ ni iwọn didun docker
- Iṣẹ-ṣiṣe kan ni a ṣe ni isinyi “lati_estimate”, eyiti o pẹlu, ninu awọn ohun miiran, ọna si aworan ti o wa ni iwọn didun wa.
- Ti awọn igbesẹ ti o wa loke ba ti pari ni aṣeyọri, olumulo yoo gba ifiranṣẹ kan pẹlu akoko ṣiṣe aworan isunmọ, eyiti o da lori nọmba awọn iṣẹ ṣiṣe ti isinyi. Ti aṣiṣe ba waye, olumulo yoo gba ifitonileti ni gbangba nipa fifiranṣẹ ifiranṣẹ kan pẹlu alaye nipa ohun ti o le jẹ aṣiṣe.
Paapaa, microservice yii, bii oṣiṣẹ seleri, tẹtisi isinyi “after_estimate”, eyiti a pinnu fun awọn iṣẹ ṣiṣe ti o ti kọja nipasẹ opo gigun ti epo.
Nigbati o ba ngba iṣẹ-ṣiṣe titun kan lati "after_estimate":
- Ti aworan naa ba ni ilọsiwaju, a fi esi ranṣẹ si olumulo; ti kii ba ṣe bẹ, a leti nipa aṣiṣe kan.
- Yiyọ aworan ti o jẹ abajade ti opo gigun ti epo
Iṣiro iṣẹ microservice “attrai-estimator”
Microservice yii jẹ oṣiṣẹ seleri kan ati pe o ṣafikun ohun gbogbo ti o ni ibatan si opo gigun ti igbelewọn aworan. Algoridimu iṣẹ kan nikan wa nibi - jẹ ki a ṣe itupalẹ rẹ.
Nigbati o ba ngba iṣẹ-ṣiṣe titun kan lati "lati_iyẹwo":
- Jẹ ki a ṣiṣẹ aworan naa nipasẹ opo gigun ti epo:
- Gbigbe aworan sinu iranti
- A mu aworan wa si iwọn ti a beere
- Wiwa gbogbo awọn oju (MTCNN)
- A ṣe iṣiro gbogbo awọn oju (a fi ipari si awọn oju ti a rii ni igbesẹ ti o kẹhin sinu ipele kan ati itọkasi ResNet34)
- Ṣe aworan ikẹhin
- Jẹ ki a fa awọn apoti ifunmọ
- Yiya awọn iwontun-wonsi
- Piparẹ aṣa (atilẹba) aworan
- Nfipamọ abajade lati opo gigun ti epo
- A fi iṣẹ naa sinu isinyi “after_estimate”, eyiti a tẹtisi nipasẹ “attrai-telegram-bot” microservice ti a sọrọ loke.
Graylog (+ mongoDB + Elasticsearch)
Yiyan ṣubu lori rẹ, kii ṣe lori ọkan ti o ṣe deede
Gẹgẹbi ẹnikan ti o ti ṣiṣẹ tẹlẹ pẹlu akopọ ELK nikan, Mo ni iriri rere gbogbogbo lakoko ti n ṣiṣẹ pẹlu Graylog. Ohun kan ṣoṣo ti o ni irẹwẹsi ni didara julọ ni awọn ẹya Kibana lori wiwo wẹẹbu Graylog.
EhoroMQ
Ni yi ise agbese ti o ti lo bi
Redis
Nigba miiran iwulo wa lati lo awọn nkan ti o wọpọ ti o ṣe awọn ẹya data kan ni oriṣiriṣi awọn iṣẹ microservices Python.
Fún àpẹrẹ, Redis tọ́jú hashmap fọ́ọ̀mù “telegram_user_id => iye àwọn iṣẹ́ tí ń ṣiṣẹ́ nínú ìlà,” èyí tí ó jẹ́ kí o fi ìwọ̀n iye àwọn ìbéèrè láti ọ̀dọ̀ oníṣe kan sí iye kan àti, nípa bẹ́ẹ̀, dènà ìkọlù DoS.
Jẹ ki a formalize awọn ilana ti aseyori image processing
- Olumulo naa fi aworan ranṣẹ si bot Telegram
- "attrai-telegram-bot" gba ifiranṣẹ kan lati API Telegram o si ṣe itupalẹ rẹ
- Iṣẹ-ṣiṣe pẹlu aworan naa ni a ṣafikun si isinyi asynchronous “lati_iṣiro”
- Olumulo gba ifiranṣẹ pẹlu akoko igbelewọn ti a gbero
- "attrai-estimator" gba iṣẹ-ṣiṣe kan lati ori isinyi "lati_estimate", ṣiṣe awọn iṣiro nipasẹ opo gigun ti epo ati gbejade iṣẹ naa sinu isinyi "after_estimate"
- "attrai-telegram-bot" ti ngbọ ti isinyi "after_estimate", fi abajade ranṣẹ si olumulo
DevOps
Lakotan, lẹhin atunwo faaji, o le lọ si apakan ti o nifẹ si kanna - DevOps
Docker fọn
Lilo “swarm”, gbogbo awọn apa inu iṣupọ wa le pin si awọn oriṣi 2 - oṣiṣẹ ati oluṣakoso. Lori awọn ẹrọ ti iru akọkọ, awọn ẹgbẹ ti awọn apoti (awọn akopọ) ti wa ni ransogun, awọn ẹrọ ti iru keji jẹ iduro fun iwọn, iwọntunwọnsi ati
Ikọpọ pẹlu oludari oludari kan ati awọn oṣiṣẹ mẹta
Iwọn iṣupọ ti o kere julọ ti o ṣeeṣe jẹ ipade 1; ẹrọ ẹyọkan yoo ṣiṣẹ nigbakanna bi oluṣakoso adari ati oṣiṣẹ kan. Da lori iwọn ti ise agbese na ati awọn ibeere to kere julọ fun ifarada aṣiṣe, o pinnu lati lo ọna yii.
Ni wiwa niwaju, Emi yoo sọ pe lati igba ifijiṣẹ iṣelọpọ akọkọ, eyiti o wa ni aarin Oṣu Keje, ko si awọn iṣoro ti o ni nkan ṣe pẹlu agbari iṣupọ yii (ṣugbọn eyi ko tumọ si pe iru ajo bẹ ni eyikeyi ọna itẹwọgba ni eyikeyi alabọde-nla. awọn iṣẹ akanṣe, eyiti o jẹ koko ọrọ si awọn ibeere ifarada aṣiṣe).
Docker Stack
Ni ipo swarm, o ni iduro fun gbigbe awọn akopọ (awọn eto ti awọn iṣẹ docker)
O ṣe atilẹyin awọn atunto akojọpọ docker, gbigba ọ laaye lati lo awọn aṣayan imuṣiṣẹ ni afikun.
Fun apẹẹrẹ, lilo awọn paramita wọnyi, awọn orisun fun ọkọọkan awọn iṣẹlẹ microservice igbelewọn ni opin (a pin awọn ohun kohun N fun awọn iṣẹlẹ N, ninu microservice funrararẹ a fi opin si nọmba awọn ohun kohun ti PyTorch lo si ọkan)
attrai_estimator:
image: 'erqups/attrai_estimator:1.2'
deploy:
replicas: 4
resources:
limits:
cpus: '4'
restart_policy:
condition: on-failure
…
O ṣe pataki lati ṣe akiyesi pe Redis, RabbitMQ ati Graylog jẹ awọn iṣẹ ipinlẹ ati pe wọn ko le ṣe iwọn ni irọrun bi “attrai-estimator”
Iṣafihan ibeere naa - kilode ti kii ṣe Kubernetes?
O dabi pe lilo Kubernetes ni awọn iṣẹ akanṣe kekere ati alabọde jẹ oke; gbogbo iṣẹ ṣiṣe pataki ni a le gba lati Docker Swarm, eyiti o jẹ ore-ọfẹ pupọ fun oluṣeto eiyan ati tun ni idena kekere si titẹsi.
Amayederun
Gbogbo eyi ni a gbe sori VDS pẹlu awọn abuda wọnyi:
- Sipiyu: 4 mojuto Intel® Xeon® Gold 5120 Sipiyu @ 2.20GHz
- Ramu: 8 GB
- SSD: 160GB
Lẹhin idanwo fifuye agbegbe, o dabi pe pẹlu ṣiṣan ti o ṣe pataki ti awọn olumulo, ẹrọ yii yoo to.
Ṣugbọn, lẹsẹkẹsẹ lẹhin imuṣiṣẹ, Mo fi ọna asopọ kan si ọkan ninu awọn aworan aworan ti o gbajumo julọ ni CIS (yup, ti o kan kanna), lẹhin eyi eniyan ni anfani ati ni awọn wakati diẹ iṣẹ naa ni aṣeyọri ti ṣe atunṣe awọn ẹgbẹẹgbẹrun awọn aworan. Ni akoko kanna, ni awọn akoko ti o ga julọ, Sipiyu ati awọn orisun Ramu ko paapaa lo idaji.
Diẹ ninu awọn diẹ eya
Nọmba awọn olumulo alailẹgbẹ ati awọn ibeere igbelewọn lati igba imuṣiṣẹ, da lori ọjọ naa
Pinpin akoko itọkasi opo gigun ti epo
awari
Lati ṣe akopọ, Mo le sọ pe faaji ati isunmọ si orchestration ti awọn apoti jẹ idalare fun ara wọn ni kikun - paapaa ni awọn akoko ti o ga julọ ko si awọn silẹ tabi sagging ni akoko ṣiṣe.
Mo ro pe awọn iṣẹ akanṣe kekere ati alabọde ti o lo itọkasi akoko gidi ti awọn nẹtiwọọki nkankikan lori Sipiyu ninu ilana wọn le ṣaṣeyọri gba awọn iṣe ti a ṣalaye ninu nkan yii.
Emi yoo ṣafikun pe lakoko nkan naa gun, ṣugbọn lati ma ṣe firanṣẹ kika gigun, Mo pinnu lati fi awọn aaye diẹ silẹ ninu nkan yii - a yoo pada si wọn ni awọn atẹjade ọjọ iwaju.
O le poke bot lori Telegram - @AttraiBot, yoo ṣiṣẹ o kere ju titi di opin Igba Irẹdanu Ewe 2020. Jẹ ki n leti pe ko si data olumulo ti o fipamọ - bẹni awọn aworan atilẹba, tabi awọn abajade ti opo gigun ti epo - ohun gbogbo ti bajẹ lẹhin sisẹ.
orisun: www.habr.com