SlideShare une entreprise Scribd logo
1  sur  21
Télécharger pour lire hors ligne
© 2021 TIS Inc.
第6回Reactive System Meetup in 西新宿
可用性を突き詰めたリアクティブシステム
2021.3.5
テクノロジー&イノベーション本部
テクノロジー&エンジニアリングセンター
前出 祐吾
© 2021 TIS Inc. 2
自己紹介
• 現在の取り組みテーマ
オープン環境で高可用・高スループットなシステムを如何にして構築するか?
ソフトウェアスタック『Lerna』のプロダクトオーナーとして基盤整備と実戦投入
• 訳書
Akka実践バイブル
• Web連載
ThinkIT:メニーコア時代のバラダイム リアクティブシステムを知ろう
• イベント登壇
Scala Matsuri、JJUG CCCなど
テクノロジー&イノベーション本部
テクノロジー&エンジニアリングセンター ≒ 技術特化横断組織
前出 祐吾 Twitter @yugolf
© 2021 TIS Inc. 3
我々が目指すゴール
ハイスペック
かつ
高価なサーバー
オープン環境
=分散システム
高可用性かつ高スループットなシステムを安価かつスピーディーに構築する
© 2021 TIS Inc. 4
高可用性かつ高スループットな分散システムに必要なこと
高スループット
⚫ステートフルなアプリケーション
⚫サービスの成長に合わせた弾力性
高可用性
⚫すべてのレイヤを冗長化
⚫ノード障害時の影響を極小化
⚫時間
⚫ユーザー
⚫機能
※前提:一貫性を失わない
© 2021 TIS Inc. 5
非機能要件実現のための羅針盤
リアクティブシステム
ステートフルなアプリケーション
サービスの成長に合わせた弾力性
すべてのレイヤを冗長化
ノード障害時の影響を極小化
リアクティブ宣言 https://www.reactivemanifesto.org/ja
© 2021 TIS Inc. 6
非機能要件実現のための羅針盤
リアクティブシステム
Akkaのメッセージ駆動で実現
リアクティブ宣言 https://www.reactivemanifesto.org/ja
© 2021 TIS Inc. 7
アーキテクチャ
Web AP DB
状態保持 状態保持
ステートフルなアプリケーション
サービスの成長に合わせた弾力性
すべてのレイヤを冗長化
© 2021 TIS Inc. 8
Akka Clusterによる「ステートフルなアプリケーション」
• 多くのイベントが蓄積するとリプレイに時間がかかるため一定間隔でスナップショットを取っておく
• スナップショットは一定数のイベントが蓄積した場合や、一定周期などイベントの性質に合わせて任意
のタイミングで取得する
イベント
-------------
ー100円
+50円
+100円
Alice
Bob
Charlie
残高150円
残高200円
残高10円
利用者が増えリソースが足りなくなったらノードを追加
リプレイしてアクターを復元
状態はAkkaのアクター(Entity)に持ち、速いレスポンスが可能
アクターは1つのノードにのみ存在し、ノード障害時はCassandraからイベントをリプレイして復旧
© 2021 TIS Inc. 9
項目 Min Max
ハートビートの間隔 0ms 500ms
ハートビートの応答待ち時間 1,200ms
標準偏差phiを元に算出した誤検知防止待ち時間 1,550ms
「unreachable」としてマークされるまでの期間 0ms 500ms
「down」状態になるまでの時間 3,500ms 4,375ms
「removed」状態になるまでの時間 3,500ms
アクターの再生成 α α
合計ダウンタイム 9,750 + α 11,625 + α
×
Alice
Bob
Charlie
Unreachable
↓
down
↓
removed
Alice
ハートビート
➢ Akkaクラスタ内のメンバーの状態遷移
アプリケーションにおける「ノード障害時の影響を極小化」
https://doc.akka.io/docs/akka/current/typed/cluster-
membership.html#state-diagrams
ダウンしたサーバーが司る処理を、ダウン後(15秒以下)で別のサーバーで処理できるように
© 2021 TIS Inc. 10
「サービスの成長に合わせた弾力性」における課題
CQRS(コマンドクエリ責務分離)とES(イベントソーシング)の採用
⚫ アプリケーションとデータベースを書込処理を行うコマンドサイドと読込処理を行うリードサイドに分離(CQRS)
⚫ 書込処理はCassandraに対してイベントを登録(ES)を行うためスケールアウト可能
⚫ 参照しやすいように非同期でRDBMSへデータを反映(イベントから状態へ変換)し、読み込み処理はRDBMSを参照
⚫ 書込み後、クエリサイドに反映されるまで若干のタイムラグがある => 結果整合性 の許容
⚫ 最新の状態はコマンドサイドのAkkaアクターに保持しており、残高などのチェックをインメモリで行うので最終的に整合性が
崩れることはない
イベント
-------------
出金 100円
出金 300円
入金 1,000円
決済100円
600円
残高
-------------
700円
残高表示
参照しやすい形でデータ保持
参照用データストアへ反映
(決済が完了した場合のみ書込み)
課題
読み込み処理はデータベースのリードレプリカを作成することで比較的スケールしやすいが、書込み処
理のスケールアウトは困難でボトルネックとなりやすい。
解決策 書込み処理にNoSQLデータベースであるCassandraを採用し、レコードのアップデートを排除
入金 100円
© 2021 TIS Inc. 11
◆ 体制のスケール
✓ 教育
✓ 標準化
◆ プロジェクトのスケール
✓ 導入コストの低減
TISにおけるリアクティブシステムの現在地
ミッションクリティカルなサービスへ適用し、高可用性・高スループットの
New Normalへ
New Normalへ必要なもの
© 2021 TIS Inc. 12
『Lerna』としてOSS公開
https://lerna-stack.github.io/
© 2021 TIS Inc. 13
『Lerna』とは
MW
Application
HW
Public Cloud
Business
Application
Lernaは高可用・高スループット※なシステムを構築するソフトウェアスタックです。
※1,000TPS下でフェイルオーバー実測値ベースの年間論理稼働率99.999%
https://lerna-stack.github.io/
MariaDB
Keepalived
HAProxy
Project template Akka
Terraform
script
A toolkit for building highly concurrent, distributed,
and resilient message-driven applications
Lerna
クラウド上で稼働しているVMに対して、Lernaの環境構築スクリプトを実行すると高可用性と高スループット
を実現する設定がなされた環境が構築される。
その環境で、アクターモデル(Akka)・CQRSのアーキテクチャで設計し実装すると高可用システムが構築で
きる。
Cassandra
Library
guides
Reference
Code
Learning
content
Private Cloud
VM
OS
VM
OS
https://lerna-stack.github.io/
© 2021 TIS Inc. 14
『Lerna』のコンセプト
高い可用性とスループットが要求されるサービスを低価格でスピーディーに提供する
低価格・スピーディー
⚫ 高額なハードウェアを使用せず、オープンな環境で高可用性・高スループットを実現するため、開発はスピーディーに運用コストは
安価にサービスを提供できる
プラットフォーム依存なし
⚫ プラットフォームはパブリッククラウド、オンプレ問わず構築が可能であらゆる利用者の制約に応じた環境で
サービスを提要できる
OSSとして進化
⚫ ソースコードはすべてOSSとして公開し世界中のパートナーと共に開発することで、投資コスト以上の品質・ス
ピードで進化さる
⚫ ソースコードを公開することでベンダーロックを避け、利用者はEOLを気にせず利用できる
⚫ インハウスFWによる要員調達・育成・展開の足かせをなくす
新技術の積極採用
⚫ 「進化なきOSSは衰退」「車輪の再発明は進化の妨げ」と捉え、進化のためのOSS活用は拒まず積極採用により
進化させる
⚫ ソースの公開されていないライブラリは活用せず、活用しカスタマイズしたOSSはコントリビュートしOSSと共
に成長させる
⚫ ないものは作って公開し成長させる。ただし、できる限り論文など実証された方式を採用
https://lerna-stack.github.io/
© 2021 TIS Inc. 15
『Lerna』のコンテンツマップ
https://lerna-stack.github.io/
© 2021 TIS Inc. 16
リアクティブ宣言 <抜粋>
『Lerna』の何がうれしいの?
でもどうやって作ればいいの?を『Lerna』が解決!!
– 可用性を突き詰めたアーキテクチャパターン
– with 環境構築キット
– with ライブラリ
– with 開発ガイド
– with リファレンス実装
– with 学習コンテンツ with
https://lerna-stack.github.io/
© 2021 TIS Inc. 17
『Lerna』はどこから始めれば良いの?
 3つの
 Akkaハンズオン(2021.3公開予定)
https://lerna-stack.github.io/
© 2021 TIS Inc. 18
from 『Fintan』: TISのノウハウ集約サイト
◆Lerna日本語サイト
◆TISのあらゆるノウハウを公開
https://fintan.jp/
© 2021 TIS Inc. 19
<宣伝> TIS Developers Night
◆2021/3/19(金) 19:30 ~
connpassよりエントリー下さい。
https://tidev-meetup.connpass.com/event/199990/
© 2021 TIS Inc. 20
まとめ
• 分散システムで安価に実現
• リアクティブシステムを羅針盤にAkkaのメッセージ駆動
を適用
– ステートフルなアプリケーション
– サービスの成長に合わせた弾力性
– すべてのレイヤを冗長化
– ノード障害時の影響を極小化
• ソフトウェアスタック「Lerna」を公開
– 可用性を突き詰めたリアクティブシステムのパターン
高可用性かつ高スループットなシステムを安価かつスピーディーに構築する
THANK YOU
<本資料の取り扱いに関して>
本資料は、著作権法及び不正競争防止法上の保護を受けております。資料の一部あるいは全部について、 TIS株式会社から許諾を得ずに、複写、複製、転記、転載、
改変、ノウハウの使用、営業秘密の開示等を行うことは禁じられております。本文記載の社名・製品名・ロゴは各社の商標または登録商標です。

Contenu connexe

Tendances

Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Kentaro Takeda
 
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現softlayerjp
 
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)Hinemos
 
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)Hinemos
 
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談光平 八代
 
OSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStackOSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStackVirtualTech Japan Inc.
 
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向Midokura
 
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介Ataru Shimodaira
 
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介光平 八代
 

Tendances (12)

Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法Call for Speakersに講演を256倍通す方法
Call for Speakersに講演を256倍通す方法
 
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
SIOS iQ:機械学習 I T O A VMware仮想環境の性能問題の原因分析 迅速な問題解決と未然防止を実現
 
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)
AWS Summit Tokyo 2015_NTTデータセッション(後半:AWSを使ったシステム運用ノウハウ)
 
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
AWS Summit Tokyo 2015_NTTデータセッション(前半:クラウドを活用したオムニチャネル基盤構築)
 
ベンダーロックインフリーのビジネスクラウドの世界
ベンダーロックインフリーのビジネスクラウドの世界ベンダーロックインフリーのビジネスクラウドの世界
ベンダーロックインフリーのビジネスクラウドの世界
 
Nutanix 概要紹介
Nutanix 概要紹介Nutanix 概要紹介
Nutanix 概要紹介
 
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
Ansible・ServerspecベースのOSS開発のCIの成功・失敗談
 
OSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStackOSSのクラウド基盤 OpenStack / CloudStack
OSSのクラウド基盤 OpenStack / CloudStack
 
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向
OpenStack Networkingとネットワーク仮想化ソフトMidoNet最新動向
 
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介
Emc event 20150605 Mirantis OpenStack ミランティスとお客様事例のご紹介
 
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
Ansible・Serverspecベースの自動化フレームワークSHIFT wareの紹介
 
Azure ML 強化学習を用いた最新アルゴリズムの活用手法
Azure ML 強化学習を用いた最新アルゴリズムの活用手法Azure ML 強化学習を用いた最新アルゴリズムの活用手法
Azure ML 強化学習を用いた最新アルゴリズムの活用手法
 

Similaire à 可用性を突き詰めたリアクティブシステム

Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuStarting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuTIS Inc.
 
Liquid studio Tokyo Accenture
Liquid studio Tokyo AccentureLiquid studio Tokyo Accenture
Liquid studio Tokyo AccentureAccenture Japan
 
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...Hitachi, Ltd. OSS Solution Center.
 
hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計VirtualTech Japan Inc.
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkwhywaita
 
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話Shingo Kawahara
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいnpsg
 
Java-minishift-20191123
Java-minishift-20191123Java-minishift-20191123
Java-minishift-20191123Yasushi Osonoi
 
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKA
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKAマイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKA
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKAMurata Tatsuhiro
 
クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割Yusuke Oi
 
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ayumu Aizawa
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43Preferred Networks
 
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版VirtualTech Japan Inc./Begi.net Inc.
 
今さら聞けない人のための K8s 超入門 Big Sur 対応版
今さら聞けない人のための K8s 超入門 Big Sur 対応版今さら聞けない人のための K8s 超入門 Big Sur 対応版
今さら聞けない人のための K8s 超入門 Big Sur 対応版VirtualTech Japan Inc./Begi.net Inc.
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?Developers Summit
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...VirtualTech Japan Inc.
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...Nobuyuki Tamaoki
 

Similaire à 可用性を突き詰めたリアクティブシステム (20)

Starting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjukuStarting Reactive Systems with Lerna #reactive_shinjuku
Starting Reactive Systems with Lerna #reactive_shinjuku
 
Liquid studio Tokyo Accenture
Liquid studio Tokyo AccentureLiquid studio Tokyo Accenture
Liquid studio Tokyo Accenture
 
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...
KubeCon NA 2023 Recap: Challenge to Implementing “Scalable” Authorization wit...
 
Builderscon Tokyo 2017
Builderscon Tokyo 2017 Builderscon Tokyo 2017
Builderscon Tokyo 2017
 
hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計hbstudy#88 5G+MEC時代のシステム設計
hbstudy#88 5G+MEC時代のシステム設計
 
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tkKubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
Kubernetesの良さを活かして開発・運用!Cloud Native入門 / An introductory Cloud Native #osc19tk
 
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話
July Tech Festa 2020 AKSを活用した内製教育支援プラットフォームをリリースした話
 
ネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらいネットワークプログラマビリティ勉強会 これまでのおさらい
ネットワークプログラマビリティ勉強会 これまでのおさらい
 
今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門今さら聞けない人のためのDevOps超入門
今さら聞けない人のためのDevOps超入門
 
Java-minishift-20191123
Java-minishift-20191123Java-minishift-20191123
Java-minishift-20191123
 
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKA
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKAマイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKA
マイクロサービスの基盤として注目の「NGINX」最新情報 | 20180127 OSC2018 OSAKA
 
クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割クラウド時代にこそ求められるIt部門の役割
クラウド時代にこそ求められるIt部門の役割
 
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
Ruby コミュニティの文化に学ぶエンタープライズシステム開発の処方箋
 
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
ゼロから作るKubernetesによるJupyter as a Service ー Kubernetes Meetup Tokyo #43
 
今さら聞けない人のためのK8s超入門
今さら聞けない人のためのK8s超入門今さら聞けない人のためのK8s超入門
今さら聞けない人のためのK8s超入門
 
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版
今さら聞けない人のためのKubernetes超入門 ニフクラエンジニアミートアップ版
 
今さら聞けない人のための K8s 超入門 Big Sur 対応版
今さら聞けない人のための K8s 超入門 Big Sur 対応版今さら聞けない人のための K8s 超入門 Big Sur 対応版
今さら聞けない人のための K8s 超入門 Big Sur 対応版
 
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
オープンクラウド基盤の価値と導入へ向けた考慮点 〜IaaSからPaaSまで - EMC様セミナー 「あなたのビジネスを高速化!DevOpsとアジャイル開発...
 

Plus de TIS Inc.

AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現TIS Inc.
 
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaReactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaTIS Inc.
 
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜TIS Inc.
 
Akkaの並行性
Akkaの並行性Akkaの並行性
Akkaの並行性TIS Inc.
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオンTIS Inc.
 
Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018TIS Inc.
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriTIS Inc.
 
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャAkkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャTIS Inc.
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-jaTIS Inc.
 
Effective Akka読書会2
Effective Akka読書会2Effective Akka読書会2
Effective Akka読書会2TIS Inc.
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)TIS Inc.
 
甲賀流Jenkins活用術
甲賀流Jenkins活用術甲賀流Jenkins活用術
甲賀流Jenkins活用術TIS Inc.
 

Plus de TIS Inc. (12)

AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
AWSマネージドサービスとOSSによるミッションクリティカルなシステムの実現
 
Reactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with LernaReactive Systems that focus on High Availability with Lerna
Reactive Systems that focus on High Availability with Lerna
 
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
EventStormingワークショップ 〜かつてない図書館をモデリングしてみよう〜
 
Akkaの並行性
Akkaの並行性Akkaの並行性
Akkaの並行性
 
JavaからAkkaハンズオン
JavaからAkkaハンズオンJavaからAkkaハンズオン
JavaからAkkaハンズオン
 
Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018Akka in Action workshop #ScalaMatsuri 2018
Akka in Action workshop #ScalaMatsuri 2018
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuri
 
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャAkkaで実現するステートフルでスケーラブルなアーキテクチャ
Akkaで実現するステートフルでスケーラブルなアーキテクチャ
 
akka-doc-ja
akka-doc-jaakka-doc-ja
akka-doc-ja
 
Effective Akka読書会2
Effective Akka読書会2Effective Akka読書会2
Effective Akka読書会2
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
甲賀流Jenkins活用術
甲賀流Jenkins活用術甲賀流Jenkins活用術
甲賀流Jenkins活用術
 

可用性を突き詰めたリアクティブシステム

  • 1. © 2021 TIS Inc. 第6回Reactive System Meetup in 西新宿 可用性を突き詰めたリアクティブシステム 2021.3.5 テクノロジー&イノベーション本部 テクノロジー&エンジニアリングセンター 前出 祐吾
  • 2. © 2021 TIS Inc. 2 自己紹介 • 現在の取り組みテーマ オープン環境で高可用・高スループットなシステムを如何にして構築するか? ソフトウェアスタック『Lerna』のプロダクトオーナーとして基盤整備と実戦投入 • 訳書 Akka実践バイブル • Web連載 ThinkIT:メニーコア時代のバラダイム リアクティブシステムを知ろう • イベント登壇 Scala Matsuri、JJUG CCCなど テクノロジー&イノベーション本部 テクノロジー&エンジニアリングセンター ≒ 技術特化横断組織 前出 祐吾 Twitter @yugolf
  • 3. © 2021 TIS Inc. 3 我々が目指すゴール ハイスペック かつ 高価なサーバー オープン環境 =分散システム 高可用性かつ高スループットなシステムを安価かつスピーディーに構築する
  • 4. © 2021 TIS Inc. 4 高可用性かつ高スループットな分散システムに必要なこと 高スループット ⚫ステートフルなアプリケーション ⚫サービスの成長に合わせた弾力性 高可用性 ⚫すべてのレイヤを冗長化 ⚫ノード障害時の影響を極小化 ⚫時間 ⚫ユーザー ⚫機能 ※前提:一貫性を失わない
  • 5. © 2021 TIS Inc. 5 非機能要件実現のための羅針盤 リアクティブシステム ステートフルなアプリケーション サービスの成長に合わせた弾力性 すべてのレイヤを冗長化 ノード障害時の影響を極小化 リアクティブ宣言 https://www.reactivemanifesto.org/ja
  • 6. © 2021 TIS Inc. 6 非機能要件実現のための羅針盤 リアクティブシステム Akkaのメッセージ駆動で実現 リアクティブ宣言 https://www.reactivemanifesto.org/ja
  • 7. © 2021 TIS Inc. 7 アーキテクチャ Web AP DB 状態保持 状態保持 ステートフルなアプリケーション サービスの成長に合わせた弾力性 すべてのレイヤを冗長化
  • 8. © 2021 TIS Inc. 8 Akka Clusterによる「ステートフルなアプリケーション」 • 多くのイベントが蓄積するとリプレイに時間がかかるため一定間隔でスナップショットを取っておく • スナップショットは一定数のイベントが蓄積した場合や、一定周期などイベントの性質に合わせて任意 のタイミングで取得する イベント ------------- ー100円 +50円 +100円 Alice Bob Charlie 残高150円 残高200円 残高10円 利用者が増えリソースが足りなくなったらノードを追加 リプレイしてアクターを復元 状態はAkkaのアクター(Entity)に持ち、速いレスポンスが可能 アクターは1つのノードにのみ存在し、ノード障害時はCassandraからイベントをリプレイして復旧
  • 9. © 2021 TIS Inc. 9 項目 Min Max ハートビートの間隔 0ms 500ms ハートビートの応答待ち時間 1,200ms 標準偏差phiを元に算出した誤検知防止待ち時間 1,550ms 「unreachable」としてマークされるまでの期間 0ms 500ms 「down」状態になるまでの時間 3,500ms 4,375ms 「removed」状態になるまでの時間 3,500ms アクターの再生成 α α 合計ダウンタイム 9,750 + α 11,625 + α × Alice Bob Charlie Unreachable ↓ down ↓ removed Alice ハートビート ➢ Akkaクラスタ内のメンバーの状態遷移 アプリケーションにおける「ノード障害時の影響を極小化」 https://doc.akka.io/docs/akka/current/typed/cluster- membership.html#state-diagrams ダウンしたサーバーが司る処理を、ダウン後(15秒以下)で別のサーバーで処理できるように
  • 10. © 2021 TIS Inc. 10 「サービスの成長に合わせた弾力性」における課題 CQRS(コマンドクエリ責務分離)とES(イベントソーシング)の採用 ⚫ アプリケーションとデータベースを書込処理を行うコマンドサイドと読込処理を行うリードサイドに分離(CQRS) ⚫ 書込処理はCassandraに対してイベントを登録(ES)を行うためスケールアウト可能 ⚫ 参照しやすいように非同期でRDBMSへデータを反映(イベントから状態へ変換)し、読み込み処理はRDBMSを参照 ⚫ 書込み後、クエリサイドに反映されるまで若干のタイムラグがある => 結果整合性 の許容 ⚫ 最新の状態はコマンドサイドのAkkaアクターに保持しており、残高などのチェックをインメモリで行うので最終的に整合性が 崩れることはない イベント ------------- 出金 100円 出金 300円 入金 1,000円 決済100円 600円 残高 ------------- 700円 残高表示 参照しやすい形でデータ保持 参照用データストアへ反映 (決済が完了した場合のみ書込み) 課題 読み込み処理はデータベースのリードレプリカを作成することで比較的スケールしやすいが、書込み処 理のスケールアウトは困難でボトルネックとなりやすい。 解決策 書込み処理にNoSQLデータベースであるCassandraを採用し、レコードのアップデートを排除 入金 100円
  • 11. © 2021 TIS Inc. 11 ◆ 体制のスケール ✓ 教育 ✓ 標準化 ◆ プロジェクトのスケール ✓ 導入コストの低減 TISにおけるリアクティブシステムの現在地 ミッションクリティカルなサービスへ適用し、高可用性・高スループットの New Normalへ New Normalへ必要なもの
  • 12. © 2021 TIS Inc. 12 『Lerna』としてOSS公開 https://lerna-stack.github.io/
  • 13. © 2021 TIS Inc. 13 『Lerna』とは MW Application HW Public Cloud Business Application Lernaは高可用・高スループット※なシステムを構築するソフトウェアスタックです。 ※1,000TPS下でフェイルオーバー実測値ベースの年間論理稼働率99.999% https://lerna-stack.github.io/ MariaDB Keepalived HAProxy Project template Akka Terraform script A toolkit for building highly concurrent, distributed, and resilient message-driven applications Lerna クラウド上で稼働しているVMに対して、Lernaの環境構築スクリプトを実行すると高可用性と高スループット を実現する設定がなされた環境が構築される。 その環境で、アクターモデル(Akka)・CQRSのアーキテクチャで設計し実装すると高可用システムが構築で きる。 Cassandra Library guides Reference Code Learning content Private Cloud VM OS VM OS https://lerna-stack.github.io/
  • 14. © 2021 TIS Inc. 14 『Lerna』のコンセプト 高い可用性とスループットが要求されるサービスを低価格でスピーディーに提供する 低価格・スピーディー ⚫ 高額なハードウェアを使用せず、オープンな環境で高可用性・高スループットを実現するため、開発はスピーディーに運用コストは 安価にサービスを提供できる プラットフォーム依存なし ⚫ プラットフォームはパブリッククラウド、オンプレ問わず構築が可能であらゆる利用者の制約に応じた環境で サービスを提要できる OSSとして進化 ⚫ ソースコードはすべてOSSとして公開し世界中のパートナーと共に開発することで、投資コスト以上の品質・ス ピードで進化さる ⚫ ソースコードを公開することでベンダーロックを避け、利用者はEOLを気にせず利用できる ⚫ インハウスFWによる要員調達・育成・展開の足かせをなくす 新技術の積極採用 ⚫ 「進化なきOSSは衰退」「車輪の再発明は進化の妨げ」と捉え、進化のためのOSS活用は拒まず積極採用により 進化させる ⚫ ソースの公開されていないライブラリは活用せず、活用しカスタマイズしたOSSはコントリビュートしOSSと共 に成長させる ⚫ ないものは作って公開し成長させる。ただし、できる限り論文など実証された方式を採用 https://lerna-stack.github.io/
  • 15. © 2021 TIS Inc. 15 『Lerna』のコンテンツマップ https://lerna-stack.github.io/
  • 16. © 2021 TIS Inc. 16 リアクティブ宣言 <抜粋> 『Lerna』の何がうれしいの? でもどうやって作ればいいの?を『Lerna』が解決!! – 可用性を突き詰めたアーキテクチャパターン – with 環境構築キット – with ライブラリ – with 開発ガイド – with リファレンス実装 – with 学習コンテンツ with https://lerna-stack.github.io/
  • 17. © 2021 TIS Inc. 17 『Lerna』はどこから始めれば良いの?  3つの  Akkaハンズオン(2021.3公開予定) https://lerna-stack.github.io/
  • 18. © 2021 TIS Inc. 18 from 『Fintan』: TISのノウハウ集約サイト ◆Lerna日本語サイト ◆TISのあらゆるノウハウを公開 https://fintan.jp/
  • 19. © 2021 TIS Inc. 19 <宣伝> TIS Developers Night ◆2021/3/19(金) 19:30 ~ connpassよりエントリー下さい。 https://tidev-meetup.connpass.com/event/199990/
  • 20. © 2021 TIS Inc. 20 まとめ • 分散システムで安価に実現 • リアクティブシステムを羅針盤にAkkaのメッセージ駆動 を適用 – ステートフルなアプリケーション – サービスの成長に合わせた弾力性 – すべてのレイヤを冗長化 – ノード障害時の影響を極小化 • ソフトウェアスタック「Lerna」を公開 – 可用性を突き詰めたリアクティブシステムのパターン 高可用性かつ高スループットなシステムを安価かつスピーディーに構築する