SlideShare une entreprise Scribd logo
1  sur  45
Télécharger pour lire hors ligne
伊藤ちひろ
システムのモダナイズ
落ちても良いアプリの作り方
CONFIDENTIAL Designator
Source:
Insert source data here
Insert source data here
Insert source data here
OPTIONAL SECTION MARKER OR TITLE
伊藤ちひろ (Chihiro Ito)
OpenJDK Committer
Middleware Solution Architect
Twitter : @chiroito
自己紹介
CONFIDENTIAL Designator
対象者
● ITアーキテクトになりたい人
● システムで何を考えないといけないのか興味のある方
● ミッションクリティカルで使われる技術に興味のある方
CONFIDENTIAL Designator
人々が望むアーキテクチャの1つとは
ビジネス要望 IT
ずっと安定して稼働して欲しい
もちろんコスト効率も考えてね
時代はクラウドとコンテナ。
要望はAuto Scaleでいけるだろ
CONFIDENTIAL Designator
アプリをScaleしたいけど、使い方を間違うと
あれ?遅いぞ 入力したのが
消えた!!!
Scale in
負荷の
偏り
CONFIDENTIAL Designator
システムの構成要素
アプリケーション データストアロードバランサ Web サーバ
CONFIDENTIAL Designator
各要素の可用性の高め方
要素の耐障害性を上げる 要素の数を増やす
CONFIDENTIAL Designator
アプリケーションの種類と可用性
ステートフルステートレス
ステート
?
CONFIDENTIAL Designator
ステートとは何か
● 処理を跨いで保つ状態
○ ショッピングカート情報
○ プロセスの途中の情報
● 入力とステートで出力が変化
○ 購入処理
○ 配送処理
ステート
入力 出力
CONFIDENTIAL Designator
ステートの取り扱い方法
透過的に使用する自分でデータストアとやりとり
DBやインメモリ製品に書き、
必要に応じて読み込む。
→今回は対象外
言語やフレームワークが定義
するHTTPセッション関連の
クラスやインターフェース、
アノテーションを使う。
CONFIDENTIAL Designator
なぜHTTPセッションを使うのか
● すぐに使う情報なのでデータストアに入れるまでもない
● Java EE などのフレームワークに統合されている
○ 変な実装されるリスクが減る
○ 低いレイヤのテストも減る
● 開発者は意識することなく透過的にセッション情報を使える
○ Java EE : HttpSession、@SessionScoped
○ Spring : @SessionScope
CONFIDENTIAL Designator
HTTPセッションに何を入れても良いのか?
● 入れて良いのは 2 つ
○ Java のプリミティブ型
○ Serializable を実装したクラスやフィールド
● 良くあるミス:Connection や Thread を入れる。
○ これらは Serializable ではない。
○ アプリが1つの場合は実装上参照が使われるので、たまたま動く
○ アプリが複数でも同一のアプリに毎回接続してれば、同上
○ アプリを跨がった瞬間に確実にシリアライズされて動かない。
CONFIDENTIAL Designator
サンプルソース
Java EESpring Boot
@SessionScope
@Component
public class Counter implements Serializable {
}
@RestController
@RequestMapping("/session")
public class CountEndpoint {
private final Counter counter;
public CountEndpoint(Counter counter) {
this.counter = counter;
}
}
@SessionScoped
public class Counter implements Serializable {
}
@Path("/session")
public class CountEndpoint {
@Inject
private Counter counter;
}
CONFIDENTIAL Designator
ステートはどのように保持されるか
ステート
ステート
ファイルやDBアプリのヒープ上
CONFIDENTIAL Designator
アプリがステートを持つメリデメ
速い 停止すると消える 増加で性能が劣化
メモリ上に持つので
読み書きが非常に高速
ステート数が増えると
ヒープを逼迫して GC に
よる停止時間が増えて
レスポンスが遅延する
障害だけではなく運用
でアプリを停止しても
消える。
CONFIDENTIAL Designator
ファイルやDBがステートを持つメリデメ
耐障害性が高い ネットワーク ディスクアクセス
アプリが停止しても
ステートが消えない。
永続化されている。
運が良いとバッファから
読込めることもある。
書き込みはコミットで
ディスクに書くため非常
に遅い。
ネットワークを経由し
てアプリからステート
へアクセスするため、
遅い。
CONFIDENTIAL Designator
ステートフルで重要なのは2つ
ステートをどこで持つか リクエストを振り分ける
ステート
CONFIDENTIAL Designator
可用性と性能を改善する 3 つの技術
スティッキー
セッション
ステート
cache cache
ニアキャッシュ
ステート
セッション外部化
CONFIDENTIAL Designator
アプリがステートを持つ構成を考えてみる
アプリを並べてみる
そうすると各アプリがセッションを持つ
ステートフル
ステート ステート
CONFIDENTIAL Designator
アプリを並べるだけだとうまく動かない
ユーザのリクエストが毎回異なるアプリに
行くと、それぞれのアプリに各ユーザの
ステートができて全体の整合性がない。
→アクセスしたアプリごとに振る舞いが変る。
ユーザA
ステート
ユーザA
ユーザA
ステート
CONFIDENTIAL Designator
L/Bを設定して初回のアクセス
最初は任意のアプリへアクセスして良い
L/B がアクセス先を振り分ける
● アプリの負荷を見て振り分け
● 単純なラウンドロビン
L/B は振り分け先を記録
ユーザA
ステート
ユーザA
CONFIDENTIAL Designator
以降のアクセスは最初と同じ場所へ
以降、L/Bは必ず最初と同じアプリへ行くよう
に振り分ける
この機能は以下の様に呼ばれる(たぶん同一
● セッションパーシステンス
● セッションスティッキー
● セッションアフィニティ
ユーザA
ステート
ユーザA
CONFIDENTIAL Designator
しかし、アプリが落ちると・・・
アプリが落ちるとセッションが消える
メンテナンスで落としても同様
ユーザは別のアプリで最初からやり直し。
つまり、Auto Scaling ができない
state
ユーザA
CONFIDENTIAL Designator
状況によっては特定アプリにリクエストが偏る
たまたま左のアプリにステートを持つユーザ
だけがアクセスしてくるとリクエストが偏り、
アプリの負荷が高まり、遅延する。
ステート
ユーザA ユーザB
CONFIDENTIAL Designator
DBがステートを持つ構成を考えてみる
ステートフルなアプリもランタイムとしては
ステートレスになる。
接続先のアプリを問わずステートを使える。
L/Bはラウンドロビンだけでアプリを負荷分散
レスポンスは遅い、とことん遅い。
ステート
CONFIDENTIAL Designator
外部ストアの性能劣化にはニアキャッシュを
解決策:
よく使用するセッションをAPにキャッシュ。
→ニアキャッシュと呼ばれる。
ステート
cache cache
CONFIDENTIAL Designator
キャッシュしても別のアプリに行ったら遅い
cachecache
1回目 2回目
CONFIDENTIAL Designator
スティッキーセッションで行き先を固定
cache cache
1回目 2回目
CONFIDENTIAL Designator
スティッキーセッションの時間を短くして分散
cache cache
1回目 2回目
n分後
CONFIDENTIAL Designator
セッションを使てもアプリをAuto Scaleしたい
ちゃんとやればできます!
このサイト
いつも速い 入力できた!
Scale in
負荷の
分散 別アプリが
引き継ぐ
CONFIDENTIAL Designator
デモ
構成:
アプリ:Java EE (JAX-RSとCDI)
セッションストア
Appendix に記載の情報を参考に
アプリを止めたりしてみてください。
ステート
cachecache
ステート
CONFIDENTIAL Designator
まとめ:ステートフルでもちゃんと考えよう
アプリはそのまま
ステートを外に
ニアキャッシュ
アプリは書き換える必要ない。
設定だけ。
キャッシュを使って性能劣化を防ぐ
ステートを外に出して可用性を担保
うまく振り分ける
アクセスをうまく振り分けることで
キャッシュを効率的に使う
CONFIDENTIAL Designator
linkedin.com/company/red-hat
youtube.com/user/RedHatVideos
facebook.com/redhatinc
twitter.com/RedHat
CONFIDENTIAL Designator
デモの参考資料
サンプルソース
● https://github.com/chiroito/wildfly-session-sample
● https://github.com/chiroito/spring-session-sample
ブログ
● https://b.chiroito.dev/entry/2020/05/19/182435
● https://b.chiroito.dev/entry/2020/05/22/182451
CONFIDENTIAL Designator
Java EE
CONFIDENTIAL Designator
Java EEのサンプルソース
CountServlet.javaCounter.java
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
@SessionScoped
public class Counter implements Serializable {
private static final long serialVersionUID = 1L;
private int value;
public int getValue() {
return value;
}
public void countUp() {
this.value++;
}
}
@WebServlet("/count")
public class CountServlet extends HttpServlet {
@Inject
Counter counter;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse
res) throws ServletException {
counter.countUp();
res.setContentType("text/html");
try(PrintWriter writer = res.getWriter()) {
writer.println("<html><body>");
writer.println("<h1> counter=" + counter.getValue() + "</h1>");
writer.println("</body></html>");
}catch(IOException e){
throw new ServletException(e);
}
}
}
CONFIDENTIAL Designator
Java EEのサンプルソース
CountEndpoint.javaMyApplication.java
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class MyApplication extends Application {
}
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/session")
public class CountEndpoint {
@Inject
private Counter counter;
@GET
@Path("count")
public String getClichedMessage() {
counter.countUp();
return "counter=" + counter.getValue();
}
}
CONFIDENTIAL Designator
Java EEのサンプルソース
jboss-web.xmlweb.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<distributable/>
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss-web_19_0.xsd"
version="10.0">
<replication-config>
<cache-name>web.baz</cache-name>
</replication-config>
</jboss-web>
CONFIDENTIAL Designator
Wildflyの環境設定
HAモードのWildflyがInfinispanへセッションを格納するように設定
Wildfly の解凍先で以下のように jboss-cli を実行
binjboss-cli.bat
connect
batch
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server1:add(host=127.0.0.1, port=11222)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=infinispan-server2:add(host=127.0.0.1, port=11322)
run-batch
batch
/subsystem=infinispan/remote-cache-container=foo:add(default-remote-cluster=bar)
/subsystem=infinispan/remote-cache-container=foo/remote-cluster=bar:add(socket-bindings=[infinispan-server1, infinispan-server2])
run-batch
batch
/subsystem=infinispan/cache-container=web/invalidation-cache=baz:add()
/subsystem=infinispan/cache-container=web/invalidation-cache=baz/component=transaction:add(mode=BATCH)
/subsystem=infinispan/cache-container=web/invalidation-cache=baz/component=locking:add(isolation=REPEATABLE_READ)
/subsystem=infinispan/cache-container=web/invalidation-cache=baz/store=hotrod:add(remote-cache-container=foo, fetch-state=false,
purge=false, passivation=false, shared=true)
run-batch
CONFIDENTIAL Designator
Java EEの実行方法
Infinispanの9.4.18をダウンロード
本番を想定し冗長性を高めるため2つの環境分を解凍
1つ目の環境で起動
2つ目の環境で起動(試すだけなら1つでもOK)
Wildfly を起動
binstandalone.bat -c clustered.xml -Djboss.node.name=nodeA
binstandalone.bat -c clustered.xml -Djboss.node.name=nodeB -Djboss.socket.binding.port-offset=100
binstandalone.bat -c standalone-ha.xml
CONFIDENTIAL Designator
Spring Boot
CONFIDENTIAL Designator
SpringBootのサンプルソース
CountEndpoint.javaCounter.java
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.SessionScope;
import java.io.Serializable;
@SessionScope
@Component
public class Counter implements Serializable {
private static final long serialVersionUID = 1L;
private int value;
public int getValue() {
return value;
}
public void countUp(){
this.value++;
}
}
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/session")
public class CountEndpoint {
private final Counter counter;
public CountEndpoint(Counter counter) {
this.counter = counter;
}
@GetMapping("/count")
public String count(){
counter.countUp();
return "counter=" + counter.getValue();
}
}
CONFIDENTIAL Designator
SpringBootのサンプルソース
InfinispanSessionApplication.java
import
org.infinispan.spring.remote.session.configuration.EnableInfinispanRemo
teHttpSession;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@EnableCaching
@EnableInfinispanRemoteHttpSession
@SpringBootApplication
public class InfinispanSessionApplication {
public static void main(String[] args) {
SpringApplication.run(InfinispanSessionApplication.class, args);
}
}
CONFIDENTIAL Designator
SpringBootのサンプルソース
application.propertiespom.xml(追加する部分を抜粋)
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-bom</artifactId>
<version>${version.infinispan}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-spring-boot-starter</artifactId>
<version>${version.infinispan.starter}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-spring-boot-starter-remote</artifactId>
<version>${version.infinispan.starter}</version>
</dependency>
</dependencies>
infinispan.remote.server-list=127.0.0.1:11222
infinispan.remote.marshaller=org.infinispan.commons.marshall.JavaSeri
alizationMarshaller
infinispan.remote.java-serial-whitelist=<Counterのパッケージ名 >
infinispan.remote.near-cache-name-pattern=sessions
CONFIDENTIAL Designator
SpringBootの実行方法
Infinispanの最新の10系をダウンロード
本番を想定し冗長性を高めるため2つの環境分を解凍
1つ目の環境で起動
2つ目の環境で起動(試すだけなら1つでもOK)
ステートを入れるキャッシュを作成(設定に指定して作成でも可)
アプリを実行
binserver.bat -Dinfinispan.node.name=nodeA
binserver.bat -Dinfinispan.node.name=nodeB -Dinfinispan.socket.binding.port-offset=100
bincli.bat
connect 127.0.0.1:11222
create cache --template=org.infinispan.DIST_SYNC mycache
mvn clean spring-boot:run

Contenu connexe

Tendances

Tendances (20)

Oracle GoldenGate入門
Oracle GoldenGate入門Oracle GoldenGate入門
Oracle GoldenGate入門
 
なぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのかなぜ「マイクロサービス“化”」が必要なのか
なぜ「マイクロサービス“化”」が必要なのか
 
レガシーコード改善のススメ
レガシーコード改善のススメレガシーコード改善のススメ
レガシーコード改善のススメ
 
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
[Aurora事例祭り]AWS Database Migration Service と Schema Conversion Tool の使いドコロ
 
TECHTALK 20200908 Qlikデータ統合製品によるリアルタイム分析と DWH/ データレイク自動化
TECHTALK 20200908 Qlikデータ統合製品によるリアルタイム分析と DWH/ データレイク自動化TECHTALK 20200908 Qlikデータ統合製品によるリアルタイム分析と DWH/ データレイク自動化
TECHTALK 20200908 Qlikデータ統合製品によるリアルタイム分析と DWH/ データレイク自動化
 
アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術アサヒのデータ活用基盤を支えるデータ仮想化技術
アサヒのデータ活用基盤を支えるデータ仮想化技術
 
AWSの様々なアーキテクチャ
AWSの様々なアーキテクチャAWSの様々なアーキテクチャ
AWSの様々なアーキテクチャ
 
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
 
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
backlogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見るbacklogsでもCI/CDする夢を見る
backlogsでもCI/CDする夢を見る
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
【de:code 2020】 今すぐはじめたい SQL Database のかしこい使い分け術 後編
 
Azure DevOpsとセキュリティ
Azure DevOpsとセキュリティAzure DevOpsとセキュリティ
Azure DevOpsとセキュリティ
 
アジャイル開発とメトリクス
アジャイル開発とメトリクスアジャイル開発とメトリクス
アジャイル開発とメトリクス
 
Dapr on Kubernetes
Dapr on KubernetesDapr on Kubernetes
Dapr on Kubernetes
 
Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316Kafka vs Pulsar @KafkaMeetup_20180316
Kafka vs Pulsar @KafkaMeetup_20180316
 
DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所DevOpsにおけるAnsibleの立ち位置と使い所
DevOpsにおけるAnsibleの立ち位置と使い所
 

Similaire à システムのモダナイズ 落ちても良いアプリの作り方

Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
Kazuki Nakajima
 

Similaire à システムのモダナイズ 落ちても良いアプリの作り方 (20)

今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)今こそ知りたいSpring Web(Spring Fest 2020講演資料)
今こそ知りたいSpring Web(Spring Fest 2020講演資料)
 
IoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL EdgeIoT のシナリオを変える Azure SQL Edge
IoT のシナリオを変える Azure SQL Edge
 
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
RxDataSourceをNSDiffableDataSourceへ置き換える際のTips集紹介
 
Data Scientists Love SQL Server
Data Scientists Love SQL ServerData Scientists Love SQL Server
Data Scientists Love SQL Server
 
Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~
Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~
Azure IoT 最前線!~ Microsoft Ignite 2019での発表と直近アップデート総まとめ ~
 
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
『機械学習 (AI/ML) の基礎と Microsoft の AI | 2019/04/02 Global AI Nights Fukui
 
Azure Application Insights とか
Azure Application Insights とかAzure Application Insights とか
Azure Application Insights とか
 
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI PlatformQiita x Microsoft - 機械学習セミナー Microsoft AI Platform
Qiita x Microsoft - 機械学習セミナー Microsoft AI Platform
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
JAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdfJAZUG_TOHOKU_modeki_20230324_共有版.pdf
JAZUG_TOHOKU_modeki_20230324_共有版.pdf
 
【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術
【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術
【de:code 2020】 SaaS で迅速に IoT を実現 - Azure IoT Central 最新アップデートと活用術
 
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...Let's build a simple app with  .net 6 asp.net core web api, react, and elasti...
Let's build a simple app with .net 6 asp.net core web api, react, and elasti...
 
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
 
VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発VSCodeで始めるAzure Static Web Apps開発
VSCodeで始めるAzure Static Web Apps開発
 
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
【Cloud Week 2015@Hokkaido University】Dockerとインフラ運用自働化とIoT
 
データから価値を生み続けるには
データから価値を生み続けるにはデータから価値を生み続けるには
データから価値を生み続けるには
 
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
 
Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編Smart Store サーバーレスアーキテクチャ編
Smart Store サーバーレスアーキテクチャ編
 
20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture20190514 Smart Store - Azure servlerless architecture
20190514 Smart Store - Azure servlerless architecture
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 

Plus de Chihiro Ito

Plus de Chihiro Ito (13)

Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能Red Hat Data Grid 8.2 新機能
Red Hat Data Grid 8.2 新機能
 
Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能Red Hat Data Grid 8.1 新機能
Red Hat Data Grid 8.1 新機能
 
Quarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - JapaneseQuarkus Technical Deep Dive - Japanese
Quarkus Technical Deep Dive - Japanese
 
Advanced database monitoring in modern java
Advanced database monitoring in modern javaAdvanced database monitoring in modern java
Advanced database monitoring in modern java
 
Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値Quarkusのビジネスと技術的な価値
Quarkusのビジネスと技術的な価値
 
Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発Quarkus による超音速な Spring アプリケーション開発
Quarkus による超音速な Spring アプリケーション開発
 
Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要Oracle code one 2018 報告会概要
Oracle code one 2018 報告会概要
 
Getting started MySQL as Document Data Store
Getting started MySQL as Document Data StoreGetting started MySQL as Document Data Store
Getting started MySQL as Document Data Store
 
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうかWebアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
Webアプリに低レイテンシ・高可用性を求めるのは間違っているのだろうか
 
Hello Java
Hello JavaHello Java
Hello Java
 
Java Flight Recorderの紹介 at Java Day Tokyo 2015
Java Flight Recorderの紹介  at Java Day Tokyo 2015Java Flight Recorderの紹介  at Java Day Tokyo 2015
Java Flight Recorderの紹介 at Java Day Tokyo 2015
 
JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法JPAのキャッシュを使ったアプリケーション高速化手法
JPAのキャッシュを使ったアプリケーション高速化手法
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 

Dernier

Dernier (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

システムのモダナイズ 落ちても良いアプリの作り方