クラウドやOSSで
“デザイン”するモダンな
システムアーキテクチャ
2017/09/22 デブサミ九州
@tsubakimoto_s
2
松村 優大
株式会社オルターブース
業務執行役員/CTA
Microsoft MVP for VSDT
MLBを愛する30歳
ソフトボールやってます
一児の父
島根、長崎を経て福岡に移住
↓
地場の中小IT企業に就職
↓
他社常駐で医療SEを務める
↓
新卒5年半で退社
↓
オルターブースに入社
3
C#/VB.NET/VB6
C#/PHP/Azure/AWS
4
5
オルターブースが使うクラウド
7
Azure
オルターブースが使うOSS
9
OSSがもたらすメリット
OSSとはソースコードが公開され、
改良や再配布を行うことが許可されて
いるソフトウェアです。
ソースコードが
公開されている
コミュニティに
よるサポート
柔軟なカスタマ
イズが可能
インターネット
で共有
10
11
https://mysaucefactory.com/
13
16
エンジニアの興味からOSSを選定
自社サービスでの検証で知見を得る
自信をつけてから受託開発に投入
アーキテクチャをデザインする
17
インフラ
• 責任分界点を明確に(IaaS/PaaS/SaaS)
• “バズったとき”でもサービスを提供
開発
• OSSのフレームワークやライブラリの活用
• 品質とスピードを保つ仕組み
運用・監視
• 状況の見える化
• サービスのヘルスチェック
下
横
フレームワークや開発環境
監視やマイクロサービス
Infrastructure
20
インフラデザイン
21
インフラデザイン
22
Scalability
インフラデザイン
23
Stateless
インフラデザイン
24
Availability
Development
27
開発デザイン
•チーム開発
•フレームワークの恩恵を活かす
•スケール前提の構成を考える
•“Testable”なコーディング
•CI/CDを構築し、開発に集中
•ツール前提で始めない
28
例) C#でのWebアプリ開発
•ASP.NET or ASP.NET Core
•機能の共通化
• .NET Standard
•デザインパターンの採用
• Repository Pattern
• Service Layer
29
.NET FRAMEWORK
30
UsersController
IUserService
IUserRepositoryUserService
UserRepository
DbContext
etc
DI
実装
実装
DI
DI
DI : Dependency Injection (依存性注入)
リソースを
操作するクラス
Repositoryを操作する
ビジネスロジック
単体テストで
差し替える
単体テストで
差し替える
.NET開発者のこれから
•.NET Coreを学ぶべき
•英語の資料への抵抗を無くす
•C#で作れるアプリは多い
(Desktop/Web/Mobile/Serverless/Game)
31
Operation
33
運用・監視のデザイン
34
Azure Container Service
Azure Storage
業務システムでの勘所
•全て自分たちで実装しようとしない
•必要機能を細かく分割する
•負荷等の影響を受けやすい機能は?
• ライブラリで賄えそうか
• PaaSやSaaSで賄えそうか
•図を書いてフローを整理する
35
36
37
メールを送信せずに
メールを送信する
これまでなら… クラウドなら…
38
定型メールの分散化(例)
Postfix
User User
Queue Functions
送信機能を独立し、
アプリへの負荷減
負荷増大
→遅延
クラウドやOSSとどう付き合うか
•選ぶことを楽しむ
•検証を楽しむ
•失敗を楽しむ
•成功を楽しむ
•スピード感を楽しむ
•流行り廃りを楽しむ
とにかく楽しみましょう!
39
ありがとうございました
機能は分散させる
42
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-overview-microservices
(ASP).NET Coreの利点=コンテナ化前提の構成
43
Kestrel Kestrel Kestrel Kestrel
Browsers
44
Learn. Imagine. Build.
.NET Conf
https://fukuten.connpass.com/event/63612/
(2017/10/21)

クラウドやOSSで“デザイン”するモダンなシステムアーキテクチャ