SpotifyむベントサブシステムをGoogle Cloudに移行するパヌト1

ナヌザヌがSpotifyクラむアントでアクションを実行するずたずえば、曲を聞いたり、アヌティストを怜玢したりするたびに、少量の情報むベントがサヌバヌに送信されたす。 むベント配信は、䞖界䞭のお客様から圓瀟の䞭倮凊理システムに情報を安党か぀確実に茞送するプロセスであり、興味深いタスクです。 これらの䞀連の蚘事では、この分野で実装されおいる゜リュヌションのいく぀かを怜蚎したす。 より正確には、新しいむベント配信システムのアヌキテクチャを芋お、Google Cloudにデプロむするこずにした理由を説明したす。



この最初の蚘事では、珟圚のむベント配信システムがどのように機胜するかを説明し、それを䜿甚しお孊んだいく぀かの教蚓に぀いお説明したす。 次に 、新しいシステムの䜜成ず、すべおのむベントのトランスポヌトメカニズムずしおCloud Pub / Subを遞択した理由を怜蚎したす。 3番目の最埌の蚘事では、DataFlowを䜿甚しおすべおのむベントを凊理する方法ず、それがどれほど迅速に発生するかに぀いお説明したす。



画像



配信システムを通じお配信されるむベントには倚くの甚途がありたす。 補品蚭蚈における圓瀟の゜リュヌションのほずんどは、A / Bテストの結果に基づいおおり、その結果、倧芏暡で正確なデヌタに䟝存する必芁がありたす。 2015幎にリリヌスされたDiscover Weeklyプレむリストは、すぐにSpotifyの最もよく䜿甚される機胜の1぀になりたした。 音楜再生デヌタに基づいお䜜成されたす。 音楜の幎 、 Spotify Party 、その他の倚くのSpotify機胜もデヌタベヌスに基づいおいたす。 さらに、Spotifyデヌタは、 ビルボヌドトップをコンパむルするための゜ヌスの1぀です。



メッセヌゞングシステムは、Spotifyデヌタむンフラストラクチャの基本的な郚分の1぀です。 そのための重芁な芁件は、十分に説明されたむンタヌフェむスを介しお、開発者が予枬可胜な遅延ず可甚性ですべおのデヌタを配信するこずです。 䜿甚状況デヌタは、ある時点で事前に蚭定されたアクションぞの応答ずしお圢成された構造化むベントのセットずしお説明できたす。



Spotifyが䜿甚するむベントのほずんどは、特定のナヌザヌアクションに察する応答ずしおSpotifyクラむアントによっお盎接生成されたす。 Spotifyクラむアントでむベントが発生するたびに、Spotifyゲヌトりェむの1぀にむベントに関する情報が送信され、Spotifyゲヌトりェむはそのむベントをシステムログに曞き蟌みたす。 そこで、メッセヌゞ配信システムで䜿甚されるタむムスタンプが割り圓おられたす。 メッセヌゞ配信の特定の遅延ず完党性を保蚌するために、サヌバヌに到着する前にむベントを制埡できないため、クラむアントではなくむベントにログラベルsyslogタむムスタンプを䜿甚するこずが決定されたした。



Spotifyの堎合、すべおのデヌタを䞭倮のHadoopクラスタヌに配信する必芁がありたす。 デヌタを収集するSpotifyサヌバヌは、2぀の倧陞のいく぀かのデヌタセンタヌにありたす。 デヌタセンタヌ間の垯域幅は垌少なリ゜ヌスであり、デヌタ䌝送を特別な泚意で扱う必芁がありたす。



デヌタむンタヌフェむスは、Hadoop内のデヌタの堎所ず保存される圢匏によっお決たりたす。 サヌビスによっお配信されるすべおのデヌタは、HDFSでAvro圢匏で蚘録されたす。 配信されたデヌタは、60分間時間セクションパヌティションに分割されたす。 これは、最初のメッセヌゞ配信システムがscpコマンドに基づいおおり、Hadoop䞊のすべおのサヌバヌからsyslogファむルを1時間ごずにコピヌしおいた過去の遺物です。 珟圚、Spotifyのすべおのデヌタ凊理プロセスは1時間ごずのデヌタに基づいおいるため、このむンタヌフェヌスは近い将来に残るでしょう。



Spotifyのほずんどのデヌタプロセスは、監芖アセンブリから1回だけデヌタを読み取りたす。 䞀郚のプロセスの出力倀は、他のプロセスぞの入力ずしお機胜するため、倉換の長いチェヌンを圢成したす。 プロセスが1時間デヌタを凊理した埌、この元の時間に倉曎のチェックを実行しなくなりたす。 デヌタが倉曎された堎合、これらの倉曎をさらに再珟する唯䞀の方法は、この特定の間隔時間ですべおの関連タスクおよび関連タスクを手動で再起動するこずです。 これは高䟡で時間のかかるプロセスです。そのため、メッセヌゞ配信サヌビスにこのような芁件を提瀺し、時間セットを提䟛した埌、そのデヌタを補足できなくなりたした。 デヌタの完党性の問題ずしお知られるこの問題は、デヌタ凊理の遅延を最小限に抑えるずいう芁件に反しおいたす。 デヌタの完党性の問題に関する興味深い芖点は、GoogleのDataflowレポヌトに瀺されおいたす。



オリゞナルのメッセヌゞ配信システム



システム構成



最初のメッセヌゞングシステムは、Kafka 0.7の䞊に構築されたした。



画像



その䞭で、むベント配信システムは、1時間ごずのファむルの抜象化を䞭心に構築されおいたす。 サヌビスマシンからのむベントを含むログファむルをHDFSにストリヌミングするように蚭蚈されおいたす。 特定の時間内にすべおのログファむルがHDFSに転送された埌、タブ付きのテキストからAvro圢匏に倉換されたす。



システムが最初に䜜成されたずき、Kafka 0.7に欠けおいた機胜の1぀は、Kafka Brokerクラスタヌが信頌性の高い氞続ストレヌゞを操䜜できるこずでした。 これは、デヌタプロデュヌサヌ、Kafka Syslogプロデュヌサヌ、およびHadoopの間で䞀定の状態を維持しないずいう重芁な蚭蚈決定に圱響を䞎えたした。 むベントは、HDFS䞊のファむルに曞き蟌たれたずきにのみ安党に保存されるず芋なされたす。



Hadoop内でのみむベントが確実に存圚する問題は、Hadoopクラスタヌがメッセヌゞ配信システムの単䞀障害点になるこずです。 Hadoopが倱敗するず、配信システム党䜓が停止したす。 これに察凊するには、むベントを収集するすべおのサヌビスに十分なディスク容量があるこずを確認する必芁がありたす。 Hadoopがサヌビスに埩垰したら、その状態に「远い぀く」必芁があり、すべおのデヌタをできるだけ早く転送したす。 埩旧時間は、䞻にデヌタセンタヌ間で䜿甚できる垯域幅によっお制限されたす。



プロデュヌサヌは、Hadoopにむベントを送信するすべおのホストで実行されるデヌモンです。 ログファむルを远跡し、ログパッケヌゞをKafka Syslog Consumerに送信したす。 プロデュヌサヌは、むベントのタむプやむベントのプロパティに぀いお䜕も知りたせん。 圌の芳点から芋るず、むベントはファむル内の䞀連の行であり、すべおの行は同じチャネルにリダむレクトされたす。 ぀たり、1぀のログファむルに含たれるすべおのタむプのむベントも1぀のチャネルを介しお送信されたす。 このようなシステムでは、Kafkaトピックはむベントを送信するためのチャネルずしお䜿甚されたす。 プロデュヌサヌがログをコンシュヌマヌに送信した埌、コンシュヌマヌがログ行をHDFSに正垞に保存したこずの確認ACKを埅぀必芁がありたす。 プロデュヌサヌは、送信されたログのACKを受信した埌にのみ、それらが安党に保存されおいるず考え、他のレコヌドを転送したす。



むベントの堎合、プロデュヌサヌからコンシュヌマヌに到達するには、Kafka Brokersを通過しおから、Kafka Groupersを通過する必芁がありたす。 Kafka BrokersはKafkaの暙準コンポヌネントであり、Kafka Groupersは私たちが曞いたコンポヌネントです。 グルヌパヌは、ロヌカルデヌタセンタヌからのすべおのむベントストリヌムを凊理し、それらを再び圧瞮しお公開し、1぀のトピックに効果的にグルヌプ化し、コンシュヌマヌがプルしたす。



抜出、倉換、ロヌドETLタスクは、タブで区切られた単玔な圢匏のデヌタをAvro圢匏に倉換するために䜿甚されたす。 このプロセスは通垞のHadoop MapReduceゞョブであり、 Crunchフレヌムワヌクを䜿甚しお実装され、1時間ごずのセットで動䜜したす。 特定の時間に䜜業を開始する前に、圌はすべおのファむルが完党に転送されるこずを確認する必芁がありたす。



すべおのプロデュヌサヌは、ファむルの終わりトヌクンを含む可胜性のあるチェックマヌクを垞に送信しおいたす。 Producerは、ファむル党䜓が安党にHadoopに保存されおいるずProducerが刀断したずきに1回だけ送信されたす。 状態たたは「サバむバビリティ」モニタヌは、特定の時間にサヌビスマシンが実行されおいたすべおのデヌタセンタヌのサヌビス怜出システムを垞にポヌリングしたす。 この1時間ですべおのファむルが最終的に転送されたかどうかを確認するために、ETLは、デヌタの終わりが予想されるサヌバヌに関する情報をファむルの終わりマヌカヌず比范したす。 ETLが䞍䞀臎ず䞍完党なデヌタ転送を刀断した堎合、ETLはデヌタの凊理を特定の時間遅延させたす。



䞀般的なHadoop MapReduceタスクである既存のマッパヌおよびレデュヌサヌであるETLを最倧限に掻甚できるようにするには、入力デヌタをシャヌディングする方法を知る必芁がありたす。 マッパヌずレデュヌサヌは、入力デヌタのサむズに基づいお蚈算されたす。 最適なシャヌディングは、コンシュヌマヌから継続的に受信されるむベントの数に基づいお蚈算されたす。



レッスン



この蚭蚈に関連する䞻な問題の1぀は、ロヌカルのプロデュヌサヌがデヌタが確実に配信されるず芋なされる前に、䞭倮の堎所のHDFSに保存されるこずを確認する必芁があるこずです。 これは、米囜西海岞のProducerサヌバヌが、ロンドンのディスクにデヌタが曞き蟌たれおいるこずを知る必芁があるこずを意味したす。 ほずんどの堎合、正垞に機胜したすが、デヌタ転送が遅くなるず、配信の遅延が発生し、それを取り陀くのが困難になりたす。



サヌビスポむントがロヌカルデヌタセンタヌにある堎合のオプションず比范しおください。 通垞、デヌタセンタヌ内のホスト間のネットワヌクは非垞に信頌性が高いため、これによりプロデュヌサヌの蚭蚈が簡玠化されたす。



問題を芁玄するず、䞖界䞭の1秒あたり700,000を超えるむベントを確実に配信できるシステムに非垞に満足しおいたす。 システムの再蚭蚈により、゜フトりェア開発プロセスを改善する機䌚も䞎えられたした。



1぀のチャネルを介しおすべおのむベントを䞀緒に送信するこずにより、異なるQuality of ServiceQoSでむベントフロヌを管理する柔軟性が倱われたした。 たた、リアルタむムで動䜜するプロセスは、ストリヌム党䜓が入っおいる単䞀のチャネルを介しおデヌタを転送し、そこから必芁なもののみを陀倖する必芁があるため、リアルタむムでの䜜業も制限されおいたした。



非構造化デヌタの転送では、远加のETL倉換が必芁になるため、䞍芁な遅延が远加されたす。 珟圚、ETL䜜業により、むベント配信に玄30分の遅延が远加されたす。 デヌタがAvro圢匏で送信された堎合、HDFSでの蚘録時にすぐに利甚できたした。



送信者が時間の終わりを远跡する必芁も問題を匕き起こしたした。 たずえば、マシンが停止した堎合、ファむルの終わりに関するメッセヌゞを送信できたせん。 ファむルの終わりマヌカヌが倱われた堎合、このプロセスが手動で䞭断されるたで氞遠に埅機したす。 車の数が増えるず、この問題はたすたす緊急になりたす。



次のステップ



Spotifyで配信されるメッセヌゞの数は垞に増加しおいたす。 負荷が増加した結果、より倚くの問題が発生し始めたした。 時間が経぀に぀れお、停止の数は私たちを心配し始めたした。 私たちもシステムも、増加した負荷に察凊できないこずに気付きたした。 次の蚘事で 、システムの倉曎を決定した方法に぀いお説明したす。



特定の時点でシステムによっお凊理されたメッセヌゞの数。



All Articles