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.

[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある

2,516 views

Published on

Spring CloudはJava開発者がマイクロサービスサービスアーキテクチャを構築するために必要となってくる様々な技術要素やデザインパターンを用意しています。本セッションではSpring Cloudを用いることで簡単に利用可能となる機能群のうち代表的な次の機能を説明し、使いどころ/利用例を紹介します。 * Service Discovery * Circuite Breaker * Message Driven Microservice * Distributed Tracing など コード例はJavaですが、考え方はフレームワークに寄らないため、Javaユーザー以外の方もご参加ください。最後にPivotal Cloud FoundryとSpring Cloud Servicesを使って、マイクロサービスを簡単に運用するデモをご覧いただきます。

受講対象: マイクロサービスでシステム構築を検討中の開発者の方はぜひご参加ください。

製品/テクノロジ: DevOps/Microsoft Azure/OSS/Web 開発/アーキテクチャ/クラウド/クロス プラットフォーム/コンテナー/Docker/開発言語/事業継続/運用/マイクロサービス

槙 俊明
Pivotalジャパン株式会社
シニアソリューションズアーキテクト

Published in: Technology
  • Be the first to comment

[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある

  1. 1. • Toshiaki Maki (@making) https://blog.ik.am • Sr. Solutions Architect @Pivotal • Spring Framework • Cloud Foundry
  2. 2. https://github.com/Pivotal-Japan/cloud-native-workshop
  3. 3. Application coordination boilerplate patterns Application configuration boilerplate patterns Enterprise Java application boilerplate patterns Runtime Platform, Infrastructure Automation boilerplate patterns (provision, deploy, secure, log, data services, etc.) CLOU D DESKTOP Spring Boot Spring Framework Pivotal Cloud Foundry Spring Cloud Microservice operation boilerplate patterns (Config Server, Service Discovery, Circuit Breaker) SERVICES Spring Cloud Services 今日の範囲
  4. 4. Application coordination boilerplate patterns Application configuration boilerplate patterns Enterprise Java application boilerplate patterns Runtime Platform, Infrastructure Automation boilerplate patterns (provision, deploy, secure, log, data services, etc.) CLOU D DESKTOP Spring Boot Spring Framework Pivotal Cloud Foundry Spring Cloud Microservice operation boilerplate patterns (Config Server, Service Discovery, Circuit Breaker) SERVICES Spring Cloud Services
  5. 5. API Gateway
  6. 6. API Gateway
  7. 7. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> @SpringBootApplication @EnableConfigServer public class MyConfigServerApplication { ... } server.port=8888 spring.cloud.config.server.git.uri=https://github.com/xyz/config.git
  8. 8. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> spring.application.name=order-service spring.cloud.config.uri=http://localhost:8888
  9. 9. application-dev.properties order-service-dev.properties payment-service.profile payment-service-dev.profile payment-service-dev.profile
  10. 10. message message POST /refresh
  11. 11. @RefreshScope public class OrderService { @Value("${message}") String message; public String hello() { return message; } }
  12. 12. https://www.vaultproject.io/
  13. 13. spring.profiles.active=vault,git spring.cloud.config.server.vault.host=... spring.cloud.config.server.git.uri=... spring.cloud.config.token=...
  14. 14. API Gateway
  15. 15. RESTAPIRESTAPI #0: URL + MD #1: URL + MD #2: URL + MD #0: URL + MD #1: URL + MD #2: URL + MD
  16. 16. http://techblog.netflix.com/2012/09/eureka.html
  17. 17. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-eureka-server</artifactId> </dependency> @SpringBootApplication @EnableEurekaServer public class MyEurekaServerApplication { ... } server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
  18. 18. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> spring.application.name=order-service # config-server使用時は # bootstrap.propertiesに eureka.client.service-url.defaultZone=http://localhost:8761 @SpringBootApplication @EnableDiscovertyClient public class OrderServiceApplication { ... }
  19. 19. public class OrderService { DiscoveryClient discoveryClient; public void order() { List<ServiceInstance> list = discoveryClient.getInstances("payment-service"); URL paymentUrl = list.get(0).getUri() // ... } }
  20. 20. http://techblog.netflix.com/2013/01/announcing-ribbon-tying-netflix-mid.html
  21. 21. @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public class OrderService { @LoadBalanced RestTemplate restTemplate; public void order() { restTemplate .postForEntity("http://payment-service", Payment.class);}}
  22. 22. Ribbon Server List Server List ⏱
  23. 23. API Gateway
  24. 24. 行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋 https://www.slideshare.net/techblogyahoo/ec-72726085
  25. 25. 行列ができるECサイトの悩み~ショッピングや決済の技術的問題と処方箋 https://www.slideshare.net/techblogyahoo/ec-72726085
  26. 26. http://techblog.netflix.com/2012/11/hystrix.html
  27. 27. ClosedOpenHalf-OpenClosed
  28. 28. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency> @SpringBootApplication @EnableCircuitBreaker public class OrderServiceApplication { ... }
  29. 29. @HystrixCommand(fallbackMethod = "getTop10") public Recommendations getRecommendation(String username) { return restTemplate.getForObject("http://recommendation?u={u}", username, Recommendations.class); } public Recommendations getTop10(String username) { return recommendationsCache.getTop10(); }
  30. 30. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> </dependency> @SpringBootApplication @EnableHystrixDashboard public class HystrixDashboardApplication { ... }
  31. 31. API Gateway
  32. 32. @SpringBootApplication @EnableBinding(Source.class) public class OrderServiceApplication { // ... @Autowired Source source; @PostMapping void order(@RequestBody Order order) { Message message = MessageBuilder.fromPayload(order).build(); source.output().send(message); } } spring.cloud.stream.bindings.output.destination=order
  33. 33. @SpringBootApplication @EnableBinding(Sink.class) public class DeliveryServiceApplication { // ... @StreamListener(Sink.INPUT) void handlerOrder(@Payload Order order) { deliverySerivice.deliver(order); } } spring.cloud.stream.bindings.input.destination=order
  34. 34. spring.cloud.stream.bindings.input.destination=order spring.cloud.stream.bindings.input.group=point-service spring.cloud.stream.bindings.input.destination=order spring.cloud.stream.bindings.input.group=delivery-service spring.cloud.stream.bindings.input.destination=order spring.cloud.stream.bindings.input.group=notification-service
  35. 35. https://www.slideshare.net/makingx/event-driven-microservices-with-spring-cloud-stream-jjugccc-ccca3
  36. 36. API Gateway
  37. 37. 2017-02-26 11:15:47.561 INFO [service1,2485ec27856c56f4,2485ec27856c56f4,true] 68058 --- [nio- 8081-exec-1] i.s.c.sleuth.docs.service1.Application : Hello from service1. Calling service2 2017-02-26 11:15:47.710 INFO [service2,2485ec27856c56f4,9aa10ee6fbde75fa,true] 68059 --- [nio- 8082-exec-1] i.s.c.sleuth.docs.service2.Application : Hello from service2. Calling service3 and then service4 2017-02-26 11:15:47.895 INFO [service3,2485ec27856c56f4,1210be13194bfe5,true] 68060 --- [nio- 8083-exec-1] i.s.c.sleuth.docs.service3.Application : Hello from service3 2017-02-26 11:15:47.924 INFO [service2,2485ec27856c56f4,9aa10ee6fbde75fa,true] 68059 --- [nio- 8082-exec-1] i.s.c.sleuth.docs.service2.Application : Got response from service3 [Hello from service3] 2017-02-26 11:15:48.134 INFO [service4,2485ec27856c56f4,1b1845262ffba49d,true] 68061 --- [nio- 8084-exec-1] i.s.c.sleuth.docs.service4.Application : Hello from service4 2017-02-26 11:15:48.156 INFO [service2,2485ec27856c56f4,9aa10ee6fbde75fa,true] 68059 --- [nio- 8082-exec-1] i.s.c.sleuth.docs.service2.Application : Got response from service4 [Hello from service4] 2017-02-26 11:15:48.182 INFO [service1,2485ec27856c56f4,2485ec27856c56f4,true] 68058 --- [nio- 8081-exec-1] i.s.c.sleuth.docs.service1.Application : Got response from service2 [Hello from service2, response from service3 [Hello from service3] and from service4 [Hello from service4]]
  38. 38. http://zipkin.io/
  39. 39. <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-sleuth-stream</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency>
  40. 40. API Gateway
  41. 41. Consumer Producer
  42. 42. API Gateway
  43. 43. steeltoe.io
  44. 44. Application coordination boilerplate patterns Application configuration boilerplate patterns Enterprise Java application boilerplate patterns Runtime Platform, Infrastructure Automation boilerplate patterns (provision, deploy, secure, log, data services, etc.) CLOU D DESKTOP Spring Boot Spring Framework Pivotal Cloud Foundry Spring Cloud Microservice operation boilerplate patterns (Config Server, Service Discovery, Circuit Breaker) SERVICES Spring Cloud Services
  45. 45. IaaS Cloud Foundry ファイアウォールの設定 死活監視の設定 SSLの設定 ロードバランサの設定 アプリケーションのデプロイ ランタイムのインストール VMのプロビジョニング cf push myapp ¥ -p app.jar
  46. 46. マーケットプレースからインストール可能 https://azuremarketplace.microsoft.com/en-us/marketplace/apps/pivotal.pivotal-cloud-foundry
  47. 47. Application coordination boilerplate patterns Application configuration boilerplate patterns Enterprise Java application boilerplate patterns Runtime Platform, Infrastructure Automation boilerplate patterns (provision, deploy, secure, log, data services, etc.) CLOU D DESKTOP Spring Boot Spring Framework Pivotal Cloud Foundry Spring Cloud Microservice operation boilerplate patterns (Config Server, Service Discovery, Circuit Breaker) SERVICES Spring Cloud Services
  48. 48. https://youtu.be/BiY3amrDIo0
  49. 49. run.pivotal.io
  50. 50. Application coordination boilerplate patterns Application configuration boilerplate patterns Enterprise Java application boilerplate patterns Runtime Platform, Infrastructure Automation boilerplate patterns (provision, deploy, secure, log, data services, etc.) CLOU D DESKTOP Spring Boot Spring Framework Pivotal Cloud Foundry Spring Cloud Microservice operation boilerplate patterns (Config Server, Service Discovery, Circuit Breaker) SERVICES Spring Cloud Services 武器は揃っています。 いつ始めるのですか?
  51. 51. 📧
  52. 52. セッションアンケートにご協力ください ➢ 専用アプリからご回答いただけます。 decode 2017 ➢ スケジュールビルダーで受講セッションを 登録後、アンケート画面からご回答ください。 ➢ アンケートの回答時間はたったの 15 秒です!
  53. 53. Ask the Speaker のご案内 本セッションの詳細は『Ask the Speaker Room』各コーナーカウンタにて ご説明させていただきます。是非、お立ち寄りください。
  54. 54. © 2017 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。 Ask the speaker でお待ちしています!
  55. 55. A) PPT 作成時の基本的ルール • de:code 用スライドテンプレートの利用 • 16:9 でスライド作成 • フォントは以下を基本とし、スライド作成の都合で各自調整 • 英数字: Segoe UI Light (見出し), Segoe UI (本文) • 日本語: メイリオ (見出し), メイリオ (本文) • フォントサイズは 32 ポイント以上を推奨(厳しい場合はスライドのズーム機能などを活用) • 半角英数字の前後は半角スペースを空ける • 製品名などは、出来る限りフルスペルで記載 • 正規メディア、ロゴ、ドメイン名の使用 • 著作権の確認と必要に応じて利用許諾の取得 B) プレゼンテーション練習時に最低限押さえておくべきポイント 1. 不測の時代に備え、デモ環境などはビデオ等でも用意 2. プレゼンテーションモード、画面複製出力などは、リハ時に指定 3. 時間内終了厳守に向け、通し練習などを事前に実施 • プレゼンテーションとデモの切り替えタイミングなど 4. 必要に応じて拡大ツールの利用を推奨 • 縦長&小スクリーン部屋ではほぼ必須 5. ビデオ撮影されている事を意識し、不要な発言は慎む (不用意なパスワード露出なども)
  56. 56. アンケートにご協力ください。 ■アンケートに ・・・・・・・・・・・・・ ■アンケートは・・・・・・・・・・・・・ ■アプリ・・・・・・・・・・・・・

×