カフカ、ラモヌダ、そしお孊びたいずいう魅力的な欲求





オンラむンショップLamoda郚門の開発者であるNikitaGalushkoは、Slurmトレヌニングセンタヌを蚪問しおいるずきに、Kafkaコヌスの印象を共有し、このテクノロゞヌがどのように䜿甚され、RD郚門研究開発でどのような問題が解決されるかを説明したした。



「2幎以内に、Kafkaが䜿甚するネットワヌクチャネルにどれだけ早く到達するでしょうか」


Lamodaは、ロシアずCISで最倧のオンラむンストアの1぀です。賌入者が問題なくサむトを䜿甚し、迅速な出荷ず配送を楜しむために、開発者、QA゚ンゞニア、アナリスト、DevOpsスペシャリスト、補品マネヌゞャヌ、デザむナヌの340人の埓業員がLamodaのITシステムに埓事しおいたす。このシステムで歯車がどのように回転するかを調べおみたしょう。



䜕かあなた自身に぀いお教えおください。 Lamodaで䜕をし、どのくらい働いおいたすか



私の蚀いたいこず「私はボタンを抌すず、圌らは私にお金を払っおくれたす。」私はボタンを抌しお玄6幎になりたす。この間ずっず、私はGoで曞いおいたす。私は2020幎10月からそれほど前にラモダにいたせんでしたが、すでに倚くの奉仕プロゞェクトで觊手を解攟するこずができたした。



私はRnD研究開発郚門で働いおいたす。これは、1週間でKafkaでサヌビスを䜜成し、KafkaずPostgreSQLの間で分散トランザクションを行う方法を決定し、次はAerospikeのコヌドゞェネレヌタヌを䜜成する郚門です。これはずおも面癜い仕事です。



研究開発は分析ず匷く結び぀いおいるこずを正しく理解しおいたすか



はい、私たちはデヌタサむ゚ンティストず緊密に協力しおいたす。圌らは分析を行い、モデルをトレヌニングしお構築し、次にこれらのモデルをアプリケヌションたたはWebサむトの操䜜に組み蟌むように芁求したす。たずえば、ナヌザヌに掚奚事項のパヌ゜ナラむズされたリストを衚瀺したり、顧客に最も適した服や靎のサむズを提案したりするモデル。



あなたの仕事に぀いおどのような仕事が奜きですか研究開発郚門であなたにずっお興味深いこずは䜕ですか



これはおそらく自由です。 1぀のナレッゞドメむン、サヌビス、たたはサヌビスの小さなセットに限定されたせん。研究開発では、Goでサヌビスに倉曎を加え、翌日Javaで倉曎を加えるこずができたす。このアプロヌチでは1぀のサヌビスに集䞭するこずが難しいため、これは䞍利になる堎合がありたす。しかし、私にずっおこれは、さたざたな分野で自分の手を詊しお、開発者がさたざたな問題を解決するために䜿甚したアプロヌチを確認し、自分自身のために新しいこずを孊ぶ機䌚です。



最近、Aerospikeの結果を解析するためのコヌドゞェネレヌタヌの䜜成を開始したした。圌は生デヌタを提䟛するので、あなたは垞にそれらを手で解析しなければなりたせん。そしお、これらは朜圚的な間違いであり、貎重な時間の浪費です。あなたは䜕かを忘れたか、䜕かをチェックしなかったので、結果はあなたが期埅するものではありたせん。そのため、私たちはそれに぀いお考え、独自のコヌドゞェネレヌタヌを䜜成するこずにしたした。これたでのずころ、テストモヌドで動䜜したすが、すぐに開くこずを願っおいたす。



Lamodaはオヌプン゜ヌスプロゞェクトを頻繁に行っおいたすか



Lamodaには、Gonkeyず呌ばれる比范的有名なオヌプン゜ヌスプロゞェクト がありたす。あなたは私たちの蚘事でそれに぀いおもっず読むこずができたす 。



Gonkeyは、Yamlマヌクアップ蚀語で自動テストを簡単に蚘述できるようにする暙準化された゜リュヌションのセットです。このようなテストは開発者ずテスタヌの䞡方が䜜成できるため、これは䟿利です。これにより、テストカバレッゞの割合が増加したす。



珟圚、このツヌルは瀟内で私たちが望むほど急速に開発されおいたせんが、将来的にはもっず倚くの時間を貢献する予定です。githubで開くパッケヌゞを閉じ、質問に答え、改善したす。



ほずんどの堎合、これには、通垞の2倍の孊習を行うために、幅広い知識が必芁です。そうですか



私はあなたがただ広い芖野を持っおいる必芁があるず蚀うでしょう。



衚面的な



確かにそのようではありたせん。 T字型の開発者ずいうものがありたす。圌は、ある分野では非垞によく、さらには優れた理解を持っおいたすが、同時に、他の倚くの分野にも倚かれ少なかれ粟通しおいたす。今はJavaで曞いおいるず蚀ったが、それでもコヌドの99はGoで曞いおいる。したがっお、Goスタックをよく知っおいお、同時に芋回す方法を知っおいる堎合、これはRDで䜜業するずきだけでなく、䞀般的にも圹立ちたす。他のテクノロゞヌや蚀語からいく぀かのアむデアやアプロヌチを孊ぶこずができたす。



しばらくPythonで曞いた埌、Goに切り替えた人は知っおいたす。圌らは、この蚀語が゚ラヌ凊理にどのようにアプロヌチするかが奜きでした。珟圚、圌らはPythonで曞くプロゞェクトに同じアプロヌチを取り入れようずしおいたす。



おそらく、開発を垌望するすべおの開発者には他に遞択肢がありたせん。さたざたな分野でアップグレヌドする必芁がありたす。高床に専門化された1぀の領域だけを理解するために氞遠に座るこずはできたせん。あなたがどこでも働くなら、あなたは開発する必芁がありたす。



私が理解しおいるように、研究開発のタスクは倚様です。その過皋で䜕かを孊ぶ必芁がありたしたか



ラむシヌアムの10幎生でプログラミングに粟通したので、私ず䞀緒に孊び、開発したした。䜕か新しいこずを孊んだり、他の人に䜕か新しいこずを話したりするず、喜びを感じたす。 Lamodaの前は、VKontakteに取り組み、同じように開発し、蚘事を読んだり、コヌスを受講したり、䌚議のスピヌチを芋たりしたした。



私は本を​​読んで無私無欲に成長するために走るこずを匷く勧めたせん-誰もが自分で決めたす。私の過去の䜜品の䟋を挙げおも、私たちはすべおをGoで曞き、䞊行しおRustに目を向けたした。圓時はただあたり人気がなく、遠い昔の「GovsRust」ずいう話題の蚘事がずおも面癜かったです。同時に、仕事には必芁ありたせんでした。



ラモヌダで働くこずに぀いお話すず、カフカ以倖に、昚幎、䜕をアップグレヌドする必芁がありたしたか



Kubernetesを䜿甚しおヘルムチャヌトを䜜成したす。ちなみに、Kubernetesに぀いおは、これたで䞀緒に仕事をしたこずがなかったので、䞀緒にコヌスを受講したした。通垞、これらは仮想マシンたたは物理ハヌドりェアのいずれかであり、すべおが管理者を経由するか、たたはあなた自身がdebパッケヌゞをロヌルアりトするためのアクセス暩を持っおいたした。したがっお、Kubernetesをマスタヌする必芁がありたした。「ポッドaの状態を確認するためにkubectlを䜿甚する」レベルではなく、ヘルムチャヌトを正しく蚘述し、内郚でどのように機胜するかを理解するレベルです。



コヌスに぀いお話しおいる間に、カフカに぀いお話したしょう。なぜカフカコヌスを受講したのですか



りェブサむトに「カフカコヌスがもうすぐ来る」ずいうバナヌがありたした 。そしお、私は「行かなければならない」ず思いたした。



私が蚀ったように、私はただ新しいこずを孊ぶのが倧奜きです。最小レベルでKafkaでメッセヌゞを送信たたは読み取るために、額が7むンチである必芁はありたせん。しかし、䞀般的に、ラモダカフカは長い間しっかりず䜿甚されおきたした。したがっお、このテクノロゞヌを深く掘り䞋げるこずは私にずっお避けられたせんでした。



あなたにずっおカフカずは䜕ですか



私にずっお、これは分散型のフォヌルトトレラントログであり、シンプルなむンタラクションむンタヌフェむスを備えおおり、非垞に倧量のデヌタをそれ自䜓で送信できたす。



カフカはラモヌダでどのように䜿甚されおいたすか



ラモヌダでどういうわけかカフカを䜿わないサヌビスを芋぀けるのはずおも難しいようです。むベントバスを実装し たしたラモヌダ党䜓のためのそのようなむベントのバスです。誰かがいく぀かのむベントを䜜成し、このバスに接続しおいる他の参加者はそれらを読んで、䜕らかの圢でそれらに反応するこずができたす。



新しいプロゞェクトに぀いお蚀えば、最近、xlogバック゚ンドから分析デヌタを収集するサヌビスを開始したしたこれはその内郚名です。たた、システム党䜓の高スルヌプットが必芁なため、Kafkaを介しお。



Kafkaは、Kafka゚ンゞンを搭茉したClickHouseず連携するためにも必芁です。぀たり、Kafkaに曞き蟌むだけで、ClickHouseはそれ自䜓にデヌタを読み曞きしたす。 ClickHouseで倚くの゚ントリを頻繁に実行する必芁があるプロゞェクトの1぀に取り組んでいるため、これは非垞に䟿利です。そしお、私たちが知っおいるように、ClickHouseはこれを箱から出しおうたく行う方法を知りたせん-適切なプロキシが必芁です。珟圚、垂堎にはYandexずVKontakteの゜リュヌションがありたすが、LamodaはすでにKafkaに関する優れた専門知識を持っおいるため、ClickHouseずの通信にそれを䜿甚するこずにしたした。



たた、あらゆる皮類の分析に積極的に䜿甚しおいたす。



RDチヌムはKafkaをどのように䜿甚しおいたすか Kafkaがあなたのログであるず蚀う堎合、それを䜿甚しおサヌビスを開発しおいる、぀たりKafka Streamsを䜿甚しおいるこずを正しく理解しおいたすか



ある皮の抜象化を提䟛するKafkaを操䜜するために、ラむブラリに独自のラッパヌがありたす。しかし実際には、Goにはチャネルがありたす。開発者はチャネルから読み取り、そこに曞き蟌みたす。圌らはそれがカフカであるかどうかさえ考えないかもしれたせん。



あなたずあなたのチヌムはカフカでどのような問題に盎面したしたかどのようにそれらを解決しようずしたしたか



ここで、2幎以内にKafkaが䜿甚するネットワヌクチャネルにどれだけ早く到達するかずいう質問がありたす。そしおその背埌で、別の疑問が生じたす。この話を延期するために、どの圧瞮を有効にする必芁があり、カフカのどのトピックに぀いおですか



埓来、同じ分析デヌタ収集サヌビスが圧瞮の最初の候補です。ただし、圧瞮を採甚しお有効にするこずはできたせん。これは、プロデュヌサヌずコンシュヌマヌのCPU䜿甚率の間のある皮のトレヌドオフであるためです。



今、私はテストず分析を含むドキュメントを準備しようずしおいたす。ちなみに、Kafkaのベンチマヌク方法に぀いおは別のレッスンがあるので、あなたのコヌスはこれで私を倧いに助けおくれたした。このドキュメントでは、このサヌビスで圧瞮を有効にする必芁があるかどうかを反映したいず思いたす。もしそうなら、異なる圧瞮アルゎリズムがあるので、どれを含めるか。これが改善のための最も明癜なトピックであるように私には思えたす。



カフカに珟圚燃焌の問題はありたすか



ClickHouseをKafkaず連携するように蚭定したずき、䜿甚したグルヌプで説明する暩限が正しく蚭定されおいないずいう問題がありたした。



垯域幅にぶ぀かる蚈画よりも怖くないようです。



たた、最近孊んだこずに぀いおもお聞きしたす。 KIP500はKafka2.8からリリヌスされ、ZooKeeperを攟棄したした。そしお私が理解しおいるように、KafkaはZooKeeperの存圚ずその限界に頌っおいたした。圌らは、ZooKeeperが攟棄された堎合、パヌティションの数が200䞇に増えるず玄束しおいたす。これはどういうわけかあなたの問題を解決したすか



あなたが盎接答えた堎合、いいえ、それは解決したせん。なぜなら、私たちはカフカの仕事にぶ぀かっおいないので、それ以前に䜿甚しおいたネットワヌクチャネル䞊にいるからです。圌女は私たちが圌女に送信するデヌタの量に簡単に察凊したす-チャネルはこれから倉曎されたせん。



KIP500に぀いお話すず、圌らはZooKeeperを攟棄するための第䞀歩を螏み出したしたが、これたでのずころ、信頌できる゜リュヌションのようには芋えたせん。ZooKeeperを突然攟棄し、倚少ロヌドされた本番システムで2.8に切り替える䟡倀はないでしょう。



重芁なのは、opsは通垞Kafkaを扱い、新たな問題を解決する方法を理解する必芁があるずいうこずです。今、圌らは知っおいたす䜕かが起こった堎合、圌らはKafkaで、そしおZooKeeperで䜕か他のこずをする必芁がありたす。そしお、圌がそこにいないずきは、問題を解決するための蚈画は機胜せず、あなたはこの問題に関する専門知識を開発する必芁がありたす。



私は正しく理解したしたあなたはネットワヌクに遭遇し、Kafkaの氎平スケヌリングは圹に立ちたせん、぀たり、それはネットワヌクの問題だけですか



䞀般に、Kafkaは、ネットワヌクなどに遭遇するように䜜られおいたすが、そのパフォヌマンスはありたせん。コヌスでこれに぀いお䜕が蚀われたかを正確に芚えおおり、教垫はこれがなぜそうなのかを詳现に説明しおいたす。しかし、興味のある人がコヌスを芋に行くこずができるように、これに぀いおは話したせん。



倧きな課題では、すべおが明確です-垯域幅。そしお、この問題を解決するために、あなたは圌女を元気づけおチヌムに䜕かをもたらすためにコヌスに行きたした。これは偶然ですか、それずも故意に起こったのですか



偶然、私はもずもずカフカで曞く方法を孊ぶためだけでなく、コヌスを芋に行ったからです。実際、適切で正しいレプリケヌションを行うには、正しいackを蚭定する必芁がありたす。このコヌスでは、システムの内郚ずその仕組みに぀いお詳しく説明したす。



コヌスに぀いお話しおいる堎合、開発者ず管理者に分かれるこずはありたせん。すべおのトピックを確認したしたか、それずも管理者をスクロヌルしたしたか



すべおが私にずっお興味深いので、私はすべおのトピックを通過したした。私は新しいこずを孊ぶこずからキックを埗る。通垞、私はメモを取り、しばらくしおこれらのメモに戻り、読み盎しお、䜕かを捚おたす。䞍明な点がある堎合は、コヌスの䞀郚を修正し、抂芁の䞀郚を曞き盎したす。



むンタヌンシップは終わりたしたかそれら、特に管理者であるものを実装するのは難しかったですか



私は通り抜けたしたが、ただすべおではありたせん。いいえ、十分に蚈画されたすべおのものがあり、どのように、䜕を行う必芁があり、どのような結果が期埅できるかがわかりたした。面癜かったです。



たず、Javaアプリケヌションがいく぀かの実甚的な䜜業に䜿甚されたす。私はこの仕事をするだけでなく、Kafkaで動䜜するJavaのコヌドを孊ぶこずに時間を費やしたした。このような実甚的なタスクを実行するずきは、もう少し深く、広く芋る必芁がありたす。



぀たり、あなたはテクノロゞヌを芋おいるのです。



はい。私がパヌティションで䜜業をしおいたずき、それはレプリケヌションに関するものでした。そしお、少し違ったやり方をしたらどうなるかず思いたした。時間をかけお遊んで、1぀のノヌドをオフにするずどうなるかを確認したした。そしお2぀なら他に䜕かした堎合はどうなりたすか緎習甚のスタンドがあるのは良いこずです。自分から䜕かを持ち䞊げる必芁はありたせん。これに時間を無駄にする必芁はありたせん。



あなたにずっお最も興味深かったこずを教えおください。それに぀いお䜕を知りたしたか、なぜあなたは非垞に驚いたのですか



たずえば、実際にはKafkaはメモリ内のキュヌです。デヌタベヌスはディスクに曞き蟌むだけでなく、オペレヌティングシステムがデヌタをディスクにフラッシュするようにfsyncを呌び出すずいう事実に慣れおいたす。 writeを呌び出すだけでは、デヌタが曞き蟌たれるずは限りたせん。



Kafkaはこれを行いたせん。write、システムコヌルを呌び出すだけで、それだけです。圌は単に「あなたはオペレヌティングシステムであり、い぀リセットするかを決める」ず蚀っおいたす。実際、Kafkaの信頌性はレプリケヌションによっお保蚌されおいたす。知らなかった。 Kafkaがfsyncを呌び出し、すべおのデヌタを正盎にディスクに保持するず思いたした。それは圌女がいかに狡猟であるかです。



いく぀かのデヌタセンタヌの問題に぀いお聞くこずも興味深いものでした。



垯域幅タスク。将来の課題に察応するために、コヌスから䜕を取り陀いたのですか



Kafkaのパフォヌマンスを枬定する方法ず、圧瞮デヌタでどのように機胜するか。 Kafkaはそれらを解凍したせんが、ディスクに曞き蟌み、そのたた消費者に提䟛したす。これにより、Kafkaで曞き蟌むプロデュヌサヌだけでなく、Kafkaから読み取るコンシュヌマヌのCPUコストを調べる必芁があるこずが明らかになりたした。さお、そしおそれを正しくベンチマヌクする方法。



それずも、コヌスで䜕か難しいこずがありたしたかそれずも、緎習は特に難しかったですか



それはたさにそのようなものでした私はいく぀かのビデオを数回芋たした。消費者グルヌプのリバランスに぀いお正確に改蚂。最初の衚瀺から、これがどのように発生するかは完党には明確ではありたせんでした。私は単玔なリバランスに぀いお話しおいるのではなく、むンクリメンタルなリバランスに぀いお話しおいるのです。これを修正しお読み盎す必芁がありたした。



トピック自䜓は耇雑です。あなたはビデオを芋お、それはリモヌトで明確に芋えたすが、すべおのプロセスを明確に理解したいので、修正する必芁がありたす。鉛筆で座っお描くだけで、すべおが明らかになったように芋えたす。



そしお結論ずしお、私は尋ねたすあなたはあなたの蚓緎ず仕事の蚈画に䜕を持っおいたすか



ブログを始めたした。私はドメむンを賌入し、それをDigitalOceanに無料で提䟛したした。圌らは静的コンテンツを無料で配垃しおいたす。ブログは私に䜕かを孊び、それを曞き留めお他の人ず共有するむンセンティブを䞎えおくれたす。誰かにそれを䌝えるこずができれば、そのトピックを理解しお、圌も理解できるようになりたす。



そしお、ブログはただ語り盎すスキルを䞎えたす。今、私はGINむンデックスの効率を扱っおいたす。昚幎のGolangConfの講挔に基づいた、このトピックに関する蚘事がたもなく公開されたす。



あなたは垞に自分自身を探す必芁がありたすあなたが匷さを持っおいるなら、Goがどのように機胜するかに぀いおの蚘事を読んでみたせんか。



All Articles