Weitere ähnliche Inhalte
Ähnlich wie 決済金融から始めるデータドリブンカンパニー #yjmu (20)
Mehr von Yahoo!デベロッパーネットワーク (20)
Kürzlich hochgeladen (12)
決済金融から始めるデータドリブンカンパニー #yjmu
- 1. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
2017/02/20
決済金融から始める
データドリブン
カンパニー
江藤 徳宏
- 2. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2
自己紹介
• 担当サービス
• Yahoo! ウォレット
• 本人確認
• 役割
• 運用エンジニア & 保守開発
• 学生時代の専門
• 数理科学(非線形偏微分方程式)
• 趣味
• ランニング(ラン歴3年、東京マラソン2015完走)
• スマホゲーム(パズドラ、PokemonGO)
- 3. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3
Yahoo! ウォレット
働いているところ
- 4. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4
データドリブン企業
ここ1年で、「ネット企業」から「データドリブン企業」へ!
ほとんどのサービスで、
データを利活用できるようにする
- 5. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5
データドリブンへの路
データ利活用しよう!
そのためのマインドマップを作成しました
- 6. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6
データドリブンへの路
CI/CD
- 7. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7
CI/CD
• テスト (commit build)
• コミットされたソースがテストされる
CI(Continuous Integration)
↑これらを自動的に行う!
• パッケージング (component build)
• レビューが完了したソースはメインブランチにマージ
される
• メインブランチへの変更をテストする
• テスト成功時のみ、パッケージを作成する
- 8. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8
CI/CD
• アセンブリ(assembly build)
• パッケージ群の構成リストを作成する
CD(Continuous Delivery)
↑これらを自動的に行う!
• デプロイ(deploy build)
• アセンブリで作成された構成リストにてサーバへのリリー
スを実施
• まっさらなサーバであれば、サービスが利用できる状態に
持っていく
- 9. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 9
CI/CD
• ソフト面(CI)
• テストがない
• テストなど必要ないと思っている
• ハード面(CD)
• 構成管理ができていない
• /etc/hostsは?
• routeは?
• LANGは?
• ディレクトリを手動で作っている
• リリース方法が原始的(手置き)
CI/CD 阻害要因
レガシーシステム
(技術的負債)
- 10. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10
今回のLTの目的
• 既存(古い)システム
• レガシーコードで書かれているものが多い
• テストがないので、改修が困難
• レガシーシステムと戦う方法
• テストのすすめ
• 構成管理のすすめ
- 12. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12
テストしづらいコード
モック化したい箇所が
ベタ書きだったら・・・
※実際の現場は、
こんなものではない
ですよ。。
この部分だけ
ごまかしたい
- 13. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 13
レガシーコードを斬る!
よく使うモッキングフレームワークその1
Phake
https://github.com/mlively/Phake
% cat composer.json
{
"require-dev": {
"phake/phake": "@stable”
}
}
% composer install
★導入方法
特徴
• MockObjectと似ている
• 1メソッドだけモックにすることが可能
• コールバック関数への置換
• 呼び出し検証機能
- 14. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14
レガシーコードを斬る!
ソース
まるごと関数でラップする
protected以上とする
- 15. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15
レガシーコードを斬る!
テスト
テスト対象クラスをpartialMockメソッドでインスタンス化
どの関数がどの引数で呼ばれたときに何がしを返す
- 16. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 16
レガシーコードを斬る!
よく使うモッキングフレームワークその2
AspectMock
https://github.com/Codeception/AspectMock
% cat composer.json
{
"require-dev": {
"codeception/aspect-mock": "*"
}
}
% composer install
★導入方法
特徴
• グローバル関数をドラスティックに変更
• コールバック関数への置換
• 呼び出し検証機能
- 17. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17
レガシーコードを斬る!
ソース
名前空間を指定する
この関数だけモック化
- 18. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18
レガシーコードを斬る!
テスト
名前空間、関数名、返却値を指定するだけ。
- 19. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19
テストのまとめ
• コミットされたソースについては、全部グリーンになること
• 何をテストしたいのか、観点を明確にする
• MockObjectでテストできないようなコードは書かない
(できればTDD実践!)
- 20. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20
テストのまとめ
レガシーコードに出会ったら・・・・・・
• 封印する
• フルスクラッチ
• 手を加えるならば必ずテストを書く
• in/outテスト
• 適切なモッキングフレームワークを使う
- 22. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22
CD
構成管理
• システムの構成要素を一元管理する
• ネットワーク設定
• アカウント、sudo権限
• hosts
• syslog
• パッケージ群(独自、rpm) etc…
管理するだけでなく、簡単に適用したい
- 23. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23
Chef
• システムのあるべき姿を「リソース」という単位で管理
Yahoo!ウォレットでは、Chefを導入中
• 「リソース」を束ねて、「レシピ」にまとめる
• 「レシピ」を適用する機能群を「ロール」にまとめる
• デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づける
• デプロイを実行する
- 24. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 24
Chef
Web AP DB
ATS
Apache
PHP
Web APL
ATS
Apache
Jetty
Logic APL
MySQL Server
ATS = Apache Traffic Server
- 25. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 25
Chef(環境とロール)
web-dev db-dev開発環境
本番環境 web-prod ap-prod db-prod
web-role ap-role db-role
ap-dev
- 26. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 26
Chef(レシピ)
web-recipe ap-recipe db-recipe
ATS install
Apache install
PHP install Jetty install
Web APL install Logic APL install MySQL install
レシピは再利用できるように、細かく分けるのがコツ
- 27. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 27
Chef(ロールとレシピ)
web-dev ap-dev db-dev
web-prod ap-prod db-prod
web-role ap-role db-role
web-recipe ap-recipe db-
recipe
run_list run_list run_list
- 28. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 28
Chef(CI + デプロイ)
web-dev
web-role
web-recipe
PC
Chef-client
Chef-server
git push
Chefdk
git.corp
web-dev-env
web-dev
CI-tool
web hook
Upload recipe
knife ssh
- 29. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 29
Chef(課題)
web01
web-role
web-recipe
Chef-server
web-prod-env
web01
LB
web04web02 web03
Internet
CI-tool
web02
web03 web04
web-prod-envへリリース!
環境に紐づく全ノード取得
- 30. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 30
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
なんらかの理由でデプロイ失敗。。
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
- 31. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 31
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
- 32. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 32
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
- 33. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 33
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
- 34. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 34
Chef(課題)
web01
LB
web04web02 web03
Internet
CI-tool
見事に全滅
web-role
web-recipe
Chef-server
web-prod-env
web01 web02
web03 web04
- 35. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 35
Chef(課題解決)
web01
web-role
web-recipe
Chef-server
LB
web04web02 web03
Internet
CI-tool
web03 web04
前半の環境に紐づく全ノード取得 web-prod-env-1
web-prod-env-2
web01 web02
前半だけリリース!
- 36. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 36
Chef(課題解決)
web01
LB
web04web02 web03
Internet
CI-tool
サービスアウト&リリース
環境を分けよう! web-role
web-recipe
Chef-server
web03 web04
web-prod-env-1
web-prod-env-2
web01 web02
- 37. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37
Chef(課題解決)
この件についてはissueが上がっているので、
きっと近いうちに修正されるはず!
https://github.com/chef/chef/issues/5399
- 38. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38
Chef(cookbook)
Rubyとリソースの組み合わせ
レシピ/recipes
リソース1 リソース2
リソース3 リソース4
材料1
材料集/files
リリースする資材
テンプレート1
材料2
これらを総称して、cookbookと呼ぶ
- 39. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 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
- 40. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 40
Chef(ATSを入れるレシピ)
remote_file '/tmp/master.zip' do
source 'https://github.com/apache/trafficserver/archive/master.zip'
mode '0444'
end
- 41. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 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
- 42. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42
今後のロードマップ
• eコマース事業拡大に伴い、ウォレットへの需要は高まる
• 売り場での決済時アクセスが増える
• パーソナライズのための情報提供を安全に完全に行う
• プロダクトの品質を、高カバレッジな自動テストで担保
• 実機から仮想環境へ。ペットから家畜への移行が必要
• より正確で迅速なデプロイ作業をChefで実現
- 43. Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
情報技術で
人々のマネーライフの課題を解決する
決済金融カンパニー
43