247 Views
February 20, 17
スライド概要
Yahoo! JAPAN MeetUp #9 (EC技術カンファレンス)
LT「決済金融から始めるデータドリブンカンパニー」の発表で使用した資料となります。
https://yj-meetup.connpass.com/event/48215/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
決済金融から始める データドリブン カンパニー 2017/02/20 江藤 徳宏 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
自己紹介 • 担当サービス • Yahoo! ウォレット • 本人確認 • 役割 • 運用エンジニア & 保守開発 • 学生時代の専門 • 数理科学(非線形偏微分方程式) • 趣味 • ランニング(ラン歴3年、東京マラソン2015完走) • スマホゲーム(パズドラ、PokemonGO) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2
Yahoo! ウォレット 働いているところ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3
データドリブン企業 ここ1年で、「ネット企業」から「データドリブン企業」へ! ほとんどのサービスで、 データを利活用できるようにする Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4
データドリブンへの路 データ利活用しよう! そのためのマインドマップを作成しました Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5
データドリブンへの路 CI/CD Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6
CI/CD CI(Continuous Integration) • テスト (commit build) • コミットされたソースがテストされる • パッケージング (component build) • レビューが完了したソースはメインブランチにマージ される • メインブランチへの変更をテストする • テスト成功時のみ、パッケージを作成する ↑これらを自動的に行う! Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7
CI/CD CD(Continuous Delivery) • アセンブリ(assembly build) • パッケージ群の構成リストを作成する • デプロイ(deploy build) • アセンブリで作成された構成リストにてサーバへのリリー スを実施 • まっさらなサーバであれば、サービスが利用できる状態に 持っていく ↑これらを自動的に行う! Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8
CI/CD CI/CD 阻害要因 • ソフト面(CI) • テストがない • テストなど必要ないと思っている • ハード面(CD) • 構成管理ができていない • /etc/hostsは? • routeは? • LANGは? • ディレクトリを手動で作っている • リリース方法が原始的(手置き) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. レガシーシステム (技術的負債) 9
今回のLTの目的 • 既存(古い)システム • レガシーコードで書かれているものが多い • テストがないので、改修が困難 • レガシーシステムと戦う方法 • テストのすすめ • 構成管理のすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10
CI テストのすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
テストしづらいコード モック化したい箇所が ベタ書きだったら・・・ この部分だけ ごまかしたい ※実際の現場は、 こんなものではない ですよ。。 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12
レガシーコードを斬る! よく使うモッキングフレームワークその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
レガシーコードを斬る! ソース まるごと関数でラップする protected以上とする Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14
レガシーコードを斬る! テスト テスト対象クラスをpartialMockメソッドでインスタンス化 どの関数がどの引数で呼ばれたときに何がしを返す Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15
レガシーコードを斬る! よく使うモッキングフレームワークその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
レガシーコードを斬る! ソース 名前空間を指定する この関数だけモック化 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17
レガシーコードを斬る! テスト 名前空間、関数名、返却値を指定するだけ。 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18
テストのまとめ • コミットされたソースについては、全部グリーンになること • 何をテストしたいのか、観点を明確にする • MockObjectでテストできないようなコードは書かない (できればTDD実践!) Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19
テストのまとめ レガシーコードに出会ったら・・・・・・ • 封印する • 手を加えるならば必ずテストを書く • in/outテスト • 適切なモッキングフレームワークを使う • フルスクラッチ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20
CD 構成管理のすすめ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.
CD 構成管理 • システムの構成要素を一元管理する • • • • • ネットワーク設定 アカウント、sudo権限 hosts syslog パッケージ群(独自、rpm) etc… 管理するだけでなく、簡単に適用したい Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22
Chef Yahoo!ウォレットでは、Chefを導入中 • システムのあるべき姿を「リソース」という単位で管理 • 「リソース」を束ねて、「レシピ」にまとめる • 「レシピ」を適用する機能群を「ロール」にまとめる • デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づける • デプロイを実行する Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23
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
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
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
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
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
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
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
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
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
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
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
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
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
Chef(課題解決) この件についてはissueが上がっているので、 きっと近いうちに修正されるはず! https://github.com/chef/chef/issues/5399 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37
Chef(cookbook) 材料1 テンプレート1 リソース1 リソース3 材料2 材料集/files リリースする資材 リソース2 リソース4 レシピ/recipes Rubyとリソースの組み合わせ これらを総称して、cookbookと呼ぶ Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38
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
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
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
今後のロードマップ • eコマース事業拡大に伴い、ウォレットへの需要は高まる • 売り場での決済時アクセスが増える • パーソナライズのための情報提供を安全に完全に行う • 実機から仮想環境へ。ペットから家畜への移行が必要 • プロダクトの品質を、高カバレッジな自動テストで担保 • より正確で迅速なデプロイ作業をChefで実現 Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42
情報技術で 人々のマネーライフの課題を解決する 決済金融カンパニー Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 43