entry
Sawubona!
Kulesi sihloko ngizokwabelana ngolwazi lwami lokwakha i-microservice architecture yephrojekthi esebenzisa amanethiwekhi e-neural.
Ake sikhulume ngezidingo zezakhiwo, sibheke imidwebo ehlukahlukene yesakhiwo, sihlaziye ingxenye ngayinye yezakhiwo eziqediwe, futhi sihlole amamethrikhi ezobuchwepheshe esixazululo.
Jabulela ukufunda!
Amagama ambalwa mayelana nenkinga nesixazululo sayo
Umqondo oyinhloko uwukuhlola ukukhanga komuntu esikalini samaphuzu ayishumi ngokusekelwe esithombeni.
Kulesi sihloko sizosuka ekuchazeni kokubili amanethiwekhi e-neural asetshenzisiwe kanye nenqubo yokulungiselela nokuqeqeshwa kwedatha. Nokho, kokunye kokushicilelwe okulandelayo, sizobuyela nakanjani ekuhlaziyeni ipayipi lokuhlola ezingeni elijulile.
Manje sizodlula emgqeni wokuhlola ezingeni eliphezulu, futhi sizogxila ekusebenzisaneni kwama-microservices kumongo wesakhiwo sephrojekthi iyonke.
Lapho kusetshenzwa epayipini lokuhlola ukukhanga, umsebenzi wahlukaniswa waba yizingxenye ezilandelayo:
- Ukukhetha ubuso ezithombeni
- Isilinganiso somuntu ngamunye
- Nikeza umphumela
Eyokuqala ixazululwa ngamandla okuqeqeshwa ngaphambilini
Umdwebo osebenzayo wepayipi lokuhlola
Ukuhlaziywa kwezidingo zesakhiwo sephrojekthi
Emjikelezweni wokuphila
Umjikelezo wokuphila wephrojekthi ye-ML
Le phrojekthi ayihlukile - kwathathwa isinqumo sokugoqa ipayipi lokuhlola libe yinsizakalo ye-inthanethi, eyayidinga ukuthi sigxile ekwakhiweni kwezakhiwo. Izimfuneko ezilandelayo eziyisisekelo zihlonziwe:
- Isitoreji selogi esihlanganisiwe - zonke izinsizakalo kufanele zibhale izingodo endaweni eyodwa, kufanele kube lula ukuzihlaziya
- Amathuba okukalwa okuvundlile kwesevisi yokuhlola - njenge-Bottleneck okungenzeka kakhulu
- Inani elifanayo lezinsiza zokucubungula kufanele labelwe ukuhlola isithombe ngasinye ukuze kugwenywe abangaphandle ekusabalaliseni isikhathi sokuqagela.
- Ukuthunyelwa okusheshayo (kabusha) kokubili kwezinsizakalo ezithile kanye nesitaki sisonke
- Ikhono, uma kunesidingo, ukusebenzisa izinto ezivamile ezinkonzweni ezahlukene
bokwakha
Ngemuva kokuhlaziya izidingo, kwaba sobala ukuthi ukwakhiwa kwe-microservice kufanelana cishe ngokuphelele.
Ukuze kuqedwe ubuhlungu bekhanda obungenasidingo, i-Telegram API yakhethwa njengephambili.
Okokuqala, ake sibheke umdwebo wesakhiwo sezakhiwo eziqediwe, bese sidlulela encazelweni yengxenye ngayinye, futhi senze ngokusemthethweni inqubo yokucubungula isithombe ngempumelelo.
Umdwebo wesakhiwo wezakhiwo eziqediwe
Ake sikhulume ngokuningiliziwe mayelana nengxenye ngayinye yomdwebo, esiwubonisa Umthwalo Wemfanelo Owodwa ohlelweni lokuhlola isithombe.
I-Microservice “attrai-telegram-bot”
Le microservice ihlanganisa konke ukusebenzisana neTelegram API. Kunezimo ezi-2 eziyinhloko: ukusebenza ngesithombe sangokwezifiso nokusebenza ngomphumela wepayipi lokuhlola. Ake sibheke zombili lezi zimo ngokwemibandela ejwayelekile.
Uma uthola umlayezo wangokwezifiso onesithombe:
- Ukuhlunga kuyenziwa, okuhlanganisa ukuhlola okulandelayo:
- Ukutholakala kosayizi wesithombe ophelele
- Inombolo yezithombe zomsebenzisi esezivele zikulayini
- Lapho udlulisa ukuhlunga kokuqala, isithombe sigcinwa kuvolumu yedokha
- Umsebenzi ukhiqizwa kulayini "wo_ukulinganisa", ohlanganisa, phakathi kwezinye izinto, indlela eya esithombeni esitholakala kuvolumu yethu.
- Uma izinyathelo ezingenhla ziqedwa ngempumelelo, umsebenzisi uzothola umlayezo onesikhathi esilinganiselwe sokucubungula isithombe, esibalwa ngokusekelwe enanini lemisebenzi emgqeni. Uma kwenzeka iphutha, umsebenzisi uzokwaziswa ngokusobala ngokuthumela umlayezo onolwazi mayelana nokuthi yini okungenzeka ukuthi ayihambanga kahle.
Futhi, le sevisi encane, njengesisebenzi sesilimo esidliwayo esinamagatsha anamanzi, ilalela ulayini othi “after_estimate”, ohloselwe imisebenzi eye yadlula epayipini lokuhlola.
Lapho uthola umsebenzi omusha ku-“after_estimate”:
- Uma isithombe sicutshungulwe ngempumelelo, sithumela umphumela kumsebenzisi; uma kungenjalo, sazisa ngephutha.
- Ukukhipha isithombe esiwumphumela wepayipi lokuhlola
Evaluation microservice “attrai-estimator”
Le microservice isisebenzi sesilimo esidliwayo esinamagatsha anamanzi futhi ihlanganisa yonke into ehlobene nepayipi lokuhlola isithombe. Kune-algorithm eyodwa kuphela esebenzayo lapha - ake siyihlaziye.
Uma uthola umsebenzi omusha kokuthi “to_estimate”:
- Masisebenzise isithombe ngepayipi lokuhlola:
- Ilayisha isithombe kumemori
- Siletha isithombe kusayizi odingekayo
- Ithola bonke ubuso (MTCNN)
- Sihlola bonke ubuso (sigoqa ubuso obutholakala esinyathelweni sokugcina sibe yinqwaba kanye nesithenjwa esithi ResNet34)
- Nikeza isithombe sokugcina
- Masidwebe amabhokisi okubopha
- Ukudweba izilinganiso
- Isusa isithombe sangokwezifiso (sangempela).
- Ilondoloza okukhiphayo epayipini lokuhlola
- Sibeka umsebenzi kumugqa othi “after_estimate”, olalelwa yi-microservice ye-“attrai-telegram-bot” okukhulunywe ngayo ngenhla.
I-Greylog (+ mongoDB + Elasticsearch)
Ukukhetha kwawela kuye, hhayi kokujwayelekile
Njengomuntu owake wasebenza kuphela nesitaki se-ELK, ngibe nesipiliyoni esihle lapho ngisebenza noGreylog. Okuwukuphela kwento ecindezelayo ukuphakama kwezici ze-Kibana ngaphezu kwe-interface yewebhu ye-Greylog.
RabbitMQ
Kule phrojekthi isetshenziswe njenge
Redis
Kwesinye isikhathi kunesidingo sokusebenzisa izinto ezijwayelekile ezisebenzisa izakhiwo ezithile zedatha kuma-microservices ahlukene ePython.
Isibonelo, i-Redis igcina i-hashmap yefomu elithi “telegram_user_id => inombolo yemisebenzi esebenzayo kulayini,” ekuvumela ukuthi ukhawulele inani lezicelo ezivela kumsebenzisi oyedwa kuye kunani elithile futhi, ngalokho, uvimbele ukuhlaselwa kwe-DoS.
Ake senze ngokusemthethweni inqubo yokucubungula isithombe ngempumelelo
- Umsebenzisi uthumela isithombe ku-Telegraph bot
- "i-attrai-telegram-bot" ithola umlayezo ovela ku-Telegram API bese iyawudlulisa
- Umsebenzi onesithombe wengezwe kumugqa ongavumelani "to_estimate"
- Umsebenzisi uthola umlayezo onesikhathi sokuhlola esihleliwe
- I-“attrai-estimator” ithatha umsebenzi ukusuka kumugqa othi “to_estimate”, iqhuba izilinganiso ngepayipi futhi ikhiqize umsebenzi kumugqa othi “after_estimate”
- "attrai-telegram-bot" elalele ulayini "after_estimate", ithumela umphumela kumsebenzisi
I-DevOps
Ekugcineni, ngemuva kokubuyekeza ukwakheka, ungadlulela engxenyeni ethakazelisa ngokulinganayo - i-DevOps
I-Docker Swarm
Ngokusebenzisa "i-swarm", wonke ama-node ku-cluster yethu angahlukaniswa ngezinhlobo ezi-2 - isisebenzi nomphathi. Emishinini yohlobo lokuqala, amaqembu eziqukathi (izitaki) asetshenziswa, imishini yohlobo lwesibili inesibopho sokukala, ukulinganisa kanye nokulinganisa.
Iqoqo elinomphathi oyedwa kanye nabasebenzi abathathu
Ubuncane bosayizi weqoqo ongaba khona yinodi engu-1; umshini owodwa uzosebenza kanyekanye njengomphathi womholi nesisebenzi. Ngokusekelwe kubukhulu bephrojekthi kanye nezidingo ezincane zokubekezelela amaphutha, kunqunywe ukusebenzisa le ndlela.
Uma ngibheka phambili, ngizosho ukuthi kusukela ukulethwa kokuqala kokukhiqiza, okwakuphakathi noJuni, akuzange kube nezinkinga ezihlobene nale nhlangano yeqoqo (kodwa lokhu akusho ukuthi inhlangano enjalo iyamukeleka nganoma iyiphi indlela kunoma iyiphi i-medium-enkulu. amaphrojekthi, angaphansi kwezidingo zokubekezelela amaphutha).
I-Docker Stack
Kumodi ye-swarm, unesibopho sokuthumela izitaki (amasethi wezinsizakalo ze-docker)
Isekela i-docker-compose configs, ikuvumela ukuthi usebenzise izinketho zokusebenzisa.
Isibonelo, kusetshenziswa la mapharamitha, izinsiza zesenzakalo ngasinye sokuhlaziya se-microservice zazikhawulelwe (sabela ama-N cores ezimweni ezingu-N, ku-microservice ngokwayo sikhawulela inani lama-cores asetshenziswa yi-PyTorch kokukodwa)
attrai_estimator:
image: 'erqups/attrai_estimator:1.2'
deploy:
replicas: 4
resources:
limits:
cpus: '4'
restart_policy:
condition: on-failure
…
Kubalulekile ukuqaphela ukuthi i-Redis, i-RabbitMQ ne-Greylog yizinsizakalo ezisezingeni eliphezulu futhi azikwazi ukulinganiswa kalula njengokuthi "i-attrai-estimator"
Ukubikezela umbuzo - kungani kungenjalo uKubernetes?
Kubonakala sengathi ukusebenzisa i-Kubernetes kumaphrojekthi amancane naphakathi kuwumsebenzi ongaphezulu; konke ukusebenza okudingekayo kungatholwa ku-Docker Swarm, esebenziseka kalula ku-orchestrator yeziqukathi futhi enomkhawulo ophansi wokungena.
Ingqalasizinda
Konke lokhu kwafakwa ku-VDS ngezici ezilandelayo:
- CPU: 4 core Intel® Xeon® Gold 5120 CPU @ 2.20GHz
- RAM: 8 GB
- I-SSD: 160 GB
Ngemva kokuhlolwa komthwalo wendawo, kwabonakala sengathi ngokutheleka okukhulu kwabasebenzisi, lo mshini uzokwanela.
Kodwa, ngokushesha ngemva kokuthunyelwa, ngithumele isixhumanisi kwelinye lamabhodi ezithombe ezidume kakhulu ku-CIS (yup, leyo efanayo), ngemva kwalokho abantu baba nesithakazelo futhi emahoreni ambalwa insizakalo icubungule ngempumelelo amashumi ezinkulungwane zezithombe. Ngesikhathi esifanayo, ngezikhathi eziphakeme kakhulu, izinsiza ze-CPU ne-RAM azizange zisetshenziswe ngisho nengxenye.
Ezinye ihluzo
Inombolo yabasebenzisi abahlukile nezicelo zokuhlaziya kusukela ekusetshenzisweni, kuye ngosuku
Ukusabalalisa isikhathi sokubikezela kwepayipi lokuhlola
okutholakele
Ukufingqa, ngingasho ukuthi ukwakheka kanye nendlela yokuhlelwa kweziqukathi zazizithethelela ngokugcwele - ngisho nangezikhathi eziphakeme kwakungekho maconsi noma ukuwohloka ngesikhathi sokucubungula.
Ngicabanga ukuthi amaphrojekthi amancane naphakathi nendawo asebenzisa inference yesikhathi sangempela yamanethiwekhi e-neural ku-CPU enqubweni yawo angakwazi ukwamukela izinqubo ezichazwe kulesi sihloko.
Ngizokwengeza ukuthi ekuqaleni indatshana yayiyinde, kodwa ukuze ngingathumeli isikhathi eside, nginqume ukushiya amaphuzu athile kulesi sihloko - sizobuyela kuwo ezincwadini ezizayo.
Ungakwazi ukufaka i-bot kuTelegram - @AttraiBot, izosebenza okungenani kuze kube sekupheleni kwekwindla ka-2020. Ake ngikukhumbuze ukuthi ayikho idatha yomsebenzisi egciniwe - noma izithombe zangempela, noma imiphumela yepayipi lokuhlola - yonke into idilizwa ngemva kokucubungula.
Source: www.habr.com