Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[CNDT2020 9/9 17:00 Track-C] AI 翻訳サービスを FaaS & コンテナ化して UX とコストを改善した話

[CNDT2020 9/9 17:00 Track-C] AI 翻訳サービスを FaaS & コンテナ化して UX とコストを改善した話

みらい翻訳が提供している AI 翻訳サービスがレガシーな構成から FaaS/コンテナ化してコストとUXを改善した道のりを、このサービスの中の重要な機能であるファイル翻訳を例にとってお話しします。 ファイル翻訳は複数のステップからなるアプリケーションですが、モノリシックな作りとなっていて、日々増える負荷のスケールの対応や機能追加のやりづらさ、ユーザビリティの問題に頭を抱えていました。 FaaS/コンテナ化に加えてAWSリソースを駆使してこれらの問題をどのように解決していったか、移行する時や運用でハマった点、安定稼働させるために工夫した点など共有します。

Jeff (Ryosei Kawamura)

September 09, 2020
Tweet

Other Decks in Technology

Transcript

  1. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスを FaaS

    & コンテナ化して UX とコストを改善した話 株式会社みらい翻訳 川村 亮清 2020.9.9
  2. ©2020 Mirai Translate, Inc. All Rights Reserved. 2 ⾃⼰紹介 名前

    川村 亮清(Ryosei Kawamura) ニックネーム jeff 所属 株式会社みらい翻訳 役割 バックエンドエンジニア @kobarasukimaro
  3. ©2020 Mirai Translate, Inc. All Rights Reserved. 会社紹介 ・事業内容 翻訳及び通訳業務、翻訳及び通訳業務に関するサービス、システム

    開発をやってます ・ビジョン ⾔語の壁を超え、新しい⽣活と仕事の様式をもたらす共通語の機能 を機械翻訳として2028年までに作る。 (世界のすべての⼈々に英語を⺟国語とする⼈々と同じ体験を与え る。) 3
  4. ©2020 Mirai Translate, Inc. All Rights Reserved. Mirai Translator 紹介

    MiraiTranslator 紹介 Satie 資料から抜粋する 4 B to B向け機械翻訳のWebサービス • ⾮常に⾼い翻訳精度 • ⾼いセキュリティ • テキスト翻訳・ファイル翻訳 • プロファイル機能 • ユーザー管理・データ管理 • 利⽤履歴管理など 和⽂英訳がプロ翻訳者レベル 英⽂和訳はTOEIC960点レベル ⽇中翻訳は⼈⼿翻訳と同等レベル • AWS 上に構築しています
  5. ©2020 Mirai Translate, Inc. All Rights Reserved. 今⽇話す内容 AI 翻訳サービスの課題

    AI 翻訳サービスの課題をどう解決したか 課題を解決して何が改善されたか 5
  6. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 7

    Mirai Translator のメイン機能であるファイル翻訳を例に話します
  7. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 ファイル翻訳とは︖

    MiraiTranslator の主⼒機能 テキスト、オフィス、PDF を翻訳できる ファイルをアップロードするだけ︕ 装飾を保持して出⼒してくれる 8
  8. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 ファイル翻訳ざっくり概要

    ファイル翻訳 API ・REST API ・ファイルのアップロードを受け付けたり状態確認を⾏う ファイル翻訳ジョブ ・ファイルの解析、翻訳、合成処理を⾏う。複数プロセスに分かれている ・それぞれのプロセス間の通信は SQS で連携している ・ファイルの形式や⽂章量によっては処理にかなり時間がかかる 9
  9. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 ファイル翻訳概要図(改善前)

    ファイル翻訳アプリケーションを1インスタンスに全部乗せ 10 AWS Cloud EC2 instance contents ファイル翻訳 API ファイル解析プロセス ファイル合成プロセス 翻訳プロセス
  10. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 運⽤のしづらさ

    ファイル翻訳のアプリケーションが⼀つのインスタンスに含まれているため AutoScalingGroup 構成だけどスケールしづらい ・スケールアウト → 関係ないプロセスもスケールされてしまう ・スケールイン → 全プロセスが仕事をしていない状態でないとスケールインできない 13 API 解析 翻訳 合成 1インスタンスに 含まれる app =インスタンス =スケール要求数 薄⾚は無駄な プロセス
  11. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 運⽤のしづらさ

    SQS のメッセージを消すタイミングが早すぎるため再実⾏に難がある 14 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理
  12. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 運⽤のしづらさ

    SQS のメッセージを消すタイミングが早すぎるため再実⾏に難がある 15 メッセージ 取得 メッセージ 削除 ファイル翻 訳処理 ファイル翻訳処理中 にインスタンスが死 ぬと再処理できなく なる ジョブプロセスの処理の流れ エラーにならないけ ど処理されないファ イルが存在してしま う
  13. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 AWS

    コスト ファイル翻訳のアプリケーションが⼀つのインスタンスに全て乗っているため無駄がある • アプリケーション全部乗せインスタンスのため、なかなか良いスペックのインスタンスを使っ ていた 17 API 解析 翻訳 合成 1インスタンスに 含まれる app =インスタンス =スケール要求数 薄⾚は無駄な コスト
  14. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 ファイル翻訳が遅い︕

    処理単位が⼤きい ・ファイル翻訳ジョブの処理がファイル単位(SQS の1メッセージが1ファイル単位) 20 File 1つのファイルの処 理が終わらないと次 のファイルが処理さ れない File File File ファイル翻訳ジョブ メッセージ取得
  15. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 ファイル翻訳が遅い︕

    EC2 のためスケールアウトに時間がかかる&処理単位が⼤きい ⼤きいファイルの処理に時間がかかる 処理が詰まりがちに・・・ 21
  16. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題 なぜ課題を解決する必要があったのか︖

    ユーザー満⾜度を上げたい ・主⼒機能の不満を解消できない = 解約リスク コストを抑えたい ・AWS、⼈的コスト両⽅ 22
  17. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか アーキテクチャ

    ・API → Lambda ・ジョブ系 → ECS アプリケーション ・SQS の使い⽅⾒直し ・処理単位⾒直し 24
  18. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか API

    → Lambda 化 API Gateway + Lambda 構成 ・元々実装がシンプルだったのでそんなに苦労せずに移⾏できた ・ファイルアップロードは API Gateway、 Lambda の制限の関係で S3 アップロード → S3 トリガーで Lambda 呼び出し 25 File アップロードを検知して Lambda 起動 ジョブに繋げるために SQS にエンキュー
  19. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか ジョブ系

    → ECS ECS on EC2 全スポットインスタンスで構築 ・スポットフリート活⽤で可⽤性担保 ・スケールしやすくするため Lambda でコンテナとインスタンスの スケールイン・アウトを実⾏している(1分1回) ジョブ系も Lambda への移⾏を検討したが、⾊々要件が合わず断念 ・ライブラリ(OCR 系)や処理時間の関係 26
  20. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し 可視性タイムアウトの活⽤ デッドレターキューの活⽤ 27
  21. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し 可視性タイムアウトの活⽤ 29 可視性タイムアウト メッセージ取得後、同じメッセージが⼀定期間読み込まれないようになる ␱ 可視性タイムアウトに 300秒 を設定したらメッセージ取得 後 300秒間は同じメッセージ が読み込まれなくなる
  22. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し 可視性タイムアウトの活⽤ 30 可視性タイムアウト メッセージ取得後、同じメッセージが⼀定期間読み込まれないようになる ␱ ␱ ⼀定期間経過後に再度同じメッセージが読み込めるようになる 可視性タイムアウト 300秒を設 定したらメッセージ取得後 300 秒経過したら同じメッセージが 読み込めるようになる
  23. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 31 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理
  24. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 32 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理 ファイル翻訳処理中にコンテ ナが死んでもメッセージは消 えてないので可視性タイムア ウト経過時間後に再実⾏可能
  25. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に ここで⼀つ問題が・・・ 33 ファイル翻訳処理が可視 性タイムアウトより⻑ かったらどうすんだ
  26. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 34 可視性タイムアウト めっちゃ⻑くすればええ やん︕12時間とか
  27. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 35 可視性タイムアウト めっちゃ⻑くすればええ やん︕12時間とか
  28. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 36 可視性タイムアウト めっちゃ⻑くすればええ やん︕12時間とか 再実⾏タイミングが 12時間後になってし まう
  29. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に ・可視性タイムアウトを延⻑(変更)できる SQS の API がある ↓ ChangeMessageVisibility 37
  30. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 38 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理 可視性タイム アウト延⻑ ChangeMessageVisibility を別スレッドで定期実⾏
  31. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し メッセージ削除タイミングを処理後に変更することによりジョブを再実⾏可能に 39 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理 可視性タイム アウト延⻑ ベースの可視性タイム アウトは短め&延⻑処 理を定期的に⾏うこと で、安全に素早く再実 ⾏可能になった
  32. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し デッドレターキューを使うことで処理漏れを抑制 ・同じメッセージが⼀定回数読み込まれたら別のキューにそのメッセージを送る 40 同じメッセージが複数回読み込まれる ␱ 何らかの理由で処理が困難なファイル(主に変な規格の PDF)
  33. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか SQS

    の使い⽅⾒直し デッドレターキューを使うことで処理漏れを抑制 41 メッセージ 取得 ジョブプロセスの処理の流れ メッセージ 削除 ファイル翻 訳処理 同じメッセージが複 数回読み込まれた場 合、続⾏困難と判断 して DLQ に送る DLQ のメッセージを 読み込んでユーザー にエラー通知などを ⾏う
  34. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか 処理単位⾒直し

    処理単位をファイル単位から⽂章単位へ ・今までの処理単位と処理順 42 File File File File 1つのファイルの処 理が終わらないと次 のファイルが処理さ れない
  35. ©2020 Mirai Translate, Inc. All Rights Reserved. AI 翻訳サービスの課題をどう解決したか 処理単位⾒直し

    処理単位をファイル単位から⽂章単位へ ・変更後の処理単位と処理順 43 File File File File ファイルを⽂章にバ ラし、⽂章を1メッ セージとして処理 ・全体的に処理開始が早く なる → ユーザーの安⼼感 ・⽂章の少ないファイルは 早く終わる傾向
  36. ©2020 Mirai Translate, Inc. All Rights Reserved. 課題を解決して何が改善されたか UX が改善された

    ・ファイル翻訳の待ち時間が 1/5 に短縮された ・ユーザーの待ち時間が短縮されたことによって顧客満⾜度が上がった 46
  37. ©2020 Mirai Translate, Inc. All Rights Reserved. 課題を解決して何が改善されたか 運⽤負荷が軽減された ・問い合わせ負荷の軽減

    ・Lambda 化することでサーバーを気にしなくて良くなった ・コンテナ化や SQS の使い⽅⾒直しによって プロセスを気軽に扱うことができるようになった 48
  38. ©2020 Mirai Translate, Inc. All Rights Reserved. まとめ コンテナ化と FaaS

    化、それに伴うアプリケーションの修正で UX とコスト両⽅を改善することができた AWS の適切な利⽤は⼤きな恩恵をもたらす 50