springone 2015 報告会 - lattice + spring cloud netflix

30
SpringOne 2GX 2015 のののの Cloud Native: PaaS の Spring Cloud at Netflix Tommy Ludwig @ TommyLudwig 1

Upload: tommy-ludwig

Post on 16-Apr-2017

602 views

Category:

Software


2 download

TRANSCRIPT

1

SpringOne 2GX 2015 の報告会 ・  Cloud Native: PaaS 編・  Spring Cloud at Netflix

Tommy Ludwig

@TommyLudwig

2

PLATFORM AS A SERVICEAn exploratory look at Lattice as an example of a PaaS

3

いくつかの前提• 信頼できないコンポネントで、信頼できるシステムを構築する必要がある

– インスタンス単位では 100% の稼働率は不可能だろう• 運用コストは開発コストより何倍も大きい

– 開発が数ヶ月かかったプロダクトは数年間以上運用するだろう– 継続的デリバリーでコスト削減– Platform があると運用コストを激しく削減できる

4

PaaS を始めよう

• PaaS を使ってみたーい!• でも、 BOSHや Cloud

Foundry をローカルにインストールしようと思っても…– なかなか難しい– 手間がかかる

5

そのための Lattice

• http://lattice.cf/• 簡単に始められる• 負担が少ない• Cloud Foundry の多くのコンポーネントをそのまま利用• ただし、欠けているところもあります

– 後で説明します

6

LET’S DO IT LIVE!Lattice demo

7

Lattice をインストールしましょう

必要なもの• Linux or OSX• Vagrant 1.7+• Virtual Box• Lattice release• ltc CLI

Guide

• HP にある Getting started

• GitHub にある README

8

Lattice のセットアップの流れ• GitHub のリリースページから lattice-bundle をダウンロード

– https://github.com/cloudfoundry-incubator/lattice-release/releases

• CLI である ltc をダウンロード

• ltc target local.lattice.cf

$ curl -O http://receptor.local.lattice.cf/v1/sync/linux/ltc# 上が Linux 用 -or- 下が OSX 用$ curl -O http://receptor.local.lattice.cf/v1/sync/osx/ltc# then:$ chmod a+x ltc# 希望であれば、 ltc をパスに入れたらさらに使いやすい

9

Deploy to Lattice

Docker hubから• Go で書かれた簡単なサンプルアプリをデプロイ• http://lattice-app.local.lattice.cfからアクセスDocker hub にないプロジェクトをデプロイしたい場合はBuilding and Launching Droplets

ltc create lattice-app cloudfoundry/lattice-app

10

Monitoring / Operations

• ログを tail– – lattice-app の各インスタンスのログを収集して表示する

• 稼働中のアプリを確認–

• スケール(アップ・ダウン)–                # インスタンスを3つに変更

• アプリ詳細–

ltc logs lattice-app

ltc list

ltc scale lattice-app 3

ltc status lattice-app

11

Visualization (可視化)• CLI で

– –

• 見づらくないですか?!

ltc visualize

ltc cells

12

X-Ray 登場• http://xray.cf/• Lattice の receptor に向けて、同じデータをキレイな可視化

13

失敗テスト• lattice-app のインスタンスを 10 個までスケール• http://lattice-app.local.lattice.cfに数回アクセス

– Index が変わることを確認• http://lattice-app.local.lattice.cf/exitに数回アクセス

– アクセスしたインスタンスはシャットダウンする• X-Ray などで監視しながら http://lattice-app.local.lattice.cfをリフレッシュし続ける。

– インスタンスいくつか落ちたのにもかかわらずエラーなくページがロード– 10 秒くらいで落ちたインスタンスがもう一回立ち上がっている

ltc scale lattice-app 10

14

Lattice cluster

• ローカルはすごく簡単で便利ですが、一つの VM に過ぎないローカルには限界があります。• Cluster をデプロイしたいなら Terraformが必要です。• 現在、最新版 0.6.0 は AWS しか対応していない。• 0.5.0 以前は AWS 、 DigitalOcean 、 Google Compute

Engine 、 Openstack を対応していた。• ここのドキュメンテーションを参考にしてください。

15

最後に CloudFoundry との比較

Cloud Foundry• マルチテナント• 全コンポネントが HA• セキュリティの設定豊富• ローリングデプロイ• Data service を提供している

Lattice• シングルテナント• コンポネントにより HA• セキュリティは少ない• Red/black デプロイが可能• Data service がない

本番にはおすすめしない

16

SPRING CLOUD @ NETFLIX

17

目次• サービスディスカバリ (Eureka)• Client 側ロードバランシング (Ribbon)• サーキットブレーカー (Hystrix)• ストリーム統合( Turbine )• メトリックス

– Spectator– Atlas

18

サービスディスカバリ (Eureka)

• サービスディスカバリ (Eureka)– Spring Boot + Netflix Eureka ( by 谷本さん: @cero_t)

• Server– Dependency org.springframework.cloud:spring-cloud-starter-eureka-server– Annotation @EnableEurekaServer

• Client– Dependency org.springframework.cloud:spring-cloud-starter-eureka– Property eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/– Annotation @EnableEurekaClient / @EnableDiscoveryClient

19

Eureka dashboard

20

更に便利に使いましょう• spring-cloud-netflix-contrib – 今後 Spring Cloud Netflix に移行する予定の

Netflix OSS 。– Spring の標準 @EventListener でステータス変更通知を受け取れる– EurekaStatusChangedEvent– REST サービス以外にも便利

• 例えば、 Messaging サービスが OUT_OF_SERVICE になった時、そこへのメッセージを止める

• Eureka はただの Spring Boot アプリなので好きなだけカスタマイズできる– 自社の運用に便利なエンドポイントが追加できる

• Eureka サーバに Hystrix のダッシュボードを追加したり、継続的デリバリーとの連携したり、メトリックスのダッシュボードなど

21

Client 側ロードバランシング (Ribbon)

• RestTemplate が Auto-configuration で Ribbon を使用• Eureka に登録されたサービス ID を利用し、実際のホスト名・ポートが知らなくていい。例えば、 membership というサービスを呼ぶ時:• 様々なロードバランシングのルール:

– RoundRobinRule  ←デフォルト– AvailabilityFilteringRule– WeightedResponseTimeRule

• デフォルトで GET リクエストは失敗した場合、リトライされる– もちろん、コンフィグで変えられます。

22

サーキットブレーカー (Hystrix)

• 障害し出したら関係するシステムまで影響し悪循環が始まる– Hystrix を通して、問題があるシステムを呼ばず悪循環を止められる

• 注意: Exception が発生しても、正常時処理の代わりにできることが特にないサービスは使えない(例:ペイメントサービス)• 追加するのは簡単

– Dependency org.springframework.cloud:spring-cloud-starter-hystrix– Annotation @EnableHystrix / @EnableCircuitBreaker– 守りたいメソッドに @HystrixCommand(fallbackMethod = “myFallback”)– myFallback(…) というフォールバックのメソッドを実装

23

Hystrix

• メソッドの timeout をコンフィグできる– @HystrixProperty(name = “execution.isolation.thread.timeoutInMilliseconds”,

value = “5000”)

• 注意: @HystrixCommand は別の thread pool で実行される– なので、デフォルトで ThreadLocal などを使ってはいけない– @HystrixProperty(name = “execution.isolation.strategy”, value =

“SEMAPHORE”)• これで解決できますが、 @HystrixCommand が実行中にスレッドがブロックされます

• 日本語資料: NetflixのHystrixにも使われるCircuit Breaker patternを調べてみた

24

Turbine

• Hystrix の複数 Stream を統合する– あるアプリの各インスタンスの /hystrix.stream を /turbine.streamに– Eureka Server からダッシュボードを提供すると良いでしょう。

• ちなみに、 Netflix ではインスタンスが多すぎてあまり使われないらしいです。– その代わりに、メトリックスとして同じ情報を提供します。

25

Hystrix dashboard

26

Metrics

• Spectator– Spring Cloud Netflixでの対応は Brixton.M3 から– Java 8+ での使用、従来のメトリックス・ライブラリ Servoが

deprecated– Autowired で Registry をインジェクト– 使い方:

• 注意事項– タグ名がユニークになるように作ってください。ユーザ名などを避けるべき

• そうしないとタグの数が爆発する恐れがある• Spring Boot Actuator の /metrics で見られます。

27

Atlas – メトリックス可視化• Atlas• URL で query を投げてグラフを表示をするという仕組み• その URL をすぐに共有できて、他の人も同じものが見れます• 例えば

• 情報元

/api/v1/graph? e=2012-01-01T00:00 &q= name,sps,:eq, nf.cluster,nccp-silverlight,:eq, :and, :sum

28

Atlas graph