8K Views
February 29, 24
スライド概要
カーシェアサービス「エニカ(Anyca)」では、8年間のサービス運用に伴い複雑になったコードと硬直化したインフラを克服するべく、Perl から Go への転換、そしてインフラ刷新を目指しています。Perl 開発環境の整備と移行テストを経て、AWS コンサルや DeNA のインフラチームと協力することで Go と Perl の併用環境まで実現しました。
本登壇では、キラキラしたベストな言語移行を共有するわけではありません。限られたリソースで現状の問題を打破するためにもがきながら取り組んできて、良かったこと、苦しんでいること、そこから見えてきたノウハウなどを赤裸々に紹介します。
DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。
Perl to Goから始まるシステム刷新 DeNA SOMPO Mobility 泉川 貴洋 © DeNA Co., Ltd.
泉川 貴洋 / いずみかわ たかひろ 所属 DeNA SOMPO Mobility グロース本部プロダクト開発部 担当 Anyca サーバサイドエンジニア 出⾝ ⾹川県 家族構成 妻と2歳の娘の3⼈家族 @izumix0303 © DeNA Co., Ltd. 2
エニカとは 新型⾞‧⾼級⾞など1,300以上の⾞種に乗れる、 個⼈間を中⼼としたカーシェアサービス。 カーシェアを通じた理想のライフスタイルを提供 © DeNA Co., Ltd. 3
本⽇の話 Anycaのサーバサイドの システム刷新 © DeNA Co., Ltd. 4
本⽇の話 Anycaのサーバサイドの システム刷新 ⾔語移⾏ (Perl to Go) © DeNA Co., Ltd. 5
本⽇の話 Anycaのサーバサイドの システム刷新 ⾔語移⾏ (Perl to Go) © DeNA Co., Ltd. インフラ移⾏(新 AWS環境) 6
アジェンダ © DeNA Co., Ltd. 7
アジェンダ 1. © DeNA Co., Ltd. Perl to Goから始まるシステム刷新 8
アジェンダ © DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 9
アジェンダ © DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 10
© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 11
1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 12
1. Perl to Goから始まるシステム刷新 Perl to Go の背景 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 13
1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 1. 2. エニカと ⾔語移⾏理由 Go を選択した 理由 14
1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 1. 2. 3. エニカと ⾔語移⾏理由 Go を選択した 理由 インフラ移⾏の 理由 15
1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 16
1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 幅広い機能 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. ‧本⼈確認、チャット、保険、決済... ‧ドライバー or オーナー ‧個⼈間、ディーラーカーシェア(法⼈)、AOSC... 17
1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 幅広い機能 1. エニカと ⾔語移⾏理由 ‧本⼈確認、チャット、保険、決済... ‧ドライバー or オーナー ‧個⼈間、ディーラーカーシェア(法⼈)、AOSC... 複雑で⼤規模なコード ‧空⾏やコメントを除いて40万⾏以上 ‧仕様も残っていないことが多い ‧複雑性も増し、機能開発、改善の影響を読み切るのが⼤変 © DeNA Co., Ltd. 18
1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 19
1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 20
1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 今後も機能開発を活発に⾏う必要があるが... 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. ‧運⽤保守コストも⾼く、⼈が全く⾜りていない ‧サーバサイドエンジニア(正社員3⼈ + 業務委託1⼈) 21
1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 今後も機能開発を活発に⾏う必要があるが... 1. エニカと ⾔語移⾏理由 ‧運⽤保守コストも⾼く、⼈が全く⾜りていない ‧サーバサイドエンジニア(正社員3⼈ + 業務委託1⼈) 遠くない将来、サービス継続が難しくなる © DeNA Co., Ltd. 22
1. Perl to Goから始まるシステム刷新 2. Go を選択した 理由 © DeNA Co., Ltd. 23
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 全員が書ける or 学びやすい 2. Go を選択した 理由 © DeNA Co., Ltd. 24
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 © DeNA Co., Ltd. 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 25
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 26
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 27
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 28
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 29
1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 30
1. Perl to Goから始まるシステム刷新 3. インフラ移⾏の 理由 © DeNA Co., Ltd. 31
1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 3. インフラ移⾏の 理由 © DeNA Co., Ltd. 32
1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 普段の運⽤では、⼤きな⼯数削減 3. ⾔語移⾏時は、お互いにコミュニケーションコスト インフラ移⾏の 理由 © DeNA Co., Ltd. 33
1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 普段の運⽤では、⼤きな⼯数削減 3. インフラ移⾏の 理由 © DeNA Co., Ltd. ⾔語移⾏時は、お互いにコミュニケーションコスト 話し合いの結果、 新AWSアカウントを作って、 まずは新旧併⽤構成から始める 34
1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. 35
1. Perl to Goから始まるシステム刷新 ⾔語移⾏理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア © DeNA Co., Ltd. 36
1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. ⾔語移⾏理由 Goを選択した理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア 現メンバーで開発可能 採⽤のしやすさ 今後の開発のしやすさ 37
1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. ⾔語移⾏理由 Goを選択した理由 インフラ移⾏の理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア 現メンバーで開発可能 採⽤のしやすさ 今後の開発のしやすさ 弊社独⾃の背景 スムーズな⾔語移⾏ 38
© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 39
2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 40
2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 41
2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 42
2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 43
2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 44
2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 45
2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 46
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! © DeNA Co., Ltd. 47
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! 既存機能の、新規開発や運⽤の優先度が上がるとすぐ⽌める © DeNA Co., Ltd. 48
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! 既存機能の、新規開発や運⽤の優先度が上がるとすぐ⽌める 結果、、、 形にならない⽇々が続いた... © DeNA Co., Ltd. 49
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 学び © DeNA Co., Ltd. 50
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 私含め2⼈のエンジニアが専属でシステム刷新 学び © DeNA Co., Ltd. 51
2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 私含め2⼈のエンジニアが専属でシステム刷新 ⽴ち上げは 集中して⾏わないと形にならない 学び © DeNA Co., Ltd. 52
2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 53
2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート © DeNA Co., Ltd. 54
2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート 上⼿く価値発信できない。。 このまま継続?事業的価値は? © DeNA Co., Ltd. 55
2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート 上⼿く価値発信できない。。 このまま継続?事業的価値は? 結果、、、 3か⽉後、新サービス開発(WEB)の話が浮上 プロジェクト停⽌の危機 © DeNA Co., Ltd. 56
2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! 学び © DeNA Co., Ltd. 57
2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! ⼤変ではあるが、事業的価値が明確になり、 「みんなに応援されるプロジェクト」になった! 学び © DeNA Co., Ltd. 58
2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! ⼤変ではあるが、事業的価値が明確になり、 「みんなに応援されるプロジェクト」になった! 学び システム刷新継続のためには、 事業的価値の発信が必要 © DeNA Co., Ltd. 59
2. 失敗と学び 価値発信できず継続危機 注意点 新機能開発の優先順位が上がりすぎる... © DeNA Co., Ltd. 60
2. 失敗と学び 価値発信できず継続危機 注意点 新機能開発の優先順位が上がりすぎる... 新機能開発に関連する機能を 移⾏対象にしよう! © DeNA Co., Ltd. 61
2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 62
2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... © DeNA Co., Ltd. 63
2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... 2つのAWSアカウントをTransit Gatewayで繋いで、 APIもWEBも同⼀ドメインで運⽤... AWSの構成がイレギュラー過ぎて ⾃信が持てない...「本当にこれで良いのか?」 © DeNA Co., Ltd. 64
2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... 2つのAWSアカウントをTransit Gatewayで繋いで、 APIもWEBも同⼀ドメインで運⽤... AWSの構成がイレギュラー過ぎて ⾃信が持てない...「本当にこれで良いのか?」 結果、、、 迷⾛してしまった... © DeNA Co., Ltd. 65
2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 学び © DeNA Co., Ltd. 66
2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 毎週のように相談して、新環境の利⽤技術、 新旧併⽤環境のインフラ構成を壁打ち 学び © DeNA Co., Ltd. 67
2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 毎週のように相談して、新環境の利⽤技術、 新旧併⽤環境のインフラ構成を壁打ち 学び 専⾨家に頼ることが⼤事! © DeNA Co., Ltd. 68
2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 69
2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 © DeNA Co., Ltd. 70
2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 新基盤の構築と並⾏しての 新サービスリリース、、間に合わない。。 社内にヘルプお願いできる先もない... © DeNA Co., Ltd. 71
2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 新基盤の構築と並⾏しての 新サービスリリース、、間に合わない。。 社内にヘルプお願いできる先もない... 結果、、、 インフラ構築を⼀部諦めるしかない。。 © DeNA Co., Ltd. 72
2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 学び © DeNA Co., Ltd. 73
2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 結果、API、WEBともに新旧併⽤環境を 構築しつつ、新サービスのリリースも達成! 学び © DeNA Co., Ltd. 74
2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 結果、API、WEBともに新旧併⽤環境を 構築しつつ、新サービスのリリースも達成! 学び 忙しいからきっと無理、と決めつけず、 仲間に頼ることが⼤事! © DeNA Co., Ltd. 75
2. 失敗と学び © DeNA Co., Ltd. 76
2. 失敗と学び ⽴ち上げは 集中的に! 1. ⽚⼿間⽴上げで お蔵⼊り危機 © DeNA Co., Ltd. 77
2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 1. 2. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 78
2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 専⾨家に 頼ろう! 1. 2. 3. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 79
2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 専⾨家に 頼ろう! 思い込みせず、 仲間に頼ろう! 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 80
© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 81
3. 新基盤の概要紹介 新基盤API概要 © DeNA Co., Ltd. 82
3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 © DeNA Co., Ltd. 83
3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング © DeNA Co., Ltd. 84
3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ © DeNA Co., Ltd. 85
3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ ‧DBは旧環境のものを利⽤ © DeNA Co., Ltd. 86
3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ ‧DBは旧環境のものを利⽤ ‧新基盤のインフラはTerraformで管理 © DeNA Co., Ltd. 87
3. 新基盤の概要紹介 新基盤WEB概要 © DeNA Co., Ltd. 88
3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え © DeNA Co., Ltd. 89
3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting © DeNA Co., Ltd. 90
3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting ‧Amplify CF に直接接続できないよう Basic認証を付与 ‧旧環境 ALB に直接接続できないように Nginx の server_name を設定 © DeNA Co., Ltd. 91
3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting ‧Amplify CF に直接接続できないよう Basic認証を付与 ‧旧環境 ALB に直接接続できないように Nginx の server_name を設定 ‧旧基盤のWEBでも端末IPを取得できるように CF Functions で true-client-ip をヘッダ付与 © DeNA Co., Ltd. 92
3. 新基盤の概要紹介 その他 https://speakerdeck.com/izumix03/shi-ishe-teapinosusume © DeNA Co., Ltd. 93
システム刷新をしたい、 絶対やりきりたい、 その思いが何より⼤切です。 諦めなければ絶対に達成できるので、 諦めなくても良いように.. 道のりを楽しんで、⼀緒に頑張りましょう! © DeNA Co., Ltd. 94