Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Алексей Найденов, директори генералӣ ITooLabs, дар бораи таҳияи платформаи телекоммуникатсионӣ барои операторони алоқа бо забони барномасозии Go (Golang) сӯҳбат мекунад. Алексей инчунин таҷрибаи худро дар мавриди ҷойгиркунӣ ва истифодаи платформа дар яке аз бузургтарин операторони телекоммуникатсионӣ, ки ин платформаро барои пешниҳоди хидматҳои почтаи овозӣ (VoiceMail) ва Virtual PBX (Cloud PBX) истифода мебурд, мубодила мекунад.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Алексей Найденов (минбаъд – А.Н.): - Салом ба ҳама! Номи ман Алексей Найденов аст. Ман директори ITooLabs ҳастам. Пеш аз ҳама, ман мехоҳам ҷавоб диҳам, ки ман дар ин ҷо чӣ кор карда истодаам ва чӣ гуна ба ин ҷо расидаам.

Агар шумо ба бозори Bitrix24 назар кунед (қисмати "Телефония"), пас 14 барнома ва 36 барномае, ки дар он ҷо ҳастанд (40%) мо ҳастем:

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Аниқтараш, инҳо шарикони оператори мо ҳастанд, аммо дар паси ҳамаи ин платформаи мост (Платформа ҳамчун хидмат) - он чизеро, ки мо ба онҳо бо як пули ночиз мефурӯшем. Дар асл, ман мехостам дар бораи рушди ин платформа ва чӣ гуна мо ба Go омадем.

Рақамҳо барои платформаи мо ҳоло:

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

44 шарики оператор, аз ҷумла Мегафон. Умуман, мо воқеан ба саёҳатҳои гуногун рафтанро дӯст медорем ва мо ба 100 миллион муштарии 44 оператор дар Русия дастрасии воқеӣ дорем. Аз ин рӯ, агар касе ягон идеяи тиҷоратӣ дошта бошад, мо ҳамеша аз гӯш кардани онҳо хоҳем буд.

  • 5000 ширкати корбар.
  • Дар маҷмӯъ 20 000 муштарӣ. Ин ҳама b2b аст - мо танҳо бо ширкатҳо кор мекунем.
  • Дар давоми рӯз 300 занг дар як дақиқа.
  • Соли гузашта 100 миллион дақиқаи занг (мо ҷашн гирифтем). Ин гуфтушунидҳои дохилиеро, ки дар платформаи мо мавҷуданд, ба назар намегирад.

Он чӣ гуна оғоз ёфт?

Чӣ тавр дӯстони дуруст ҳатто платформаи худро оғоз мекунанд? Мо инчунин бояд ба назар гирем, ки мо таърихи рушди "корхонаи сахт" дорем ва ҳатто дар вақти дақиқтарини сол барои корхона! Он вақт хушбахт буд, ки шумо ба назди муштарӣ омада мегӯед: "Ба мо боз чанд сервер лозим аст." Ва муштарӣ: «Саволе нест! Мо даҳ нафар дар раф дорем».

Ҳамин тавр, мо Oracle, Java, WebSphere, Db2 ва ҳама чизҳоро кардем. Аз ин рӯ, мо, албатта, беҳтарин қарорҳои фурӯшандаро гирифтем, онҳоро муттаҳид кардем ва кӯшиш кардем, ки бо он баргардем. Мо худамон роҳ мерафтем. Ин чунин як оғози дохилӣ хоҳад буд.

Ҳамаи ин воқеан дар соли 2009 оғоз ёфт. Аз соли 2006 инҷониб мо бо ин ё он роҳ дар ҳалли операторҳо зич иштирок кардаем. Мо якчанд PBX-и маҷозии фармоишӣ сохтем (монанде, ки ҳоло мо фармоиш додаем): мо онро дида баромадем, қарор додем, ки ин хуб аст ва тасмим гирифтем, ки оғози дохилиро оғоз кунем.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Мо VMWare-ро гирифтем. Азбаски мо танҳо будем, мо маҷбур шудем, ки фавран аз фурӯшандаи сард Storage даст кашем. Мо ҳама чизро дар бораи онҳо медонем: ин ваъдаҳо бояд ба 3 тақсим карда шаванд ва арзиши он бояд ба 10 зарб карда шавад. Барои ҳамин онҳо DirDB-ро сохтанд ва ғайра.

Баъд он ба афзоиш оғоз кард. Ба ин хидмати биллинг илова карда шуд, зеро платформа дигар аз ӯҳдаи ин кор баромада наметавонад. Сипас сервери биллинг аз MySQL ба Mongo кӯчид. Дар натиҷа, мо як ҳалли корӣ гирифтем, ки ҳамаи зангҳои ба он ҷо воридшударо коркард мекунад:

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Аммо дар ҷое, ки дар дохили он ҳамон як маҳсулоти фурӯшанда чарх мезанад - маҳсулоти асосии ҳастаӣ, ки мо онро боре гирифта будем. Тақрибан дар охири соли 2011 мо фаҳмидем, ки монеаи асосӣ барои мо, албатта, ин маҳсулоти мушаххас хоҳад буд - мо ба он дучор мешавем. Мо дар пеши худ девореро дидем, ки мо бо дави тамом давидем, зеро муштариёни бештар меомаданд.
Бинобар ин, мо бояд коре кунем. Албатта, мо дар бораи маҳсулоти гуногун - ҳам сарчашмаҳои кушода ва ҳам фурӯшанда таҳқиқоти зиёде анҷом додем. Ман ҳоло дар ин бора таваққуф намекунам - ин чизе нест, ки мо дар бораи он сӯҳбат мекунем. Варианти охирини бозгаште, ки мо фикр мекардем, сохтани платформаи шахсии худ буд.

Дар ниҳоят, мо ба ин вариант омадем. Чаро? Зеро ҳама маҳсулоти фурӯшанда ва кушодаасос барои ҳалли мушкилоте, ки 10 сол пеш буданд, сохта шудаанд. Хуб, агар 10 сола бошад ва каме бештар! Интихоб ба мо аён шуд: ё мо бо идеяи бузурги хидматрасонии идеалии худ (барои шарикон, операторҳо ва худамон) видоъ мекунем, ё худамон коре мекунем.

Мо тасмим гирифтем, ки чизе аз худамон кунем!

Талаботи платформа

Агар шумо муддати тӯлонӣ коре карда бошед (бо истифода аз маҳсулоти ягон каси дигар), пас оҳиста-оҳиста дар сари шумо фикр пайдо мешавад: ман худам ин корро чӣ тавр мекунам? Азбаски мо ҳама барномасоз дар ширкат ҳастем (ба истиснои фурӯшандагон, ягон барномасоз нест), талаботҳои мо кайҳо пештар таҳия шуда буданд ва онҳо равшан буданд:

  1. Суръати баланди рушд. Махсулоти фурушандае, ки моро азоб медод, пеш аз хама, барои он каноатбахш набуд, ки хама чиз дер ва охиста-охиста баромад. Мо онро зуд мехостем - мо ғояҳои зиёде доштем! Мо хануз фикру акидахои зиёде дорем, вале он вакт руйхати идеяхо чунон буд, ки ба назар дах сол пештар менамуд. Ҳоло танҳо як сол.
  2. Истифодаи максималии оҳани бисёрқабата. Ин барои мо низ муҳим буд, зеро мо дидем, ки ядроҳо бештар ва бештар хоҳанд буд.
  3. Эътимоднокии баланд. Чизе, ки мо низ бо гиря кардем.
  4. Муқовимати баланд ба нокомиҳо.
  5. Мо мехостем, ки раванди нашрҳои ҳаррӯзаро ба анҷом расонем. Барои ин ба мо интихоби забон лозим буд.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Бинобар ин, аз талаботе, ки ба маҳсулоте, ки мо барои худ гузоштаем, талабот ба забон ба таври равшан мантиқӣ меафзояд.

  1. Агар мо барои системаҳои бисёраслӣ дастгирӣ хоҳем кард, пас ба мо барои иҷрои параллелӣ дастгирӣ лозим аст.
  2. Агар ба мо суръати рушд ниёз дошта бошад, ба мо забоне лозим аст, ки рушди рақобатпазир, барномасозии рақобатпазирро дастгирӣ кунад. Агар касе ба ин фарқият дучор нагардида бошад, ин хеле содда аст:
    • Барномасозии параллелӣ дар бораи он аст, ки чӣ гуна ду риштаи гуногун дар ядроҳои гуногун иҷро карда мешаванд;
    • Иҷрои ҳамзамон, ё дақиқтараш, дастгирии ҳамзамон, дар бораи он аст, ки чӣ гуна забон (ё вақти кор, муҳим нест) барои пинҳон кардани ҳама мушкилие, ки аз иҷрои параллелӣ бармеояд, кӯмак мекунад.
  3. Устувории баланд. Аён аст, ки ба мо кластер лозим буд ва кластер беҳтар аз он ки мо дар маҳсулоти фурӯшанда доштем.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Агар дар хотир доред, мо аслан ин қадар имконоти зиёде надоштем. Аввалан, Эрланг - мо онро дӯст медорем ва медонем, ин дӯстдоштаи шахсии ман буд. Дуюм, Java ҳатто Java нест, балки махсусан Scala. Саввум, забоне, ки дар он вақт мо онро умуман намедонистем - Рав. Он вақт он замон пайдо шуда буд, дурусттараш, аллакай тақрибан ду сол вуҷуд дошт, аммо ҳанӯз бароварда нашудааст.

Бирав, ғолиб!

Таърихи Go

Мо дар болои он платформа сохтем. Ман кӯшиш мекунам фаҳмонам, ки чаро.

Таърихи мухтасари Go. Он дар соли 2007 оғоз ёфт, соли 2009 кушода шуд, версияи аввал дар соли 2012 бароварда шуд (яъне мо ҳатто пеш аз нашри аввал ба кор шурӯъ кардем). Ташаббускор Google буд, ки мехост, тавре ки ман гумон мекунам, Java-ро иваз кунад.

Муаллифон хеле машҳуранд:

  • Кен Томсон, ки дар паси Unix буд, UTF-8-ро ихтироъ кард, дар системаи Нақшаи 9 кор мекард;
  • Роб Пайк, ки UTF-8-ро бо Кен ихтироъ кардааст, инчунин дар нақшаи 9, Inferno, Limbo дар Bell Labs кор кардааст;
  • Роберт Гисмер, ки мо ӯро барои ихтироъ кардани Java HotSpot Compiler ва кори худ дар генератор дар V8 (тарҷумони Javascript-и Google) мешиносем ва дӯст медорем;
  • Ва зиёда аз 700 саҳмгузор, аз ҷумла баъзе часбҳои мо.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Бирав: назари аввал

Мо мебинем, ки забон каму беш соддаву фаҳмо аст. Мо намудҳои аён дорем: дар баъзе ҳолатҳо онҳо бояд эълон карда шаванд, дар дигар ҳолатҳо онҳо лозим нестанд (ин маънои онро дорад, ки намудҳо ин ё он тарз хулоса бароварда мешаванд).

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Мумкин аст, ки тасвири сохторҳо муд аст. Дидан мумкин аст, ки мо мафҳуми нишондод дорем (дар он ҷо ситорача аст). Мумкин аст, ки дастгирии махсус барои эълони инициализатсияи массивҳо ва массивҳои ассотсиативӣ мавҷуд аст.

Ин қариб равшан аст - шумо метавонед зиндагӣ кунед. Биёед кӯшиш кунем, ки бинависем Салом, ҷаҳон:

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Мо чиро мебинем? Ин синтаксиси ба C монанд аст, нуқтаи вергул ихтиёрӣ аст. Он метавонад барои ду сатр ҷудокунанда бошад, аммо танҳо агар ин ду сохторе бошанд, ки дар як хат ҳастанд.

Мо мебинем, ки қавс дар сохторҳои идоракунӣ (дар хати 14) ихтиёрӣ мебошанд, аммо қавсҳои ҷингила ҳамеша талаб карда мешаванд. Мо мебинем, ки чопкунӣ статикӣ аст. Тим аксар вақт хориҷ карда мешавад. Ин мисол каме мураккабтар аз маъмулӣ аст, Салом, ҷаҳон - танҳо барои нишон додани он ки китобхона вуҷуд дорад.

Боз чиро мебинем, ки муҳим аст? Рамз ба бастаҳо ташкил карда шудааст. Ва барои истифодаи баста дар рамзи худ, шумо бояд онро бо истифода аз дастури воридот ворид кунед - ин ҳам муҳим аст. Мо онро оғоз мекунем - он кор мекунад. Аҷоиб!

Биёед минбаъд як чизи мураккабтарро санҷем: Салом, ҷаҳон, аммо ҳоло он сервери http аст. Мо дар ин ҷо чӣ ҷолибро мебинем?

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Аввалан, функсия ҳамчун параметр амал мекунад. Ин маънои онро дорад, ки функсияи мо "шаҳрванди дараҷаи аввал" аст ва шумо метавонед бо он дар услуби функсионалӣ бисёр чизҳои ҷолибро иҷро кунед. Он гоҳ мо чизи ғайричашмдошт мебинем: дастури воридот мустақиман ба анбори GitHub пайваст мешавад. Дуруст аст, ки ин тавр аст - илова бар ин, ин тавр бояд кард.

Дар Go, идентификатори универсалии баста URL-и анбори он мебошад. Як барномаи махсуси Goget мавҷуд аст, ки ҳамаи вобастагиҳоро меорад, зеркашӣ мекунад, насб мекунад, тартиб медиҳад ва дар ҳолати зарурӣ онҳоро барои истифода омода мекунад. Дар айни замон, Гогет дар бораи html-meta медонад. Бинобар ин, шумо метавонед феҳристи http нигоҳ доред, ки дорои истинодҳо ба анбори мушаххаси шумо бошад (масалан, мо мекунем).

Боз чиро мебинем? Http ва Json дар китобхонаи стандартӣ. Аён аст, ки интроспекция - инъикос вуҷуд дорад, ки бояд дар рамзгузорӣ/json истифода шавад, зеро мо танҳо ягон объекти ихтиёриро барои он иваз мекунем.

Мо онро иҷро мекунем ва мебинем, ки мо дар 20 сатр рамзи муфид дорем, ки сарбории миёнаи ҷории мошинро (дар мошине, ки дар он ба кор андохта шудааст) тартиб медиҳад, иҷро мекунад ва гузориш медиҳад.
Боз чӣ муҳим аст, ки мо дар ин ҷо фавран дида метавонем? Он ба як бинарии статикӣ (buinary) тартиб дода шудааст. Ин бинарӣ умуман вобастагӣ надорад, китобхонаҳо надоранд! Шумо метавонед онро ба ҳама гуна система нусхабардорӣ кунед, фавран онро иҷро кунед ва он кор хоҳад кард.

Биёед пеш равем.

Гузаштан: Усулҳо ва интерфейсҳо

Go усулҳо дорад. Шумо метавонед усулро барои ҳама намуди фармоишӣ эълон кунед. Гузашта аз ин, ин ҳатман сохтор нест, балки шояд тахаллуси як навъ бошад. Шумо метавонед тахаллусро барои N32 эълон кунед ва барои он усулҳое нависед, ки ҳар кори муфидро анҷом диҳад.

Ва дар ин чо бори аввал ба бехуда меафтем... Маълум мешавад, ки Го чунин синфхо надорад. Онҳое, ки Go-ро медонанд, метавонанд бигӯянд, ки инклюзия вуҷуд дорад, аммо ин чизи тамоман дигар аст. Чӣ қадаре ки таҳиякунанда дар бораи он ҳамчун мерос фикр кунад, ҳамон қадар беҳтар аст. Дар Go синфҳо вуҷуд надоранд ва мерос низ вуҷуд надорад.

Савол! Ширкати муаллифони таҳти роҳбарии Google ба мо барои инъикоси мураккабии ҷаҳон чӣ дод? Онҳо ба мо интерфейсҳо доданд!

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

Интерфейс як намуди махсусест, ки ба шумо имкон медиҳад, ки усулҳо, имзоҳои методиро нависед. Ғайр аз он, ҳар навъе, ки барои онҳо ин усулҳо мавҷуданд (иҷро мешаванд) ба ин интерфейс мувофиқат мекунанд. Ин маънои онро дорад, ки шумо метавонед танҳо функсияи мувофиқро барои як намуди дигар тавсиф кунед (ки ба он намуди интерфейс мувофиқ аст). Баъдан, тағирёбандаи навъи ин интерфейсро эълон кунед ва ба он яке аз ин объектҳоро таъин кунед.

Барои мухлисони хардкор, ман метавонам бигӯям, ки ин тағирёбанда воқеан ду нишондод дорад: яке ба маълумот, дигаре ба ҷадвали махсуси дескрипторҳо, ки барои ин навъи мушаххас хос аст, барои интерфейси ин навъи. Яъне компилятор дар ваќти пайвастшавї чунин љадвалњои тавсифкунандаро месозад.

Ва дар Go, албатта, ишораҳое ҳастанд, ки бекор мекунанд. Калимаи интерфейс {} (бо ду қавси ҷингила) як тағирёбандаест, ки ба шумо имкон медиҳад, ки ба ягон объект ишора кунед.
То хол ҳама чиз хуб аст, ҳама чиз шинос аст. Ҳеҷ чиз тааҷҷубовар нест.

Бирав: горутинҳо

Акнун мо ба он чизе мерасем, ки моро ба худ ҷалб мекунад: равандҳои сабук - горутинҳо (горутинҳо) дар истилоҳоти Go.

Алексей Найденов. ITooLabs. Ҳолати таҳияи платформаи телефонии Go (Golang). Қисми 1

  1. Аввалан, онҳо воқеан сабуканд (камтар аз 2 КБ).
  2. Сониян, хароҷоти эҷоди чунин горутин ночиз аст: шумо метавонед дар як сония ҳазор нафари онҳоро эҷод кунед - ҳеҷ чиз рӯй нахоҳад дод.
  3. Ба онҳо нақшасози худ хизмат мерасонад, ки он танҳо назоратро аз як горутин ба дигараш интиқол медиҳад.
  4. Дар ин ҳолат, назорат дар ҳолатҳои зерин гузаронида мешавад:
    • агар ифодаи go дучор шавад (агар горутин горутини навбатиро оғоз кунад);
    • агар занги вуруд/берун басташуда фаъол бошад;
    • агар чамъоварии хошок сар шавад;
    • агар ягон амалиёт бо каналҳо оғоз карда шавад.

Яъне, ҳар вақте, ки барномаи Go дар компютер кор мекунад, он шумораи ядроҳоро дар система муайян мекунад, ба қадри зарурӣ риштаҳоро оғоз мекунад (чанд ядро ​​дар система ё чӣ қадар шумо гуфтаед). Мувофиқи он, нақшакаш ин риштаҳои сабуки иҷроро дар ҳамаи ин риштаҳои системаи оператсионӣ дар ҳар як ядро ​​иҷро мекунад.

Бояд қайд кард, ки ин роҳи самараноки истифодаи оҳан аст. Гайр аз он чи ки нишон дода шудааст, мо боз бисьёр корхоро ичро мекунем. Мо, масалан, системаҳои DPI месозем, ки ба як воҳид имкон медиҳанд, ки ба 40 гигабит хидмат расонанд (вобаста аз он ки дар ин сатрҳо чӣ рӯй медиҳад).

Дар он ҷо, ҳатто пеш аз Go, мо маҳз ҳамин схемаро бо ҳамин сабаб истифода мебурдем: зеро он ба мо имкон медиҳад, ки маҳалли ҷойгиршавии кэши протсессоро нигоҳ дорем ва шумораи коммутаторҳои контекстии ОС-ро ба таври назаррас кам кунем (ки ин ҳам вақти зиёдро талаб мекунад). Такрор мекунам: ин роҳи самараноки истифодаи оҳан аст.

Ин мисоли оддии 21-сатр як мисолест, ки танҳо сервери echo-ро иҷро мекунад. Лутфан таваҷҷӯҳ намоед, ки функсияи хидматрасонӣ хеле содда аст, он хаттӣ аст. Занг задан нест, ташвишу андеша кардан лозим нест... Факат хонед ва нависед!

Дар айни замон, агар шумо хонед ва нависед, он воқеан бояд маҳкам шавад - ин горутин танҳо дар навбат гузошта мешавад ва ҳангоми дубора имконпазир шудани иҷро аз ҷониби нақшакаш гирифта мешавад. Яъне, ин рамзи оддӣ метавонад ҳамчун сервери эхо барои шумораи зиёди пайвастҳо амал кунад, ки OS дар он мошин имкон медиҳад.

Давомаш ба зудӣ...

Баъзе рекламаҳо 🙂

Ташаккур ба шумо барои бо мо мондан. Мақолаҳои мо ба шумо маъқуланд? Мехоҳед мундариҷаи ҷолибтарро бубинед? Бо фармоиш додан ё тавсия додан ба дӯстон моро дастгирӣ кунед, абр VPS барои таҳиягарон аз $4.99, аналоги беназири серверҳои сатҳи ибтидоӣ, ки аз ҷониби мо барои шумо ихтироъ шудааст: Тамоми ҳақиқат дар бораи VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps аз $19 ё чӣ гуна мубодила кардани сервер? (бо RAID1 ва RAID10, то 24 ядро ​​ва то 40 ГБ DDR4 дастрас аст).

Dell R730xd дар маркази додаҳои Equinix Tier IV дар Амстердам 2 маротиба арзонтар аст? Танҳо дар ин ҷо 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТВ аз $199 дар Нидерландия! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - аз $99! Дар бораи хондан Корпоратсияи инфраструктураро чӣ гуна бояд сохт. синф бо истифодаи серверҳои Dell R730xd E5-2650 v4 ба маблағи 9000 XNUMX евро барои як динор?

Манбаъ: will.com

Илова Эзоҳ