...

大規模eコマースシステムの コマースシステムの DevOpsを実現する

by user

on
Category: Documents
9

views

Report

Comments

Transcript

大規模eコマースシステムの コマースシステムの DevOpsを実現する
大規模e
大規模eコマースシステムの
DevOpsを実現する
DevOpsを実現するExalogic
を実現するExalogic
9 / April / 2015
仲宗根徹也
EC architecture group, Rakuten, Inc.
http://www.rakuten.co.jp/
アジェンダ
1. 自己紹介と会社概要
2. Exalogic導入背景と結果
3. Engineered SystemsとDevOps
4. まとめ
2
アジェンダ
1. 自己紹介と会社概要
2. Exalogic導入背景と結果
3. Engineered SystemsとDevOps
4. まとめ
3
自己紹介
Tetsuya Nakasone
@tets01
Technical Managing Officer
EC Architecture group
EC Technology Section
Rakuten Ichiba Development Department
Rakuten, Inc.
4
Global Expansion
●●●●●●
●●● ●
● ●● ●
●● ●
●●
●● ● ●
●●
●●
●●
●●
●
●
●
●
●
●
●●●●●●
Head Office
●●
●● ●
●●
●●●
●●●
●
eコマース
電子書籍
トラベル
その他サービス&ビジネス
●
●
●
楽天技術研究所
開発拠点
本社 / 地域本社
5
アジェンダ
1. 自己紹介と会社概要
2. Exalogic導入背景と結果
3. Engineered SystemとDevOps
4. まとめ
6
Exalogicとは?
Exalogicとは?
Oracle Engineered Systems
Specialized Product
for Middleware
- WebLogic
- Coherence
- Tuxedo
Total Solution
7
楽天市場は様々な要素で出来ている
Biz App
Biz App
Biz API
Biz API
Biz App
Biz App
Biz API
8
大量のWebLogicドメインとインスタンス
ドメインとインスタンス
大量の
店舗ページ
商品ページ
オークション
店舗編集
商品登録
買い物かご
共同購入
プレゼント
受注処理
各種API
ケータイ
・・・
・・・
・・・
9
Exalogicで解決できるのでは?
で解決できるのでは?
大量のWLSインスタンスの集約
10
6
00:00
01:00
02:00
03:00
04:00
05:00
06:00
07:00
08:00
09:00
10:00
11:00
12:00
13:00
14:00
15:00
16:00
17:00
18:00
19:00
20:00
21:00
22:00
23:00
サービスごとに異なるピークタイム
System
Load
5
4
3
2
A Service
B Service
1
0
Time
11
Exalogicで解決できるのでは?
で解決できるのでは?
大量のWLSインスタンスの集約
リソースの有効活用
12
現状の開発(保守)・運用
RD
Coding
Test
Prepare
Deployment
Maintenance
Monitoring
Analysis
Enhancement
Improvement
Service
Operation
Trouble
shoot
各チーム単位で全て実施
13
サービス提供者は維持優先
RD
Coding
Test
Prepare
Deployment
Maintenance
Monitoring
Analysis
Enhancement
Improvement
Service
Operation
Trouble
shoot
各チーム単位で全て実施
運用に時間を割かれる
技術的負債の解消は後回し
14
Exalogicで解決できるのでは?
で解決できるのでは?
大量のWLSインスタンスの集約
リソースの有効活用
運用の集約化とDevOpsの実現
15
最初に掲げたビジョン
現状
RD
Coding
Test
Prepare
Deployment
Maintenance
Monitoring
Analysis
Enhancement
Improvement
Service
Operation
Trouble
shoot
各チーム単位で全て実施
After Exalogic
Exalogicチームによって提供されるサービス
各チームと一緒に作業
RD
Coding
Test
Prepare
Deployment
Maintenance
Monitoring
Analysis
Enhancement
Service
Operation
Trouble
shoot
赤を減らしていく
各チームは開発に専念
できるようにする
改善のためのFBをしつつ
ガバナンスを効かせていく。
標準化・自動化
16
最初に掲げたビジョン
4人で実現する
17
結果
WebLogic インスタンス数削減
1
〜
3
1
7
18
結果
WLSドメイン構築にかかる時間
ドメイン構築にかかる時間
1~2
Weeks
5
Min
19
結果
サービスリリースに掛かる時間
Hours
※ローリングアップデートの場合
Secs
20
Why?
?
21
Exalogic導入するだけでは
導入するだけでは
インスタンス集約
パフォーマンス向上
のみ。
22
Exalogicは
は
ミドルウェアエンジニアが
コントロール可能な
インフラ
でもある。
23
Engineered Systemsをフル活用する
をフル活用する
ZFSSAのパワーと潤沢なリソース
• 単一ディレクトリ上に構成されたWLSドメイン。
• 構成管理工数削減。
• インスタンス増減。
• 2面化構成。
24
Engineered Systemsをフル活用する
をフル活用する
フローティングIP
• WLSインスタンスの構成管理をシンプルに。
• ListenAddressとListenPortの固定化。
• 稼働するマシンを移動可能。
25
Engineered Systemsをフル活用する
をフル活用する
強力なソフトウェアバランサー
• Oracle Traffic Director。(OTD)
• 2面化構成の安全な切り替え。
• 無停止サービスリリースを実現可能。
26
Engineered Systemsをフル活用する
をフル活用する
インフラと組み合わせて考える。
構成管理を楽にする。
ツール化・自動化・効率化。
時間を作る。
FeedBackして改善に取り組む。
27
アジェンダ
1. 自己紹介と会社概要
2. Exalogic導入背景と結果
3. Engineered SystemsとDevOps
4. まとめ
28
構成概要
Exalogic Half Rack x 2
•
•
•
•
X3-2
マルチラック配線
EECS 2.0.3.0.4
仮想化無し
Middleware
• WebLogic Server 10.3.6.0.6 / 12.1.3.0.0
• Coherence 12.1.2.0.0
• Oracle Traffic Director 11.1.1.7
29
各CNの使い方
の使い方
exalogic2
- WLS インスタンス
- Coherence ノード
- OTD専用
EXALOGIC
EXALOGIC
exalogic1
- WLS 管理サーバ
- OTDバックアップ
30
Engineered Systemsをフル活用する
をフル活用する
ZFSSAのパワーと潤沢なリソース
• 単一ディレクトリ上に構成されたWLSドメイン。
• 構成管理工数削減。
• インスタンス増減。
• 2面化構成。
31
共有リソース
JDK
【 ZFS】
】
Middleware製品
製品
mount
mount
Coherence クラスタ
WebLogic ドメイン
設定ファイル
運用ツール
ログ専用
32
単一のWLS
単一のWLSドメインディレクトリ
WLSドメインディレクトリ
/xx/yy/domainA/
|-- bin/
|-- config/
|-- lib/
|-- security/
|-- startWebLogic.sh
|-- stopWebLogic.sh
|-- log/
| |-- instance01.log
| |-- instance02.log
| `-- instance03.log
`-- servers/
|-- AdminServer/
|-- instance01/
|-- instance02/
`-- instance03/
管理サーバ・管理対象サーバとして
動作可能。
Log4j等を使った独自のログも
インスタンス間で衝突しない。
<appender name=”log" class="org.apache.log4j.DailyRol..”>
<param name="File" value="log/${weblogic.Name}.log" />
..
33
単一のWLS
単一のWLSドメインディレクトリ
WLSドメインディレクトリ
/xx/yy/domainA/
|-- bin/
|-- config/
|-- lib/
|-- security/
|-- startWebLogic.sh
|-- stopWebLogic.sh
|-- log/
| |-- instance01.log
| |-- instance02.log
| `-- instance03.log
`-- servers/
|-- AdminServer/
|-- instance01/
|-- instance02/
`-- instance03/
管理サーバ・管理対象サーバとして
動作可能。
- pack.sh/unpack.sh (もしくはコピー)による
インスタンス専用ディレクトリをセットアップしなくてよい。
-
Log4j等を使った独自ログも
インスタンス間で衝突しない。
適当なCNにIPを割り当て、起動するだけでインスタンス
が立ち上がる。
<appender name=”log" class="org.apache.log4j.DailyRol..”>
<param name="File" value="log/${weblogic.Name}.log" />
..
34
Engineered Systemsをフル活用する
をフル活用する
フローティングIP
• WLSインスタンスの構成管理をシンプルに。
• ListenAddressとListenPortの固定化。
• 稼働するマシンを移動可能。
35
フローティングIP
フローティング
IP移動・アサイン
CNが持つIP一覧
IPからCNを逆引き
36
構成ルールの単純化
1インスタンス 1 IP 固定
管理サーバ
10.10.${ドメイン番号}.100
管理対象サーバ
10.10.${ドメイン番号}.${連番} : 7003
: 7001
37
フローティングIP
フローティング
WebLogic Domain
Instance 01 (10.10.1.1)
Instance 02 (10.10.1.2)
Instance 03 (10.10.1.3)
Instance 04 (10.10.1.4)
Instance 01 (10.10.1.1)
Failed
Instance 03 (10.10.1.3)
Instance 04 (10.10.1.4)
Instance 02 (10.10.1.2)
CNを移動
を移動
停止
IP移動
移動
起動
38
フローティングIP
フローティング
WebLogic Domain
- ListenAddressとListenPortを固定したまま
Instance 01 (10.10.1.1)
Instance 01 (10.10.1.1)
別のCNに移動して起動可能。
Instance
02 (10.10.1.2)
Instance 03 (10.10.1.3)
Instance 03 (10.10.1.3)
Instance
04 (10.10.1.4)
Instance 04 (10.10.1.4)
- CNの障害、メンテナンス、負荷状況に応じて
配置を変えることが可能。Instance 02 (10.10.1.2)
Failed
CNを移動
を移動
- ネットワークエンジニアじゃなくても実施可能。
停止
IP移動
移動
起動
39
Engineered Systemsをフル活用する
をフル活用する
強力なソフトウェアバランサー
• Oracle Traffic Director。(OTD)
• 2面化構成の安全な切り替え。
• 無停止サービスリリースを実現可能。
40
OTD(Oracle Traffic Director)
L7 ソフトウェアバランサー
• 振り先を複数のサーバプールとして管理。
• 複数のリスナーを付けられる。
• 条件に応じたルーティングを設定。
41
“Blue Green Deployment” とは?
とは
http://martinfowler.com/bliki/BlueGreenDeployment.html
42
A面
面/B面のアイデア
面のアイデア
同じ構成のWLSドメインA/BとOTDで無停止リリースできるのでは?
OTD
OTD
OTD
Ver 1.0
Test
Ver 1.1
Test
Ver 2.0
Ver 1.1
Ver 2.0
Test
Ver 2.1
A
B
A
B
A
B
43
BGD with OTD
本番リクエスト
“default-route”
は常に本番
OTD instance
OTD virtual server
OTD http-listener
OTD default-route
“fooA”のプール
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
fooA
fooA01
fooA02
fooA03
44
BGD with OTD
本番リクエスト
fooA
fooA01
fooB01
OTD instance
OTD virtual server
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
fooB
fooA02
fooB02
fooA03
fooB03
fooAとfooBの組み合わせ
45
BGD with OTD
本番リクエスト
“test-route”定義
fooA
fooA01
fooB01
“test-route”と
結びついた
“fooB”のプール
fooB
fooA02
fooB02
OTD instance
OTD virtual server
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
fooA03
fooB03
46
BGD with OTD
本番リクエスト
fooA
fooA01
fooB01
- “fooA”と“fooB” は互いに独立したドメイン。
OTD instance
- どちらも同じアプリケーションが動く。
OTD virtual server
- configurationは基本的に同じ。
OTD http-listener
(“ListenAddress”と“Machine”は異なる)
OTD default-route
OTD test-route
- “test-route” が向いている面は
OTD origin-server-pool
次のリリース環境。domain “fooA” instance
domain “fooB” instance
fooB
fooA02
fooB02
fooA03
fooB03
47
BGD with OTD
新バージョンの“foo.war” を
fooBにデプロイ
OTD instance
OTD virtual server
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
”fooB” AdminServer
本番リクエスト
fooA
fooA01
fooB01
fooB
fooA02
fooB02
fooA03
fooB03
48
BGD with OTD
内部から動作確認
本番リクエスト
fooA
fooA01
fooB01
- ”test-route”を介して新バージョンの
テストが可能。OTD instance
OTD virtual server
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
fooB
fooA02
fooB02
fooA03
fooB03
稼働面 : fooA
テスト面 : fooB
49
BGD with OTD
本番リクエスト
切替!
fooA
fooA01
fooB01
fooB
fooA02
fooB02
OTD instance
OTD virtual server
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
fooA03
fooB03
50
BGD with OTD
- “tadm”コマンドや管理コンソールで切替。
本番リクエスト
OTD instance
OTD virtual server
OTD http-listener
- A面は次のリリース環境。
OTD default-route
OTD test-route
- 切り替え後に新バージョンの不具合が
OTD origin-server-pool
見つかったら戻せる。
domain “fooA” instance
domain “fooB” instance
- シームレス。
fooA
fooA01
fooB01
fooB
fooA02
fooB02
fooA03
fooB03
稼働面 : fooB
テスト面 : fooA
51
BGD with OTD
- セッションを使うアプリケーションの場合、
coherence*web でA/Bを構成する。
- 全てのセッション情報はCoherenceの中。
local-storage=false
fooA01
fooB01
fooA02
- ただし、セッションで管理するデータの互換性、
デフォルト値を意識した開発が前提。
fooB02
fooA03
fooB03
HttpSession session = req.getSession(true);
Coherence Cluster
local-storage=true
domain “fooA” instance
domain “fooB” instance
Coherence node
52
A/B面に
面によるメリット
面によるメリット
リリースコスト削減
• ローリングアップデート作業不要。
• 切替は20秒以下。
• 前バージョンへの戻しも一瞬。
サービス品質向上につながる
• ステージング(裏面)と本番(表面)の環境差異がない。
• テストしたものがそのまま出せる。
53
ツール化
構築
ツール
アプリケーション名
アプリケーション番号
54
ツール化
アプリケーション名
アプリケーション番号
構築
ツール
WebLogicテンプレート
構成ルール
fooA01
fooB01
管理サーバ
A面:10.10.${アプリ番号}.100
B面:10.10.${アプリ番号+100}.100
管理対象
サーバ
A面:10.10.${アプリ番号}.${連番}
: 7003
B面:10.10.${アプリ番号+100}.${連番} : 7003
: 7001
: 7001
55
ツール化
56
A面
面B面切替
面切替
only by pushing a button
57
稼働面確認
58
時間を作って
Exalogicチームによって提供されるサービス
各チームと一緒に作業
RD
Coding
Test
Prepare
Deployment
Maintenance
Monitoring
Analysis
Enhancement
Service
Operation
Trouble
shoot
赤を減らしていく
各チームは開発に専念
できるようにする
改善のためのFBをしつつ
ガバナンスを効かせていく。
標準化・自動化
改善に取り組む。
59
その他・モニタリング等
リアルタイムプロファイリング
(サードパーティ製ツール)
スマートなエラー検知とアラート
(自社開発)
60
FBの例
の例
「HttpClientの閉じ方が悪くてTIME_WAIT溜まってる」
「〜のログを出したらどうか?」
「〜が無駄にメモリ食ってるから、こう変更しない?」
61
ガバナンスについて
「これ作ったから運用頼む」
「運用に合わせた開発をしよう」
62
アジェンダ
1. 自己紹介と会社概要
2. Exalogic導入背景と結果
3. Engineered SystemsとDevOps
4. まとめ
63
まとめ
exalogic1
exalogic2
共有ディスク上に1アプリ2ドメイン
(domainA / domainB)
...
OTD
EXALOGIC
EXALOGIC
全てのインスタンスは移動可能
...
OTD
無停止リリース
B
A
WLS 管理対象サーバ
WLS 管理サーバ
64
まとめ
exalogic1
exalogic2
共有ディスク上に1アプリ2ドメイン
(domainA / domainB)
...
OTD
EXALOGIC
EXALOGIC
全てのインスタンスは移動可能
...
OTD
無停止リリース
B
A
WLS 管理対象サーバ
WLS 管理サーバ
65
まとめ
exalogic1
exalogic2
共有ディスク上に1アプリ2ドメイン
(domainA / domainB)
...
OTD
EXALOGIC
EXALOGIC
全てのインスタンスは移動可能
...
OTD
無停止リリース
B
A
WLS 管理対象サーバ
WLS 管理サーバ
66
まとめ
exalogic1
exalogic2
共有ディスク上に1アプリ2ドメイン
(domainA / domainB)
...
OTD
EXALOGIC
EXALOGIC
全てのインスタンスは移動可能
...
OTD
無停止リリース
B
A
WLS 管理対象サーバ
WLS 管理サーバ
67
まとめ
exalogic1
exalogic2
共有ディスク上に1アプリ2ドメイン
(domainA / domainB)
...
OTD
EXALOGIC
EXALOGIC
全てのインスタンスは移動可能
...
OTD
無停止リリース
B
A
WLS 管理対象サーバ
WLS 管理サーバ
68
まとめ
パフォーマンス改善、集約化はあたりまえ。
Engineered Systemsを前提とした運用でコスト削減。
開発と運用が協力できる体制を作れる。
69
Appendix – domain / address / port rules
WLS
Domain
Rules
Example
-
Always create 2 domains / 1 application,
call them domainA / domainB.
Call pair of domainA+domainB
“Virtual Domain”.
“domainA” and “domainB” have
same App / same configurations.
( except listen IP , name of managed ins.)
Virtual Domain has sequential ID number.
Listen IP address template.
A: 10.10.(ID).100
B: 10.10.(ID+100).100
Every AdminServer port is always :7001.
Virtual Domain Name: foo
domainA: fooA
domainB: fooB
Application: foo.war
Name = domain + %02d sequential No.
Listen IP address template.
A: 10.10.(ID).(seq)
B: 10.10.(ID+100).(seq)
Every instance port is always :7003.
Instance name:
-
-
WLS Managed
Instances
-
-
ID: 3
AdminServer:
-
-
fooA 10.10. 3.100:7001
fooB 10.10.103.100:7001
fooA: fooA01, fooA02, R
fooB: fooB01, fooB02, R
Listen Address:
-
fooA01: 10.10. 3.1:7003
fooA02: 10.10. 3.2:7003 R
fooB01: 10.10.103.1:7003 R
70
Appendix – domain / address / port rules
OTD
Virtual Server
Rules
Example
-
Virtual Server Name: foo
Listener port:
-
Virtual Server Name = “Virtual Domain”
Listener port rule
default-route: 8000 + ID
test-route: 9000 + ID
Name rule
“origin server pool” = “wls domain”
-
origin-server-pool
-
-
default-route can indicate domainA or domainB.
Keep test-route indicating converse side of default-route.
default-route: 8003
test-route: 9003
fooA : 10.10.3.1:7003,
10.10.3.2:7003, ...
fooB : 10.10.103.1:7003,
10.10.103.2:7003, R
Routing:
default-route: fooA
test-route: fooB
(or)
default-route: fooB
test-route: fooA
71
Appendix – domain / address / port rules
http://failovergroup-address:8003 http://failovergroup-address:8004
http://failovergroup-address:9003 http://failovergroup-address:9004
:8003 :9003
:8004
:9004
OTD instance
OTD virtual server
virtual-server: foo
virtual-server: bar
fooA
foo
10.10.3.1:7003
10.10.3.2:7003
10.10.3.3:7003
fooB
10.10.103.1:7003
10.10.103.2:7003
10.10.103.3:7003
barA
10.10.4.1:7003
barB
10.10.104.1:7003
OTD http-listener
OTD default-route
OTD test-route
OTD origin-server-pool
domain “fooA” instance
domain “fooB” instance
domain “barA” instance
domain “barB” instance
72
Thank you for listening!
73
Fly UP