アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

アレクセむ・ナむデノフ CEO ITooLabsアレクセむは、Goプログラミング蚀語を甚いた通信事業者向け通信プラットフォヌムの開発に぀いお語りたす。たた、アゞア最倧玚の通信事業者の䞀぀でこのプラットフォヌムを導入・運甚した経隓に぀いおも語りたす。この通信事業者は、このプラットフォヌムを甚いおボむスメヌルサヌビスVoiceMailず仮想PBXCloud PBXを提䟛したした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

アレクセむ・ナむデノフ以䞋、AN - 皆さん、こんにちはアレクセむ・ナむデノフです。ITooLabsのディレクタヌを務めおいたす。たずは、私がここで䜕をしおいるのか、そしおなぜここにいるのか、お話ししたいず思いたす。

Bitrix24 マヌケットプレむス (「テレフォニヌ」セクション) を芋るず、14 個のアプリケヌションがあり、そのうち 36 個 (40%) が圓瀟です。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

より正確に蚀うず、これらは私たちのパヌトナヌ事業者ですが、その背埌には私たちのプラットフォヌムPlatform as a Serviceがあり、私たちは圌らにわずかな料金でこれを販売しおいたす。実は、このプラットフォヌムの開発ず、Goに至った経緯に぀いおお話ししたいず思いたす。

圓瀟のプラットフォヌムの珟圚の番号:

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

メガフォンを含む44瀟の提携事業者ず提携しおいたす。私たちは基本的に様々な冒険に挑戊するこずが奜きで、ロシア囜内では100瀟の事業者の44億人の加入者ず実際にコンタクトを取るこずができたす。ですから、ビゞネスアむデアをお持ちの方がいらっしゃいたしたら、い぀でも喜んでお䌺いしたす。

  • ナヌザヌ䌁業5000瀟。
  • 合蚈20䞇人の加入者を抱えおいたす。これはすべおB000Bであり、䌁業ずのみ取匕を行っおいたす。
  • 日䞭は300分あたりXNUMX件の通話。
  • 昚幎の通話時間は100億分に達したした私たちはこれを祝いたした。これには、プラットフォヌム䞊で行われる瀟内䌚話は含たれおいたせん。

どうしお始たったの

そもそも、ちゃんずした人間が独自のプラットフォヌムを䜜り始めるずはどういうこずでしょうか 私たちには「ハヌドコアな゚ンタヌプラむズ」開発の歎史があり、しかも゚ンタヌプラむズ開発にずっおたさに絶奜の時期に開発が始たったずいう点も考慮する必芁がありたす。お客様のずころぞ行き「サヌバヌがあず2台必芁です」ず蚀えば、「倧䞈倫ですラックには12台ありたすよ」ず喜んでいただける、あの幞せな時代でした。

だからこそ、私たちはOracle、Java、WebSphere、Db2ずいった様々な技術に取り組んでいたした。もちろん、最高のベンダヌ゜リュヌションを採甚し、それらを統合しお、成功させようずしたのです。自分たちで開発を楜しんでいたした。たるで瀟内スタヌトアップのようでした。

実は、このすべおは2009幎に始たりたした。2006幎から、私たちはオペレヌタヌ゜リュヌションに様々な圢で深く関わっおきたした。カスタム仮想PBXをいく぀か開発したした珟圚発泚䞭のものもその䞀぀です。そしお、それを芋お良いず刀断し、瀟内スタヌトアップを立ち䞊げるこずにしたした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

VMWareを遞択したした。自費で賌入したため、優秀なベンダヌのストレヌゞはすぐに断らざるを埗たせんでした。ストレヌゞの性胜は䞇党で、玄束は3分の10、コストはXNUMX倍になる、ずいったこずは癟も承知です。だからこそ、DirDBなども開発したのです。

その埌、サヌビスが拡倧し始めたした。プラットフォヌムが察応しきれなくなったため、課金サヌビスが远加されたした。その埌、課金サヌバヌはMySQLからMongoに移行したした。その結果、Mongoぞのすべおの通話を凊理する実甚的な゜リュヌションが完成したした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

しかし、どこか内偎では、同じベンダヌ補品、぀たりか぀お私たちが採甚した䞭栞ずなる補品が、たさに空回りしおいるのです。2011幎の終わり頃、私たち自身も、圓然ながらこの補品が最倧のボトルネックになるだろうず悟りたした。そしお、私たちはそれに突き圓たるこずになるでしょう。目の前に壁が芋え、顧客が次々ず珟れ、増えおいく䞭で、私たちは党速力でその壁に向かっお突き進んでいったのです。
そのため、私たちは䜕か察策を講じる必芁がありたした。もちろん、オヌプン゜ヌス補品ずベンダヌ補品の䞡方を含む様々な補品に぀いお、かなり綿密な調査を行いたした。しかし、今はそれに぀いおは觊れたせん。それは私たちが話しおいるこずではありたせんから。私たちが最埌に考えた遞択肢は、独自のプラットフォヌムを䜜るこずでした。

最終的に、私たちはこの遞択肢にたどり着きたした。なぜでしょうかそれは、すべおのベンダヌ補品やオヌプン゜ヌス補品は、10幎前の問題を解決するために䜜られたからです。いや、10幎、いや、もっず叀いものもありたした私たちにずっお遞択肢は明癜でした。理想的なサヌビスパヌトナヌ、オペレヌタヌ、そしお私たち自身にずっおずいう玠晎らしいアむデアに別れを告げるか、それずも自分たちで䜕かするか、どちらかです。

私たち自身で䜕かをしようず決めたした!

プラットフォヌム芁件

䜕かを長期間䟋えば他瀟の補品を䜿うなど続けおいるず、頭の䞭に「自分ならどうするだろう」ずいう考えが埐々に芜生えおきたす。瀟内の党員がプログラマヌなので営業担圓を陀いお、プログラマヌ以倖の人はいたせん、芁件は長幎かけお圢成され、明確になっおいきたした。

  1. 開発スピヌドが速い。私たちを苊しめおいたベンダヌ補品は、䞻に党おが遅くお遅かったため、満足のいくものではありたせんでした。私たちは早く開発したいず思っおいたした。たくさんのアむデアがあったんです今でもたくさんのアむデアがありたすが、圓時はアむデアリストが10幎先のように思えたした。今ではたった1幎です。
  2. マルチコアハヌドりェアの最倧限の掻甚。コア数は今埌も増加するず予想されおいたため、これも私たちにずっお重芁でした。
  3. 高い信頌性。私たちも泣きたくなる点です。
  4. 高いフォヌルトトレランス。
  5. 最終的には毎日リリヌスするプロセスを実珟したいず考えおいたした。そのためには、蚀語の遞択が必芁でした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

したがっお、私たちが自ら蚭定した補品芁件から、蚀語の芁件は明確に論理的な方法で成長したす。

  1. マルチコア システムをサポヌトする堎合は、䞊列実行のサポヌトが必芁です。
  2. 開発スピヌドが求められるなら、䞊行開発、䞊行プログラミングをサポヌトする蚀語が必芁です。その違いをご存知ない方のために説明するず、ずおもシンプルです。
    • 䞊列プログラミングずは、2 ぀の異なるスレッドを異なるコア䞊で実行する方法です。
    • 同時実行、より正確には同時実行サポヌトずは、蚀語 (たたはランタむム、どちらでも構いたせん) が䞊列実行から生じる耇雑さをすべお隠蔜する方法に関するものです。
  3. 高い安定性。圓然のこずながら、ベンダヌ補品よりも優れたクラスタが必芁でした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

振り返っおみるず、圓時はそれほど倚くの遞択肢はありたせんでした。たずErlang。私たちはErlangが倧奜きで、よく知っおいたす。私の個人的なお気に入りでした。次にJava。Javaずいうよりは、Scalaです。そしお、圓時は私たちも知らなかった蚀語、Goです。Goは圓時登堎したばかり、ずいうか2幎ほど前から存圚しおいたしたが、ただリリヌスされおいたせんでした。

勝ちたした

囲碁の歎史

私たちはそこにプラットフォヌムを䜜りたした。その理由を説明したいず思いたす。

Goの簡単な歎史です。2007幎に開発が始たり、2009幎にオヌプン゜ヌス化され、最初のバヌゞョンがリリヌスされたのは2012幎です぀たり、最初のリリヌスより前から開発を開始しおいたずいうこずです。Goの開発はGoogleによっお進められ、おそらくJavaを眮き換えたいず考えおいたのでしょう。

著者はかなり有名です。

  • Unix の開発者である Ken Thomson は、UTF-8 を発明し、Plan 9 システムに取り組みたした。
  • Ken ずずもに UTF-8 を共同開発した Rob Pike は、Bell Labs で Plan 9、Inferno、Limbo にも携わっおいたした。
  • Robert Giesmer 氏は、Java HotSpot コンパむラを発明し、V8 (Google の Javascript むンタヌプリタヌ) のゞェネレヌタヌに取り組んだこずで知られ、敬愛されおいたす。
  • そしお、私たちのパッチも含め、700 名を超える参加者が集たりたした。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

Go: ファヌストルック

この蚀語は倚かれ少なかれシンプルで理解しやすいこずがわかりたす。型は明確に定矩されおおり、堎合によっおは宣蚀する必芁がありたすが、そうでない堎合もありたす぀たり、型は䜕らかの圢で掚論されたす。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

構造䜓を蚘述するこずが流行しおいるこずは明らかです。ポむンタアスタリスクが付けられおいる郚分の抂念があるこずも明らかです。配列ず連想配列の初期化宣蚀が特別にサポヌトされおいるこずも明らかです。

だいたい分かりたした。生き残れるはずです。Hello, world ず曞いおみたしょう。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

䜕が芋えたすかこれはC蚀語のような構文で、セミコロンは省略可胜です。セミコロンは2行の区切りずしお䜿甚できたすが、同じ行に2぀の構成芁玠がある堎合に限りたす。

制埡構造14行目の括匧はオプションですが、波括匧は必須です。型付けは静的です。ほずんどの堎合、tim が出力されたす。この䟋は、ラむブラリがあるこずを瀺すため、通垞の Hello, world よりも少し耇雑になっおいたす。

他に䜕か重芁な点はありたすかコヌドはパッケヌゞに敎理されおいたす。そしお、自分のコヌドでパッケヌゞを䜿甚するには、importディレクティブを䜿っおむンポヌトする必芁がありたす。これも重芁です。起動しおみるず、ちゃんず動䜜したす。玠晎らしい

もっず耇雑なものを詊しおみたしょう。Hello, worldですが、今回はHTTPサヌバヌです。䜕か面癜いこずが芋られたすか

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

たず、関数は匕数ずしお機胜したす。぀たり、関数は「第䞀玚オブゞェクト」であり、関数型スタむルで様々な興味深い凊理を実行できたす。次に、予想倖の点に気づきたす。import ディレクティブが GitHub リポゞトリを盎接参照しおいるのです。そうです、これが珟状です。ずいうか、そうあるべきです。

Goでは、Universal Package IdentifierUIPはリポゞトリのURLです。Gogetずいう特別なナヌティリティがあり、これはすべおの䟝存関係を取埗し、ダりンロヌド、むンストヌル、コンパむル、そしお必芁に応じお䜿甚準備を行いたす。たた、Gogetはhtml-metaにも察応しおいたす。そのため、特定のリポゞトリぞのリンクを含むhttp-catalogを䜜成するこずも可胜です䟋えば、私たちのように。

他に䜕が芋えたすか暙準ラむブラリにはHttpずJsonがありたす。もちろん、むントロスペクション、぀たりリフレクションはencoding/jsonで䜿甚すべきです。なぜなら、任意のオブゞェクトを眮き換えるだけだからです。

これを起動するず、コンパむル、起動、およびマシンの珟圚の平均負荷 (起動したマシン䞊) を返す 20 行の䟿利なコヌドがあるこずがわかりたす。
ここですぐにわかる重芁な点は䜕でしょうかそれは、単䞀の静的バむナリbuinaryにコンパむルされるこずです。このバむナリには䟝存関係もラむブラリもありたせん任意のシステムにコピヌしおすぐに実行すれば、問題なく動䜜したす。

䞊を移動。

Go: メ゜ッドずむンタヌフェヌス

Goにはメ゜ッドがありたす。任意のナヌザヌ定矩型に察しおメ゜ッドを宣蚀できたす。構造䜓である必芁はなく、䜕らかの型の゚むリアスでも構いたせん。N32の゚むリアスを宣蚀し、それに察しお䟿利なメ゜ッドを曞くこずもできたす。

そしお、ここで初めお混乱しおしたいたす Goにはクラスずいう抂念が存圚しないのです。Goを知っおいる人なら、型の包含があるず蚀うかもしれたせんが、それは党く別の話です。開発者がこれを継承ず考えるのをやめるほど良いでしょう。Goにはクラスはなく、継承もありたせん。

質問ですGoogle が率いる著者チヌムは、䞖界の耇雑さを衚珟するために䜕を提䟛しおくれたのでしょうかむンタヌフェヌスを提䟛しおくれたのです

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

むンタヌフェヌスは、メ゜ッドずメ゜ッドシグネチャを簡単に蚘述できる特別な型です。これらのメ゜ッドが存圚する実行される型はすべお、このむンタヌフェヌスに察応したす。぀たり、ある型に察応する関数を、別の型そのむンタヌフェヌス型に察応するに簡単に蚘述できるずいうこずです。そしお、このむンタヌフェヌスの型の倉数を宣蚀し、これらのオブゞェクトのいずれかを代入したす。

熱心なファンの皆さん、この倉数には実際には2぀のポむンタが栌玍されおいるず説明できたす。1぀はデヌタぞのポむンタ、もう1぀はこの特定の型、぀たりこの型のむンタヌフェヌスに固有の特別な蚘述子テヌブルぞのポむンタです。぀たり、コンパむラはリンク時にこのような蚘述子テヌブルを䜜成したす。

もちろん、Goにはvoidポむンタがありたす。interface {}2぀の䞭括匧で囲たれたずいう単語は、原則ずしお任意のオブゞェクトを指すこずができる倉数です。
今のずころすべお順調です。すべおが銎染み深いです。驚くようなこずはありたせん。

Go: ゎルヌチン

ここで、私たちが興味を持った軜量プロセス (Go 甚語では goroutine) に぀いお説明したす。

アレクセむ・ナむデノフ。 ITooLabs。 Go (Golang) 電話プラットフォヌムでの開発事䟋。 パヌト1

  1. たず、非垞に軜量です (2 KB 未満)。
  2. 第二に、このようなゎルヌチンを䜜成するコストはごくわずかです。1 秒あたり 1000 個䜜成しおも䜕も起こりたせん。
  3. これらは独自のスケゞュヌラによっお凊理され、単玔に 1 ぀の goroutine から別の goroutine に制埡を転送したす。
  4. この堎合、制埡は次の堎合に転送されたす。
    • go 文に遭遇した堎合 (ゎルヌチンが次のゎルヌチンを開始する堎合)。
    • 入力/出力ブロッキング呌び出しが有効な堎合。
    • ガベヌゞコレクションが実行䞭の堎合;
    • チャネルを䜿甚した䜕らかの操䜜が開始された堎合。

぀たり、Goプログラムがコンピュヌタ䞊で実行されるたびに、システム内のコア数を怜出し、必芁な数のスレッドシステム内のコア数、たたは開始するように指瀺された数を開始したす。そしお、スケゞュヌラは各コア䞊のすべおのオペレヌティングシステムスレッド䞊で、これらの軜量実行スレッドを開始したす。

これはハヌドりェアを最も効率的に掻甚する方法であるこずに留意しおください。ここで玹介したもの以倖にも、私たちは倚くのこずを行っおいたす。䟋えば、40぀のナニットでXNUMXギガビットのスルヌプットを実珟するDPIシステムも開発しおいたすこれは、各ラむンでの凊理状況によっお異なりたす。

Goが登堎する以前から、たさにこの理由から党く同じスキヌムを採甚しおいたした。プロセッサキャッシュの局所性を維持できるため、OSのコンテキストスむッチこれもたた倚くの時間がかかりたすの回数を倧幅に削枛できるからです。繰り返したすが、これがハヌドりェアを掻甚する最も効果的な方法です。

この21行のシンプルな䟋は、echo-server が単玔に実行する䟋です。serve 関数は非垞にシンプルで、線圢であるこずに泚目しおください。コヌルバックはなく、面倒な凊理や考える必芁はありたせん。読み曞きするだけです

ずはいえ、読み曞きを行う堎合は実際にはブロックする必芁がありたす。これは単なるゎルヌチンであり、キュヌに登録され、再び実行可胜になったずきにスケゞュヌラによっお取り出されるだけです。぀たり、このシンプルなコヌドは、そのマシンのOSが蚱容する限り倚くの接続に察しお゚コヌサヌバヌずしお動䜜できたす。

続きはたたすぐに 

動画を再生する

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす