Submit Search
Spring Boot + Netflix Eureka
•
54 likes
•
41,585 views
心 谷本
Follow
2015/08/21 社内LTイベント向け資料。
Read less
Read more
1 of 83
Download now
Downloaded 119 times
More Related Content
Spring Boot + Netflix Eureka
1.
Spring Boot + Netflix
Eureka ∼ Microservices時代のサービスディスカバリ Acroquest Technology株式会社 谷本 心 ( @cero_t )
2.
Microservices
3.
Microservices Oriented Architecture
4.
Microservices Oriented Architecture
5.
MOAMETAL
6.
いいとして
7.
今日のテーマ
10.
そっちじゃなくて💢
11.
Netflix OSS
12.
いまOSS界隈で 一番アツいやつ
13.
Netflixのgithubリポジトリは Web技術の百貨店だった http://d.hatena.ne.jp/LaclefYoshi /20150719/netflix_github
14.
eureka : サービスディスカバリ ribbon
: ロードバランシング Hystrix : サーキットブレイカー govenator : Google Guice拡張 feign : 宣言的HTTPクライアント vector : リソース監視&可視化 SimianArmy : AWSのサーバを落とす …
15.
eureka : サービスディスカバリ ribbon
: ロードバランシング Hystrix : サーキットブレイカー govenator : Google Guice拡張 feign : 宣言的HTTPクライアント vector : リソース監視&可視化 SimianArmy : AWSのサーバを落とす …
16.
Eurekaという名の サービスディスカバリ
17.
NGワード: エウレカセブン 僕らのユリイカ 禁断の地@FF3 アルキメデス
18.
いいとして(再)
19.
まずは、経緯。
20.
Web/AP DB 1台構成
21.
Web/AP DB 2台構成 Web/AP
22.
Web/AP DB 2台構成 Web/AP LB
23.
Web/AP DB サービス2層構成 Web/AP LB Service Service
24.
Web/AP DB サービス2層構成 Web/AP LB Service Service LB
25.
Web/AP DB SOA/MOA Web/AP LB Service1 Service1 LB Service2 Service2 LB Service3
Service3 LB 内部DNS
26.
サービスの数だけ サーバがある
27.
サービスの数だけ LBがある
28.
もうちょっと 絞りたいよね
29.
1台のサーバに 複数サービスを 同居させてはどうか?
30.
観点 1サービス 1サーバ 複数サービス 1サーバ URLの 構成要素 IPアドレス IPアドレス + ポート番号 サーバ台数 サービス数 *
冗長数 冗長数∼
31.
台数は減らせるけど ポート番号まで含めて 管理するのは面倒
32.
そもそもAWSの オートスケーリングで IPアドレスが変わると 動かなくなる
33.
という話は 少し置いといて
34.
LBも減らしたいよね
35.
SW/HW LB 自前実装 LB 開発工数 なし 大 費用 サービス数と 比例 サービス数に 影響せず
36.
でも 自作LBは地雷
37.
そう、そこで
39.
今日はNetflixって 言ってるでしょ💢
40.
Eureka
41.
平たく言えば 内部DNSの代わり
42.
内部DNSの場合 Web/AP Service 内部DNS 1. 事前にIPを登録 hoge1.internal =
192.168.0.1 2. 呼び出し時に参照 3. 呼び出し http://hoge1.internal:8081/hoge
43.
Eurekaの場合 Web/AP Service Eureka 1. サービス起動時に IPとPortを登録 hoge-service =
192.168.0.1:8081 2. 呼び出し時に参照 getNextServerFromEureka( hoge-service ) 3. 呼び出し http://2の戻り値/hoge
44.
OK、理屈は分かった
45.
でも、自前でEurekaに アドレスを取りに行く コード書かなきゃ いけないじゃん?
46.
それだったら DNSの方が楽じゃない?
47.
あと ロードバランシングも 自前でやるの? それとも毎回Eurekaに 問い合わせるの?
48.
そこで、 Ribbon
49.
説明が難しいんだけど Eurekaと協調して ロードバランシングする 仕組み
50.
Ribbonを使った場合 Web/AP Service Eureka 1. サービス起動時に IPとPortを登録 hoge-service =
192.168.0.1:8081 2. Ribbonが参照 3. 呼び出し http://hoge-service/hoge 4. Ribbonが変換 http://192.168.0.1:8081/hoge
51.
ServiceService 複数台もOK Web/AP Service Eureka 1. サービス起動時に IPとPortを登録 hoge-service =
192.168.0.1:8081 hoge-service = 192.168.0.2:8081 hoge-service = 192.168.0.3:8082 2. Ribbonが参照 3. 呼び出し http://hoge-service/hoge 4. Ribbonが変換 http://192.168.0.2:8082/hoge 変換後のアドレスは アクセスごとに変わる
52.
これらを使うと
53.
Web/AP DB これが Web/AP LB Service1 Service1 LB Service2 Service2 LB Service3
Service3 LB 内部DNS
54.
Web/AP DB こうなる Web/AP LB Service1Service1 Service2 Service3 Eureka Service2 Service3
55.
OK、理屈は分かった ※なんということでしょう とか言わない
56.
でも正味、実装が 面倒そう
57.
わがままばっかり 言うな💢
58.
そこで Spring Cloud Netflix
59.
Spring Bootで 開発していたら ほぼ設定だけで利用可能
60.
Spring Bootで Eurekaを使うための 3ステップ
61.
1. Eurekaサーバを つくる
62.
@SpringBootApplication @EnableEurekaServer public class OreNoEureka
{ public static void main(String[] args) { SpringApplication.run(OreNoEureka.class, args); } } OreNoEureka.java
63.
server.port: 8781 eureka: client: registerWithEureka: false fetchRegistry:
false server: waitTimeInMsWhenSyncEmpty: 0 application.yml
64.
これだけでEurekaの サーバが動く
65.
2. 呼び出される サービスの設定を変える
66.
@SpringBootApplication @EnableEurekaClient public class OreNoService
{ public static void main(String[] args) { SpringApplication.run(OreNoService.class, args); } } OreNoService.java
67.
spring.application.name: ore-no-service server.port: 8081 eureka: client: serviceUrl.defaultZone:
http://localhost:8761/eureka instance: hostname: localhost application.yml
68.
これだけで起動時に Eurekaに登録に行く
69.
3. 呼び出す側の 設定を変える
70.
@SpringBootApplication @EnableEurekaClient public class OreNoWeb
{ public static void main(String[] args) { SpringApplication.run(OreNoWeb.class, args); } } OreNoWeb.java
71.
public class OreNoWeb
{ @Autowired RestTemplate restTemplate; // application.ymlに入れるほうがオススメ String url = "http://ore-no-service/hoge"; public Hoge call() { restTemplate.getForEntity(url, Hoge.class); } } OreNoWeb.java
72.
spring.application.name: ore-no-web server.port: 8082 eureka: client: serviceUrl.defaultZone:
http://localhost:8761/eureka instance: hostname: localhost application.yml
73.
これだけで RestTemplateが Ribbonを使って Eurekaを見に行く
74.
簡単でしょう?
75.
参考: 習得コストと適用コスト
76.
Eureka + Ribbon Hystrix Spring
Cloud Netflix の把握:1日
77.
https://github.com /making/jjugccc-handson/
78.
既存プロジェクトへの Eureka + Ribbon の展開:1人日
79.
Spring Cloud Netflix まじ有用
80.
今すぐ使おう Netflix!
82.
なお、僕は hulu派です
83.
以上!
Download