Digdagのワークフローを動的に実行できる仕組みの導入

ZOZOTOWN
2022-06-02 02:00:00
[Digdag] [運用改善]
はじめに こんにちは、MA基盤の@gachi-muchi-engineerです。 私達のチームでは、Digdagを利用してユーザーにメールを配信したり、データ連携を定期的に行うような様々なワークフローを運用しています。今回その中でも特定の対象者にポイントを付与したり、メールを配信するなどのビジネス要素が強いワークフローを、エンジニアでない運用者が運用していくなかで課題がいくつか出てきました。そこで、動的にワークフローを起動する仕組みを構築することで課題を解決したので、その方法について紹介します。 目次 はじめに 目次 Digdag 背景 1. スケジュール設定の柔軟性 2. パラメータ定義の柔…

オンプレDWHをBigQueryに移行した話

ZOZOTOWN
2022-06-01 03:09:30
[BigQuery] [Digdag] [運用改善]
はじめに こんにちは。MA部MA施策・運用改善チームの辻岡です。MA部では、ZOZOTOWNのメルマガ・アプリPUSH通知などの配信・分析等の用途で約数十TBのデータを運用しています。今回は長年MAのデータ基盤として利用してきたオンプレDWHをBigQueryに移行したおはなしをします。 この記事はこんな方におすすめ オンプレDWHからBigQuery移行を検討・実施してる方 ジョブ・スケジューラ、ETLツールの移行を検討・実施してる方 概要 オンプレDWHからBigQuery移行する前後の構成イメージを元に、今回の移行の話について概要を説明します。 次の図が移行前の構成図です。オンプレ環境の…

リアルタイムなプッシュ通知を可能にした配信基盤の紹介

ZOZOTOWN
2022-05-30 02:00:00
[GCP] [Firebase]
はじめに こんにちは、MA部MA基盤ブロックの齋藤(@kyoppii13)です。 ZOZOTOWNではアプリ向けのキャンペーンやセール情報などの配信でプッシュ通知を利用しています。プッシュ通知で配信するキャンペーンはセグメントに向けたマス配信のみで、ユーザごとにパーソナライズして配信するためのパーソナライズ配信には利用していませんでした。また、パーソナライズ配信の中にはリアルタイム性が求められるキャンペーン配信も含まれます。そこで、リアルタイムキャンペーンでプッシュ通知するための配信基盤を作成しました。 本記事では、リアルタイムなプッシュ通知を実現するために作成したシステムの紹介と、安定した配…

SQL ServerのChange Tracking機能をプロダクション環境で運用した際に生じた問題と対応策

ZOZOTOWN
2022-05-26 02:00:02
[トラブルシューティング] [SQL Server] [Database]
SQL ServerのChange Trackingを有効にした環境で発生した問題と、その原因調査から対応策の実施までの流れを紹介します。

Goプログラム実行時間の短縮

ZOZOTOWN
2022-05-25 02:26:31
[Go言語] [運用改善] [Digdag] [チューニング] [アパレル] [生産] [MSP] [バックエンド]
こんにちは。生産プラットフォーム開発部の中嶋です。生産プラットフォーム開発部はアパレル生産のDXを進めている部門です。具体的には服作りのIT化を含めたアパレル生産の効率化の促進と「生産支援」のシステムを主にGoで開発しています。今回はその運用の中でGoプログラムの実行時間をどのように短縮したのかを紹介します。

データカタログを作成してZOZOTOWNデータベース定義をまとめた話

ZOZOTOWN
2022-05-24 02:00:07
[Database] [自動化] [データ] [運用改善]
こんにちは。ZOZOTOWN開発本部 バックエンド1ブロックの山本です。普段はZOZOTOWNのバックエンドやマイクロサービスAPIなどの開発に携わっています。 ZOZOTOWNは膨大なデータを有しており、テーブルやカラムの数も膨大です。しかし、ER図やテーブル定義に関するドキュメントは手動で更新されていたため情報遅れが生じ、信頼性が低いものとなっていました。 本記事ではその問題を解決するための取り組み、「データカタログ作成プロジェクト」について紹介します。 目次 目次 データカタログとは Dataedo dbdocs 背景・目的 課題の解決手段 内製したソフトウェアのアーキテクチャと基本機能…

ZOZO Tech Talk #7 - Android

ZOZOTOWN
2022-05-23 09:00:01
[イベントレポート] [オンラインイベント] [Android] [GitHub Actions] [Jetpack]
こんにちは、ZOZO CTOブロックの@ikkouです。 ZOZOでは、5/23にZOZO Tech Talk #7 - Androidを開催しました。 zozotech-inc.connpass.com 本イベントは、これまで夕刻に開催してきたMeetupとは異なり、ランチタイムに開催する「ZOZO Tech Talk」シリーズです。ZOZO Tech Talkでは、ZOZOがこれまで取り組んできた事例を紹介していきます。 第7回はネイティブアプリ開発の中で、特にAndroidにフォーカスした内容を発表しました。 登壇内容 まとめ 弊社の社員2名が登壇しました。 GitHub Actions…

【オンラインMeetup イベントレポート】ZOZO Tech Talk #6 - iOS

ZOZOTOWN
2022-05-19 10:29:22
[イベントレポート] [オンラインイベント] [iOS]
こんにちは、ZOZO CTOブロックの@ikkouです。 ZOZOでは、5/16にZOZO Tech Talk #6 - iOSを開催しました。 zozotech-inc.connpass.com 本イベントは、これまで夕刻に開催してきたMeetupとは異なり、ランチタイムに開催する「ZOZO Tech Talk」シリーズです。ZOZO Tech Talkでは、ZOZOがこれまで取り組んできた事例を紹介していきます。 第6回はネイティブアプリ開発の中で、特にiOSにフォーカスした内容を発表しました。 登壇内容 まとめ 弊社の社員2名が登壇しました。 Hapticをカスタマイズしてみよう (ZO…

ZOZOTOWNで最大級のイベントである新春セールを乗り越えるための負荷試験とその効果

ZOZOTOWN
2022-05-18 02:00:01
[負荷対策] [Kubernetes] [Gatling] [マイクロサービス] [Splunk]
はじめに こんにちは、SRE部の秋田と伊藤です。普段はZOZOTOWNのオンプレミスとクラウドの運用・保守・構築に携わっています。 新春セールはZOZOTOWNの中でも最も力を入れているイベントの1つであり、セール開始直後は毎年最大級のアクセスやトラフィックが発生しています。この新春セールを無事に乗り越えるために2020年度から負荷試験を実施しています。負荷試験のシナリオでは機能ごとの試験ではなく、ユーザー導線に合わせてZOZOTOWNにセール同等のトラフィックを再現します。 本記事は、様々な変化をするZOZOTOWNにおける新春セールを乗り越えるための負荷試験を実施するまでにあった課題とその…

BigQueryで時を遡って過去のテーブルを再構成する

ZOZOTOWN
2022-05-17 04:28:19
[BigQuery] [Dataflow]
はじめに こんにちは、データシステム部データ基盤ブロックSREの纐纈です。 本記事では、過去に遡ってBigQueryのデータを参照する方法(以下、タイムトラベルと呼びます)をご紹介します。また、この機能はBigQueryが提供している、変更または削除されたデータにアクセスするタイムトラベルとは異なることをご了承ください。 開発背景 この機能は過去データを日次スナップショットより細かい粒度で見たい、また障害対応時に障害発生前などピンポイントで時間指定して参照したいという要望を受け、開発することになりました。 さらに、BigQueryからこの機能を作るのに役立ちそうなテーブル関数という機能がリリー…

【オンラインMeetup イベントレポート】ZOZO Tech Talk #5 - チーム開発と運用

ZOZOTOWN
2022-04-28 09:00:17
[イベントレポート] [オンラインイベント] [DDD]
こんにちは、ZOZO CTOブロックの@ikkouです。 ZOZOでは、4/22にZOZO Tech Talk #5 - チーム開発と運用を開催しました。 zozotech-inc.connpass.com 本イベントは、これまで夕刻に開催してきたMeetupとは異なり、ランチタイムに開催する「ZOZO Tech Talk」シリーズです。ZOZO Tech Talkでは、ZOZOがこれまで取り組んできた事例を紹介していきます。 第5回はTBSテレビ「がっちりマンデー!!」でも紹介いただいた弊社のZOZOGLASSやZOZOMATの開発を行う計測プラットフォーム開発本部エンジニアより「チーム開発…

WEARに動画投稿を実装した際にハマった事とその解決策

ZOZOTOWN
2022-04-28 02:00:04
[iOS] [Swift] [WEAR]
はじめに こんにちは。WEAR部iOSチームの坂倉です。先日、WEARにコーディネート動画の投稿機能を実装しました。 iOSで動画を扱うにはAVFoundationを使う必要がありますが、原因がわかりにくいエラーを引き起こすことが多々あり、実装になかなか苦労しました。 この記事では、動画投稿の開発中に起きた問題とその解決法をお伝えします。 WEARの動画投稿には以下の機能が存在します。 動画を選択する 動画をプレビューする 動画に付与する音楽を選択する 動画に付与する音楽の範囲を指定してトリミングする 動画に関する情報を付与する 動画と音楽をミックスしてエンコードする 完成した動画を投稿する …

【オンラインMeetup イベントレポート】Data Engineering Meetup 【ZOZO × GMOペパボ】

ZOZOTOWN
2022-04-22 02:00:04
[イベントレポート] [オンラインイベント] [BigQuery]
こんにちは、ZOZO CTOブロックの@ikkouです。 ZOZOでは、4/20にData Engineering MeetupをGMOペパボさんと共催しました。 zozotech-inc.connpass.com 本イベントではto C向けサービスを提供する2社が、各社のData Engineering事情や直近の取り組みについて発表しました。 登壇内容 まとめ 前半にGMOペパボさんから2名が、後半に弊社から2名が登壇しました。 「データ"抽出"基盤 Yeti をつくっている話」 (GMOペパボ / 堤 利史) 「BigQuery の日本語データを Dataflow と Vertex AI…

Combineの非同期処理をSwift Concurrencyのasync/awaitで書き換えてみた

ZOZOTOWN
2022-04-15 02:00:01
[iOS] [Swift]
こんにちは、FAANS部の中島 (@burita083) です。2021年10月に中途入社し、FAANSのiOSアプリの開発を行なっています。 FAANSの由来は「Fashion Advisors are Neighbors」で、「ショップスタッフの効率的な販売をサポートするショップスタッフ専用ツール」です。現在正式リリースに向けて、WEARと連携したコーディネート投稿機能やその成果を確認できる機能など開発中です。 はじめに FAANS iOSでは非同期処理にCombineを利用しています。Combine自体は本記事では詳しく解説をしませんが、RxSwiftを利用したことがある方なら特に違和感…

FAANSにおけるCloud RunからGKE Autopilotへのリプレイス事例

ZOZOTOWN
2022-04-14 03:06:33
[GCP] [Kubernetes] [Cloud Run]
はじめに こんにちは。ブランドソリューション開発本部 WEAR部 SREの笹沢(@sasamuku)です。 FAANSはショップスタッフの効率的な販売をサポートするスタッフ専用ツールです。FAANSの一部機能は既にリリースされており全国の店舗で利用いただいております。正式リリースに向け、WEARと連携したコーディネート投稿機能やその成果をチェックできる機能などを開発中です。 FAANSのコンテナ基盤にはCloud Runを採用しており、昨年にSREとしての取り組みをテックブログでご紹介しました。しかし、運用していく中で機能需要や技術戦略の変遷があり、Cloud RunからGKE Autopil…

WorkManagerを使ったバックグラウンドでのAPI呼び出し

ZOZOTOWN
2022-04-14 03:08:01
はじめに こんにちは。WEAR部Androidチームの半澤です。普段は、「ファッションコーディネートアプリ WEAR」のAndroidアプリ開発を担当しております。 今回は、WorkManagerを使ったバックグラウンドでのAPI呼び出しについて紹介いたします。WorkManagerは時間がかかる処理や永続的な処理などをバックグラウンドで実行するために推奨されるソリューションです。例えばサイズの大きいデータのアップロード処理や定期的なタスクをバックグラウンドで実行したいといったケースで利用されます。 背景 「WorkManagerを使ってアプリのプロセスの状況に依存せずAPI通信をしたい」とい…

WEAR Webフロントエンドリプレイスのアーキテクチャ選定とNext.jsへの移行

ZOZOTOWN
2022-04-11 02:00:00
[Next.js] [React] [WEAR] [Web] [フロントエンド]
はじめに こんにちは。WEAR部フロントエンドブロックの藤井です。WEARでは現在、Webサイトのリプレイスを進めています。本記事では、リプレイスに至った背景や課題と、課題解決のために行ったリプレイスのアーキテクチャ選定についてご紹介します。

Amazon Kinesis Data Streamsの事例紹介とAWS SDKのバージョンアップについて

ZOZOTOWN
2022-04-08 02:00:04
[AWS] [Java] [マイクロサービス]
はじめに こんにちは。ECプラットフォーム部カート決済ブロックの曽根です。 ZOZOTOWNでは、リプレイスの一環として、2021年4月からカート決済機能のマイクロサービス化を開始しました。 ZOZOTOWN カート決済機能リプレイス Phase1 〜 キャパシティコントロールの実現 - ZOZO TECH BLOG 本記事では、上記で紹介しているCart Queuing SystemのAmazon Kinesis Data Streams(以下、KDS)にフォーカスし、Javaの実装を交えて事例をご紹介します。また、開発中にAWS SDK for Javaをv1からv2へバージョンアップした…

ZOZOTOWN iOSチーム、Apple silicon導入しました

ZOZOTOWN
2022-04-06 02:00:04
[iOS] [Xcode] [Carthage]
はじめに こんにちは、ZOZOアプリ部でZOZOTOWN iOSアプリを開発している小松です(@tosh_3)。ZOZOTOWN iOSチームでは、M1 Pro / M1 Max発売のタイミングでチーム内の開発環境をApple siliconへと移行しました。スムーズに移行するためにどのようなことを実践したのかと実際に移行することでどのような恩恵を受けることができたのかを紹介します。 Apple siliconについて WWDC 2020にてAppleはIntelプロセッサーからApple siliconと呼ばれるAppleによってデザインされたプロセッサーへと移行していくことを発表しました。…

OpenAPI Generatorのコード生成とSpring Frameworkのカスタムデータバインディングを共存させる

ZOZOTOWN
2022-04-01 02:00:01
[OpenAPI] [Swagger] [Spring Boot] [Java]
OpenAPI Generatorを使ったOpenAPI定義からのコード生成と、Spring Frameworkのカスタムデータバインディングを共存させるために実施したことをご紹介します。

Unityを組み込んだiOSアプリにおける、UXも考慮した開発

ZOZOTOWN
2022-03-31 02:00:02
[Unity] [iOS] [Swift] [バーチャル] [3D]
こんにちは、ZOZO NEXTで新規プロダクトの開発を担当している木下です。先日、3Dバーチャル試着に関する実証実験の取り組みが発表されました。3Dバーチャル試着ではユーザーが入力した体型データを基に3Dアバターが作成され、好みのアイテムを選んで着丈やサイズ感を確認できます。 zozonext.com この実証実験のために開発したアプリは、Unity as a Library(UaaL)という技術を利用して実装されています。今回はUaaLをiOSアプリに組み込むにあたって工夫した点を、UX観点も交えながらご紹介します。

SQL Serverのバージョンアップ時に必要なクエリ互換性に関する検証精度を向上させた話

ZOZOTOWN
2022-03-30 02:00:02
[Database] [SQL Server]
SQL Serverのバージョンアップの際に必要なクエリ互換性を、アプリ側に定義されているクエリも含めて検証した事例をご紹介します。

ZOZOMATのマルチテナントEKSクラスタへの移行

ZOZOTOWN
2022-03-29 02:00:02
[AWS] [EKS] [Kubernetes]
はじめに こんにちは。計測プラットフォーム開発本部SREブロックの西郷です。普段はZOZOSUITやZOZOMAT、ZOZOGLASSなどの計測技術に関わるシステムの開発、運用に携わっています。先日私達のチームでは、シングルクラスタ・マルチテナントを前提として構築したEKSクラスタにZOZOMATシステムを移行しました。本記事では移行ステップや作業時に工夫した点について紹介したいと思います。 目次 はじめに 目次 移行の概要とそのアプローチ 前提 要件 移行方針 各移行ステップとその詳細 STEP1:移行先CFnスタックへのAWSリソース作成、インポート STEP2:移行先へのデータマイグレー…

楽々スケール Digdag on GKE Autopilot の紹介とその運用Tips

ZOZOTOWN
2022-03-28 02:00:03
[Digdag] [GCP] [Kubernetes]
こんにちは、MA基盤チームの田島です。私達のチームでは複数のワークフローエンジンを利用し、メールやLINEなどへの配信を含むバッチ処理を行っていました。今回それらのワークフローエンジンをすべてDigdagに統一しました。そして実行環境としてGKEのAutopilot環境を選択したことにより、柔軟にスケールするバッチ処理基盤を実現しましたのでそれについて紹介します。 また、その中で得られた運用Tipsについても合わせて紹介します。 目次 目次 Digdag on GKE Autopilotの構成 Digdagの4つの役割 Worker Scheduler Web API Kubernetes C…

オンプレのreadonlyデータベースをクラウド化した話

ZOZOTOWN
2022-03-25 02:00:00
[AWS] [SQL Server]
はじめに こんにちは、技術本部SRE部ZOZOSREチームの堀口/柳田です。普段はZOZOTOWNのオンプレミスとクラウドの構築・運用に携わっています。 ZOZOTOWNではSQL Serverを中心とした各種DBMSが稼働しています。 その中で検索処理における参照に特化された役割を持つデータベース群をReadOnlyデータベース(以下、RODB)と呼んでいます。これらは日々増加するZOZOTOWNのトラフィックに耐えられるよう定期的にオンプレミスサーバを増台することでスケールしています。 これらのRODBは日々トラフィックの増減が激しいZOZOTOWNのサービスにおいて、オンデマンドでスケー…

DynamoDBによるOutboxパターンとCDCを用いたCQRSアーキテクチャの実装〜ZOZOMOでの取り組み

ZOZOTOWN
2022-03-24 02:00:04
[CQRS] [DDD] [DynamoDB] [AWS] [Protocol Buffers]
こんにちは。ブランドソリューション開発部プロダクト開発ブロックの岡元です。普段はFulfillment by ZOZOとZOZOMOのブランド実店舗の在庫確認・在庫取り置きサービスの開発、保守をしています。 本記事では、ブランド実店舗の在庫確認・在庫取り置きサービスで実装したCQRSアーキテクチャについて紹介させていただきます。 CQRSの実装においては、データベース(以下、DB)分割まで行い、コマンド側DBにはAmazon DynamoDB(以下、DynamoDB)、クエリ側DBにはAmazon Aurora MySQL(以下、Aurora MySQL)を用いています。また、コマンド側DBと…

Cloud Composer 2上でApache Airflow 2のワークフローを実装する

ZOZOTOWN
2022-03-23 02:00:03
[Airflow] [Cloud Composer] [GCP]
はじめに こんにちはZOZOデータサイエンス部MLOpsブロック松岡です。 本記事では先日リリースされたGCP(Google Cloud Platform)Cloud Composerの最新バージョンCloud Composer 2について紹介します。 ZOZOTOWNでは、多種多様な商品が毎日新たに出品されています。現在MLOpsブロックでは、機械学習で商品情報の登録を補佐するシステムを開発しています。 このシステムでは商品情報を保存するデータベースへ大量の書き込み処理が発生します。このアクセスによる負荷が日常業務に影響を及ぼすリスクを最小限に抑えるため、推論処理は夜間に行います。夜間に処理…

ZOZOTOWN検索マイクロサービスにおけるキャッシュの導入とその効果

ZOZOTOWN
2022-03-22 02:00:00
[ElastiCache] [マイクロサービス] [API] [Spring Boot] [Java]
はじめに こんにちは。検索基盤部 検索基盤チームの佐藤(@satto_sann)です。検索基盤チームでは、 ZOZOTOWNの検索周りのシステム開発に日々取り組んでいます。 本記事では、ZOZOTOWNの検索マイクロサービスにおけるキャッシュ導入で得られた知見や工夫点について紹介します。検索に限らずマイクロサービスへキャッシュの導入を検討されている方の参考になれば幸いです。

Storybook × MSW × Chromaticを使ったUIの影響範囲を自動検知するための取り組み

ZOZOTOWN
2022-03-18 02:00:00
[Storybook] [Chromatic] [Mock Service Worker] [React]
こんにちは、FAANS部の田中です。普段は、WebのフロントエンドエンジニアとしてFAANSの開発を行なっています。 FAANSの由来は「Fashion Advisors are Neighbors」で、「ショップスタッフの効率的な販売をサポートするショップスタッフ専用ツール」です。現在正式リリースに向けて、WEARと連携したコーディネート投稿機能やその成果を確認できる機能など開発中です。プラットフォームとしてはWeb、iOS、Androidが存在し、今回取り上げるWebはショップ店長をはじめとした管理者向けツールという立ち位置です。 本記事では、FAANSのWebにおけるStorybook …

JAXによるスケーラブルな機械学習

ZOZOTOWN
2022-03-17 02:00:04
[機械学習] [GCP]
はじめに こんにちは、ZOZO NEXT ZOZO ResearchのSai Htaung Khamです。ZOZO NEXTは、ファッション領域におけるユーザーの課題を想像しテクノロジーの力で解決すること、より多くの人がファッションを楽しめる世界の創造を目指す企業です。 ZOZO NEXTでは多くのアルゴリズムを研究開発しており、その中でJAXというライブラリを使用しています。JAXは高性能な機械学習のために設計されたPythonのライブラリです。NumPyに似ていますが、より強力なライブラリであると考えることができます。NumPyとは異なり、JAXはマルチGPU、マルチTPU、そして機械学習…