RSS Etsy Engineering | 技術としての芸... ノート

RSS Etsy Engineering | 技術としての芸術

EtsyのCodeascraftは、コンピュータープログラミングと伝統的な工芸が融合する芸術家のコラボレーションプロジェクトです。このプロジェクトは、有名なプログラマーと芸術家が作成したデジタルアーティファクトをテック愛好家向けの小物に変換するものです。これらには、ガラスのキャンドルホルダーにプリントされたバイナリーアルゴリズムのレンダリング、バイナリー数字のネックレス、ガラスのペーパーウェイトに封じ込められたデジタルビットのポートレイトなどが含まれます。Codeascraftは、技術と工芸のギャップを埋めることを目的としており、コード愛好家向けのユニークなコレクタブルズを提供します。

ノートのスレッド

Etsyのマーケットプレイスは、多様な手作り品やユニークな商品を提供しており、効果的な検索とレコメンデーションにはニュアンスの理解が必要です。現在の商品情報は豊富ですが、多くの場合構造化されておらず、機械学習モデルが完全に活用するのは困難です。中核的な課題は、生データと各商品の魅力を定義する複雑な詳細との間のギャップを埋めることです。解決策は、強化学習アプローチと対照的なシグナルを使用することです。この手法は、バイヤーのエンゲージメントデータを使用して、際立った特徴を強調する簡潔な商品概要を生成するようにLLMをファインチューニングします。これは、バイヤーの選択に基づいて詳細を優先するようにモデルをトレーニングすることで達成され、関連性予測を改善します。モデルは検索インタラクションデータでトレーニングされ、バイヤーが他のリスティングよりも1つのリスティングを選択するに至った特徴を強調する概要に報酬を与えます。この強化学習は、検索関連性メトリクスの改善につながる概要を生成するようにモデルを推進します。人間の評価と定量的なオフラインテストは、概要の高い品質と、下流モデルへの影響、パフォーマンスの向上を示しました。このアプローチは、セラーの創造性を反映し、厳格な定義ではなく、バイヤーの行動に基づいた商品の理解に焦点を当てています。強化された商品理解は、最終的にバイヤーが自分の好みに訴える商品を発見するのに役立ち、ショッピング体験を向上させます。結果として得られる簡潔な概要は、類似商品のリスティングを差別化する主要な特徴を強調します。このプロジェクトは、キーワードのような単純なテキスト機能のみを使用する場合と比較して、重要な商品詳細を表面化する強力な能力を示しました。
CdXz5zHNQW_UugGSCbu5d.jpeg
Etsyは、買い手の関与と売り手の可視性を高めるために、広告検索ランキングモデルを改善しました。目的は、より関連性の高い広告リストを表示することで、購入意図をよりよく予測することでした。これは、2つの大きな改善を通じて達成されました。Multigate Mixture of Experts(MMoE)アーキテクチャの統合と、カートに入れることを補助信号として利用することです。元のマルチタスクモデルは、クリック率(CTR)とクリック後のコンバージョン率(PCCVR)を最適化していましたが、購入の旅の後半でデータの希薄性に苦労していました。MMoEは、マルチタスク学習における「シーソー現象」を解決します。ここで、1つのタスクを最適化すると、別のタスクが低下することがあります。専門化された「エキスパート」と「ゲート」を導入し、タスクがユニークなパターンを学習しながら共有表現から利益を得ることができます。MMoEアーキテクチャには、共有されたボトムがあり、その上にエキスパートが並列に配置されており、異なるデータパターンを学習します。各タスクには、エキスパートの出力を組み合わせる方法を制御するゲーティングネットワークがあり、CTRとPCCVRの両方を最適化します。MMoEの調整には、エキスパートの数、サイズ、タイプの実験が含まれました。異種のエキスパート(DCNとMLPベース)では、メトリクスが改善されました。エキスパートの活用と専門化を確保することが課題でした。エキスパートドロップアウトや温度スケーリングなどの正則化技術が、これらの問題に対処するために探索されました。エキスパート選択の確率分布を軟化させる温度スケーリングは、活用と専門化の両方を促進することが実証されました。クリックと購入のほか、Etsyは、カートに入れるやお気に入りなどの他のユーザーインタラクションの価値を認識しました。これらのアクションは、高い購入意図を示し、購入よりも豊富な信号を提供し、モデルにとってより強い信号を提供します。補助タスク、特にカートに入れることを導入することで、モデルはユーザー関与のより汎用的な表現を学習することができます。これにより、より頻繁な信号を利用して希薄な購入予測に利益をもたらし、最終的により効果的なランキングシステムにつながります。
CdXz5zHNQW_Ply7jT2xQK.jpeg
2010年以来、Etsyのデータベースアーキテクチャは、独自のORMによって管理されるシャーディングされたMySQLクラスターに依存していました。数千のシャードを持つこのシステムは、手動でのスケーリングに課題があり、インデックスデータベースに単一障害点がありました。インデックスデータベースはシャードマッピングを保存しており、ORMがクエリを効率的にルーティングすることを妨げ、サイトの停止を引き起こす可能性がありました。これらの問題を解決するために、Etsyは2018年にオープンソースのデータベーススケーリングツールであるVitessを採用しました。既存のシャーディングロジックを複製するために、Vitess内でカスタムvindexを実装し、完全なデータ移行を回避しました。これには、SQLiteルックアップvindexとハイブリッドvindexを作成し、段階的な移行を行いました。Vitessへの移行は、リスクを最小限に抑え、クエリの非互換性をテストするために、テーブルごとに段階的に行われました。データベーストランザクションに関する課題は、関連するテーブルを同時に移行する必要があり、相互依存関係が浮き彫りになりました。Vitessのクロスシャードクエリ機能はパフォーマンスを大幅に向上させましたが、スキャッタークエリは慎重に管理されました。最終的に、Vitessへの移行は単一障害点を排除し、開発者向けのデータアクセスを簡素化し、ユーザーにとってはほぼ目に見えないパフォーマンスの向上をもたらしました。この移行はまた、手動でのスケーリングを劇的に改善し、新しいVitess機能を可能にしました。
CdXz5zHNQW_LPveoPxaAk.jpeg
Etsyのマーケットプレイスは、様々なセラーが出品する何百万ものユニークで手作りのアイテムを特徴としていますが、その非構造化データの整理に課題を抱えています。従来の製品属性抽出方法は、多様な在庫と限られた構造化データへの対応に苦労していました。大規模言語モデル(LLM)は、非構造化製品情報を構造化データに変換する新たな機会を提供しました。Etsyは、属性抽出の精度を向上させるためにコンテキストエンジニアリングに焦点を当て、LLMを活用したスケーラブルなパイプラインを開発しました。このパイプラインは、セラーが提供するデータ、専門家の例、そしてEtsyの分類法を利用しています。LLMの出力評価には、「シルバーラベル」の生成と、品質保証のための専門家の活用が含まれます。推論プロセスでは、属性を抽出し、地域ルーティングにLiteLLMを使用し、データ検証にPydanticを採用しています。堅牢なモニタリングシステムは、パイプラインの健全性とモデルのパフォーマンス指標を追跡します。LLMで生成された属性を検索フィルターに適用することで、購入者のエンゲージメントとコンバージョン率が向上しました。Etsyは、LLMの利用を拡大し、ショッピングと販売の体験をさらに向上させることを目指しています。最終的な目標は、購入者と販売者のニーズを最大限の効率で満たすことです。
CdXz5zHNQW_2IBkaI4nUO.jpeg
Etsy は、売上を伸ばすために、購入者に無料のアイスクリームを提供するなど、アイデアを試す実験を行っています。ユーザーの行動をより深く理解するために、彼らはセグメンテーションを使用し、異なるユーザーグループに基づいた分析を可能にしています。以前の Etsy のプラットフォームでは、事前に定義されたセグメンテーションが限られており、詳細な分析を妨げ、洞察を得るのに時間がかかっていました。そこで、チームは実験者が独自のセグメントを定義できる「セグメンテーションライブラリ」を開発しましたが、これは遅く複雑なプロセスでした。この新しいアプローチでは、ユーザーは SQL クエリと結合キーを使用してセグメンテーションを作成できるため、理解しやすく、共有しやすくなりました。デプロイ前に、これらのカスタムセグメンテーションは、正確性と安全性を確保するために検証プロセスを経ます。データパイプラインにおける動的なタスク生成により、コードを変更することなく、新しいセグメンテーションの自動処理が可能になりました。この変革により、利用可能なセグメンテーションの数が大幅に増加しました。改善されたシステムは、より迅速かつ深い洞察を提供し、チームがより良いデータに基づいた意思決定を行うことを可能にしています。全体として、これらの変更により、Etsy の実験プロセスはより柔軟で効率的になりました。
CdXz5zHNQW_8gTIiBrymu.jpeg
Etsy は、大規模言語モデル (LLM) を活用して、閲覧履歴と購入履歴に基づいた、詳細で匿名化されたバイヤープロファイルを作成しています。これらのプロファイルは、ニュアンスのある興味やショッピングの目的を捉え、プラットフォーム上の約 9000 万人のバイヤーのパーソナライゼーションを強化しています。技術的な実装には、ユーザーアクティビティデータの取得と、LLM にこのデータを解釈させてプロファイルを生成させることが含まれます。このプロセスをスケーラブルかつコスト効率の高いものにするために、Etsy はデータソースを最適化し、入力トークン量を削減し、バッチサイズを増やし、並列処理を採用しました。これらの最適化により、バイヤープロファイルの生成時間とコストは劇的に削減されました。生成されたバイヤープロファイルは、クエリ書き換えとリファインメントピルを通じて検索エクスペリエンスをパーソナライズするために適用されます。クエリ書き換えは、予測された興味でユーザーの検索を豊かにし、リファインメントピルは、ユーザーの好みに基づいたクリック可能なフィルターを提供します。Etsy は、クリック率やコンバージョン率の向上といった指標を通じて、このパーソナライゼーションの成功を測定しています。また、ユーザーアクティビティに基づいて動的に更新し、興味のずれを検出することで、プロファイルの精度を維持しています。将来の取り組みには、新規ユーザーの「コールドスタート」問題に対処するために、継承プロファイルを試すことが含まれます。最終的に、Etsy は、すべての買い物客にとって、発見性を向上させ、より直感的な検索エクスペリエンスを作成することを目指しています。
CdXz5zHNQW_Nxw1u6jGOy.jpeg
この投稿では、EtsyにおけるAI支援オンボーディングのための大規模言語モデル(LLM)のプロンプトエンジニアリングについて探求します。主な焦点は、LLMによって生成された回答の真実性と信頼性、特にEtsy固有の質問に関するものです。この研究では、内部の旅行・エンターテイメント(T&E)ポリシーに関する質問と、外部のEtsyセラーコミュニティフォーラムでの質問という2つのユースケースを調査しました。T&Eポリシーに関しては、LLMは約86%の質問に正しく回答しましたが、残りの14%には「ハルシネーション」と呼ばれる事実誤認や誤解を招く記述が含まれていました。LLMに不確実性を認めさせる、あるいは推論を説明させるよう指示するなどのテクニックは、これらのハルシネーションを軽減することがわかりました。Etsyコミュニティフォーラムでは、より異質なデータのため、LLMの精度は約72%に低下しました。LLMは、クエリが参照ドキュメントの単語と密接に一致する場合により良好に機能しました。この研究では、追加のコンテキストを提供しても特定の種類の複雑な質問が解決されない場合などの制限も強調されました。ソーススニペットを要求することは、潜在的なLLMハルシネーションをフラグ付けする方法として特定されました。全体として、プロンプトエンジニアリングは有望ですが、オンボーディングおよび情報検索における信頼性の高いAI支援を確保するためには、慎重な作成が必要です。
Etsyの「職人芸にコミットする」という指針は、ネイティブUIを定義するためのモダンなツールキットであるJetpack Composeを、Androidアプリの構築に最も適した手段として採用することにつながった。エンジニアはカリキュラムを作成し、チームにComposeを教えるための情報セッションを開催することで、構造化されたアプローチを取り、Composeの研究と実装を行った。デザインシステムチームは、主要な採用前にデザインシステムの完全な実装を確実に行うために、内部UIツールキットコンポーネントのComposeバージョンを作成した。Composeの既存のツールキットコンポーネントとの相互運用性により、スムーズな移行パスが可能になった。チームは、Composeを使用して全画面を再構築し、ナビゲーションやデータ取得などのより広範な懸念に直面した。リライトが成功した後、Composeは、複雑なボトムシートから始めて、実際のユーザーにロールアウトされた。ショップ画面は次にComposeを使用して再構築され、初期画面のレンダリング時間が5%改善され、ユーザーとのやり取りも改善された。Composeの採用により、開発者の満足度も向上し、エンジニアはコード行数が減り、テストが容易になったと報告した。ComposeとMacraméアーキテクチャの組み合わせは、アプリの機能を構築するための標準的な方法となった。全体として、EtsyのComposeの採用は、チームにとっての機会と効率性を解放し、ある程度の学習曲線と道中の障害があったものの、成果をもたらした。
CdXz5zHNQW_mxNDOlthCn.jpeg
EtsyがGoogle Cloud Platformに移行したことで、組織の内部と外部でクラウドの価値最適化を推進する専門のFinOpsチームが設立された。このチームの予想方法は、Cost Per Visit(CPV)メトリックを使用して、支出の基準線を確立し、偏差を追跡し、特定する。CPVの制限にもかかわらず、FinOpsチームは、内部ツールとアラートを使用して、急速なスパイクや漸進的な成長を検出する。財務部との定期的な協力により、実際のコストと予想の間に一致が維持される。コストの上昇は、分析、協力、検証、トラブルシューティングを通じて、迅速に特定し、緩和される。コスト最適化イニシアチブは、FinOpsチームとエンジニアリングチームの協力によって実施され、コスト削減ではなく効率向上に焦点が当てられている。最近の最適化イニシアチブには、GCSストレージの最適化、コンピュートの最適化、モデル展開の自動化の増加、ネットワーク圧縮が含まれる。FinOpsチームは、マシーンラーニングプラットフォームの支出に関する可視性を向上させることに重点を置いており、ROI分析の向上と今後の最適化機会の特定を目指す。このチームがEngineeringの内部で独立して運営し、グローバルな最適化ではなくローカルな最適化に焦点を当てることで、FinOpsの実践が成功している。Etsyの堅牢なエンジニアリング文化は、効率と工芸を重視し、FinOpsチームの効果を高めている。
Etsyは、コンピュータービジョンを使用して、視覚的な検索や視覚的に似ているレコメンデーションなどの機能でユーザーエクスペリエンスを向上させています。これらの機能は、機械学習モデルを通じて得られた効率的で表現力の高い視覚的な表現が必要です。Etsyは、EfficientNetB0を使用していたが、より効率的なEfficientFormer-l3に切り替えたため、性能が上回り、計算リソースの要件が低くなりました。さらに効率を高めるために、Etsyはこれらの事前学習されたバックボーンを微調整し、同時に複数の分類タスクに学び、多タスク学習を実施しています。評価スキームは、3つの最寄りの近傍リトリーバルタスクでモデル進行状況を追跡し、トレーニングを導くものです。Etsyは、テキストベースのクエリーとクリックされた画像候補のギャップを埋めるために、実験的な評価スキームも導入しました。このスキームは、生成的なAIを活用しています。ダウンストリームタスクでの推論効率を確保するために、Etsyは、メモリー消費とレイテンシーの削減で高品質の画像を生成する高速の安定拡散モデルを導入しました。これらの技術を適用することで、Etsyは、様々なアプリケーションでの視覚的な表現を最適化し、効率的にスケーラブルに使用できるようにしています。
2023年7月、EtsyのApp Updatesチームは、UpdatesフィードをDealsに改編し、クーポンとセールのハブにすることを目指しました。このチームは、新しいタブをスクラッチから作成することを検討し、Swift UIやTuistのようなモダンな技術を使用することを想定していました。野心と現実のバランスをとりつつ、チームはハイブリッドアプローチを採用し、Swift UIをモジュラーディベロップメントとプレビューアビリティのために使用し、既存のUIKitコードベースと統合してナビゲーションや他の機能を実現しました。Swift UIのモジュラリティにより、ビューを再利用可能なコンポーネントに分割し、Tuistを使用した効率的なプレビューを可能にすることができました。明確かつ効率的なAPIパースィングのために、Decodableモデルを実装し、ビューコンストラクションとオプショナルのハンドリングを簡素化しました。複雑なビューのためのモックデータ作成を簡素化するために、プレビューenumを導入し、APIサポートが完了する前にモジュールを構築することができました。しかし、既存のコードベースとのインターフェースは、特にナビゲーションやお気に入りのように、問題を生じました。これに対処するために、チームは、ナビゲーションの責任をメインターゲットに返し、Swift UIのcallAsFunction()機能を維持するカスタム@Environment構造体、DealsActionを作成しました。環境オブジェクトは、他の機能、例えばお気に入り、ショップのフォロー、パフォーマンスメトリクスのログにも使用されました。このハイブリッドアプローチにより、チームはモダンな技術の利点を活用しながら、レガシーコードベースの制約を尊重し、サイバー・ウィークのデッドライン前に製品を成功裏にリリースすることができました。
増加する税務上の義務のため、Etsyのようなマーケットプレイスは今や、購入者に対する税金の収集と納付を行っています。Etsyは、購入者と販売者の所在地、製品のカテゴリ、税務ルールに基づいて税金の計算を行うVertexと提携しています。購入者がショッピングカートにアイテムを追加すると、EtsyはVertexのQuotation Request APIを呼び出し、税金の額を決定します。注文が作成されたら、EtsyはDistributeTaxRequest APIを使用して、注文情報と税金の詳細をVertexに送ります。Etsyは購入者から税金を収集し、適切な当局に納付します。Vertexは、Etsyが大きなデーターシステムにインポートする様々なレポート形式を提供します。Etsyの製品カテゴリをVertexの税金カテゴリにマッピングする作業には、エンジニアリング、税務、分析チームの協力が必要でした。このように、Etsyはチェックアウトの遅延を避けるために、VertexのAPIトラフィックの増加に対応するための複数のインスタンスを実装し、影のログ記録を導入しました。これらのアップグレードで、スムーズなチェックアウトが可能になりました。Etsyは今後、トラフィックとデータ量の増加に対応するデザインの改善を続ける予定で、特に分析、レポート、設定の同期化に対する改善を計画しています。
EtsyのadSformer Diversifiable Personalization Module(ADPM)は、1時間のセッション内でのユーザーアクションから時間的・内容的なシグナルを捉えることでランキングモデルをパーソナライズします。ADPMモジュールは3つのコンポーネントで構成されています:adSformerエンコーダー、事前学習された表現、飛び交う学びの表現。adSformerエンコーダーは、ユーザーセッションの深い表現を学びるために、改良されたトランスフォーマーブロックを使用します。事前学習された表現は、オフラインで学びられたアイテム埋め込みを利用し、飛び交う学びの表現は、ダウンストリームのモデルで生成されます。これらのコンポーネントが結合されて、ダイナミックなユーザー表現が作成され、ランキングモデルに統合されます。ADPMは、検索クエリー、フェイバリット、購入などのユーザーアクションをエンコードすることで、スポンサード検索結果の関連性を向上させます。3つのコンポーネントを組み合わせることで、ADPMはそれぞれのコンポーネントを独立して使用するモデルよりも上回り、入力分布のシフトに対するロバストさも提供します。ADPMは、Etsyのスポンサード検索システムにデプロイされており、オフラインとオンラインの評価で顕著な成果を遂げています。
EtsyのFeature Systemsチームは、マシンラーニングモデルでタイムスタンプ機能を使用する際に、フレームワーク間での精度誤解釈が問題を引き起こす可能性があることに気づいた。この問題は、タイムスタンプデータ型が異なるフレームワークで異なる解釈を受けるため、トレーニング/サービングスキューが生じる可能性があった。これに対処するために、MLの実践者は、タイムスタンプ型を避け、より基本的な数値型、例えばLongsを使用することを推奨した。チームは、根本的な原因を調査し、特定のバグを超える問題がMLの実践者がタイムスタンプ機能を扱う上での大きな問題を明らかにした。チームは、datetimeオブジェクトとタイムスタンプ型の複雑さが、特定の精度での整数表現が必要な彼らのユースケースにとって不要であることに気づいた。アーキテクチャーウォーキンググループ会議で、datetime機能をプリミティブな数値型として表現することで、モデルトレーニングと推論の間での一貫性を確保することに同意があった。チームは、すべてのトレーニングコンテキストでの一貫性を促進するために、プリミティブ型を一般的に標準化することに決めた。チームは、顧客が機能変換を簡単にするための改善されたドキュメントの必要性も認識した。この事件は、ソフトウェアエンジニアリングの慣行をMLの特定のニーズに適用する潜在的な挑戦を明らかにした。MLがソフトウェアシステムに統合されるにつれて、こうしたニュアンスはより一般的になり、ベストプラクティスのさらなる改善が必要になると考えられる。
Etsyの画像検索機能は、ユーザーがアップロードする写真と似ているアイテムを検索することを可能にします。この機能は、画像を数値表現である埋め込みに変換する機械学習モデルを使用し、類似検索に使用します。このモデルは、事前学習された畳み込みニューラルネットワーク(CNN)に基づいており、画像埋め込みの学習タスクに特化して微調整されています。このモデルは、多タスク学習アプローチを使用し、同時に複数の分類タスク(アイテムのカテゴリ、色、属性など)を学びます。高品質の製品画像に対するバイアスを減らすために、モデルはユーザーが提出するレビューフォトのデータセットでも学びます。推論パイプラインでは、検索性能を最適化するために、反転ファイル(IVF)アルゴリズムを使用して近似最近傍(ANN)インデックスを構築します。クエリーフォトは、GPU推論技術を使用してリアルタイムで推論されるため、レスポンス時間が速くなります。画像検索機能は、EtsyのCodeMosaicハッカソンで初めて開発され、現在はプロダクション機能として実装されています。この機能は、Etsy上でユニークで特別なアイテムを発見するのを助けるために、購入者が製品を検索する新しい直感的な方法を提供します。モデルのアーキテクチャーと学習目的は、視覚的に一貫した結果を生成しながらカテゴリ的正確さを維持するように最適化されています。レビューフォトをトレーニングデータセットに追加することで、モデルがユーザーが提出するフォトから関連する結果を生成する能力が大幅に向上しました。この機能は、ユーザーから好評を受け、Etsy上での購入者のエンゲージメントと満足度の向上に貢献しています。
Etsyは、ユーザーに関連するアイテムを提示するためのレコメンデーション・モジュールを使用し、各モジュールは関連性スコアを算出するランカーによって駆動されています。従来、Etsyはモジュール固有のランカーを使用していましたが、モジュールの数が増えるにつれてこのアプローチが不都合になった。この問題に対処するために、Etsyは、複数のモジュールを駆動することができるカノニカル・ランカーを開発しました。これにより、効率性と一貫性が確保されます。最初のカノニカル・ランカーは、訪問頻度に焦点を当て、気に入り率を再訪の代理指標として使用しました。頻度ランカーのモデル構造には、共有されたボトム・アーキテクチャーが含まれ、気に入り予測と購入予測のための別々のレイヤーがあり、最終的なランキング・スコアに結合されます。ランカーはまた、モジュール名の特徴と、トレーニング・データをモジュール間でバランスさせることで汎化性を確保しました。限定されたモジュールのデータでのみトレーニングされたにもかかわらず、カノニカル・ランカーは、トレーニングに使用されなかったモジュールでもモジュール固有のランカーを上回り、汎用的ソリューションとしての効果を示しました。頻度ランカーは、アイテム・ページとホームページの両モジュールで気に入り率を向上させ、購入メトリクスと他のエンゲージメント・インジケーターの大きな改善も見られました。このランカーが導入されて以来、Etsyは、ウェブとアプリの両プラットフォームで複数のモジュールに展開しました。今後の計画として、Etsyは、頻度ランカーを繰り返し、より多くのコンテキストを組み込み、新しいアーキテクチャーを探検します。カノニカル・ランカーは、Etsyのレコメンデーション・ストラテジーの転換を表し、プラットフォームとモジュールをまたがってよりパーソナライズされたレコメンデーションと一貫したユーザー・エクスペリエンスを提供します。
機械学習(ML)モデルのデプロイメントは、実験から厳格なエンジニアリングの制約に移行するもので、柔軟性と安定性のバランスをとる上で課題が生じます。EtsyのMLプラットフォームチームは、Kubernetesを使用してモデルをスケーリングし、Orchestrateします。Baristaがモデルデプロイメントを管理します。当初、モデル構成はコードとして管理され、厳格な制御を提供しましたが、遅延とボトルネックが生じました。これらの問題に対処するために、構成が切り離され、データベースに保存されました。この変更で、CLI経由での即時的な変更が可能になりました。しかし、CLIは技術的なスキルが必要でしたため、モデル管理のためのユーザーフレンドリーなウェブインターフェースが開発されました。Baristaウェブインターフェースは、デプロイメントに関する包括的な制御を提供し、様々なAPIと統合し、デプロイメントプロセスを簡略化します。モデルデプロイメントの頻度が高まったことで、コストと誤設定に関する懸念が生じました。これがKube Downscalerの実装につながり、使用されていないデプロイメントを自動的にスケールダウンするようになりました。基本的な技術的な要件を満たすことに焦点が当たっていたが、MLユーザーを力づける完全な製品を構築することに移りました。現在の努力は、サービスの一貫性と自動化を向上させ、インフラストラクチャーの設定を最適化し、さらなるクラウドコスト削減を目指しています。MLの実践が拡大するにつれて、プラットフォームもチームの成長するニーズに対応するように進化しなければならなくなります。
ドキュメント・アズ・コードは、開発のためのドキュメントを、コードと同じツールとプロセスで統合します。バージョニング、プレーンテキスト・マークアップ、自動化を強調し、ドキュメントの管理を改善します。EtsyのDocsbuilderツールは、ドキュメントの作成と維持のためにMarkdown、Docusaurus、GitOpsワークフローを使用します。Docsbuilderは、Google Cloud Buildと統合テストを使用してサイトの作成、検証、デプロイメントを自動化します。Docsbuilderは、検索エンジンと頻繁に使用されるサイトのナビゲーションコンポーネントで発見性を向上させます。Etsyは現在、Docsbuilderサイトで6.2kページ以上をホストしています。ドキュメント・アズ・コードの目的は、ドキュメントの品質、効率、信頼性を向上させることです。主要な原則として、ドキュメントを第一級市民として扱い、Gitでバージョニングし、プレーンテキスト形式を使用し、ワークフローを自動化することが挙げられます。ドキュメント・アズ・コードは、開発者がドキュメントに対しても同じように厳しくアプローチすることを奨励します。Etsyは、Docsbuilder内の発見性、ナビゲーション、コンテンツのエンゲージメントを向上させる予定です。ドキュメント・アズ・コードは、ドキュメントとコーディングのバランスをとり、組織化された維持可能なドキュメントを生み出します。
Etsy Paymentsは、Vitessが管理するシャーディングされた環境に23つのテーブルで400億行を移動し、vindexesを使用してデータのシャーディングを行いました。この記事は、カットオーバー中のエラーに関する問題に焦点を当てています。Vitessのトランザクション・モードを理解することが非常に重要です。シングル・モードは原子性を維持しますが、マルチ・モードは部分的なコミットが生じる可能性があります。2つのフェーズ・コミット・モードは実験的なもので、推奨されません。リバース・VReplicationは、カットオーバー後のシャーディングされたキー・スペースとシャーディングされていないキー・スペースの間のデータ同期を確保します。ただし、ユニーク・キー・エンフォースメントによって破損することがあり、行の削除や手動でのPosカラムの更新が必要です。WHERE句にシャーディング・キーが含まれていない散乱クエリーは、クエリーのボリュームが過剰になり、潜在的なアウトエージュを引き起こす可能性があります。Vitessは現在、--no_scatterフラグを提供し、散乱クエリーを防ぐことができます。互換性のないクエリーは、カットオーバー後失敗する可能性があります。開発環境での包括的なテストが、問題を特定し解決するために不可欠です。その他の潜在的なエラーとして、サポートされていないSQL構文に関するものがあります。これらは、新しいVitessバージョンにアップグレードすることで解決できます。これらのリスクにもかかわらず、カットオーバーは一般的に逆戻り可能です。ただし、どのような障害が生じるかを注意深く検討する必要があります。
2020年、Etsyの支払いデータベースはスケーラビリティの問題に直面し、Vitessが管理するシャード環境への移行が必要となった。このプロジェクトでは、4つのデータベースから40億行を1つのシャード環境に移行し、Vitessのvindexesをシャードのために使用する必要があった。第1フェーズでは、理想的なデータモデルを持つseller ledger infrastructureを移行することに焦点を当てた。第2フェーズでは、複雑なデータモデルを持つプライマリ・ペイメント・データベースの負荷を削減することに焦点を当てた。このデータベースのモデルは、よりターゲット化されたアプローチが必要であった。第2フェーズのために、2つのオプションが検討された:コア・データ・モデルのリモデリング、または既存のモデル内でのシャーダー・ファインダー(shardifier)の探索。時間的な制約と信頼性の維持の重要性のため、後者のオプションが選択された。チームは、既存のプライマリ・キーとフォーリン・キーをシャーダー・ファインダーとして使用し、第1フェーズよりも少ない作業量で済むようにした。Vitessのリシャーディング機能は、将来的にシャード・デザインを調整するための柔軟性を提供する。Vitessのセカンダリ・インデックスは、非理想的なデータ・モデルの制限を緩和し、クエリーでシャーダー・ファインダーを使用せずにシャードをターゲットすることを可能にする。この移行によって、スケーラビリティが60%向上し、将来的に成長するための余裕が生じた。
元々、Kafka ブローカーのプラットフォーム・アップグレードは、手動的な監視と待機が必要で、数時間を要する退屈で時間のかかる作業でした。 これを改善するために、マルチゾーン・アーキテクチャーが導入され、複数のブローカーが同時に更新されることができ、可用性に影響を与えません。 ただし、Kubernetes のネイティブ・ローリング・アップデート・ストラテジーは、レプリカのゾナル分布のため適切ではありませんでした。カスタム・ロジックが開発され、ゾーン内の複数のブローカーが同時に再起動されることを許可し、信頼性と誤ったデプロイメントの問題を防ぐために Kubernetes バッチ・ジョブとして実装されました。プロダクションでのテストでは、並列性が 3 の場合、アップグレードが約 2 時間で完了することが示されました。 ただし、ゾーン内のすべてのブローカーを同時に再起動することは技術的に可能でしたが、残りのブローカーに対する負荷の増加を防ぐために避けられました。マルチゾーン・アーキテクチャーとカスタム・アップデート・ロジックは、アップグレード時間を 7 時間から約 2 時間に大幅に短縮し、ストレスの軽減も実現しました。新しいプロセスは、Kafka クラスターに対する影響を最小限度に抑えつつ、迅速かつ効率的なアップグレードを実現しました。 プロジェクトの成功は、アップグレードの時間の短縮にとどまらず、更新時のストレスの軽減も評価の基準となりました。
2018年、EtsyはKafkaブローカーをGoogle Cloud PlatformのKubernetes Engineに移行しました。初めは単一のゾーンで運営していたが、ゾーンのレジリエンスを高めるために、ブローカーを複数のゾーンに分散し、パーティションレプリカを均等に配分するようにアーキテクチャーを再設計しました。ダウンタイムゼロでの移行を達成するために、ブローカーはまずディスクのスナップショットを取得し、次に正しいゾーンでそれらを再作成しました。パーティションの再配置は、影響を最小化するためにスクリプトとツールを使用して手動で処理されました。生産環境でのテスト結果は、ゾーンの停止が起こった際の影響が最小限度であったことを示し、多ゾーンデザインの効果を証明しました。ゾーン間のネットワークコストが予想通り増加しましたが、ゾーンレジリエンスの自動化された利点がコストを上回りました。チームは、Kafkaのフォロワーフェッチング機能を活用し、ゾーン間のトラフィックを減らすための追加的なアプローチを探検中です。ゾーンレジリエンスの利点が顕著であるため、コスト上昇も正当化されます。移行プロセスには、ディスクとPodの移動、パーティションの再配置、設定の調整など複雑なステップが含まれました。チームの慎重な計画と実行が、プロセス全体でダウンタイムゼロとデータの完全性を維持することを保証しました。Etsyの経験は、クリティカルサービスのレジリエンスデザインの重要性を強調します。ゾーンの冗長性を採用することで、単一ゾーンの障害に関するリスクを軽減し、Kafkaクラスターの安定性と可用性を向上させました。多ゾーンアーキテクチャーがEtsyに、生産トラフィックの増加と、検索インデックスングなどのクリティカルなユーザーフェイシング機能を自信を持って処理することを可能にしています。会社のコスト最適化の継続的な努力は、レジリエンスと財務的な考慮のバランスを維持するというコミットメントを示しています。このケーススタディーは、多ゾーンのクラウド環境で高可用のKafkaクラスターを運営する上での課題と戦略に関する貴重な洞察を提供します。