Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Mikhail Salosin (nan gaba - MS): - Sannu duka! Sunana Michael. Ina aiki a matsayin mai haɓakawa a MC2 Software, kuma zan yi magana game da amfani da Go a bayan aikace-aikacen wayar hannu ta Look+.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Shin akwai wanda ke son wasan hockey?

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Sannan wannan application naku ne. Yana da na Android da iOS kuma ana amfani dashi don kallon watsa shirye-shiryen wasanni daban-daban akan layi kuma ana rikodin su. Hakanan aikace-aikacen ya ƙunshi ƙididdiga daban-daban, watsa shirye-shiryen rubutu, tebur don taro, gasa da sauran bayanai masu amfani ga magoya baya.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Har ila yau a cikin aikace-aikacen akwai irin wannan abu kamar lokutan bidiyo, watau za ku iya kallon lokacin mafi mahimmanci na matches (bulo, fada, harbi, da dai sauransu). Idan baku son kallon watsa shirye-shiryen gabaɗaya, kuna iya kallon mafi ban sha'awa kawai.

Me kuka yi amfani da shi wajen haɓakawa?

An rubuta babban sashi a cikin Go. API ɗin da abokan ciniki ta hannu suka yi magana da ita an rubuta su a cikin Go. An kuma rubuta sabis don aika sanarwar turawa zuwa wayoyin hannu a cikin Go. Dole ne kuma mu rubuta namu ORM, wanda za mu yi magana game da shi wata rana. Da kyau, an rubuta wasu ƙananan ayyuka a cikin Go: sakewa da loda hotuna don masu gyara...

Mun yi amfani da PostgreSQL azaman bayanan bayanai. An rubuta ƙirar edita a cikin Ruby akan Rails ta amfani da gem ɗin ActiveAdmin. Ana shigo da ƙididdiga daga mai ba da ƙididdiga kuma an rubuta shi cikin Ruby.

Don gwajin tsarin API, mun yi amfani da Python unittest. Ana amfani da Memcached don kashe kiran biyan kuɗi na API, ana amfani da "Chef" don sarrafa daidaitawa, ana amfani da Zabbix don tattarawa da saka idanu statistics na ciki. Graylog2 shine don tattara rajistan ayyukan, Slate takaddun API ne don abokan ciniki.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Zaɓin yarjejeniya

Matsala ta farko da muka ci karo da ita: muna buƙatar zaɓar yarjejeniya don hulɗa tsakanin masu amfani da wayar baya da na wayar hannu, bisa ga abubuwan da ke gaba ...

  • Mafi mahimmancin buƙatu: dole ne a sabunta bayanai akan abokan ciniki a cikin ainihin lokaci. Wato duk wanda yake kallon watsa shirye-shiryen a halin yanzu yakamata ya sami sabuntawa kusan nan take.
  • Don sauƙaƙe abubuwa, mun ɗauka cewa bayanan da ke aiki tare da abokan ciniki ba a share su ba, amma an ɓoye su ta amfani da tutoci na musamman.
  • Duk nau'ikan buƙatun da ba kasafai ba (kamar ƙididdiga, ƙayyadaddun ƙungiyoyi, ƙididdiga na ƙungiyar) ana samun su ta buƙatun GET na yau da kullun.
  • Bugu da ƙari, tsarin dole ne ya sauƙaƙe masu amfani da dubu 100 a lokaci guda.

Bisa ga wannan, muna da zaɓuɓɓukan yarjejeniya guda biyu:

  1. Websockets. Amma ba mu buƙatar tashoshi daga abokin ciniki zuwa uwar garken. Mu kawai muna buƙatar aika sabuntawa daga uwar garken zuwa abokin ciniki, don haka saitin gidan yanar gizo wani zaɓi ne marar amfani.
  2. Abubuwan da aka Aiko na Sabar (SSE) sun zo daidai! Abu ne mai sauqi qwarai kuma yana gamsar da duk abin da muke buƙata.

Abubuwan Da Aka Aiko Sabar

Kalmomi kadan game da yadda wannan abu ke aiki...

Yana gudana a saman haɗin yanar gizon http. Abokin ciniki ya aika da buƙatu, uwar garken yana amsawa tare da Nau'in Abun ciki: rubutu / taron-rafi kuma baya rufe haɗin gwiwa tare da abokin ciniki, amma ya ci gaba da rubuta bayanai zuwa haɗin:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Ana iya aika bayanai a cikin tsarin da aka amince da abokan ciniki. A cikin yanayinmu, mun aika da shi a cikin wannan tsari: an aika sunan tsarin da aka canza (mutum, mai kunnawa) zuwa filin taron, kuma JSON tare da sababbin filayen da aka canza don mai kunnawa an aika zuwa filin bayanai.

Yanzu bari muyi magana game da yadda hulɗar kanta ke aiki.

  • Abu na farko da abokin ciniki ya yi shine ƙayyade lokacin aiki na ƙarshe tare da sabis ɗin: yana duba bayanan gida kuma yana ƙayyade kwanan watan canji na ƙarshe da aka rubuta ta.
  • Yana aika buƙatu tare da wannan kwanan wata.
  • A cikin martani, mun aika masa da duk abubuwan da suka faru tun daga wannan ranar.
  • Bayan haka, yana yin haɗi zuwa tashar kai tsaye kuma baya rufewa har sai yana buƙatar waɗannan sabuntawa:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Mun aika masa da jerin canje-canje: idan wani ya zira kwallo, mu canza maki na wasan, idan ya ji rauni, wannan ma ana aika shi a ainihin lokacin. Don haka, abokan ciniki nan take suna karɓar bayanai na zamani a cikin abincin taron wasan. Lokaci-lokaci, don abokin ciniki ya fahimci cewa uwar garken bai mutu ba, cewa babu abin da ya faru da shi, muna aika tambarin lokaci kowane 15 seconds - don sanin cewa komai yana cikin tsari kuma babu buƙatar sake haɗawa.

Yaya ake hidimar haɗin kai kai tsaye?

  • Da farko, mun ƙirƙiri tashoshi wanda za a karɓi sabuntawar buffered.
  • Bayan haka, munyi subscribing na wannan channel domin samun updates.
  • Mun saita madaidaicin taken don abokin ciniki ya san cewa komai yayi daidai.
  • Aika ping na farko. Muna yin rikodin tambarin lokutan haɗin kai kawai.
  • Bayan haka, muna karanta daga tashar a cikin madauki har sai an rufe tashar sabuntawa. Tashar lokaci-lokaci tana karɓar ko dai tambarin lokaci na yanzu ko canje-canjen da muka riga muka rubuta don buɗe haɗin gwiwa.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Matsala ta farko da muka ci karo da ita ita ce kamar haka: ga kowane haɗin da aka buɗe tare da abokin ciniki, mun ƙirƙiri mai ƙididdigewa sau ɗaya a kowane daƙiƙa 15 - ya zama cewa idan muna da haɗin yanar gizo dubu 6 buɗe tare da injin guda ɗaya (tare da uwar garken API guda ɗaya), 6. an halicci lokuta dubu. Wannan ya haifar da na'urar ba ta riƙe nauyin da ake buƙata ba. Matsalar ba ta bayyana a gare mu ba, amma mun sami ɗan taimako kuma muka gyara shi.

Sakamakon haka, yanzu ping ɗinmu ya fito daga tashar guda ɗaya wanda sabuntawa ya fito.

Saboda haka, akwai mai ƙidayar lokaci ɗaya kawai wanda ke yin la'akari sau ɗaya kowane daƙiƙa 15.

Akwai ayyuka na taimako da yawa anan - aika da taken, ping da tsarin kanta. Wato ana watsa sunan tebur (mutum, wasa, kakar) da bayanin wannan shigarwa anan:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Injiniyanci don aika sabuntawa

Yanzu kadan game da inda canje-canjen suka fito. Muna da mutane da yawa, masu gyara, waɗanda ke kallon watsa shirye-shiryen a ainihin lokacin. Sun kirkiro duk abubuwan da suka faru: an kori wani, wani ya ji rauni, wani nau'i na maye gurbin ...

Yin amfani da CMS, bayanai suna shiga cikin ma'ajin bayanai. Bayan wannan, ma'ajin bayanai yana sanar da sabar API game da wannan ta amfani da tsarin Saurari/ Sanarwa. Sabbin API sun riga sun aika wannan bayanin ga abokan ciniki. Don haka, da gaske muna da ƴan sabobin da ke da alaƙa da bayanan bayanai kuma babu wani nauyi na musamman akan ma'ajin bayanai, saboda abokin ciniki baya mu'amala kai tsaye da bayanan ta kowace hanya:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

PostgreSQL: Saurara / Sanarwa

Tsarin Sauraro/ Sanarwa a cikin Postgres yana ba ku damar sanar da masu biyan kuɗin taron cewa wasu al'amura sun canza - an ƙirƙiri wasu rikodin a cikin bayanan. Don yin wannan, mun rubuta fararwa mai sauƙi da aiki:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Lokacin sakawa ko canza rikodin, muna kiran aikin sanarwar akan tashar data_updates, muna wucewa wurin sunan tebur da mai gano rikodin da aka canza ko saka.

Ga duk teburi waɗanda dole ne a haɗa su tare da abokin ciniki, muna ayyana faɗakarwa, wanda, bayan canza / sabunta rikodin, ya kira aikin da aka nuna akan faifan da ke ƙasa.
Ta yaya API ɗin ke biyan kuɗin waɗannan canje-canje?

An ƙirƙiri tsarin Fanout - yana aika saƙonni zuwa abokin ciniki. Yana tattara duk tashoshi na abokin ciniki kuma yana aika sabuntawa da aka karɓa ta waɗannan tashoshi:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Anan ma'aunin pq library, wanda ya haɗu da database kuma ya ce yana son sauraron tashar (data_updates), yana duba cewa haɗin yana buɗe kuma komai yana lafiya. Ina barin duba kuskure don ajiye sarari (ba dubawa yana da haɗari).

Bayan haka, mun saita Ticker ba tare da izini ba, wanda zai aika da ping kowane daƙiƙa 15, sannan mu fara sauraron tashar da muka yi rajista. Idan muka karɓi ping, muna buga wannan ping. Idan mun sami wani nau'in shigarwa, to muna buga wannan shigarwar ga duk masu biyan kuɗi na wannan Fanout.

Ta yaya Fan-out ke aiki?

A cikin Rashanci wannan yana fassara a matsayin "splitter". Muna da abu ɗaya wanda ke yin rijistar masu biyan kuɗi waɗanda ke son karɓar wasu sabuntawa. Kuma da zarar sabuntawa ya zo ga wannan abu, yana rarraba wannan sabuntawa ga duk masu amfani da shi. Isasshen mai sauƙi:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Yadda ake aiwatar da shi a Go:

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Akwai tsari, ana daidaita shi ta amfani da Mutexes. Yana da filin da ke adana yanayin haɗin Fanout zuwa ma'ajin bayanai, watau a halin yanzu yana saurare kuma zai karbi sabuntawa, da kuma jerin duk tashoshin da ake da su - taswirar, maɓalli wanda shine tashar tashar da tsarin a cikin hanyar. dabi'u (ba a yi amfani da shi ta kowace hanya ba).

Hanyoyi guda biyu - Haɗawa da Kashe - suna ba mu damar gaya wa Fanout cewa muna da haɗin kai zuwa tushe, ya bayyana, kuma haɗin haɗin ginin ya karye. A cikin yanayi na biyu, kuna buƙatar cire haɗin duk abokan ciniki kuma ku gaya musu cewa ba za su iya sauraron komai ba kuma sun sake haɗawa saboda haɗin da ke da su ya rufe.

Akwai kuma hanyar biyan kuɗi wanda ke ƙara tashar zuwa "masu sauraro":

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Akwai hanyar Unsubscribe, wanda ke cire tashar daga masu sauraro idan abokin ciniki ya katse, da kuma hanyar Buga, wanda ke ba ku damar aika sako ga duk masu biyan kuɗi.

Tambaya: – Me ake yada ta wannan tashar?

MS: - Samfurin da ya canza ko ping ana watsa shi (ainihin kawai lamba, lamba).

MS: - Kuna iya aika wani abu, aika kowane tsari, buga shi - kawai ya juya zuwa JSON kuma shi ke nan.

MS: - Muna karɓar sanarwa daga Postgres - ya ƙunshi sunan tebur da mai ganowa. Dangane da sunan tebur da mai ganowa, muna samun rikodin da muke buƙata, sannan mu aika wannan tsarin don bugawa.

Hanyoyi

Menene wannan yayi kama da yanayin abubuwan more rayuwa? Muna da sabar kayan masarufi guda 7: ɗaya daga cikinsu an sadaukar da shi gabaɗaya ga ma'ajin bayanai, sauran na'urori guda shida suna gudana. Akwai kwafi 6 na API: kowane injin kama-da-wane tare da API yana gudana akan sabar kayan masarufi daban - wannan don amintacce ne.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Muna da gaba biyu tare da sanya Keepalive don inganta samun dama, ta yadda idan wani abu ya faru, gaba ɗaya na iya maye gurbin ɗayan. Hakanan - kwafi biyu na CMS.

Akwai kuma mai shigo da kididdiga. Akwai Bawan DB wanda ake yin ajiyar lokaci lokaci-lokaci. Akwai Pigeon Pusher, aikace-aikacen da ke aika sanarwar turawa ga abokan ciniki, da abubuwan more rayuwa: Zabbix, Graylog2 da Chef.

A gaskiya ma, wannan kayan aikin ba shi da yawa, saboda ana iya amfani da dubu 100 tare da ƙananan sabobin. Amma akwai ƙarfe - mun yi amfani da shi (an gaya mana cewa zai yiwu - me ya sa ba zai yiwu ba).

Ribobi na Go

Bayan mun yi aiki akan wannan aikace-aikacen, irin wannan fa'idodin Go sun bayyana.

  • Cool http ɗakin karatu. Da shi zaka iya ƙirƙirar da yawa daga cikin akwatin.
  • Bugu da ƙari, tashoshi waɗanda suka ba mu damar aiwatar da hanyar aika sanarwa cikin sauƙi ga abokan ciniki.
  • Abun ban mamaki mai gano tseren ya ba mu damar kawar da kurakurai da yawa (kayan aikin gyarawa). Ana ƙaddamar da duk abin da ke aiki akan tsari, an haɗa shi tare da maɓallin Race; kuma mu, a kan haka, za mu iya duba tsarin samar da ababen more rayuwa don ganin irin matsalolin da muke fuskanta.
  • Minimalism da sauƙi na harshe.

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

Muna neman masu haɓakawa! Idan kowa yana so, don Allah.

Tambayoyi

Tambaya daga masu sauraro (nan gaba - B): - A gare ni cewa kun rasa wani muhimmin batu game da Fan-out. Shin na yi daidai da fahimtar cewa lokacin da kuka aika da martani ga abokin ciniki, kuna toshe idan abokin ciniki ba ya son karantawa?

MS: - A'a, ba muna tarewa ba. Da fari dai, muna da duk wannan a bayan nginx, wato, babu matsaloli tare da jinkirin abokan ciniki. Abu na biyu, abokin ciniki yana da tashar tare da buffer - a gaskiya, za mu iya sanya sabuntawa har zuwa ɗari a can ... Idan ba za mu iya rubuta zuwa tashar ba, to, yana share shi. Idan muka ga cewa an katange tashar, to za mu rufe tashar kawai, kuma shi ke nan - abokin ciniki zai sake haɗawa idan wata matsala ta taso. Saboda haka, bisa ka'ida, babu wani toshewa a nan.

B: - Shin ba zai yiwu a aika rikodin nan da nan don Saurara/Sanarwa ba, kuma ba tebur mai ganowa ba?

MS: - Saurara / Sanarwa yana da iyaka na bytes 8 akan abubuwan da aka riga aka aika. A ka'ida, zai yiwu a aika idan muna hulɗa da ƙaramin adadin bayanai, amma ga alama a gare ni cewa wannan hanyar [hanyar da muke yi] ta fi dogara kawai. Iyakokin suna cikin Postgres kanta.

B: - Shin abokan ciniki suna karɓar sabuntawa akan matches waɗanda ba su da sha'awar?

MS: - Gaba ɗaya, a. A matsayinka na mai mulki, akwai matches 2-3 da ke gudana a layi daya, har ma da wuya sosai. Idan abokin ciniki yana kallon wani abu, to yawanci yana kallon wasan da ke gudana. Sa'an nan, abokin ciniki yana da rumbun adana bayanai na gida wanda aka haɗa duk waɗannan abubuwan sabuntawa, kuma ko da ba tare da haɗin Intanet ba, abokin ciniki na iya duba duk wasannin da ya gabata wanda yake da sabuntawa. Mahimmanci, muna aiki tare da bayanan mu akan sabar tare da bayanan gida na abokin ciniki don ya iya aiki a layi.

B: – Me ya sa kuka yi naku ORM?

Alexey (daya daga cikin masu haɓaka Look+): - A wancan lokacin (shekara daya da ta gabata) an sami ƙarancin ORMs fiye da yanzu, lokacin da suke da yawa. Abin da na fi so game da yawancin ORMs a waje shi ne cewa yawancinsu suna gudana akan musaya mara kyau. Wato, hanyoyin da ke cikin waɗannan ORMs suna shirye don ɗaukar wani abu: tsari, ma'anar tsari, lamba, wani abu gaba ɗaya maras dacewa ...

ORM ɗinmu yana haifar da tsari bisa tsarin bayanai. Ni kaina. Sabili da haka duk hanyoyin suna kankare, kar a yi amfani da tunani, da dai sauransu. Suna karɓar tsarin kuma suna tsammanin yin amfani da waɗannan sifofin da suka zo.

B: – Mutane nawa ne suka shiga?

MS: – A matakin farko, mutane biyu sun shiga. Mun fara wani wuri a watan Yuni, kuma a watan Agusta an shirya babban sashi (siffa ta farko). Akwai saki a watan Satumba.

B: – Inda kuka bayyana SSE, ba ku amfani da lokacin ƙarewa. Me yasa haka?

MS: - A gaskiya, SSE har yanzu yarjejeniya ce ta html5: an tsara ma'aunin SSE don sadarwa tare da masu bincike, gwargwadon fahimta. Yana da ƙarin fasali don masu bincike su sake haɗawa (da sauransu), amma ba ma buƙatar su, saboda muna da abokan ciniki waɗanda za su iya aiwatar da duk wata dabara don haɗawa da karɓar bayanai. Ba mu yi SSE ba, amma wani abu mai kama da SSE. Wannan ba ƙa'idar ba ce kanta.
Babu bukata. Kamar yadda na fahimta, abokan ciniki sun aiwatar da hanyar haɗin kai kusan daga karce. Ba su damu da gaske ba.

B: – Wadanne ƙarin kayan aiki kuka yi amfani da su?

MS: - Mun fi amfani da govet da goint don haɓaka salon haɗin kai, da kuma gofmt. Ba a yi amfani da wani abu ba.

B: – Me kuka yi amfani da shi wajen gyara kuskure?

MS: – An gudanar da aikin gyara kurakurai da yawa ta amfani da gwaje-gwaje. Ba mu yi amfani da kowane mai gyara kuskure ko GOP ba.

B: - Za ku iya dawo da nunin inda aka aiwatar da aikin Buga? Shin masu canjin harafi guda suna ruɗa ku?

MS: - A'a. Suna da madaidaicin “ƙunƙuntaccen” ikon iya gani. Ba a amfani da su a ko'ina sai a nan (sai dai na ciki na wannan ajin), kuma yana da mahimmanci - yana ɗaukar layi 7 kawai.

B: - Ko ta yaya har yanzu ba ta da hankali ...

MS: - A'a, a'a, wannan shine ainihin code! Ba batun salo ba ne. Irin wannan mai amfani ne, ƙaramin aji - filayen 3 ne kawai a cikin ajin ...

Mikhail Salosin. Golang Meetup. Amfani da Go a bayan aikace-aikacen Look+

MS: - Gabaɗaya, duk bayanan da ke aiki tare da abokan ciniki (matches na lokacin, 'yan wasa) baya canzawa. Kusan magana, idan muka yi wani wasanni a cikin abin da muke bukatar mu canza wasan, za mu kawai la'akari da kome a cikin sabon version na abokin ciniki, da kuma tsohon versions na abokin ciniki za a dakatar.

B: – Akwai wasu fakitin sarrafa abin dogaro na ɓangare na uku?

MS: - Mun yi amfani da go dep.

B: – Akwai wani abu game da bidiyo a cikin batun rahoton, amma babu wani abu a cikin rahoton game da bidiyo.

MS: - A'a, ba ni da wani abu a cikin batun game da bidiyon. Ana kiransa "Look+" - sunan aikace-aikacen ke nan.

B: - Kun ce ana watsa shi ga abokan ciniki? ..

MS: – Ba mu shiga cikin watsa bidiyo ba. Megafon ne yayi wannan gaba ɗaya. Ee, ban ce aikace-aikacen MegaFon ba ne.

MS: - Tafi - don aika duk bayanai - akan maki, akan abubuwan wasa, ƙididdiga ... Go shine gaba ɗaya bayan aikace-aikacen. Dole ne abokin ciniki ya san daga wani wuri wace hanyar haɗin da za a yi amfani da shi don mai kunnawa don mai amfani ya iya kallon wasan. Muna da hanyoyin haɗi zuwa bidiyo da rafukan da aka shirya.

Wasu tallace-tallace 🙂

Na gode da kasancewa tare da mu. Kuna son labaran mu? Kuna son ganin ƙarin abun ciki mai ban sha'awa? Goyon bayan mu ta hanyar ba da oda ko ba da shawara ga abokai, girgije VPS don masu haɓakawa daga $ 4.99, analog na musamman na sabar matakin shigarwa, wanda mu muka ƙirƙira muku: Duk gaskiyar game da VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps daga $19 ko yadda ake raba sabar? (akwai tare da RAID1 da RAID10, har zuwa 24 cores kuma har zuwa 40GB DDR4).

Dell R730xd 2x mai rahusa a cibiyar bayanan Equinix Tier IV a Amsterdam? Nan kawai 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV daga $199 a cikin Netherlands! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - daga $99! Karanta game da Yadda ake gina Infrastructure Corp. aji tare da amfani da sabar Dell R730xd E5-2650 v4 masu darajan Yuro 9000 akan dinari?

source: www.habr.com

Add a comment