AWS プロダクトを眺めた
AWSを調べた。 彼らがどうゆうアーキテクチャ設計・開発プロセスを提案しているか想像しておきたかった。 今回は試しに提供サービスを目的別に並べてみた。ただし上手く分類できなかったり調査が足りない事もあり先に全体の感想とメモを書く。試みた分類は最後に残しておく。
全体を通じての感想
- AWS サービスの分類は従量課金との対応(インスタンス or サービスなど)・スケーリングの責任者(ユーザー・Amazon)を軸に分類すると勝手が良さそう
- インスタンス(従量課金: 予約性能 + 実利用分)によるサービス利用にはregion, AZ, VPC, SecurityGroupの理解が必要
- サービス(従量課金: 実利用分) によるサービス利用にはregionで区分けされてるのが多い
- 課金相場は覚えておかないとオンプレミス開発でもクラウド比でスケールメリットを議論できない
- 各サービスの詳細を調べるの飽きた(サービス充実してますね)
- 必要に応じて公式資料を読めば良い
- イメージ掴むのはクラスメソッドさんの資料が充実している
- 通信・ストレージ・DBは定番の利用パターンを網羅しているのでソフトウェアアーキテクチャを設計するときに苦労はなさそう
各種の分散処理システムとそのリソースに対応してる
各種分散処理基盤を使いたくなったらだいたいできる。ジョブ管理を分散処理って呼んで良いのかわからない。
-
- タスク分散処理・ジョブ管理
- SWF
-
- 分散処理基盤(バッチ処理)
- EMR(Hadoop, Spark, Presto)
-
- リアルタイム処理
- Kinesis Analytics, EMR(Storm, Flink)
通信の抽象化3種とBroadcast が一通り提供されてる
タネンバウムの通信の章で扱われている通信の抽象化方法(RPC, Messaging, Streaming)と特別な配慮が必要とされたマルチキャストの全てが一応サービスとして網羅されていた。
RPCとしてはAPIGatewayをファサード層に使う事で対応する。MessagingはSQSが実現している。 StreamingはKinesisとAppStreamの2つが対応している。そしてマルチキャストはSNSで実現できる。
資料
昨今の事例や状況は下の資料に目を通せば大丈夫そう
他に参考になった資料
とりあえず下の4つに目を通して公式類などに手をつければ全体を押さえるのは完了すると思った。
サービスの整理
サービスのアイコンはここからダウンロードし設計や外部向け資料などに自由に使える。 設計資料を簡単に作れるように配慮していて優しいと思った。また視認性も高く拡散効果もある。
分類するに当たり今回は目的を中心に分類してみた。まず大枠でサービスを構成するプロダクト・サービスを支えるプロダクトで分類する。
システム構成に関わるプロダクト
システム構成に関するサービスは、プロセス・ネットワーク・ストレージ・データベース・検索インデックス・コミュニケーション・アプリケーションに分けた。
プロセス
計算リソースを提供・管理・実行するサービス
-
- 仮想ホスト
- EC2
-
- コンテナ管理
- EC2 Container Service
-
- クラスタリング
- EMR
-
- タスク分散・ジョブ管理
- SWF
-
- イベント駆動処理
- Lambda
-
- ストリーム処理
- Kinesis(analytics)
EC2 の対応状況
仮想マシンを実行するサービス。インスタンス種別は以下から選べる。 マシンイメージはAMIで提供され登録などもできる。 競売式で安くインスタンスを確保できるスポットインスタンスという機能が提供されている。
また実機とのマッピングをユーザーが定義することもできる。これにより実行ホストに制約のあるライセンスで動くアプリケーションをクラウド環境で稼働させられる。 インスタンスの種類は以下が存在する。またX1 という大容量メモリを搭載したモデルが提供される予定となっている。 FPGAなど非CPU搭載インスタンスは提供されていないが需要についてはわからない。
-
- Tx
- 汎用のバーストパフォーマンス
-
- Mx
- 汎用の定常パフォーマンス
-
- Cx
- コンピューティング特化
-
- Rx
- メモリ容量のコストパフォーマンス特化
-
- Gx
- GPUコンピューティング
-
- Ix
- 高ランダムIO, 高IOPSに特化
-
- D2
- 高ディスクスループット
EMR の対応状況
AWSで分散処理を行うサービス。クラスタリングにはHadoopファミリを使用する。
BootStrap Action
を使い必要なエンジンのインストールなどを行えるためHadoop
上で動くものは一通り使える。
そのためMR2, Spark, Presto, Flink, StormなどがEMR上で実行できる。
それによりストリーム処理・オンメモリデータ分散処理・バッチ処理と様々な分散処理にEMRで対応できる。
ref. Amazon EMR Practice
ネットワーク
アプリケーション層以下の設定とDNSに関するサービス
大雑把に下に分けたけどDirectConnect
も含めたくなるし、ENIはエンティティとしてあるけどVPCの様なサービス単位では提供されてなくて迷う。
VPCにはルーターやNATも含まれており分類に困った。
Route53
GSLB, ラウンドロビンなどを柔軟にWebブラウザ・API経由で設定が出来る。 トラフィックフローをローンチした。
ストレージ
データを保持するサービス
-
- オブジェクト
- S3
-
- ファイル
- ElasticFileSystem
-
- ブロック
- EBS
-
- アーカイブ用途
- Glacier
Elasticfilesystem
0.30 USD/GB-月 で使えるNFSサービス。
EBS
汎用(SSD), プロビジョンド IOPS(SSD), マグネティックの3種類が提供される。 EC2の様にインスタンスを予約し、予約内容に対して課金が掛かるとてもプリミティブなサービス。
Glacier
データモデルはイミュータブルなオブジェクトストレージで、ボールトと呼ばれるコンテナに最大40TBのファイルとしてアーカイブする。
データベース
データを効率的に操作するサービス
-
- RDBMS
- RDB
-
- KVS on mem
- ElasticCache
-
- KVS on SSD
- DynamoDB
RDB
以下のインスタンスに対応している
Oracle,SQLServer はライセンス込み・BYOL(ライセンスの自前準備)の2種類が提供されている。 ストレージにはEBS を利用する。
ElasticCache
2つのキャッシュエンジン(Memcached,Redis )を提供している。 マネージドクラスタで運用コストが少なく、API経由でノード追加を行うなどスケーリングが楽らしい。 両エンジン共クライアントサイド分散なのでノード追加後にクライアント側の設定変更が出来るかVIP経由での利用が必要だと思った。
DynameDB
データモデル(公式)が参考になる。 Cassandra に似ている。
Primaryキーが似てると感じたのは、Cassandraの分散キーがHashタイプに、CassandraのクラスタリングキーがRangeタイプに対応する様に感じたため。
DynameDBでLocalSecondaryIndex
を定義できるところはCassandraのSecondaryIndex
が対応する。
CassandraってDynamo
の論文インスパイアだけどDynamo
とDynamoDBは違うものだったはず。
カラムに使えるデータ型にはリスト・セット・マップなども使える。
Redshift
SQLデータウェアハウスとして機能する。
検索インデックス
属性ベースの名前付きサービス
-
- ホスティング
- ElasticSearchService
-
- マネージド
- CloudSearch
CloudSearch/ElasticSearchService違い
Cloudsearch | ElasticSearchService |
---|---|
フルマネージド | セルフマネージ |
シャードの自動リサイズ | シャードサイズは変更不可 |
インデクサーは4種類から選ぶ | インデクサーはLucene |
コミュニケーション
アプリケーション間通信を抽象化するサービス
-
- データ転送
- Dataipline
-
- 非同期メッセージング
- MQ: SQS PubSub(BloadCast): SNS
-
- 同期WebAPI
- APIGateway
-
- ストリーミング
- Input: Kinesis(streaming,firehose) Output: AppStream
他アプリケーション
うまく分類できなかったサービス群
-
- コンテンツ配信
- CloudFront
-
- Email配信
- SES
-
- 機械学習
- MachineLearning
-
- 画像処理
- ElasticTransencoder
-
- 鍵管理
- KeyManagedService, Cloud HSM
-
- 課金処理
- Amazon FPS
-
- セキュリティフィルタ
- AWS WAF
-
- IoT
- IoT
CloudFront
ディストリビューションという単位でコンテンツ配信をまとめる事ができる。 ディストリビューションはウェブ・RTMPの2種類が存在する。そのためHTTP(HLS含む), HTTPS, RTMPといったプロトコルが利用可能。
ドメイン・パスのマッチングにより複数オリジンやキャッシングルールを設定できる。アクセスコントロールを設定したりWAF によりL7レイヤファイアーウォールを実現したりできる。 またインターネットとの通信をEC2で直接行うよりも安くなる。
IoT
- 分散パーベイシブシステムのin-network data processingみたいな事ができそう
- サポートプロトコルは2つ(MQTT, HTTP)
- SQLベースで端末情報を分散処理・集約
周辺ツール
システム支援に関するサービスでは、仮想オフィス・プロジェクト管理・監視・分析・CI/CD・マイグレーションに分けた。
仮想オフィス
オフィススイーツのSaaS 典型的なオフィスアプリケーション3(WorkSpace, WorkMail, WorkDocs)つが提供されてる。
管理
システム構成リソースのアカウント管理
ここの分類はだいぶ雑にしてしまった。 Trustedadvisorとか完全に単なるサポートサービスだ。
サービス | 用途 |
---|---|
IAM | awsサービス・リソースへのロール管理サービス |
DirectoryService | 構築したシステムのリソースへのロール管理サービス |
TrustedAdvisor | コスト・セキュリティに関するサポート |
BI基盤
-
- QuickSight
- オートディスカバリ・自動可視化・共同作業もサポートされている
ref. http://www.infoq.com/jp/news/2015/10/amazon-bi-aws-quicksight
監視
システムの利用状態などの監視
- サービス: MobileAnalytics
- システム: CloudWatch
- 構成: AWS Config
- 予算: CloudTrail, AWS Billing and Cost Management, CostExplorer
CloudWatchはAutoScalingをkickしたり監視 + 運用の両方で使う。
CI/CD
継続的な開発やリソースを行うためのツール類
- モバイル: MobileHub, DeviceFarm
- テスト: Inspector(セキュリティ)
- リポジトリ: CodeCommit, EC2 Container Registry
- デプロイ: CodeDeploy, AWS OpsWorks, Elastic Beanstalk
- CD: CodePipeline
- オーケストレーション: CloudFormation
- オートスケール: AutoScaling, Elastic Beanstalk
Elastic Beanstalk はオレオレPaaSを作るサービス。
マイグレーション・インテグレーション
他DCとの連携や移行作業などをサポートする
- Import/Export Snowball(物理転送)
- Migration(DB間マイグレーション&AWS移行をサポート)
- StorageGateway: オンプレストレージをシームレスにS3/Gracierにつなげる
- モデルは 3種類, キャッシュ/バックアップ/VTL(iSCSIテープ)
- ユースケース: バックアップ, ディザスタリカバリ
- DirectConnect: 専用線