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.

Preparation to Start the Microservice for Java EE developers

17,230 views

Published on

This presentation explain how to start the Microservices for Java EE developers. From monolithic application to micro services, not only separate the services but also must consider some point in this article.

Published in: Technology
  • Be the first to comment

Preparation to Start the Microservice for Java EE developers

  1. 1. 自己紹介 日本マイクロソフト(株) Java エバンジェリスト 寺田 佳央 ハッシュタグ #てらだよしおがんばれ
  2. 2. マイクロサービス は必要 ?
  3. 3. モノリシック?マイクロ?
  4. 4. 一般的な企業システムの実装例 顧客管理 受注管理 物流管理 売り上げ管理 商品管理 レコメンド 顧客分析 経営分析 企業システム DB
  5. 5. どんどんマイクロ・サービス化 受注管理 サービス 顧客管理 DB 物流管理 サービス 顧客管理 DB
  6. 6. マイクロサービス いち早くサービスを 提供したい 柔軟にスケール させたい 独立したサービス作りを おこないたい 耐障害性を高めたい 変更に強いシステムを 作りたい とりあえず MSA 化が必要 Docker を導入したい 何のためのマイクロ・サービス?
  7. 7. マイクロサービス 一番だめなパターン とりあえず MSA 化が必要 Docker を導入したい
  8. 8. マイクロサービス いち早くサービスを 提供したい 柔軟にスケール させたい 独立したサービス作りを おこないたい MSA でなくてもできません?
  9. 9. マイクロサービス 耐障害性を高めたい (回復性を高める) 変更に強いシステムを 作りたい MSA が有効 ( 寺田の所感 )
  10. 10. https://jaxenter.com/microservices-trends-2017-survey-133265.html 既存サービスを マイグレーション する 新規サービスで 導入 導入済み 予定なし
  11. 11. MSAでなければ ならないか 今一度考えましょう
  12. 12. Martin Fowler Componentization via Services Organized around Business Capabilities Products not Projects Smart endpoints and dumb pipes Decentralized Governance Decentralized Data Management Infrastructure Automation Design for failure Evolutionary Design MSA
  13. 13. or
  14. 14. https://jaxenter.com/microservices-trends-2017-survey-
  15. 15. Java EE でも!!
  16. 16. ここからはじめる マイクロ・サービス (初級編)
  17. 17. はじめに Java SE の現在と将来 Java EE の現在と将来 はじめの一歩
  18. 18. 新機能追加 … どうする? UI ロジック DB war, ear ファイル UI DBロジック UI ロジック DB 既存のモノリシック構成に 新機能を追加しない
  19. 19. UI ロジック DB UI ロジック DB UI DBロジック モノリシック リクエストの ルーティング
  20. 20. はじめに Java SE の現在と将来 Java EE の現在と将来 MSA に向けた ソースコード管理
  21. 21. ソースコード管理
  22. 22. どのようなソースコード管理 してます? 複数のモジュールを 1レポジトリで管理
  23. 23. サービス毎にレポジトリを作成しましょう サービス毎の履歴管理や 把握が容易に !!
  24. 24. はじめに Java SE の現在と将来 Java EE の現在と将来 アプリケーション サーバ
  25. 25. Java EE アプリケーション・サーバ アプリケーション・サーバを依存を脱却しましょう
  26. 26. Java EE 対応の実行可能 jar フレームワーク
  27. 27. はじめに Java SE の現在と将来 Java EE の現在と将来 共有ライブラリ
  28. 28. 共有ライブラリ呪縛 から解放されません?
  29. 29. 顧客管理 受注管理 物流管理 売り上げ管理 商品管理 レコメンド 顧客分析 経営分析 共有ライブラリ
  30. 30. 共有ライブラリ 顧客管理 受注管理 物流管理 売り上げ管理 商品管理 レコメンド 顧客分析 経営分析 共有ライブラリにバグがみつかった!! えっ?!全部再テスト? 追加機能に影響が!! リリース・スケジュール延期!!
  31. 31. 顧客管理 受注管理 商品管理 レコメンド 共有ライブ ラリ ライブラリ 顧客管理 ライブラリ 商品管理 ライブラリ 受注管理 ライブラリ レコメンド
  32. 32. バグがみつかった!! v1 顧客管理 v1 受注管理 v2 顧客管理
  33. 33. ビルド
  34. 34. プライベート レポジトリ 建てましょう
  35. 35. $ mvn deploy:deploy-file -DgroupId=com.yoshio3 ¥ -DartifactId=Yoshio3CommonLibraries ¥ -Dversion=1.0 ¥ -Dpackaging=jar ¥ -Dfile=Yoshio3CommonLibraries-1.0-SNAPSHOT.jar ¥ -DgeneratePom=true ¥ -DrepositoryId=nexus3-repository ¥ -Durl=http://nexus3.**/repository/yoshio3-maven- repo/
  36. 36. <dependency> <groupId>com.yoshio3</groupId> <artifactId>Yoshio3CommonLibraries</artifactId> <version>1.0</version> </dependency>
  37. 37. ライブラリ v1 商品管理 ライブラリ v2 レコメンド ライブラリ v1 物流管理 ライブラリ v2 売り上げ管理 共有ライブラリ 依存から脱却し ましょう
  38. 38. はじめに Java SE の現在と将来 Java EE の現在と将来 どうやって実装?
  39. 39. 今までの Java EE アプリケーション ビジネス・ロジック (CDI, EJB)
  40. 40. ビューとロジックを分離 ビジネス・ロジック
  41. 41. Front End For Back End
  42. 42. Java API for RESTful Web Services
  43. 43. ここからはじめる マイクロ・サービス (中級編)
  44. 44. はじめに Java SE の現在と将来 Java EE の現在と将来 非同期処理
  45. 45. 同期?非同期? Service C Service C Java EE 8 JAX-RS 2.1 で追加・改良
  46. 46. Service C Load Balancer API Gateway 待ちによる スレッドの滞留を防ぐ
  47. 47. はじめに Java SE の現在と将来 Java EE の現在と将来 リソース設定を 柔軟に !!
  48. 48. どこでも動くアプリを 心掛けましょう
  49. 49. 外部リソース の設定 サービス JDBC メッセージ プログラム?XML?
  50. 50. 外部リソース の設定 環境変数 or 設定サーバ $ export JDBC_USER=root $ export JDBC_PASSWORD=password $ export DB_HOST=localhost $ export DB_PORT=3306 $ export JDBC_URL= “jdbc:mysql://dbhost:3306/artist ”
  51. 51. 環境変数”
  52. 52. はじめに Java SE の現在と将来 Java EE の現在と将来 セッション管理
  53. 53. アプリケーション・サーバ依存の排除 サーバ HTTP セッション共有 → Inmemory Grid
  54. 54. アプリケーション・サーバ依存の排除 Payara + hazelcast の場合
  55. 55. はじめに Java SE の現在と将来 Java EE の現在と将来 運用・監視は重要
  56. 56. はじめに Java SE の現在と将来 Java EE の現在と将来 データベース連携
  57. 57. 顧客管理 受注管理 物流管理 売り上げ管理 商品管理 レコメンド 顧客分析 経営分析 企業システム DB
  58. 58. 顧客管理 サービス 顧客管理 DB 受注管理 サービス 受注管理 DB 物流管理 サービス 物流管理 DB 売上管理 サービス 売上管理 DB JDBC 接続 プール JDBC 接続 プール JDBC 接続 プール JDBC 接続 プール
  59. 59. 受注管理 サービス 顧客管理 DB 物流管理 サービス 物流管理 DB JDBC 接続 プール JDBC 接続 プール
  60. 60. 顧客管理 DB 物流管理 DB 受注管理 サービス 物流管理 サービス JDBC 接続 プール JDBC 接続 プール 受注 完了 メ ッ セ ー ジ ン グ ・シ ス テ ム メッセージ連携 受注 発生
  61. 61. イベント処理
  62. 62. はじめに Java SE の現在と将来 Java EE の現在と将来 サービス導入
  63. 63. ホット・デプロイから継続的デプロイ すべての変更を自動的に本番での検証 • Feature Flag • Blue/Green Deploy • A/B Test • Canary Test • Red/Black
  64. 64. Feature Flag
  65. 65. はじめに Java SE の現在と将来 Java EE の現在と将来 さいごに
  66. 66. おきないように 頑張る ? 起きても大丈夫な ように作る? 障害はおきる!!
  67. 67. 分散コンピューティングの落とし穴
  68. 68. 誤った考えかた https://blogs.oracle.com/jag/resource/Fallacies.html
  69. 69. 分散コンピューティングを 意識したシステム開発
  70. 70. どこで障害が発生する? 仮想 IP LB App Server ハートビート HA-Cluster ハートビート 仮想 IP
  71. 71. MSA 化はもっと 障害に対する 考慮が必要
  72. 72. 今だから再び !! オススメの一冊
  73. 73. 今しっかりと できていなければ Microservices でも できない
  74. 74. 12 Factor App Reactor Manifest 組織作り TDD Agile 継続的インテグレーション Infrastructure as Code 継続的デリバリ
  75. 75. Microsoft Java
  76. 76. © 2017 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

×