Slide 1

Slide 1 text

フェーズ変化、プロダクトの成長に伴 う技術的変遷 2024/02/20 株式会社Voicy 灘脇裕一 (@natacoon) 【タイミー/Voicy/令和トラベル】 Backend LT〜技術選定における“見極める力”とは〜

Slide 2

Slide 2 text

自己紹介 灘脇 裕一 Backend Engineer 機能開発チームリーダー スクラムマスター 2012.04 - HRTech 2020.07 - Voicy 本日はよろしくお願いします! @natacoon 好きなモノ: 服とねことスプラトゥーン 株式会社Voicy

Slide 3

Slide 3 text

サービス紹介

Slide 4

Slide 4 text

サービス紹介

Slide 5

Slide 5 text

本題

Slide 6

Slide 6 text

採用している技術関連のあれこれ VoicyのWantedlyから拝借

Slide 7

Slide 7 text

Voicyの歴史 創業期
 シリーズA初期
 シリーズA後期
 シリーズB
 1~3名 + 
 業務委託
 10名 + 
 オフショア10名
 5名 + 
 オフショア4名
 25名
 機能開発優先
 負債による
 品質問題
 負債解消
 MVPに向かって
 とにかく開発
 調達したお金で
 ヒトを集めたが、
 全社で組織崩壊
 チーム立ち上げと
 開発プロセスの
 変更で混沌期
 技術的な負債や
 品質改善への
 投資
 ソフトウェア
 トピックス
 エンジニア
 会社
 トピックス
 Voicy 開発組織年表 
 リアーキテクトの頓 挫
 私はココでJOIN

Slide 8

Slide 8 text

創業期 ● MVPを目指し、ローンチ最優先 ● 言語はJavaをメインとしていたが、一部Golang を採用し始めていた

Slide 9

Slide 9 text

シリーズA初期 当時のブログ ● ローンチ後、変更がし辛い状態になってきた ● アーキテクチャを刷新しようとした ○ BFF ○ 実行基盤をkubernetesクラスタ上に ○ etc…

Slide 10

Slide 10 text

シリーズA初期 当時のブログ 組織が崩壊したことにより、この計画が頓挫😭 当時いたメンバーは0人に。

Slide 11

Slide 11 text

シリーズA後期 ● 以下を一から作りなおす ○ Javaで作られていたサーバー ○ Fatコントローラーのオンパレードに なってしまっていたGo製サーバー ● レイヤードアーキテクチャ ● BFFを廃止した ○ (実質BFFとしての機能を果たせる状態 を実現できなかった) ● 規模的にkubernetesである必要性はなかっ たが、使用を継続 新API作成
 


Slide 12

Slide 12 text

シリーズA後期 Database ● RDSをAuroraへ ○ 今後のユーザー数増加に耐えられるように ○ (この頃は人気パーソナリティさんのコンテンツでアクセス集中するとDB負荷 で結構落ちていた・・・)

Slide 13

Slide 13 text

(旧)push 型 (新)pull 型の GitOps シリーズA後期 CD Pipeline ● 全体像として push 型から pull 型へ ● 利用ツールは skaffold から flux へ

Slide 14

Slide 14 text

(旧)push 型 (新)pull 型の GitOps シリーズA後期 CD Pipeline 当時・・・ ● FluxCD - star 5k ● ArgoCD - star 3.2 k ● ArgoCD は若干これから育っていくコミュニ ティという背景 ● → Weaveworksが推進していたし、扱ってみ た上で違和感のなかった Fluxcd をそのまま 採用

Slide 15

Slide 15 text

シリーズA後期 GCPに散っていた機能たちをAWSへ ● 主要利用箇所がAWSに寄ってきていた ● AWS -> GCP -> AWS という謎の流れをする機能まで存在していた ○ 変更もテストも大変😭 ● GKE から EKS へ

Slide 16

Slide 16 text

シリーズA後期 状態 ● デリバリーはある程度安定 ● 課題感を共通認識にすることができてきた

Slide 17

Slide 17 text

シリーズA後期 課題感 ● 分離された思想 ● 異なる思想で開発されたAPIを開発する必要 がある ● 加えて、ドメインモデルなどは整備されて おらず、徐々に開発スピードが落ちていっ た ● k8sのカナリアやロールバックをあまり使え ずにいた

Slide 18

Slide 18 text

シリーズB(イマココ) ● 大型リファクタリングを行う意思決定 ● 限定的な機能から、モジュラーモノリスへ ・・・! リプレイス対象


Slide 19

Slide 19 text

シリーズB(イマココ) ● アーキテクトを中心に概念を整理 ● コードの構造で境界を明示的に作る ● 共通概念を見つけ出してモジュールにし、 再利用しやすいように Recorder
 Player
 Operator
 module 1
 module 2
 module 3
 module 4
 …


Slide 20

Slide 20 text

シリーズB(イマココ) CDをFluxからArgoCDへ ● Flux2への移行が公式から推奨されていたが、なかなか移行できな い状態が続いていた ● GUIに定評もあることなどもあり、ArgoCDを選択

Slide 21

Slide 21 text

シリーズB(イマココ) To be continued…

Slide 22

Slide 22 text

まとめ

Slide 23

Slide 23 text

まとめ ● フェーズごとの達成したい事業目標、組織の成熟度に合わせた技術選定 ● 目指す時期から、諦める部分を見極める ● 組織の文化・機能が向上し、事業にインパクトを見込める段階で大きい規模の リアーキテクトに移行する

Slide 24

Slide 24 text

おまけ

Slide 25

Slide 25 text

お知らせ VoicyでエンジニアのVoicyのエンジニアメンバーが テックニュースや日々の活動をお届けしています!!

Slide 26

Slide 26 text

お知らせ Pittaでカジュアル面談をやってます! 転職関係ない話もウェルカムなのでお話しましょう〜 XのDMでもおっけーです! @natacoon

Slide 27

Slide 27 text

ご清聴ありがとうございました