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

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

  • Upload
    yahoo

  • View
    140

  • Download
    2

Embed Size (px)

Citation preview

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

2017/02/20

決済金融から始める

データドリブン

カンパニー

江藤 徳宏

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 2

自己紹介

• 担当サービス• Yahoo! ウォレット• 本人確認

• 役割• 運用エンジニア & 保守開発

• 学生時代の専門• 数理科学(非線形偏微分方程式)

• 趣味• ランニング(ラン歴3年、東京マラソン2015完走)

• スマホゲーム(パズドラ、PokemonGO)

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 3

Yahoo! ウォレット

働いているところ

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 4

データドリブン企業

ここ1年で、「ネット企業」から「データドリブン企業」へ!

ほとんどのサービスで、データを利活用できるようにする

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 5

データドリブンへの路

データ利活用しよう!

そのためのマインドマップを作成しました

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 6

データドリブンへの路

CI/CD

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 7

CI/CD

• テスト (commit build)• コミットされたソースがテストされる

CI(Continuous Integration)

↑これらを自動的に行う!

• パッケージング (component build)• レビューが完了したソースはメインブランチにマージされる

• メインブランチへの変更をテストする• テスト成功時のみ、パッケージを作成する

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 8

CI/CD

• アセンブリ(assembly build)• パッケージ群の構成リストを作成する

CD(Continuous Delivery)

↑これらを自動的に行う!

• デプロイ(deploy build)• アセンブリで作成された構成リストにてサーバへのリリースを実施

• まっさらなサーバであれば、サービスが利用できる状態に持っていく

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 9

CI/CD

• ソフト面(CI)• テストがない• テストなど必要ないと思っている

• ハード面(CD)• 構成管理ができていない

• /etc/hostsは?• routeは?• LANGは?• ディレクトリを手動で作っている

• リリース方法が原始的(手置き)

CI/CD 阻害要因

レガシーシステム(技術的負債)

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 10

今回のLTの目的

• 既存(古い)システム• レガシーコードで書かれているものが多い• テストがないので、改修が困難

• レガシーシステムと戦う方法• テストのすすめ• 構成管理のすすめ

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

CI

テストのすすめ

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 12

テストしづらいコード

モック化したい箇所がベタ書きだったら・・・

※実際の現場は、こんなものではないですよ。。

この部分だけごまかしたい

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

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メソッドだけモックにすることが可能• コールバック関数への置換• 呼び出し検証機能

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 14

レガシーコードを斬る!

ソース

まるごと関数でラップするprotected以上とする

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 15

レガシーコードを斬る!

テスト

テスト対象クラスをpartialMockメソッドでインスタンス化どの関数がどの引数で呼ばれたときに何がしを返す

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

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

★導入方法

特徴• グローバル関数をドラスティックに変更• コールバック関数への置換• 呼び出し検証機能

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 17

レガシーコードを斬る!

ソース名前空間を指定する

この関数だけモック化

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 18

レガシーコードを斬る!

テスト名前空間、関数名、返却値を指定するだけ。

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 19

テストのまとめ

• コミットされたソースについては、全部グリーンになること

• 何をテストしたいのか、観点を明確にする

• MockObjectでテストできないようなコードは書かない(できればTDD実践!)

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 20

テストのまとめ

レガシーコードに出会ったら・・・・・・

• 封印する

• フルスクラッチ

• 手を加えるならば必ずテストを書く• in/outテスト• 適切なモッキングフレームワークを使う

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

CD

構成管理のすすめ

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 22

CD

構成管理

• システムの構成要素を一元管理する

• ネットワーク設定• アカウント、sudo権限• hosts• syslog• パッケージ群(独自、rpm) etc…

管理するだけでなく、簡単に適用したい

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 23

Chef

• システムのあるべき姿を「リソース」という単位で管理

Yahoo!ウォレットでは、Chefを導入中

• 「リソース」を束ねて、「レシピ」にまとめる

• 「レシピ」を適用する機能群を「ロール」にまとめる

• デプロイ先のサーバ群を「環境」にまとめ、ロールを紐づける

• デプロイを実行する

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

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

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

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

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

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

レシピは再利用できるように、細かく分けるのがコツ

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

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

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

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

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

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へリリース!

環境に紐づく全ノード取得

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

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

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

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

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

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

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

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

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

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

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

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

前半だけリリース!

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

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

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 37

Chef(課題解決)

この件についてはissueが上がっているので、きっと近いうちに修正されるはず!

https://github.com/chef/chef/issues/5399

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 38

Chef(cookbook)

Rubyとリソースの組み合わせ

レシピ/recipes

リソース1 リソース2

リソース3 リソース4

材料1

材料集/files

リリースする資材

テンプレート1

材料2

これらを総称して、cookbookと呼ぶ

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

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

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

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

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

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

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved. 42

今後のロードマップ

• eコマース事業拡大に伴い、ウォレットへの需要は高まる• 売り場での決済時アクセスが増える• パーソナライズのための情報提供を安全に完全に行う

• プロダクトの品質を、高カバレッジな自動テストで担保

• 実機から仮想環境へ。ペットから家畜への移行が必要

• より正確で迅速なデプロイ作業をChefで実現

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

Copyright © 2017 Yahoo Japan Corporation. All Rights Reserved.

情報技術で

人々のマネーライフの課題を解決する

決済金融カンパニー

43