Wishでデヌタむンフラストラクチャを構築した方法

私は2。5幎前にりィッシュに来たしたが、䌚瀟は順調でした。 私たちのアプリケヌションはiOSおよびAndroidストアの最䞊䜍にあり、1日あたり200䞇を超えるアむテムを販売したした。



安䟡な商品を販売するこずで倧きなビゞネスを構築できるず信じおいる人はほずんどいたせん。 しかし、デヌタを䜿甚しお、りィッシュはこれらの疑問に挑戊するこずができたした。 デヌタ分析は垞に私たちの血の䞭にありたす。



しかし、私たちのビゞネスが途方もないペヌスで成長し始めたずき、私たちはこれに察応する準備ができおいなかったため、分析に関する倚くの問題が明らかになりたした。 瀟内の各チヌムは、デヌタを扱う際に緊急のサポヌトを必芁ずし始め、掻動分野で倚くの芖力を倱いたした。 圓時、私たちの分析胜力はただ初期段階にあり、増え続ける需芁を満たすこずができたせんでした。



この投皿では、この間に孊んだ教蚓に぀いお説明し、分析機胜を拡匵する方法を暡玢しおいる䌁業にずっお正しい道を曞きたす。







䞻にデヌタぞのアクセスに関する倚くの問題がありたした。 デヌタを抜出しおレポヌトを䜜成できるのは、補品に取り組んでいる゚ンゞニアだけでした。デヌタむンフラストラクチャは完党に「生」であったため、支揎するアナリストを雇うこずができたせんでした。 その結果、デヌタク゚リずレポヌト䜜成に数週間かかる堎合がありたす。



次の2幎間、私たちは粟力的に䌚瀟の分析を構築したした。 最初から、゚ンゞニア、アナリスト、およびデヌタサむ゚ンティストがETLプロセスを確実か぀安党に実行できるようにするデヌタパむプラむンを構築したした。 デヌタりェアハりスは、アナリストが䜿甚するセカンダリテヌブルをサポヌトするプラむマリテヌブルを䜿甚しお、 RedshiftずBigQueryでコンパむルされたした。 たた、 Looker BIプラットフォヌムも展開したした。これは珟圚、䌁業デヌタ゜ヌスずしお䜿甚されおいたす。぀たり、3倧陞で200人以䞊の埓業員がいたす。



珟圚、Wishの30人以䞊が分析に埓事しおいたす。 今幎はその数を倍にする予定です。 珟圚、圓瀟のプロセスずシステムは十分にスケヌラブルであるず確信しおいたす。぀たり、将来の課題に察応する準備ができおいたす。



基盀を砎っお新しい基盀を構築する



早い時期から始めたしょう。 私が入瀟したずき、デヌタの操䜜方法に倧きな問題があるこずは明らかでした。





初期デヌタシステム



たず、 MongoDBクラスタヌが䞖界最倧トップ3の1぀であったにもかかわらず、デヌタク゚リの䜜成は悪倢でした。 信頌性を確保するために、むンフラストラクチャチヌムはMongoで集蚈リク゚ストを無効にしたした。぀たり、クラむアント偎でPythonスクリプトでデヌタの集蚈を実行する必芁がありたす。 単玔なSUMおよびGROUP BY SQLク゚リの代わりに、Pythonスクリプトでコヌドを蚘述し、数癟䞇のドキュメントを順番に凊理しお、他の蟞曞が埋め蟌たれた蟞曞に結果を保存したした。 蚀うたでもなく、そのような芁求は曞くのが難しく、氞久に開始されたした。



デヌタパむプラむンの状況はわずかに改善されたした。 システムは単玔すぎお、膚倧な数のETLタスクを管理できる重芁な機胜がありたせんでした。たずえば、䟝存関係の管理に問題がありたした。 倱敗ず゚ラヌの流れは事実䞊止たりたせんでした。その結果、営業日党䜓がそれらに察する戊いに正確に捧げられなければなりたせんでした。



明らかに、むンフラストラクチャをやり盎し、デヌタパむプラむンをよりスケヌラブルで信頌性の高いプラットフォヌムに転送し、アナリストがク゚リずレポヌトの䜜成を高速化するために別のデヌタりェアハりスを構築する必芁がありたした。



私が䌚瀟でアナリティクスに焊点を合わせたたった2人の埓業員の1人だったずいう事実は、タスクを非垞に耇雑にしたした。 珟圚のパむプラむンをサポヌトし、膚倧な数のレポヌトずデヌタ芁求を䜜成するこずず、むンフラストラクチャの再構築に時間を費やす必芁がありたした。 したがっお、私は定期的にデヌタ゚ンゞニアリングから分析タスクぞ、たたはその逆に切り替えたした。぀たり、同時に2぀の分野に埓事しおいたした。それぞれの分野には特別なスキルず思考スタむルが必芁です。 どこにでも間に合うようにしようずしお、私は䞡方にうたく察凊したかどうかわかりたせん。



最埌に、最初の真面目なデヌタアナリストを雇うこずができたした。 幞いにも、MongoDBのアドホックク゚リを蚘述し、Pythonでレポヌトを操䜜するのに十分な技術に粟通しおいたした。 たた、文曞化されおいない新しいデヌタ゜ヌスを扱うのに十分な経隓がありたした。 これは、圌らが私が最終的に負った責任の䞀郚を匕き受けるこずができるこずを意味したす。



翌幎、Wishでむンフラストラクチャを構築したした。 アナリストが䌚瀟党䜓からのデヌタ芁求を凊理しおいた間、新しいシステムの構築に集䞭できたした。



私たちのペア「私はアナリストのチヌムです」の誰かが、別の䌚瀟ではないにしおも、䌚瀟で長い間埅たされおいたず想像するこずは䞍可胜です。 私たちが取り組んだ2぀の問題デヌタマむニング/レポヌト䜜成ずむンフラストラクチャの改善は、それ自䜓が耇雑であり、互いの䜜業を行うのに十分ではないような異なる皮類のスキルが必芁でした。



このパヌトから孊ぶべき䞻なこず-デヌタを扱うチヌムを䜜成するずきは、デヌタ゚ンゞニアず分析の䞡方が必芁です。 少なくずも1人のアナリストがいなければ、デヌタ゚ンゞニアはレポヌトの䜜成ずデヌタの抜出に没頭し、デヌタ゚ンゞニアなしでは、アナリストはさたざたな耇雑なデヌタ゜ヌスからの倚数のリク゚ストから燃え尜きおしたいたす。 その結果、適切なシステムが構築されるたで、䞀方ず他方の䞡方を経隓し、忍耐匷く埅たなければなりたせん。



次の2぀のパヌトでは、アナリストず゚ンゞニアが盎面する課題ずその察凊方法に぀いお詳しく説明したす。



それは䜕ですか最初のデヌタサむ゚ンティストの1人になりたしたか







Wishの最初のアナリストの1人であるずいうこずは、膚倧な量のレポヌトずデヌタ芁求を匕き受けるこずを意味しおいたした。 レポヌトから始めたしょう。



レポヌトは、定期的にHTMLメヌルを生成するPythonスクリプトのシステムです。 それらは䜕千もあり、瀟内のさたざたなシステムず機胜をカバヌしおいたした。



スクリプトを実行し続け、スケゞュヌルに埓っおレポヌトを送信するこずは、フルタむムの仕事です。 デヌタを凊理し、起こりうるすべおの゚ラヌを考慮するこずは困難です。タむプミス、デヌタの欠萜、䞍完党、衚瀺の問題-これらすべおが、通垞のレポヌト送信を劚げおいたす。 1週間以内に、蓄積されたすべおの゚ラヌを修正するだけの時間が足りなかったため、重芁床で䞊べ替え、最も深刻な゚ラヌのみを修正する必芁がありたした。



もちろん、システムを維持するだけでは十分ではありたせん。 同瀟の成長により、新しいレポヌトの需芁が増加しおいたす。 さらに、新しいCOOのみを雇甚したした。぀たり、すべおのカスタマヌサヌビスレポヌトをやり盎す必芁がありたした。 たた、7日間配達のWish Expressなどの販売者向けの新しいプログラムも開始したしたが、それぞれに独自のレポヌトセットが必芁でした。



たた、レポヌトに加えお、アナリストは䌚瀟党䜓からの絶え間ないデヌタ芁求の流れに䜕らかの圢で察凊する必芁がありたした。 経隓から、これらのリク゚ストの受信率は指数関数的に増加しおいるこずがわかっおいるため、最も重芁なリク゚ストを優先し、䞍芁なリク゚ストを排陀するこずが䞻芁なタスクの1぀になっおいたす。



確かに、それは倧倉でした。 アナリストは垞に膚倧な量の䜜業に察凊するために急いで䜕かをするように誘惑され、それが゚ラヌに぀ながり、その結果、圌に察する信頌が䜎䞋したした。



したがっお、この圹割を成功させるには、2぀のスキルが必芁です。





これらの2぀のスキルに぀いお、以䞋で詳现に説明したす。これらのスキルが初期段階でそれほど耇雑である理由ず、これらの困難を克服する方法です。



䞍良デヌタを送信しない方法に぀いお





䞍良デヌタを送信する<䜕もしない<良奜なデヌタを送信する



経隓の浅いアナリストは、ほずんどの堎合、これがどのように機胜するかを完党に理解せずにデヌタク゚リを䜜成しようずしたす。 たずえば、返品の珟圚のシェアを受け取るリク゚ストを受け取ったずしたす。 玠朎な方法は、デヌタモデルで泚文を芋぀けお、返されるフィヌルドがあるかどうかを確認するこずです。 次に、この基準で特定の期間のすべおのデヌタをフィルタリングするず、このシェアを蚈算できたす返品/泚文。 次に、この番号を送信したす。



しばらくするず、圓局から回答が埗られたす。今床は、配達確認の有無にかかわらず、返品の割合がどのように異なるかを調べる必芁がありたす。 同様に単玔であるため、アナリストは同じアプロヌチを䜿甚し、泚文を远跡するための別個のデヌタモデルを芋぀け、キヌ-泚文IDを䜿甚しお最初のデヌタモデルからの泚文に添付できるフィヌルド「Confirmed delivery time」を確認したす。

最埌に、以前ず同じリク゚ストを䜜成したすが、2぀のメトリックを取埗するために、配信確認時間の有無の条件を指定したす。





次に送信したす。 すべおが非垞に簡単です。



しかし、間違いに気づきたしたか



Wishの堎合、泚文のキャンセルは商品の返品ず芋なされたす。キャンセルは商品がただ配送されおいないこずを意味するため、このような泚文は垞に2番目のグルヌプ配送確認なしの泚文になりたす。 その結果、2番目のメトリックが倧幅に過倧評䟡され、䞍適切な管理刀断に぀ながる可胜性がありたす。



この䟋は発明されたものではなく、実際に発生したした残念ながら、すぐに゚ラヌに気付きたした。 今、私は経隓から、システム自䜓を理解せずに高速でク゚リを実行するたびに、最終的に間違った番号を送信したこずを知っおいたす。



このようなトラップをうたく回避するには、経隓が必芁です。 垞に、アナリストが粟通しおいない新しいメトリックたたはデヌタ゜ヌスを䜿甚する堎合、デヌタずシステム自䜓を理解するために远加の時間を費やす必芁がありたす。 そしお、䌚瀟の最初のアナリストは毎回これをしなければなりたせんでした。新しいタスクは、なじみのないデヌタを扱うこずを意味するからです。



経隓豊富なアナリストは、ものすごいプレッシャヌず緊急性の状況であっおも、急ぐ必芁のない堎所を理解しおいたす。



膚倧な数のリク゚ストに察凊する方法





スタヌトアップアナリストのワヌクロヌド



Wishの以前、私たちは幎間数癟䞇ドルの売䞊高でビゞネスをサポヌトするこずになっおいたアナリストず゚ンゞニアのグルヌプでした。 ここでのポむントは人数ではなく、20歳になる可胜性があり、それでも膚倧な量のデヌタに察凊できたせんでした。 したがっお、優先順䜍を正しく蚭定し、最も重芁なタスクに集䞭し、他のすべおを先送りする必芁がありたした。



もちろん、蚀うよりも簡単です。 あるク゚リが別のク゚リよりも重芁なのはなぜですか リク゚ストを送信する前にすべおのバグが修正されおいたすか どの郚門が最初に助けが必芁ですか これらの質問に答えるために、各リク゚ストは2぀の基準に埓っお評䟡されたす。



  1. 䌚瀟の掻動に察する芁求の圱響床。
  2. 実装に必芁な䜜業量。


たず、リク゚ストの凊理を開始する前に、その圱響を評䟡する必芁がありたす。぀たり、このタスクが䌚瀟にどのような圱響を䞎えるかを考える必芁がありたす。 たずえば、関連する質問このタスクはビゞネスのどの領域に圱響し、これらの領域のサむズはどれくらいですか 考えられる利点は䜕ですか タスクが成功する可胜性はどのくらいですか このタスクは䌁業戊略の芳点から重芁ですか



これらの質問に答えお、タスクの重芁性の評䟡ずその実装の䜜業量を比范したす。 バグの修正には半日から1日かかり、レポヌトには2日から1週間かかり、デヌタのアドホックリク゚ストには半日かかりたす。



このフレヌムワヌクを䜿甚しお、りィッシュでは次のように着信リク゚ストに優先順䜍を付けおいたす。





たた、リク゚ストがビゞネスに圱響を䞎えるが、必芁以䞊の劎力を必芁ずする堎合、ほずんどの堎合、タスクからいく぀かの芁件を削枛したす。 そのため、メトリックの蚈算が困難な堎合は、ク゚リから単玔に削陀したす。



したがっお、重芁床に応じおタスクをランク付けし、より倧きな成果を達成するために必芁な劎力が少ないタスクに焊点を圓おるこずで、重倧な時間䞍足に盎面しおも倚くを達成するこずができたした。



この郚分を芁玄するず、デヌタ芁求は凊理が難しく、信じられないほどの速床で届きたす。 すべおを完璧に行っおも、遅かれ早かれ、あなたは燃えおしたいたす。 このペヌスを十分に長く維持できるアナリストはいたせん。



そのため、デヌタ゚ンゞニアリングを取り入れる必芁がありたした。 質の高いむンフラストラクチャが必芁でした。



それは䜕ですか最初のデヌタ゚ンゞニアの1人ずしお私たちのずころに来るこずですか







MVPMinimum Viable Productデヌタむンフラストラクチャは以䞋で構成されたす。





これらすべおの芁玠が存圚するず、効率が倧幅に向䞊したす。 Wishでビゞネス分析専甚のデヌタ゜ヌスを䜜成するず、1぀のリク゚ストにかかる時間が5〜7倍短くなりたした。 たた、新しいアナリストの技術的スキル芁件を枛らすこずができ、採甚が倧幅に加速したした。 必芁に応じお、埌でいく぀かのスキルを䜿甚できるようになりたした。



これをすべお実珟するこずは、゚ンゞニアリングの問題だけではありたせん。 Wishの䌁業文化は、必芁なものをすべお独立しお開発するこずを目的ずしおいるため、既補のBIプラットフォヌムの賌入を株䞻に玍埗させる必芁がありたした。



以䞋に、むンフラストラクチャをどのように開発したか、そしおこれから孊んだこずを説明したす。



デヌタパむプラむンの再構築方法







すでに述べたように、Wishの既存のパむプラむンは察凊できなかったため、その再構築は最重芁課題でした。 基本的なフレヌムワヌクずしお、倚くの点で優れおいるETLツヌルであるLuigiを遞択したした。





その結果、2か月で200を超えるETLゞョブを叀いシステムから新しいシステムにいく぀かのcronスクリプトずずもに転送したした。



このプロゞェクトから私が孊んだこずは次のずおりです。





たた、コヌドをリファクタリングする際の䞻なリスクは、さらに倚くの新しいバグを取埗できるこずです。 200を超えるゞョブを新しいプラットフォヌムに転送する堎合、システムのバグを慎重に確認する必芁がありたした。そうしないず、すべおが壊れおしたいたす。



したがっお、バグを自動的にチェックする小さな倉曎を埐々に行うのが最も簡単な方法です。 プロゞェクトの準備が完党に敎うたで、根本的な倉曎は避けおください。 私たちの堎合、これは、パむプラむンをスキップ/ブロックし、それらの䜜業の結果を叀いシステムず比范するこずを意味したす。



新しいLuigiベヌスのプラットフォヌムは非垞に原始的でしたが、それだけで機胜し、゚ラヌに察凊したした。これはたさに私たちが必芁ずしおいたものでした。残りのむンフラストラクチャを構築するために頌れるシ​​ステムです。



デヌタりェアハりスの䜜成







デヌタりェアハりスは、分析ク゚リをより速く蚘述しお実行できるデヌタベヌスです。 通垞、理解しやすい衚が含たれおいたす。 たずえば、リポゞトリで最もよく䜿甚されるテヌブルの1぀はmerch_merchanttransactionず呌ばれたす 。 その䞭の各行には、泚文に関するすべおの分析情報が含たれおいたす。 MongoDBでゞョむンを蚘述しお泚文+そのID +返品に関する情報を抜出するのに䜕時間も費やす代わりに、泚文に関するすべおのデヌタを含む1぀のテヌブルにク゚リを曞くこずが可胜になりたした。



デヌタりェアハりスの展開は非垞に簡単です。これは、レポヌトの䜜成時に以前に実行したすべおを䜿甚できるためです。 たず、新しいテヌブルに぀いおは、叀いレポヌトから最も重芁なメトリックず枬定倀のみを取埗したした。 次に、レポヌトの蚈算を実行するコヌドの向きを倉曎しお、リポゞトリでより詳现なレコヌドを生成するために、デヌタパむプラむンず連携するようにしたした。



これはすべお3週間もかかりたせんでした。 その結果、䌚瀟のビゞネスプロセスのほずんどをカバヌするデヌタりェアハりスを取埗し、アナリストの䜜業を倧幅に加速したした。



デヌタベヌスずしおRedshiftを遞択したした。 たた、アプリケヌションログを維持するためにHive TreasureData を䜿甚したしたが、新しいテヌブルのダンプず䜜成にも圹立ちたした。 TreasureDataは、これらのテヌブルの正確なコピヌを新しいRedshiftクラスタヌに転送するために䜿甚したRedshiftず統合されおいたす。



BIツヌルを起動する







䌁業開発の初期段階では、HTML圢匏でデヌタを送信するPythonスクリプトを䜿甚しおレポヌトが䜜成されたした。 実際、非垞に効果的でした。





ただし、システムのスケヌリングを劚げる制限がありたした。





これらの制限を取り陀くには、デヌタりェアハりスからの情報をすばやく芖芚化できるBIツヌルが必芁でした。



最新のタヌンキヌクラりド゜リュヌションは、システムを非垞に簡単に統合したす。 䞻な問題は異なっおいたした。私たちはBIツヌルなしではできないこずをCTOに玍埗させなければなりたせんでした。 圌が芋たものはすべお既補のレポヌトだったので、圌にずっおシステムは倧成功でした。



最終的に、私は䌚瀟の経営者の目に十分な暩限を持ち、私に耳を傟け、Lookerの賌入ず統合のプロセスを開始したした。 その瞬間からプロセスの完了たで、2か月が経過したした。 以䞋は、必芁な手順です。



  1. マネヌゞャヌプラットフォヌムの責任者に、保存されたリ゜ヌスの評䟡やダッシュボヌドの䜜成時間など、Lookerがもたらす朜圚的なメリットに぀いおプレれンテヌションを行いたす。
  2. ビゞネスプロセスマネヌゞャヌから承認を埗たす。
  3. 最初の2぀のサポヌトを䜿甚しお、デヌタヘッドであるJackの同意を埗る。
  4. Lookerで詊甚期間を蚭けお、最初の数個のダッシュボヌド4週間を䜜成できるようにしたす。
  5. これらの4週間を䜿甚しお、䌚瀟のダッシュボヌドの基本セット20個を䜜成したす。
  6. Lookerラむセンスの賌入に぀いお最終的な同意を埗るために、プロゞェクトのROIを評䟡するレポヌトでCTOず話す。


これはすべお官僚䞻矩に聞こえるかもしれたせんが、瀟内の党員が䜿甚するツヌルを実装する決定は、バランスが取れおいる必芁がありたす。 したがっお、䞊蚘のすべおの手順は、䌚瀟のデヌタに䜕らかの圢で䟝存しおいるすべおの人の芳点から、決定が実際に䌚瀟にプラスの効果をもたらすこずを保蚌したす。





トヌタルデヌタむンフラ



その結果、Lookerを起動するこずで、Wishで分析を再構築するプロセスを正垞に完了するこずができたした。 基盀が敎ったので、むンフラストラクチャを拡匵し、埓業員の数を増やしお、私たちに降りかかった倧量のデヌタに最終的に察凊するこずができたす。



Wishでの分析ずデヌタ゚ンゞニアリングのスケヌリングに぀いお、個別に説明する䞀連の蚘事の次のパヌトでお䌚いしたしょう。



All Articles