決済金融から始めるデータドリブンカンパニー #yjmu

199 Views

February 20, 17

スライド概要

Yahoo! JAPAN MeetUp #9 (EC技術カンファレンス)
LT「決済金融から始めるデータドリブンカンパニー」の発表で使用した資料となります。

https://yj-meetup.connpass.com/event/48215/

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

決済金融から始める データドリブン カンパニー 2017/02/20 江藤 徳宏 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

2.

自己紹介 • 担当サービス • Yahoo! ウォレット • 本人確認 • 役割 • 運用エンジニア & 保守開発 • 学生時代の専門 • 数理科学(非線形偏微分方程式) • 趣味 • ランニング(ラン歴3年、東京マラソン2015完走) • スマホゲーム(パズドラ、PokemonGO) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2

3.

Yahoo! ウォレット 働いているところ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3

4.

データドリブン企業 ここ1年で、「ネット企業」から「データドリブン企業」へ! ほとんどのサービスで、 データを利活用できるようにする Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4

5.

データドリブンへの路 データ利活用しよう! そのためのマインドマップを作成しました Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5

6.

データドリブンへの路 CI/CD Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6

7.

CI/CD CI(Continuous Integration) • テスト (commit build) • コミットされたソースがテストされる • パッケージング (component build) • レビューが完了したソースはメインブランチにマージ される • メインブランチへの変更をテストする • テスト成功時のみ、パッケージを作成する ↑これらを自動的に行う! Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7

8.

CI/CD CD(Continuous Delivery) • アセンブリ(assembly build) • パッケージ群の構成リストを作成する • デプロイ(deploy build) • アセンブリで作成された構成リストにてサーバへのリリー スを実施 • まっさらなサーバであれば、サービスが利用できる状態に 持っていく ↑これらを自動的に行う! Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8

9.

CI/CD CI/CD 阻害要因 • ソフト面(CI) • テストがない • テストなど必要ないと思っている • ハード面(CD) • 構成管理ができていない • /etc/hostsは? • routeは? • LANGは? • ディレクトリを手動で作っている • リリース方法が原始的(手置き) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. レガシーシステム (技術的負債) 9

10.

今回のLTの目的 • 既存(古い)システム • レガシーコードで書かれているものが多い • テストがないので、改修が困難 • レガシーシステムと戦う方法 • テストのすすめ • 構成管理のすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10

11.

CI テストのすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

12.

テストしづらいコード モック化したい箇所が ベタ書きだったら・・・ この部分だけ ごまかしたい ※実際の現場は、 こんなものではない ですよ。。 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12

13.

レガシーコードを斬る! よく使うモッキングフレームワークその1 Phake https://github.com/mlively/Phake 特徴 • • • • MockObjectと似ている 1メソッドだけモックにすることが可能 コールバック関数への置換 呼び出し検証機能 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. ★導入方法 % cat composer.json { "require-dev": { "phake/phake": "@stable” } } % composer install 13

14.

レガシーコードを斬る! ソース まるごと関数でラップする protected以上とする Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14

15.

レガシーコードを斬る! テスト テスト対象クラスをpartialMockメソッドでインスタンス化 どの関数がどの引数で呼ばれたときに何がしを返す Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15

16.

レガシーコードを斬る! よく使うモッキングフレームワークその2 ★導入方法 AspectMock https://github.com/Codeception/AspectMock 特徴 % cat composer.json { "require-dev": { "codeception/aspect-mock": "*" } } % composer install • グローバル関数をドラスティックに変更 • コールバック関数への置換 • 呼び出し検証機能 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 16

17.

レガシーコードを斬る! ソース 名前空間を指定する この関数だけモック化 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17

18.

レガシーコードを斬る! テスト 名前空間、関数名、返却値を指定するだけ。 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18

19.

テストのまとめ • コミットされたソースについては、全部グリーンになること • 何をテストしたいのか、観点を明確にする • MockObjectでテストできないようなコードは書かない (できればTDD実践!) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19

20.

テストのまとめ レガシーコードに出会ったら・・・・・・ • 封印する • 手を加えるならば必ずテストを書く • in/outテスト • 適切なモッキングフレームワークを使う • フルスクラッチ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20

21.

CD 構成管理のすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

22.

CD 構成管理 • システムの構成要素を一元管理する • • • • • ネットワーク設定 アカウント、sudo権限 hosts syslog パッケージ群(独自、rpm) etc… 管理するだけでなく、簡単に適用したい Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22

23.

Chef Yahoo!ウォレットでは、Chefを導入中 • システムのあるべき姿を「リソース」という単位で管理 • 「リソース」を束ねて、「レシピ」にまとめる • 「レシピ」を適用する機能群を「ロール」にまとめる • デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づける • デプロイを実行する Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23

24.

Chef Web AP DB ATS Apache PHP Web APL ATS Apache Jetty Logic APL MySQL Server ATS = Apache Traffic Server Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 24

25.

Chef(環境とロール) 開発環境 web-dev web-role 本番環境 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web-prod ap-dev ap-role ap-prod db-dev db-role db-prod 25

26.

Chef(レシピ) ATS install Apache install web-recipe ap-recipe PHP install Jetty install Web APL install Logic APL install db-recipe MySQL install レシピは再利用できるように、細かく分けるのがコツ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 26

27.

Chef(ロールとレシピ) web-role ap-role db-role web-dev ap-dev db-dev web-prod ap-prod db-prod run_list web-recipe Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. run_list run_list ap-recipe dbrecipe 27

28.

Chef(CI + デプロイ) web-role web-dev Chef-client web-recipe knife ssh Upload recipe web-dev-env web hook git push web-dev git.corp CI-tool PC Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. Chefdk Chef-server 28

29.

Chef(課題) web01 web02 web03 web04 web-role web-recipe web-prod-env LB 環境に紐づく全ノード取得 web01 web02 web03 web04 CI-tool web-prod-envへリリース! Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. Chef-server 29

30.

Chef(課題) なんらかの理由でデプロイ失敗。。 web01 web02 web03 web04 web-role web-recipe サービスアウト&リリース LB CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web-prod-env web01 web02 web03 web04 Chef-server 30

31.

Chef(課題) web01 web02 web03 web04 web-role web-recipe LB サービスアウト&リリース CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web-prod-env web01 web02 web03 web04 Chef-server 31

32.

Chef(課題) web01 web02 web03 web04 web-role web-recipe LB サービスアウト&リリース CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web-prod-env web01 web02 web03 web04 Chef-server 32

33.

Chef(課題) web01 web02 web03 web04 web-role web-recipe LB サービスアウト&リリース CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web-prod-env web01 web02 web03 web04 Chef-server 33

34.

Chef(課題) web01 web02 web03 web04 web-role web-recipe 見事に全滅 web-prod-env LB CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web01 web02 web03 web04 Chef-server 34

35.

Chef(課題解決) web01 web02 web03 web04 web-role web-recipe LB 前半の環境に紐づく全ノード取得 web-prod-env-1 web01 CI-tool 前半だけリリース! Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web02 web-prod-env-2 web03 web04 Chef-server 35

36.

Chef(課題解決) web01 web02 web03 環境を分けよう! web04 web-role web-recipe LB サービスアウト&リリース web-prod-env-1 web01 web02 web-prod-env-2 CI-tool Internet Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. web03 web04 Chef-server 36

37.

Chef(課題解決) この件についてはissueが上がっているので、 きっと近いうちに修正されるはず! https://github.com/chef/chef/issues/5399 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37

38.

Chef(cookbook) 材料1 テンプレート1 リソース1 リソース3 材料2 材料集/files リリースする資材 リソース2 リソース4 レシピ/recipes Rubyとリソースの組み合わせ これらを総称して、cookbookと呼ぶ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38

39.

Chef(ATSを入れるレシピ) %w(pkgconfig libtool gcc make openssl tcl pcre libcap flex hwloc lua ncurses curl).each do |pkg| yum_package pkg do action :install end end Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 39

40.

Chef(ATSを入れるレシピ) remote_file '/tmp/master.zip' do source 'https://github.com/apache/trafficserver/archive/master.zip' mode '0444' end Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 40

41.

Chef(ATSを入れるレシピ) execute 'expand ATS' do command <<-EOF cd /tmp/; unzip master.zip cd trafficserver-master; autoreconf -if ./configure --prefix=/opt/ats make; make check; make install EOF end Install_ats.rb Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 41

42.

今後のロードマップ • eコマース事業拡大に伴い、ウォレットへの需要は高まる • 売り場での決済時アクセスが増える • パーソナライズのための情報提供を安全に完全に行う • 実機から仮想環境へ。ペットから家畜への移行が必要 • プロダクトの品質を、高カバレッジな自動テストで担保 • より正確で迅速なデプロイ作業をChefで実現 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42

43.

情報技術で 人々のマネーライフの課題を解決する 決済金融カンパニー Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 43