Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring Boot + Netflix Eureka

27,525 views

Published on

2015/08/21 社内LTイベント向け資料。

Published in: Technology

Spring Boot + Netflix Eureka

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

×