Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Alexey Naidenov, Shugaba ItooLabs, yayi magana game da ci gaban dandali na sadarwa ga ma'aikatan sadarwa a cikin harshen shirye-shirye Go (Golang). Alexey kuma ya ba da labarin kwarewarsa na ƙaddamarwa da aiki da dandamali a cikin ɗaya daga cikin manyan kamfanonin sadarwa na Asiya, wanda ya yi amfani da dandamali don samar da saƙon murya (VoiceMail) da kuma Virtual PBX (Cloud PBX).

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Alexey Naydenov (nan gaba - AN): - Sannu duka! Sunana Alexey Naidenov. Ni ne darektan ItooLabs. Da farko, zan so in amsa abin da nake yi a nan da yadda na ƙare a nan.

Idan ka kalli Wurin Kasuwar Bitrix24 (sashe "Telephony"), to aikace-aikacen 14 da 36 waɗanda ke wurin (40%) sune mu:

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Hakazalika, waɗannan abokan aikinmu ne, amma a bayan duk wannan shine dandamalinmu (Platform azaman Sabis) - abin da muke sayar musu akan ƙaramin dinari. A gaskiya ina so in yi magana game da ci gaban wannan dandali da kuma yadda muka zo Go.

Lambobin dandalinmu a yanzu sune:

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

44 abokan hulɗa, ciki har da MegaFon. Gabaɗaya magana, muna son ci gaba da abubuwan ban sha'awa, kuma a zahiri muna da damar yin amfani da masu biyan kuɗi miliyan 100 na masu aiki 44 a nan Rasha. Saboda haka, idan wani yana da wasu ra'ayoyin kasuwanci, koyaushe muna farin cikin sauraron su.

  • 5000 kamfanoni masu amfani.
  • 20 masu biyan kuɗi gabaɗaya. Duk b000b ne - muna aiki tare da kamfanoni kawai.
  • Kira 300 a minti daya yayin rana.
  • Mintunan kira miliyan 100 bara (mun yi bikin). Wannan ba tare da la'akari da tattaunawar cikin gida da ke kan dandalinmu ba.

Yaya aka fara?

Ta yaya ƴan ƴaƴan mata suka fara yin nasu dandalin? Dole ne mu yi la'akari da cewa muna da tarihin ci gaban "hardcore Enterprise", har ma a mafi daidai lokacin na shekara don kasuwanci! Wannan lokacin farin ciki ne lokacin da kuka zo wurin abokin ciniki kuma ku ce: "Muna buƙatar ƙarin sabobin biyu." Kuma abokin ciniki: “Eh, babu tambaya! Muna da goma a cikin tara.

Don haka mun yi Oracle, Java, WebSphere, Db2 da duk wannan. Sabili da haka, mun ɗauki, ba shakka, mafi kyawun mafita na masu siyarwa, haɗa su kuma mun yi ƙoƙarin kashe su. Sun yi wasa da kansu. Zai zama irin wannan farawa na ciki.

An fara ne a cikin 2009. Tun daga 2006, muna da hannu sosai a cikin shawarwarin ma'aikata, wata hanya ko wata. Mun yi PBXs na al'ada da yawa (kamar abin da muke da shi a yanzu): mun duba, mun yanke shawarar cewa yana da kyau, kuma muka yanke shawarar tayar da farawa na ciki.

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Shigar da VMWare. Tunda muna tafiya da kanmu, dole ne mu yi watsi da A'ajiyar Dillali mai sanyi nan da nan. Mun san komai game da su: cewa ya kamata a raba alkawuran da 3, kuma a ninka farashin da 10. Don haka, mun yi DirDB da sauransu.

Sai ya fara girma. An ƙara sabis ɗin biyan kuɗi zuwa wannan, saboda dandamali ba zai iya jurewa ba. Sa'an nan uwar garken lissafin kuɗi daga MySQL ya koma Mongo. A sakamakon haka, mun sami mafita mai aiki wanda ke aiwatar da duk kiran da ke zuwa can:

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Amma wani wuri a ciki, samfurin mai siyarwa iri ɗaya yana jujjuya - babban, makaman nukiliya, wanda muka taɓa ɗauka. Kusan a ƙarshen 2011, mun gane da kanmu cewa babban ƙulli a gare mu, ba shakka, zai zama wannan samfurin musamman - za mu shiga ciki. Muka ga bango a gabanmu, inda muka ruga da gudu, yayin da kwastomomi ke tafiya, aka kara.
Saboda haka, dole ne mu yi wani abu. Tabbas, mun yi bincike da yawa akan samfura daban-daban - duka buɗaɗɗen tushe da na masu siyarwa. Ba zan tsaya a kan wannan ba a yanzu - wannan ba shine batun ba. Babban koma baya da muke tunani akai shine yin dandalin kanmu.

A ƙarshe, mun zo wannan zaɓi. Me yasa? Domin duk dillalai da samfuran buɗe ido an yi su don magance matsalolin shekaru 10 da suka gabata. To, idan mai shekaru 10, da wasu ƙari! Zaɓin ya bayyana a fili a gare mu: ko dai mu ce ban kwana da babban ra'ayinmu na kyakkyawan sabis (ga abokan hulɗa, masu aiki da kanmu), ko kuma mu yi wani abu na kanmu.

Mun yanke shawarar yin wani abu dabam!

Bukatun dandamali

Idan kun yi wani abu na dogon lokaci (kun yi amfani da samfurin wani), to, tunani a hankali yana tasowa a cikin ku: ta yaya zan yi da kaina? Tun da mu duka masu shirye-shirye ne a cikin kamfanin (sai dai masu siyarwa, babu masu shirya shirye-shirye), an samar da buƙatunmu na dogon lokaci, kuma sun kasance a sarari:

  1. Babban saurin ci gaba. Samfurin mai siyar, wanda ya azabtar da mu, bai dace da mu ba tun farko saboda komai ya yi aiki na dogon lokaci kuma a hankali. Muna so da sauri - muna da ra'ayoyi da yawa! Har yanzu muna da ra'ayoyi da yawa, amma sai lissafin ra'ayoyin ya kasance kamar shekaru goma a gaba. Yanzu kawai shekara guda.
  2. Matsakaicin amfani da ƙarfe mai mahimmanci. Wannan kuma yana da mahimmanci a gare mu, domin mun ga cewa za a sami ƙarin cibiyoyi.
  3. Babban abin dogaro. Wanda mukayi kuka shima.
  4. Hakuri mai girma.
  5. Mun so mu ƙare tare da tsarin sakin yau da kullun. Don yin wannan, muna buƙatar zaɓi na harshe.

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Dangane da haka, daga buƙatun samfurin da muka gabatar da kanmu, buƙatun harshe suna girma a hanya madaidaiciya.

  1. Idan muna son tallafi don tsarin multi-core, to muna buƙatar tallafi don aiwatar da layi ɗaya.
  2. Idan muna buƙatar saurin ci gaba, muna buƙatar harshe mai goyan bayan haɓaka gasa, shirye-shiryen gasa. Idan wani bai ci karo da bambancin ba, to abu ne mai sauqi:
    • daidaitaccen shirye-shirye shine game da yadda zaren guda biyu ke gudana akan nau'ikan nau'ikan iri daban-daban;
    • aiwatar da kisa na lokaci guda, musamman goyon baya na haɗin gwiwa, game da yadda harshe (ko lokacin aiki, duk abin da) ke taimakawa wajen ɓoye duk rikitarwa da ke fitowa daga aiwatar da layi ɗaya.
  3. Babban kwanciyar hankali. Babu shakka, muna buƙatar gungu, kuma ya fi abin da muke da shi akan samfurin mai siyarwa.

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Da gaske ba mu da zaɓuɓɓuka da yawa, idan kun tuna. Da fari dai, Erlang - muna son shi kuma mun san shi, shi ne na keɓaɓɓu, wanda na fi so. Na biyu, Java ba ma Java ba ne, amma musamman Scala. Na uku, harshen da a lokacin ba mu san shi ba - Tafi. Ya bayyana a lokacin, daidai, ya riga ya wanzu kusan shekaru biyu, amma har yanzu ba a sake shi ba.

An ci nasara Go!

Tarihin Go

Mun yi dandali a kai. Zan yi kokarin bayyana dalilin.

Takaitaccen Tarihin Go. An fara shi a 2007, an buɗe shi a 2009, an fito da sigar farko a cikin 2012 (wato, mun fara aiki tun kafin fitowar farko). Mafarin shine Google, wanda ke son maye gurbin, kamar yadda nake zargin, Java.

Marubutan sun shahara sosai:

  • Ken Thomson, wanda ke bayan Unix, ya ƙirƙira UTF-8, yayi aiki akan tsarin Shirin 9;
  • Rob Pike, wanda ya tsara UTF-8 tare da Ken, ya kuma yi aiki a kan Shirin 9, Inferno, Limbo a Bell Labs;
  • Robert Gizmer, wanda muka sani kuma muka ƙaunace shi don ƙirƙira Mai Haɗa HotSpot na Java da kuma yin aiki akan janareta a cikin V8 (Fassarar Javascript na Google);
  • Kuma sama da masu ba da gudummawa 700, gami da wasu facin mu.

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Tafi kallo

Mun ga cewa harshen yana da sauƙi ko žasa da kuma fahimta. Muna da nau'o'i na zahiri: a wasu lokuta ana buƙatar bayyana su, a wasu kuma ba su da (ma'ana nau'ikan ana kwatanta su).

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Ana iya ganin cewa yana da gaye don bayyana tsarin. Ana iya ganin cewa muna da ra'ayi na mai nuni (inda alamar alama). Ana iya ganin cewa akwai goyan baya na musamman don ayyana farawar tsararru da tsarin haɗin gwiwa.

Kusan ana iya fahimta - zaku iya rayuwa. Ƙoƙarin rubuta Sannu, duniya:

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Me muke gani? Wannan shine syntax-kamar C, semicolon na zaɓi ne. Zai iya zama mai raba layi biyu, amma idan waɗannan gine-gine biyu ne waɗanda suke daidai akan layi ɗaya.

Mun ga cewa ɓangarorin a cikin tsarin sarrafawa (a kan layi na 14) na zaɓi ne, amma ana buƙatar masu lanƙwasa koyaushe. Mun ga cewa bugawa a tsaye. Tim a mafi yawan lokuta ana nunawa. Wannan misalin ya ɗan fi rikitarwa fiye da yadda aka saba Sannu, duniya - don kawai nuna cewa akwai ɗakin karatu.

Menene kuma muke gani mai mahimmanci? An tsara lambar cikin fakiti. Kuma don amfani da kunshin a cikin lambar ku, kuna buƙatar shigo da shi ta amfani da umarnin shigo da shi - wannan ma yana da mahimmanci. Mun fara - yana aiki. Mai girma!

Bari mu gwada wani abu mafi rikitarwa: Sannu, duniya, amma yanzu sabar http ce. Menene muke gani mai ban sha'awa a nan?

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Na farko, aikin yana aiki azaman siga. Wannan yana nufin cewa aikin da muke da shi shine "dan kasa na farko" kuma zaka iya yin abubuwa masu ban sha'awa da yawa tare da shi a cikin salon aiki. Muna ganin abin da ba a zata ba na gaba: umarnin shigo da kaya yana nufin ma'ajiyar GitHub kai tsaye. Haka ne, haka abin yake - haka kuma, haka ya kamata a yi.

A cikin Go, mai gano fakitin duniya shine url na ma'ajiyar sa. Akwai kayan aikin Goget na musamman wanda ke zuwa ga duk abin dogaro, zazzage su, shigar da su, tattara su, da kuma shirya su don amfani idan ya cancanta. A lokaci guda, Goget ya san game da html-meta. Don haka, zaku iya adana kundin adireshin http, wanda zai ƙunshi hanyoyin haɗi zuwa takamaiman ma'ajiyar ku (kamar yadda mu, alal misali, muke yi).

Me kuma muke gani? Http da Json a cikin ɗakin karatu na yau da kullun. Akwai, a fili, introspection - tunani, wanda ya kamata a yi amfani da shi wajen shigar da / json, saboda kawai muna musanya wani abu na sabani.

Muna gudanar da shi kuma mu ga cewa muna da layi 20 na code mai amfani wanda ke tattarawa, aiki da kuma ba da matsakaicin nauyin na'ura na yanzu (akan injin da yake aiki).
Menene kuma mahimmanci daga abin da za mu iya gani nan da nan a nan? Yana tattara cikin binary guda ɗaya (buinary). Wannan binary ba shi da abin dogaro kwata-kwata, babu dakunan karatu! Ana iya kwafa shi zuwa kowane tsarin, gudu nan da nan, kuma zai yi aiki.

Mu ci gaba.

Tafi: hanyoyi da musaya

Go yana da hanyoyi. Kuna iya ayyana hanya don kowane nau'in al'ada. Bugu da ƙari, wannan ba lallai ba ne tsari, amma yana iya zama laƙabi na wani nau'i. Kuna iya ayyana wani laƙabi na N32 kuma ku rubuta hanyoyin yin wani abu mai amfani.

Kuma a nan ne muka fada cikin rudani a karon farko ... Ya zama cewa Go ba shi da azuzuwan haka. Wadanda suka san Go suna iya cewa akwai nau'in haɗawa, amma wannan ya bambanta. Da zarar mai haɓakawa ya daina tunaninsa a matsayin gado, mafi kyau. Babu azuzuwan a Go, kuma babu gado ma.

Tambaya! Menene kamfanin marubutan da Google ke jagoranta ya ba mu domin nuna sarkakiya a duniya? An ba mu hanyoyin sadarwa!

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

Mai dubawa wani nau'i ne na musamman wanda ke ba ka damar rubuta hanyoyi masu sauƙi, sa hannu na hanya. Bugu da ari, duk wani nau'in da waɗannan hanyoyin ke wanzuwa (ana aiwatar da su) zai dace da wannan ƙa'idar. Wannan yana nufin cewa za ku iya rubuta aikin da ya dace da nau'in nau'i ɗaya, don wani (wanda ya dace da nau'in dubawa). Bayan haka, ayyana maɓalli na nau'in wannan haɗin gwiwar kuma sanya kowane ɗayan waɗannan abubuwan gare shi.

Ga masu sha'awar hardcore, zan iya cewa wannan madaidaicin za ta ƙunshi alamomi guda biyu: ɗaya zuwa bayanai, ɗayan zuwa tebur mai siffa ta musamman wanda ke da takamaiman nau'in wannan nau'in, zuwa ƙirar wannan nau'in. Wato, mai tarawa yana yin irin waɗannan allunan na bayanai a lokacin haɗawa.

Kuma akwai, ba shakka, masu nuni ga vata a cikin Go. Kalmar dubawa {} (tare da takalmin gyaran kafa guda biyu) madaidaici ne wanda ke ba ka damar nuna kowane abu gaba ɗaya bisa ƙa'ida.
Ya zuwa yanzu, komai yana cikin tsari, komai ya saba. Babu abin mamaki.

Go: gorutines

Yanzu mun zo ga abin da muke sha'awar: matakai masu sauƙi - goroutines (goroutines) a cikin Go terminology.

Alexei Naidenov. ItooLabs. Shari'ar ci gaba akan dandalin wayar Go (Golang). Kashi na 1

  1. Na farko, suna da nauyi da gaske (kasa da 2 Kb).
  2. Abu na biyu, farashin ƙirƙirar irin wannan goroutine ba shi da kyau: zaku iya ƙirƙirar dubu daga cikinsu a sakan daya - babu abin da zai faru.
  3. Ana ba da su ta nasu mai tsarawa, wanda kawai ke canza iko daga wannan goroutine zuwa wani.
  4. A wannan yanayin, ana canja wurin sarrafawa a cikin waɗannan lokuta:
    • idan aka ci karo da bayanin go (idan goroutine ya fara gorutine na gaba);
    • idan an kunna Input/Fita mai toshewa;
    • idan an jawo tarin shara;
    • idan an fara wasu aiki tare da tashoshi.

Wato a duk lokacin da manhajar Go ta fara aiki a kwamfuta, sai ta gano adadin nau’in ‘cores’ a cikin na’urar, sai ta fara yawan zaren da ake bukata (nawa ne a cikin na’urar, ko nawa ka gaya masa). Saboda haka, mai tsara jadawalin zai gudanar da waɗannan zaren aiwatar da ƙananan nauyi akan duk waɗannan zaren tsarin aiki a cikin kowane cibiya.

Ya kamata a lura cewa wannan ita ce hanya mafi inganci don amfani da ƙarfe. Ban da abin da muka nuna, muna yin abubuwa da yawa. Muna yin, alal misali, tsarin DPI wanda ke ba da damar yin amfani da gigabits 40 a cikin raka'a ɗaya (dangane da abin da ke faruwa a cikin waɗannan layin).

A can, tun kafin Go, mun yi amfani da makirci iri ɗaya don wannan dalili: saboda yana ba ku damar adana wurin cache na processor, rage yawan maɓallan mahallin OS (wanda kuma yana ɗaukar lokaci mai tsawo). Ina maimaitawa: wannan ita ce hanya mafi inganci don amfani da ƙarfe.

Wannan misalin layi na 21 mai sauƙi misali ne wanda kawai ke yin echo-server. A lokaci guda, lura cewa aikin hidima yana da sauƙi sosai, yana da layi. Babu sake dawowa, babu buƙatar damuwa da tunani ... Kuna karanta kawai ku rubuta!

A lokaci guda, idan ka karanta kuma ka rubuta, ya kamata a haƙiƙa ya toshe - wannan goroutine ana yin layi ne kawai kuma mai tsarawa ya ɗauke shi lokacin da kisa ya sake yiwuwa. Wato, wannan sauƙi mai sauƙi na iya aiki azaman uwar garken echo don yawancin haɗin kai kamar yadda OS akan wannan injin zai ba da izini.

Za'a cigaba nan bada jimawa ba...

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