Gabatarwa
Sannu!
A cikin wannan labarin zan raba gwaninta na gina gine-ginen microservice don aikin ta amfani da cibiyoyin sadarwa.
Bari mu yi magana game da buƙatun gine-gine, duba zane-zane daban-daban, bincika kowane ɓangaren gine-ginen da aka gama, da kuma kimanta ma'aunin fasaha na mafita.
Ji dadin karantawa!
Kalmomi kadan game da matsalar da maganinta
Babban ra'ayi shine kimanta sha'awar mutum akan ma'auni goma bisa ga hoto.
A cikin wannan labarin za mu ƙaura daga bayanin duka hanyoyin sadarwa na jijiyoyi da aka yi amfani da su da kuma tsarin shirye-shiryen bayanai da horo. Koyaya, a cikin ɗaya daga cikin wallafe-wallafen masu zuwa, tabbas za mu dawo kan nazarin bututun tantancewa a matakin zurfi.
Yanzu za mu bi ta bututun kimantawa a matakin sama, kuma za mu mai da hankali kan hulɗar microservices a cikin mahallin gine-ginen aikin gabaɗaya.
Lokacin aiki akan bututun kimanta kyan gani, aikin ya lalace cikin abubuwa masu zuwa:
- Zabar fuskoki a hotuna
- Rating na kowane mutum
- Ba da sakamakon
Na farko yana warware ta sojojin da aka riga aka horar
Tsarin aiki na bututun kimantawa
Binciken buƙatun gine-ginen aikin
A cikin tsarin rayuwa
Zagayowar rayuwa na aikin ML
Wannan aikin ba banda ba - an yanke shawarar sanya bututun kimantawa cikin sabis na kan layi, wanda ke buƙatar nutsar da kanmu a cikin gine-gine. An gano mahimman buƙatun masu zuwa:
- Haɗin log ɗin ajiya - duk ayyuka yakamata su rubuta rajistan ayyukan a wuri ɗaya, yakamata su dace don tantancewa
- Yiwuwar sikeli a kwance na sabis ɗin kima - azaman mafi yuwuwar ƙoƙon kwalba
- Ya kamata a ware adadin albarkatun sarrafawa iri ɗaya don kimanta kowane hoto don guje wa ɓarna a cikin rarraba lokaci don ƙididdigewa.
- Saurin (sake) aika takamaiman ayyuka biyu da tari gaba ɗaya
- Ikon, idan ya cancanta, don amfani da abubuwa gama gari a cikin ayyuka daban-daban
gine
Bayan nazarin abubuwan da ake buƙata, ya zama a bayyane cewa gine-ginen microservice ya dace da kusan daidai.
Don kawar da ciwon kai mara amfani, an zaɓi API ɗin Telegram a matsayin gaba.
Da farko, bari mu kalli tsarin tsarin gine-ginen da aka gama, sannan mu ci gaba zuwa bayanin kowane bangare, sannan mu tsara tsarin sarrafa hoto mai nasara.
Tsarin tsarin gine-ginen da aka gama
Bari mu yi magana dalla-dalla game da kowanne daga cikin abubuwan da ke cikin zanen, tare da nuna su Nauyi Guda ɗaya a cikin aikin tantance hoto.
Microservice "attrai-telegram-bot"
Wannan microservice yana ɗaukar duk hulɗa tare da API na Telegram. Akwai manyan yanayi guda 2: aiki tare da hoton al'ada da aiki tare da sakamakon bututun kima. Bari mu kalli yanayin duka biyun gaba ɗaya.
Lokacin karɓar saƙon al'ada tare da hoto:
- Ana yin tacewa, wanda ya ƙunshi cak kamar haka:
- Samuwar mafi kyawun girman hoto
- Adadin hotunan mai amfani da ke cikin layi
- Lokacin wucewa da tacewa na farko, ana ajiye hoton a ƙarar docker
- Ana samar da ɗawainiya a cikin jerin gwano na "to_estimate", wanda ya haɗa da, a tsakanin sauran abubuwa, hanyar zuwa hoton da ke cikin ƙarar mu.
- Idan an kammala matakan da ke sama cikin nasara, mai amfani zai karɓi saƙo tare da kusan lokacin sarrafa hoto, wanda aka ƙididdige shi bisa adadin ayyuka a cikin layi. Idan kuskure ya faru, za a sanar da mai amfani ta hanyar aika saƙo tare da bayani game da abin da ka iya faruwa ba daidai ba.
Hakanan, wannan microservice, kamar ma'aikacin seleri, yana sauraron layin "bayan_estimate", wanda aka yi niyya don ayyukan da suka wuce ta bututun kimantawa.
Lokacin karɓar sabon ɗawainiya daga "bayan_estimate":
- Idan an sarrafa hoton cikin nasara, muna aika da sakamakon ga mai amfani, idan ba haka ba, muna sanar da wani kuskure.
- Cire hoton wanda shine sakamakon bututun kimantawa
Ƙimar microservice "attrai-estimator"
Wannan microservice ma'aikacin seleri ne kuma yana tattara duk abin da ke da alaƙa da bututun kimanta hoto. Akwai algorithm aiki guda ɗaya kawai a nan - bari mu bincika shi.
Lokacin karɓar sabon ɗawainiya daga "to_estimate":
- Bari mu gudanar da hoton ta bututun kimantawa:
- Ana loda hoton zuwa ƙwaƙwalwar ajiya
- Muna kawo hoton zuwa girman da ake bukata
- Nemo duk fuskoki (MTCNN)
- Muna kimanta duk fuskoki (muna nannade fuskokin da aka samo a mataki na ƙarshe a cikin tsari da ƙima ResNet34)
- Sanya hoton ƙarshe
- Bari mu zana akwatunan ɗaure
- Zana kima
- Share hoto na al'ada (na asali).
- Ajiye fitarwa daga bututun kimantawa
- Mun sanya aikin a cikin layi na "bayan_estimate", wanda microservice na "attrai-telegram-bot" ke saurare.
Graylog (+ mongoDB + Elasticsearch)
Zabin ya fado masa, ba akan wanda aka saba ba
A matsayina na wanda ya taɓa yin aiki tare da tarin ELK kawai, Ina da kyakkyawar gogewa gabaɗaya yayin aiki tare da Graylog. Abinda kawai ke damun kai shine fifiko a cikin fasalulluka na Kibana akan mahaɗin yanar gizo na Graylog.
RabbitMQ
A cikin wannan aikin an yi amfani da shi azaman
Redis
Wani lokaci ana buƙatar yin amfani da abubuwa gama gari waɗanda ke aiwatar da wasu tsarin bayanai a cikin microservices na Python daban-daban.
Misali, Redis yana adana hashmap na nau'in "telegram_user_id => adadin ayyuka masu aiki a cikin jerin gwano," wanda ke ba ku damar iyakance adadin buƙatun daga mai amfani ɗaya zuwa wata ƙima kuma, ta haka, hana harin DoS.
Bari mu tsara tsarin sarrafa hoto mai nasara
- Mai amfani yana aika hoto zuwa Telegram bot
- "attrai-telegram-bot" yana karɓar saƙo daga Telegram API kuma yana rarraba shi
- Ana ƙara aikin tare da hoton zuwa layin asynchronous "don_estimate"
- Mai amfani yana karɓar saƙo tare da lokacin kimantawa da aka tsara
- "attrai-estimator" yana ɗaukar ɗawainiya daga jerin gwanon "don_estimate", yana gudanar da ƙididdiga ta cikin bututun kuma ya samar da aikin a cikin jerin gwanon "bayan_estimate".
- "attrai-telegram-bot" yana sauraron layin "bayan_estimate", yana aika da sakamakon ga mai amfani.
DevOps
A ƙarshe, bayan nazarin gine-ginen, zaku iya ci gaba zuwa ɓangaren ban sha'awa daidai - DevOps
Ckerungiyar Docker
Yin amfani da "swarm", duk nodes a cikin gungu namu za a iya raba su zuwa nau'ikan 2 - ma'aikaci da manaja. A kan injuna na nau'in farko, ana tura ƙungiyoyin kwantena (tari), injinan nau'in na biyu suna da alhakin ƙima, daidaitawa da daidaitawa.
Tari mai jagora guda ɗaya da ma'aikata uku
Matsakaicin girman gungu mai yuwuwa shine kumburi 1; injin guda ɗaya zai yi aiki a lokaci guda azaman manajan jagora da ma'aikaci. Dangane da girman aikin da mafi ƙarancin buƙatun don haƙuri da kuskure, an yanke shawarar yin amfani da wannan hanyar.
Idan muka dubi gaba, zan ce tun lokacin da aka fara bayarwa na farko, wanda ya kasance a tsakiyar watan Yuni, ba a sami matsalolin da ke da alaka da wannan kungiyar ta gungu ba (amma wannan ba yana nufin cewa irin wannan kungiya ta kowace hanya ta yarda da kowane matsakaicin matsakaici). ayyukan, waɗanda ke ƙarƙashin buƙatun haƙuri na kuskure).
Docker Stack
A cikin yanayin swarm, shi ke da alhakin tura tari (saitin sabis na docker)
Yana goyan bayan tsara tsarin docker, yana ba ku damar ƙara amfani da zaɓuɓɓukan turawa.
Misali, ta amfani da waɗannan sigogi, albarkatun kowane misalan microservice na kimantawa sun iyakance (muna keɓance N cores don N, a cikin microservice kanta muna iyakance adadin muryoyin da PyTorch ke amfani da shi zuwa ɗaya)
attrai_estimator:
image: 'erqups/attrai_estimator:1.2'
deploy:
replicas: 4
resources:
limits:
cpus: '4'
restart_policy:
condition: on-failure
…
Yana da mahimmanci a lura cewa Redis, RabbitMQ da Graylog sabis ne na jihar kuma ba za a iya ƙididdige su da sauƙi kamar "attrai-estimator"
Gabatar da tambayar - me yasa ba Kubernetes ba?
Da alama cewa yin amfani da Kubernetes a cikin ƙananan ayyuka da matsakaitan girman girman kai ne; ana iya samun duk ayyukan da suka wajaba daga Docker Swarm, wanda ke da sauƙin amfani don mawaƙan kwantena kuma yana da ƙaramin shinge don shigarwa.
Hanyoyi
Duk waɗannan an jera su akan VDS tare da halaye masu zuwa:
- CPU: 4 core Intel® Xeon® Gold 5120 CPU @ 2.20GHz
- RAM: 8 GB
- SSD: 160GB
Bayan gwajin lodi na gida, da alama cewa tare da kwararar masu amfani da gaske, wannan injin zai isa.
Amma, nan da nan bayan ƙaddamarwa, na sanya hanyar haɗi zuwa ɗaya daga cikin shahararrun hotuna a cikin CIS (yup, waccan ɗaya), bayan haka mutane sun zama masu sha'awar kuma a cikin 'yan sa'o'i kadan sabis ya yi nasarar sarrafa dubban hotuna. A lokaci guda, a lokacin kololuwar, ba a yi amfani da albarkatun CPU da RAM ko da rabi ba.
Wasu ƙarin zane-zane
Adadin masu amfani na musamman da buƙatun kimantawa tun lokacin turawa, ya danganta da ranar
Rarraba lokacin tantance bututun kimantawa
binciken
A taƙaice, zan iya cewa tsarin gine-gine da kuma kusanci ga ƙungiyar kide-kide na kwantena sun tabbatar da kansu sosai - ko da a lokacin kololuwar babu raguwa ko raguwa a lokacin sarrafawa.
Ina tsammanin cewa ƙananan ayyuka masu girma da matsakaici waɗanda ke amfani da ƙididdigar ainihin lokaci na hanyoyin sadarwar jijiya akan CPU a cikin tsarin su na iya samun nasarar aiwatar da ayyukan da aka bayyana a cikin wannan labarin.
Zan ƙara da cewa da farko labarin ya fi tsayi, amma don kada in buga dogon karantawa, na yanke shawarar barin wasu batutuwa a cikin wannan labarin - za mu koma gare su a cikin wallafe-wallafen gaba.
Kuna iya buga bot akan Telegram - @AttraiBot, zai yi aiki aƙalla har zuwa ƙarshen kaka 2020. Bari in tunatar da ku cewa ba a adana bayanan mai amfani ba - ba hotunan asali, ko sakamakon bututun kimantawa - komai yana rushewa bayan sarrafawa.
source: www.habr.com