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