Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
マイクロサービス始めてみよう!
Search
Shu Adachi
June 23, 2023
Technology
1
400
マイクロサービス始めてみよう!
Shu Adachi
June 23, 2023
Tweet
Share
More Decks by Shu Adachi
See All by Shu Adachi
コンテナ入門
shuadachi
0
220
2023/3/24 IBM Cloud + SPSS Modeler Flow でデータ分析をやってみよう!
shuadachi
0
95
IBM Cloud + SPSS Modeler Flow でデータ分析をやってみよう!
shuadachi
0
300
Other Decks in Technology
See All in Technology
NewSQL Landscape
oracle4engineer
PRO
5
3.2k
Google Cloud Next '24 Recap in ZOZO AIにより変わる開発 運用/Development and operation changed by AI
gachimuchiengineer
0
200
Google Cloudを組織(企業)で運用する時のベストプラクティス × 健康の環境分離戦略 #まるクラ勉強会
yasumuusan
0
170
5分で分かる(かもしれない) Vector engine for OpenSearch Serverless
tsukuboshi
1
400
スクラムに出会って「できた」を実感できるようになってきた話 / Scrum makes me feel like I can do it
yayoi_dd
2
110
データ分析力を高めるSQL研修サービス『SQL Everyone』
hikarut
1
390
エンジニアゼロの組織から内製開発の DX をどう実現したのか / How did we achieve DX in in-house development in an organization with zero engineers?
genkiogasawara
7
3k
YJIT Makes Rails 1.7x faster / RubyKaigi 2024
k0kubun
3
460
Databricksの生成AI戦略
taka_aki
1
370
LLM評価の落とし穴~開発者目線で気をつけるポイント~
rishigami
11
3.2k
cgroup v2 で何が変わったのか / TechFeed Experts Night #28
tenforward
2
160
株式会社EventHub・エンジニア採用資料
eventhub
0
2.1k
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
228
130k
The Cult of Friendly URLs
andyhume
74
5.7k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
GraphQLの誤解/rethinking-graphql
sonatard
56
9.3k
Principles of Awesome APIs and How to Build Them.
keavy
121
16k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
14
8.4k
Documentation Writing (for coders)
carmenintech
60
4k
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Facilitating Awesome Meetings
lara
43
5.6k
Navigating Team Friction
lara
179
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
15
1.6k
Transcript
IBM Tech/Developer Dojo 2023/06/22 マイクロサービス始めてみよう
本セッションについて 概要 いわゆるモダンなアプリケーション開発には不可⽋となっている「マイクロサービス」と、 それを⽀える「コンテナ技術」の概要について解説します。 Cloud Native Computing Foundation(CNCF)が定義するクラウドネイティブな世界へ の⼊り⼝として、サンプルのマイクロサービスアプリケーションを題材に使い、座学だけ でなく実際にデモを交えながらよりリアルに体験いただきます
対象者 マイクロサービスに興味・関⼼のある⽅ マイクロサービスが実際にどの様に動作するかを⾒てみたい・触ってみたい⽅ サンプルアプリをどの様に学習に活⽤すれば良いか知りたい⽅
アジェンダ 1. オープニング 18:00 – 18:05 2. 座学 18:05 –
18:25 3. ハンズオン・デモ 18:25 – 18:55 4. QA・クロージング 18:55 – 19:00 ※時刻は⽬安です。進⾏により多少前後する可能性があります
はじめに 当イベントは⽇本IBMおよび⽇鉄ソリューションズの有志エンジニアによって企画された勉強会です。 クラウドネイティブやマイクロサービスなどのテーマを中⼼に、今後も⾊々な勉強会・イベントを開催する予定です 本勉強会の内容は、エンジニア個⼈の⾒解であり、所属する企業の公式⾒解ではありません。 セッション中はマイクミュートでの参加にご協⼒お願いします。 本イベントは録画してアーカイブ公開する予定ですので、その点ご了承ください。 本発表で利⽤している製品の名称およびロゴは下記の組織または企業の商標となります。 CNCFはCloud Native Computing
Foundationの登録商標です。 Kubernetes, k8s, Prometheus, OpenTelemetryおよびそれらのロゴはLinux Foundationの登録商標です。 Docker および Dockerロゴは、⽶国および/またはその他の国におけるDocker, Inc.の商標または登録商標です。 KillercodaはKLLR GmbHの登録商標です。 LinuxはLinus Torvaldsの⽇本およびその他の国における商標または登録商標です。 NS(ロゴ)、NSSOL、NS Solutionsは、⽇鉄ソリューションズ株式会社の登録商標です。 その他本⽂記載の会社名及び製品名は、それぞれ各社の商標⼜は登録商標です。
⾃⼰紹介 ⽥村 ⼤樹(Daiki Tamura) <所属> ⽇鉄ソリューションズ株式会社 システム研究開発センター <経歴> u 2017-2019
Webシステムに対する負荷試験実⾏や性能分析 u 2020-2022 常駐先でクラウド上での開発運⽤案件(主に基盤担当) u 2023- クラウドネイティブ分野の研究開発(最近はeBPF周りに関⼼) <趣味> オーケストラ(クラリネット)
⾃⼰紹介 ⾜⽴ 嵩(Shu Adachi) <所属> ⽇本アイ・ビー・エム株式会社 テクノロジー事業本部 Customer Success Manager
<経歴> u 2016-2021 製造業のお客様のアカウントSE u 2021- 現職にて弊社戦略製品のCSM <趣味> ゴルフ, 筋トレ, (ちょっとだけ)英会話
⾃⼰紹介 上中⾕ 健(Ken Kaminakaya) <所属> ⽇鉄ソリューションズ株式会社 システム研究開発センター <経歴> u 2016-2019
様々なお客様にてOracle DB導⼊案件を実施 u 2019-2021 オンプレ基盤全体の設計・構築 u 2021- クラウドネイティブ分野の研究開発(主にOpenTelemetry) <趣味> ペット、ゲーム
アンケートやご質問についてのご案内 u 下記から受け付けておりますので、どうぞお気軽にお願いいたします。 u 簡単なアンケートをご⽤意しています。 アクセス確認も兼ねてご覧になってみてください。 https://app.sli.do/event/nh3knVCDCi2cfZSRrkfsUw Event Code︓#dojo_20230622pm
本発表に⾄る背景・モチベーション モダンなアプリケーション開発のことを学びたいが、具体的にどういうふうに作っていけ ば良いか分からない(HelloWorldは分かったから、もう少しだけ踏み込みたい︕) 新しいツールやサービスを試すのに、実践的な題材となるアプリケーションを何か動かし たい オープンソースで公開されているデモアプリケーションを参考にするのが⼿っ取り早いか も︕・・・だが、 たくさんあって、どれを選べばよいのか困る k8s Manifest等は提供されていても、具体的な仕組みまで書かれたドキュメントや⽇本語情報
はなく意外と使い勝⼿に困ることも多々ある 世の中にあるサンプルアプリケーションを少し紐解き、 どんな構造や仕組みになっているのか、まとめてみよう(今回の発表)
おさらい︓クラウドネイティブとは システムの開発・運⽤を、クラウドコンピュー ティング(クラウド)が持つ特徴を最⼤限に活 かして⾏うというアプローチ。 クラウドの持つ特徴︓ オンデマンドに計算資源を利⽤可能 柔軟性・スケーラビリティ 様々な便利な機能(マネージドサービス) → 単なる物理マシンの置き換えではないという
こと これにより、アプリケーションを実⾏する基盤 が頻繁に⼊れ替わることになる。 →「コンテナ」が重要な役割を果たしている ▼ 6/13回: 「クラウドネイティブの旅に出よう」より https://speakerdeck.com/tkhresk/cloudnative-trailmap-kuraudoneiteibunolu-nichu-you-trail- mapnochu-xin-zhe-xiang-kejie-shuo?slide=10
おさらい︓コンテナとは アプリケーションをパッケージングする仕組み、 またはその基盤。 プロセスを、まるでコンテナの中にいるかのよう に、隔離した状態で実⾏するような技術。 例えば、あるプログラムを実⾏するにあたって必 要なライブラリなどの依存関係を含みながら、他 のプロセスやホストOSへの影響を少なく独⽴して 実⾏できるといった意味。 重要な性質︓
⾼速 軽量 可搬性 → どこでも、すぐに、同じように、アプリケー ションをコンテナとして実⾏できる ▼ 6/13回: 「クラウドネイティブの旅に出よう」より https://speakerdeck.com/tkhresk/cloudnative-trailmap-kuraudoneiteibunolu-nichu-you- trail-mapnochu-xin-zhe-xiang-kejie-shuo?slide=17
マイクロサービスとは システムを、複数の独⽴したサービスに分割し、サービス間をAPIによって 連携させて動作するアーキテクチャのこと。 フロントエンド 機能フラグ カート email ⽀払い 配送 レコメンド
不正検出 会計 広告 カタログ 通貨 チェックアウト ⾒積 データベース層 APIサービス層 WEB層 従来の3層アーキテクチャ ※ 本⽇この後に登場するデモアプリのサービスたち マイクロサービス
主な重要ポイント 独⽴にデプロイ可能であること サービス同⼠はネットワークを介してAPIで繋ぐ 1つのサービスは1つのビジネス的な機能に基づいてモデル化されていること (必ずしも技術観点で分割しない) あるサービスに対しては、1つの開発チームが担当すること (1つの開発チームが複数のサービスを⾒るのは問題ない) 技術的アプローチであると同時に、 組織の構造や⽂化も含めての検討が肝要
マイクロサービスの主なメリット① 開発が容易→速いリリース 1つのサービスが1チームに閉じているので、意思決定やコミュニケーション等のオーバーヘッドが少ない 機能開発的な視点でも、インフラ・アプリという視点でも ただし、API仕様の互換性担保には気を配らないといけない サービス単位で適材適所に様々な技術選択が可能 ある機能追加に対して、変更を加える対象サービスが1つで済む サービス単位でリリース頻度を制御できる フロントエンド カート
⽀払い 配送 v1 レコメンド 会計 広告 カタログ チェックアウト Typescript Node.js Rust Go .NET Go Java Python Go 配送 v2 dev dev dev SRE SRE Team:配送 dev dev dev SRE SRE Team:会計 コンテナの軽量性が効いてくる。 ・多種多様な技術を隔離された環境内で独⽴に実⾏でき、 ・軽量なので、同時に複数起動しても余分なリソース消費が少ない
マイクロサービスの主なメリット② 障害範囲の局所化 何かが落ちても部分的には使えて、全く使えないという状況にはなりにくくなる。 データベース層 APIサービス層 WEB層 フロントエンド カート ⽀払い 配送
v1 レコメンド 会計 広告 カタログ チェックアウト レコメンド ︖
マイクロサービスの主なメリット③ スケールの柔軟性 サービス単位に柔軟にリソース増強などが⾏える (特定機能に負荷が集中するようなケースでのリソース効率が良くなる) フロントエンド カート ⽀払い 配送 v1 レコメンド
会計 広告 チェックアウト カタログ データベース層 AP WEB層 AP AP APIサービス層 コンテナの⾼速性が効いてくる ・アプリケーションが⾼速に起動するので、負荷に対しての追従が速い
デメリットや苦労すること 適切なサービス分割⽅法 チーム体制 複雑化(いわゆる「 デススター」) 障害箇所の特定 複数サービスに渡るデータのトランザクション制御 (特に、失敗した場合のロールバック) 開発環境等での再現
関連する技術や概念、⼿法などのキーワード キーワード 概要 ドメイン駆動設計 ドメインの知⾒者とともに反復的にドメインに関する知識をモデル化 してソフトウェアに当てはめる設計⼿法。 フィーチャーフラグ 特定の機能のオン/オフを、コードの変更なく動的に切り替えるように する機構のこと。リリースとデプロイを分離する。 可観測性/オブザーバビリティ
システムの出⼒をもとに内部の状態や挙動を把握することができる性 質。 OpenTelemetry 可観測性を⾼めるために収集するデータ(メトリクス・ログ・トレー ス等)についての標準規格を定義するプロジェクト(*) API Gateway API管理における共通的な関⼼事を担うソフトウェアコンポーネント。 認証・流量制御・マネタイズ・開発者ポータル等の機能を担うことが 多い。 (*) このうち、メトリクスを収集する代表的なOSSであるPrometheusについては、 別回の 「Prometheusを触ってみた」( 7/6(⽊) 18時)も合わせて御覧ください︕ https://ibm-developer.connpass.com/event/287905/
体験する ここからは、マイクロサービス×コンテナ のよりリアルな体験として、 実際にサンプルアプリケーションを題材にしながら、具体的に深掘りしていきます。
本⽇紹介するサンプルアプリケーション GitHubにて公開されている OpenTelemetryのデモベース マイクロサービスベースの 分散システム Docker または Kubernetes で 簡単
にお試し可能 本⽇紹介するデモ環境はKillercoda にて公開中 https://github.com/open-telemetry/opentelemetry-demo
本⽇紹介するサンプルアプリケーション 複数の⾔語を使⽤ https://opentelemetry.io/docs/demo/architecture/ ⾔語 サービス .NET カート C++ 通貨 Erlang/Elixir
機能フラグ Go 会計, チェックアウト, 商品カタログ Java 広告 JavaScript フロントエンド, ⽀払い Kotlin 不正検出 PHP ⾒積 Python レコメンド Ruby Eメール Rust 配送 https://opentelemetry.io/docs/demo/ アーキテクチャ 左記のサービスがgRPC, HTTP, TCPを介して相互通信
Killercoda(読み︓きらーこーだ) 本⽇デモで使⽤する学習プラットフォーム ブラウザから Linux または Kubernetes の環境に即座にアクセス可能 GitHubアカウントやEメールなどでサインインすることで無料で利⽤可能
起動するマイクロサービスアプリケーション 天体望遠鏡のECサイト 「あなたのお買い物傾向におすすめの商品はこち ら」の様な推奨機能を提供 デモでは上記サービスを停⽌してみて動作を確認 (他のサービスに影響が出るかどうか) サービスに負荷をかけてオブザーバビリティ環境 で負荷状況を可視化 エラーが発⽣した際のトレース⽅法の紹介
demo https://killercoda.com/nssol-kkmnky/scenario/microservice-handson
本⽇のまとめ マイクロサービスの概要とメリット・デメリットについて理解できた マイクロサービスの開発の第1歩としてサンプルアプリケーションの動作を確認 アプリケーションの起動 マイクロサービスのメリット・デメリットの⼀部を体感 どのようなコンポーネントが必要になるのか理解できた Call to Action︕ ぜひハンズオン⼿順をご⾃⾝の⼿で実施して、
周りのエンジニアにもマイクロサービスに触れてみてもらってください。
We are hiring!! u ⽇鉄ソリューションズでは、 クラウドネイティブ技術を⽤いてお客様のDXを推進する仲間を募集中です u ご興味ある⽅は、ぜひお問い合わせください。 弊社⼈事より、ご連絡を差し上げます 採⽤ページ︓
https://www.nssol.nipponsteel.com/recruit/careers/ 「NSSOL キャリア採⽤」
アンケートにご協⼒お願いいたします https://app.sli.do/event/nh3knVCDCi2cfZSRrkfsUw Event Code︓#dojo_20230622pm
Appendix: 世の中にあるオープンソースなサンプルアプ リケーションたち URL 特徴 FreeCodeCamp 有名所 Todoアプリアプリケーション Java python-patterns
Pythonのデザインパターン集 App Building Workshop C#のアプリ製作ワークショップ ASP.NET Core for Beginners .net coreのSPAアプリ GoogleCloudPlatform/micro service-demo マイクロサービス microservices- demo/microservices-demo マイクロサービス(最近はあまりメンテされていなさそう) open- telemetry/opentelemetry- demo マイクロサービス https://www.realworld.how / 3層アーキテクチャ。単⼀の共通仕様に沿って、多数の技術での実装が公開 されている 他にもご存知でしたらコメントください︕