すずけんメモ

技術メモです

re:Invent 2015のスライドをみたメモ

今年はre:Inventには参加せずオフィスで仕事しようと考えていたのですが、実は先週急遽入院していました。*1ちょうどre:Inventのスライドとビデオが公開されていたので、昨日今日とメモしたものをここに貼っておきます。

スライドしかみてないので、デモ中心のbreakout sessionはビデオをみたいところです。


ビデオはここ

Amazon Web Services - YouTube

スライドはこちら

Amazon Web Services’s slideshows on SlideShare


順序は適当です。

AWS Black Belt Tech シリーズ 2015 - re:Invent 2015 最新アップデート速報

  • 日本のSAの小林さんがまとめてくれている
  • AWS IoT
    • AWSサポートのデバイスもあるのか
  • Amazon QuickInsight
    • よさそう。10$ / ユーザ / 月。安い。
  • Kinesis, Amazon Kinesis Streamに名前変わったのか
    • 24時間から7日間に保持期間が変更に
      • ただし延長分は費用が必要
    • Amazon Kinesis Firehose
      • ストリーミングデータを直接s3やredshiftに格納
      • Kinesis Streamからのデータの取得もできる
      • 1分間隔で処理できる
      • 東京リージョンはまだ
    • Amazon Kinesis Analytics
      • Kinesisのストリーミングデータに対するSQLアクセス
      • 1秒以内のレイテンシ
  • AWS Inspector
    • セキュリティ診断サービス
      • 何を診断できるんだろう?
    • 一般的な脆弱性や情報漏えい、ネットワークセキュリティ、認証、OS、アプリケーションに関するそれぞれのベストプラクティスについて検査できる
    • PCI DSS 3.0のアセスメントもできる
  • AWS Import/Export Snowball
    • AWSから提供するハードウェアを用いてデータのインポートとエクスポートを可能に
    • 48TBを10Gbps or 1Gbpsでつなげる
      • DCのデータ移すのとかに使えるのか
  • AWS Database Migration Service
  • AWS Mobile Hub
    • AWSをつかったモバイルアプリの開発を簡単に
      • 認証周りとかのコードを提供
      • 関連サービスなどの設定構築を自動でやる
    • コンソール見るとテストしたりmetricsとったりとかもあるな
      • ああそういえばmobile analyticsみたいのもあったか
      • SNSでpush notirficationとかもできるし
      • あとCDN設定とかもっぽい
      • sign-inはCognitoか
  • Amazon EC2 Container Registry
    • Docker registry。IAMと連携したり、暗号化できたりする。
    • まだ使えない
    • 多分beanstalk用にDockerコンテナ使うときにregistry自前で立てなきゃいけなかったりとか、そのへんの対策なんだろうな
    • IAM連携できるの良さそう
  • Amazon RDS for MariaDB
    • よさそう。XtraDBやAriaをつかえる
    • バージョンは10.0.17
  • AWS Config Rules
    • AWS Configにルール機能を追加することができるようになった
    • Lambda functionとしてルールを作成できる
      • ということはかなり自由にルールを作成できるということでもある。Lambda as UDFという感じだ。
  • Cloudwatch Dashboard
    • 複数のCloudwatchメトリクスを貼り付けてダッシュボードつくれるらしい
    • 1ダッシュボードあたり50メトリクスまで。
      • 複数リージョンまたがったグラフも貼り付けられる。
  • AWS Lambda Updates
    • VPCサポート!
      • Lambdaファンクション自体をVPCサブネットやセキュリティグループに割り当てて配置できる
        • 中で動くEC2の配置環境を決められる、ってことかな
    • バージョニングとエイリアス
      • コードをアップロードすると勝手にバージョニングされるらしい。Dropboxみたいな感じか。
    • Python 2.7をサポート
    • timeoutを300秒まで延長可能に
    • Scheduled Events
      • スケジュール実行。intervalかcron形式で書けるらしい。
      • 最短インターバルは5分
      • コンソールからしか設定できない・・APIほしいな
  • Amazon ECS機能追加
    • CLIが出た。docker compose連携できる。
      • むしろいままでdocker compose連携できなかったのか
    • タスクスケジューリングがmulti-azになるようになった
  • EC2まわりのupdate

(DVO303) Scaling Infrastructure Operations with AWS

(CMP305) Deep Learning on AWS Made EasyCmp305

  • Datoの人のDeep Learning事例

(MBL308) Extending Alexa’s Built-in Skills. See How Capital One Did It

  • Amazonの中の人によるAlexaの活用事例
  • alexa = クラウドベースの音声サービス
    • Siriみたいなやつ
  • Amazon Echo = Alexaを使えるデバイス
  • 開発者がAlexaのサービスをつかって独自のスキルをつくることもできる

(MBL305) You Have Data from the Devices, Now What?: Getting the Value from the IoT

SAのMichaelさんのスライド

  • IoTにおけるデータの違いを学ぶ

(ISM402) Cost Optimization at Scale

  • 1000台くらいEC2があるときにどうやってRIを採用するか、というあたりの自動化のはなし
  • まあTableauのテンプレートとかでてきて便利かなって感じ

(DEV201) AWS SDK For Go: Gophers Get Going with AWS

(NET404) Making Every Packet Count

  • EC2のnetworkingまわりのsenior manager
  • RTTが2ms、帯域窓が100KBなら
    • 100KB x 8bits/byte x 1000ms/s / 2ms = 400Mbps
    • さくっと計算できたほうが良さそう
    • 同様にRTTが100msなら8Mbps
  • Receive window(RWIN) の設定は net.ipv4.tcp_rmem (最小、デフォルト、最大) で。
    • 最大域は net.core.rmem_max
  • Congestion window - Wikipedia, the free encyclopedia
    • 送信側が制御する
    • Windowは渋滞制御のアルゴリズムにより管理される
      • Window: 1送信あたりのかたまりのサイズのこと、っぽい
    • ip route list で確認できる
    • ip route change 10.16.16.0/24 dev eth0 proto kernel scope link initcwnd 16 とかで変更できる
    • TCP throughputのlossは netstat -s | grep retransmit で確認できる
  • Socket level diagnostic
    • ソケットの診断するには ss -ite をつかう
  • TCPでの再送をトレースする
  • Congestion control algorithms (in Linux)
    • 2.6.8以前はNew Reno
    • 2.6.8 - 2.6.18はBIC
    • 2.6.19以後はCUBIC
    • これはプラガブルで、アルゴリズムを切り替えることができる
      • sysctl net.ipv4.tcp_available_congestion_control
      • sysctl net.ipv4.tcp_available_congestion_control=illinois など
  • 再送のタイマーについて
    • congestion control algorithmはパケットの消失について考慮する
  • 現在のキューを観る
    • tc qdisc list
  • EC2におけるネットワーキング
    • Amazon EC2 enhanced networking
    • M4, C4, C3, R3, I2, D2で適用されている
    • re:Invent 2014のSDD419をみること
  • 後半、実験のやつおもしろいかも
    • 最後のhigh transactionの例はweb serverそのものという感じ

(ARC302) Running Lean Architectures: Optimizing for Cost Efficiency

Team Internetの人とAWSの中のひとのセッション

  • ECSつかってcontainerのusageをまるっと1 instanceにおさめてく最適化、理論ではわかるけどうまく動いてるのかなこれ
  • Spot Bid Advisor使うのは良さそう
  • DynamoDBに問い合わせるときにはRAMにキャッシュすると安上がり
  • over capacityな書き込みにはSQSをつかう

(STG406) Using S3 to Build and Scale an Unlimited Storage Service

  • Amazon Clod Driveの中のひとのセッション。熱いのでは。
  • Amazon Cloud Drive: Cloud Storage - Online Backup
  • 写真は年間12ドル、全部何でもなら年間60ドルで保存できる、安い
  • いろんなレベシェアのパートナーがいる。scanとか印刷会社とか。
  • 100万単位のユーザ、10億超えのファイル、無制限なストレージ
    • 写真、ビデオ、文章。メタデータ色々。
    • 様々にインデキシングやキューを出来るようにしたい
  • 9ページに構成。まあ予想通りというところ。ビデオのエンコーディングとかもやるのか。
    • リージョンごとにs3バケットは1つだけ。
    • s3のkeyはランダムに生成していて、key自体はDynamoDBに保存されている
      • hot keyをさけるため。list operationはしていない
      • s3ではAES256で暗号化
    • 3リージョンで800サーバ以上ある
    • ログはs3 -> EMR -> s3でRedshiftにCOPY
  • 機能を出しわけ出来る
    • 0 -> 100%のユーザに適用、とか
    • HTTP HEADで出し分けしている。設定ファイルはs3にある。
  • 6つのチャレンジ。まずファイルサイズが様々なこと。
    • 15MB以下だとPUTで。
    • それより大きいならmultipart upload APIで。
      • partは5MBで
      • ただpartは10000までしか分割できないので、ファイルサイズ50GBが限界
  • 早くアップロードすること
    • 同期と非同期のuploadをまぜる。
    • 画像: メタデータ抽出。
      • すぐおわる。ファイルサイズによる。これは同期。
    • ビデオの転送
      • 別のデバイスでも再生できるようにするため。
      • ビデオのサイズによって終わる時間ばらばら。
        • これは非同期。
    • 文章をPDFに変換する
  • 接続の中断
    • 特にモバイルデバイスだと接続の中断はよくあること
    • 1つのHTTP通信ででかいファイルを転送するのは大変
      • とはいえmultipart upload APIは複雑
    • なのでResumable uploadsにすることにした
    • 途中で転送が失敗したら、どこまでのバイトを転送したかを記録しておく
    • 再送時にはどこまで転送したかをクライアントから送る
      • 再送時にHTTP Content-Rangeヘッダを付ける
    • また、繋ぎ直すときに同じインスタンスに繋がるとは限らない
  • ダウンロードサイズもばらばら
    • リソースなくなるとでかいファイルのダウンロードが失敗する
    • サイズごとにダウンロードのロジックをわけた
    • 5MB以下の場合
      • 単一のGET
      • 失敗したら単純にリトライ
        • 全オブジェクトの90%がこの大きさ
    • でかいファイル
      • 並列にダウンロード
        • partは5MB
        • 他の操作に影響されないスレッドプールを容易
        • コネクションは再利用する
        • 一回だけリトライ、だめならtimeout
      • Apache HTTPClientをつかっている
  • でかいイメージのサムネイル
    • サムネイル取得に 3000req/s とかくる
    • 一時的なサムネイルの生成をしている
      • 48時間でexpire
      • keyは(customer id, image id, image version) のhash
  • でかいファイルの直接ダウンロード
    • 一次サインしたs3のURLにリダイレクトする

(DVO315) Log, Monitor and Analyze your IT with Amazon CloudWatch

  • デモみないとよくわからん

(NET302) Delivering a DBaaS Using Advanced AWS Networking

  • Instaclustrの人
  • 最初は顧客ごとにAWSアカウントわけてた
    • アクセスとか請求分かりやすいけど、管理しづらい
  • 全部Instaclustrのアカウントで管理するようにした
    • VPCはわけた
    • 管理はしやすくなったけどVPC増えすぎてやばい
  • どうやって顧客のクラスタからのアクセスを受け付けるようにするか
    • 静的なipやっぱり欲しいよねっていう話
    • VPC Peeringした。まあそうだよね。

(SEC403) Diving into AWS CloudTrail Events w/ Apache Spark on EMR

  • IAMのSenior Security Engineerのひと
  • あーSparkから単純にクエリするだけじゃなくて、Spark Streamingで異常検知もしよう、みたいな話か
    • alertにしようという。
  • Spark Streaming, 3秒ごとらしい

(BDT404) Large-Scale ETL Data Flows w/AWS Data Pipeline & Dataduct

  • Courseraの人
  • 1500万learner, 1300コース、おおいなー
  • RedshiftをDWとしてつかってる
    • 1200テーブル・・
    • 167人がRedshiftつかってる。3000万クエリ。やばい。
  • coursera/dataduct
    • courseraのつくったETLツール
    • AWS Data Pipelineのwrapper
    • YAMLで設定かけるのよさそう
  • 結構よさそう

(SEC324) NEW! Introducing Amazon Inspector

  • AWSのPrincipal Security Engineerの人の発表
  • InspectorはEC2にserviceとしてインストールして使うらしい
  • Demoあるのでvideoみたほうがよさそう

(MBL402) Mobile Identity Management & Data Sync Using Amazon Cognito

  • Cognito IdentityはIDあたえたりOpenID連携したりするやつ
  • Cognito Syncなんていうのがあるのか
    • データストアしたりデバイス間で同期したりする
    • Cognito EventsっていうのでLambdaにながしたり、Cognito StreamsでAmazon Kinesisにデータ流したりできる
  • CognitoのIDにはIAMのひも付けもできる
    • IAMというかRoleか
    • identifyされていてauthされているならtokenをもらえるようにできる
    • CognitoのtokenはJWTのフォーマットになってる
  • Unauthenticatedな場合にはSTSで一時的なcredentialを発行できる
    • OpenIDもらったらSTSでassume roleをもらう
    • もらったらSTSからCognitoにvalidateかける
    • そしたらcredentialもどってくるのでs3などにアクセスできる
  • Cognito Sync

(DVO312) Sony: Building At-Scale Services with AWS Elastic Beanstalk

  • Sonyのエンジニア。日本人2人の発表。
  • もともと自社?IaaSにのっててモノリシックな環境。
    • デプロイに半日・・設定管理manual。。。
  • fluentdのロゴが
  • beanstalkのsgとかどうしたんだろう
  • あーDockerイメージのdisk容量問題だ
  • appendix、実は大事なところだ。drawingのtimeoutとか。
  • 面白かった

(DEV301) Automating AWS with the AWS CLI

  • AWSの中の人?Jamesさん。
  • 1コマンド1パラメータの出力にするとよい
    • || errexit "err msg" とかでエラーハンドリングしやすくなる
  • 1コマンド複数出力のものをそれぞれ aws コマンドにわたしたい
    • for とか xargs -I {}
  • 実行するコマンドのパラメータをJSONに保存して実行したい場合
    • jmespath/jp をつかうとJMESPathについてとりだしやすくなる
      • Go製だった
      • JSONについてJMESPathインタフェースで問い合わせできる
        • 前にPython製のやつもあったけど、それよりシンプルで良くなった気がする
    • でもamiのidとかinstanceのidとかはparametarizeしたい、みたいなことがよくある
    • instance=$(aws run-instance --image-id ami-1234 -query Instance[0]) みたいにしてはめ込む
    • query()を用意しておく query() { jp -u "$2" <<<"$1" }
    • instance_id=$(query "$instance" InstanceId)とすればidだけとれて便利
    • 前は --output text とかやってsedしたりしてたけど、--output jsonjp つかうと便利だよ、とのこと
  • resource_exists() はまあそうなるよな、という感じ

(DAT205) NEW LAUNCH! Introduction to AWS Database Migration Service

(CMP403) AWS Lambda: Simplifying Big Data Workloads

  • FireEyeのMartinさんの発表。Lambda事例か。
  • What to Expect from the Session は今回の発表スライドのフォーマットに指定されているのかな
  • Cyber Security & Malware Protection | FireEye
  • ユーザのイベントを蓄積して、その中からevilなものをみつける、ということをしたい
    • オンラインでindexingしているものと、s3に保存しているcold dataがある
  • 入力: Questions, 出力: Answersと表現するの珍しいかも
    • Lambda driven search and analyticsが気になる
    • EMRでは異常検知をやってる
      • k-means, 線形回帰、geographic time-lining
    • Lambda
  • 大きさ: 5TB/dayくらい
    • 1イベント: 3KB, 20K events/s
  • Building Scalable and Responsive Big Data Interfaces with AWS Lambda - AWS Big Data Blog
    • Lambda functionの複数走らせるためにfrontにnode.jsのアプリをおいている。ジョブのキックはここから。
    • そこからLambda functionのprocessをspawnする。結果の集計をcascadeのアプリが担っている
      • インメモリでLambda functionのspawnをキューしている
    • cascadeではLambda functionでのcallbackをうけとって、集計して結果を返す。つまり、cascadeMapReduceにおけるReduceの役割もしているといってよい
    • ユーザに結果を返すにはnode.jsアプリからSSEで返している
    • Lambda functionの中からs3のデータを読んでいる。
      • 解凍、中見る、カウント、などなど。
      • s3からのデータ取得は並列にやるとよい。いつものパターン。
  • 面白い。

(NET403) Another Day, Another Billion Packets

  • AWS SecurityのEricさんのプレゼン
  • 割愛

(NET409) How Twilio Migrated Its Services from EC2-Classic to EC2-VPC

  • Twilioの @sumbry さんのプレゼン。EC2 ClassicからVPCへの移行話。
  • 2008年からAWSつかってて多くのサーバがEC2 Classicで動いてた
  • あーグローバル展開する段階でregionまたぐときにregion間通信のためのproxy、というかNATつくってたのか
  • あれ、VPCじゃないとHVMとかENIつかえないんだっけ
    • ENIはPublic / PrivateなEIPふれて、1つのインスタンスにENI複数つけることができて、Private EIPは複数ふれて、SGもENIに紐付けられる、っていう便利インタフェースである
    • HVMだと10GBまでのnetworkスピード出る。
  • Twillio Cloud: VPC基盤でのTwillio
  • マイグレーションの手順
    • そもそも旧環境とつながってないから全部移行しないといけない
    • VPCのClassicLinkでVPC環境にEC2をつなげる
    • VPC環境にも同等のEC2を用意、balancing環境下におく
    • Classic側のインスタンスを消す
  • 移行用のツール作った
    • IP Tunnel Manager / ClassicLink
      • ああ、もともと作ってたらClassicLinkでてきたからそっちつかった、みたいな話かな
    • Global Service Discovery
      • クラスタのなかのipを保持して、要求された時に返すagent
    • HAProxyで分散ロードバランサ
      • あーアプリからDBとか叩くときにはHAProxy経由にしているってことか
    • Config-Renderer
      • HAProxy Configsみたいなやつ
      • Global Service Discoveryの情報を取得して返す
  • 無事移行進んでる
  • 巨大なマイグレーションを一気にする必要はないんだよ、といういい話

(MBL317) NEW! Introducing AWS Mobile Hub

  • 新サービス、AWS Mobile Hubの発表
  • Demoみないとわからんという感じ

(ISM317) Amazon WorkMail: Corporate Email in Less Than 10 Minutes

  • Amazon WorkMail、っていつでたんだっけ・・

(GAM406) Glu Mobile: Real-time Analytics Processing og 10 MM+ Devices

  • Glu Mobileの解析エンジニアの人の発表
  • DAUが400~600万、全世界で累計10億以上のインストール
  • 要件など
    • 1日700万から2億イベントくらい。1イベント600バイト。1日1.2TBくらい。
    • データフォーマットはJSON, リアルタイム集計、なるべく落ちない、なるべくデータロスしない、アドホッククエリはなるべく速く
  • 最初はPythonのフロントアプリ -> s3 -> Redshiftな構成
  • 解析用のSDKつくって、必要なデータを集め始めた
    • Amazon Kinesisに流しこむようにした
    • Kinesisのproducer側は30秒ごとに
    • authはやっぱりAmazon Cognitoなのか〜
    • Kinesisのシャードは20くらい
  • リアルタイム集計にはStormを利用
    • Amazon Kinesis Storm Spoutを利用
    • 集計結果はRDSへ
    • Stormのクラスた運用について
      • なるべくでかいインスタンス、少ないワーカーで
      • 4台のc4.2xlargeでやってる
      • ZooKeeperは 2 x m3.large, Nimbusにm3.xlarge
  • Kinesis、マシンごとのシャードを増やそうとすると結果として小さいファイルがたくさんできてしまう
    • Hadoopにとってはこれはつかいづらいので、CombineFileInputFormatつかってまとめた
    • Mapフェーズに渡す前にapplication masterでまとめている。Hadoopではこのフェーズはやってないってことかな?
  • IPのないレコードがあった場合
    • デバイスにpingしてGeoDataを要求する
    • Kinesisにレコード流れて、ConsumerでGeoLookupしてた
    • ここをLambdaで置き換えたとのこと
      • かつ、AWS API Gatewayつかってクライアントとのやりとりをするように。なるほど。
  • Kinesis Streamのシャードのスケールには awslabs/amazon-kinesis-scaling-utils をつかう

(DAT207) Amazon Aurora: The New Amazon Relational Database Engine

  • AuroraのGMの人の発表
  • 去年Auroraの発表聴いたきり、ほとんどキャッチアップしてないなぁ

(DAT405) Amazon Aurora Deep Dive

  • Aurora, Redshift, EMRのVPの人の発表

(BDT323) Amazon EBS & Cassandra: 1 Million Writes Per Second

  • CrowdStrikeの中の人の発表。
  • CrowdStrike
    • endpoint protectionのビジネス。500000 event / sec.
  • 自明の理?
    • Never run Cassandra on Amazon EBS これはw
  • 要件
    • 数百万デバイスから1PBのイベント来る
    • バースト時は100万write / sec ...
    • 95%が書き込みで5%がread。すごい要件だ・・
  • 最初は Cassandra + Titanで
  • EBSつかったらc4.2xlargeだけ使うより安くなるっていう試算、なんともすごいな
  • Cassandra Summit 2015: Real World DTCS For Operators
    • これ、日にちの経ったデータほどcompaction効かせる、ってことかな?
  • 最初の立ち上げ: Cassandra 2.0.12, m3.2xlarge, 4TB EBS GP2 10000 IOPS
  • ベンチマークのwriterにc4.4xlarge 20台もつかうのか。
  • もろもろベンチとって達成
    • Ubuntu, HVM, XFS
    • Java8, G1GCか
  • ああそういえばEBSのpre-warm必要なくなったのか

(ARC401) Cloud First: New Architecture for New Infrastructure

(BDT305) Amazon EMR Deep Dive and Best Practices

  • AWSの人とFINRAの人の発表
  • EMR 4.1での話
    • Zeppelin これ知らなかった。Spark向けnotebookか。
    • OozieとかHueがすんなり使えるようになったのはいいよなぁ
  • EMRFS
    • DynamoDBつかってmetadataおくようにするとlistオペレーションが速くなる

(NET301) New Capabilities for Amazon Virtual Private Cloud

  • SAの人の発表
  • VPC Endpoints (VPCE)
    • s3についてまずはつかえるようになりましたと
    • publicなendpointに到達するために、Public IPアドレス, NAT/PAT, proxyがいらなくなる。
      • Internet GatewayがなくてもS3に接続できる
    • Publicな経路の場合とほとんど遜色ないパフォーマンスがでるのか
      • NATだと半分くらい
  • VPC Flow Logs
    • ENIからでるNetflowみたいなログ。
      • ちゃんとsgとかnetwork ACLでDENYできてるの?とかを見ることができる
    • CloudWatch Logsでみることができる
      • REJECTのログひろってそれをそのままalart設定したりするのよさそう

(DVO314) USA Today Uses Chef & AWS for Infrastructure Standardization

  • USA TodayのChef事例
    • 発表はGannettとChefの人
  • Gannettでは複数メディアを運用していて、社内PaaSみたいになっている

(DAT308) Yahoo! Analyzes Billions of Events a Day on Amazon Redshift

  • Yahoo!でのRedshift事例
  • HadoopクラスタもあるのにRedshiftつかうのか
  • Redshift
    • 21 dc1.8xlarge, 20億イベント / 日, 1200クエリ / 日, 27TB
    • Pigで加工してs3に置いたものをReshiftにロードしてる
    • airbnb/airflow つかってる
  • ETL
    • upstream
      • ClickstreamデータをOozieのhourly batchでHDFS
      • botoつかってs3へ
    • downstream
      • こっちはairflow
  • JOINをなるべく減らす工夫をしている
  • ETLをデフォルトのキューでやるな、っていうのはそうだよなというところ
    • Workload managementつかおうという話
  • ユーザのリテンション分析用に多次元テーブルを用意していた
    • 性別とかOSごととかにコホートだしていれておく
    • いわゆる中間テーブル

(DEV203) Amazon API Gateway & AWS Lambda to Build Secure APIs

(CMP301) AWS Lambda and the Serverless Cloud

  • AWS LambdaのGMの人の発表
  • Lambdaのresource Sizingについて
    • 23段階のpower levelがあるとのこと
  • Scheduled Functions
    • Lambda consoleから使える
    • cronの文法がつかえる
    • 例えばSQSのデータをpollingする、みたいなのが簡単に設定できる
    • 2015年中にcliとかSDKでもサポート
  • Versioning
    • uploadしたら勝手にバージョニングしてくれる
      • シンプルに1,2,3とincrementされるだけ
      • 名前もつけられるっぽい
        • alias
  • VPCアクセスが可能に
    • subnetとsecurity groupを指定するかたち
    • ElasticacheとかRDSとかVPC内のEC2とか・・
    • 年内に全部のregionで使えるようにするとのこと

(ARC309) Getting to Microservices: Cloud Architecture Patterns

  • gilt.com の事例
  • ブランドの商品を会員限定価格で提供してるサイト
    • 正午にセールしてる、スパイクする
  • 2007年ごろはRoRモノリス
  • 2011年にはJava
    • Voldemortつかってるのか
    • 各チームはそれぞれのビジネスラインにそって開発
  • 2015年(現在)
    • LOSA(lots of small apps) & microservicesに
    • microservicesのレイヤはScala
  • microserviceの構成
    • 各サービスはだいたいJVM環境 *監視はNewRelic
  • ZookKeeperをservice discoveryにつかってる
    • クライアントからZKに問い合わせ。サービス名でqueryしてURLをもらう形
    • LBを挟んでapiのnodeに問い合わせる
  • このあとDC -> VPCに移行
    • EC2インスタンスごとに1サービスだけいれる
    • サービス自体はDockerコンテナにいれてる
    • LBはELBに置き換えた
    • 1サービス辺り3,4ノードにデプロイされているのが多い
      • t2.microがほとんど
    • これ、2015年までにmicroservice移行しつつ、インフラもAWSに移したってことか。すごいな。
  • microservice
  • Dynamic Service Registry
    • microservice環境だとDNSTTL問題を避けたくなる
    • ZooKeeper, Eureka, Consul, SmartStack, とかいろいろある
  • サービスごとにデータストアも分割したらしい
    • こうすることでスキーマ変えた時のインパクトが少なくなる
    • かつ、スケーラビリティをそれぞれ独立にできる
    • 各チームごとにアプリ開発者もインフラもDevOpsもいる、という構成だからこそできるんだろうなという感じ
  • 1コンテナ / 1インスタンスについて複数のサービスを置くのはやめた
    • モニタリングしづらい, スケールしづらい、ownershipがよくわからなくなる、immutableなデプロイがしづらい
    • コンテナ、もしくはインスタンスごとに1サービスだけ置くようにしている
  • ユーザからのリクエストから複数のserviceに問い合わせるケース
    • 毎回問い合わせるのではなくてcacheをつかって問い合わせを減らす
  • リクエストのtrace
    • serviceをまたいでリクエストが多段になるときも、一貫したIDをつけておくこと
    • たとえば商品カタログはうまくでていても、決済が失敗してる、とかがわかるようになる

(NET405) Build a Remote Access VPN Solution on AWS

  • SAの人の発表
  • オンプレでもAWSでもいいけど、VPNの入り口をAWSにすればVPN経由のユーザについてのcapacityとかを柔軟にできるよ、という話
    • CloudFormationでぽちっとやればできると
  • VPCをたてる
    • DCにつなぐdownstreamのVPNをworkerノードからつなげる
    • clientサイドからはVPN用のインスタンスにまず接続する
    • autoscalingについては接続数や帯域をみてhookするようにする
  • この構成のスケール例
    • DynamoDBにnetworkのIDとAddr, instance id, regionなんかを保存しておく
    • DNS load balancingで各regionのVPCに問い合わせられるようにする
      • Route53のGeo Entriesをつかうと近いregionにつなげられる
    • autoscalingしたらroute53のapiつかってrecordを追加すれば良い

(MBL311) NEW! AWS IoT: Securely Building, Provisioning, & Using Things

  • AWS IoTのセッション
  • ビデオみたほうがわかりやすそう

(DVO305) Turbocharge YContinuous Deployment Pipeline with Containers

(CMP406) Amazon ECS at Coursera: A general-purpose microservice

  • CourseraのECS事例
  • batchでやってること
    • レポーティング
    • Gradeだしたり学習者のデモグラだしたりとか
    • レコメンドのemailつくったりもしてる
  • 2012年1月ごろにやっていたバッチ処理の方法
    • Cascade: PHPベースのジョブランナーをつかっていた
      • screenのセッションで走らせていた・・・
    • わりと最近: Saturnつかってた
      • Scalaベースのbatch job runner
      • 全てのジョブが同じJVMで動いているので干渉がおこっていた
  • バッチジョブについてほしいもの
    • 信頼性が高くて、デプロイしやすくて、開発が楽で、効率が良くてopsも楽でコスパのよいもの
  • いろいろ検討した
    • 自家製でバッチジョブ用の何か作る?
      • 調整とか同期まわりがめんどう
    • Mesos
      • 本番に入れるのが大変
    • kubernetes
      • opsは大変かも
  • ECS使いたい、がツールいろいろつくった
    • Iguazu
    • ジョブのデプロイはJenkinsで
      • パッケージをzip、Docker imageを作成、registryにpushしてECSのAPIで引っ張るだけ
    • ログ
      • /var/lib/docker/containers/* にある
      • Sumologicにおくってる
      • ジョブごとにnameとIDふってるのでそれで探せる
    • メトリクスはDatadogつかってる
  • 規模は65ジョブ、44のスケジュールジョブ、1000job / day
  • 別の話題、containerで危ないジョブを動かす
    • Courseraのプログラミングの課題がある、それをテストするのにコンテナをつかってる
    • 悪用されないように、課題を評価したい
  • GrIDというシステムを作った: Grading Inside Docker
    • ECS + Iguazu
    • AWSアカウントをわけて、GrID用のアカウントで評価する
      • GrID側でECSも動かす
      • networkアクセスを限定、実行時間やリソースを限定
        • VPCでinbound/outbound共に制限
      • coursera/amazon-ecs-agent
        • コンテナごとに独立したネットワークスタックになるようにagentを変更
        • root権限周り
        • DockerのsocketをDockerコンテナの中にいれるようにした
    • セキュリティのモニタリングThreat Stack
    • ペネトレーションテストSynack もつかっている

(DVO401) Deep Dive into Blue/Green Deployments on AWS

  • blue/greenのパターン
    • EC2だと
      • DNSでcutoverする
      • ASGを切り替える
      • launc configurationを切り替える
    • ECS
      • DNS
      • ELBで切り替え
      • task definitionで
  • DNSのcutoverだとやっぱりrollbackがなーというところ
  • ELB以下のASG切り替え
    • rollbackも簡単
    • ELBの暖気も、もともとあるのを使うから必要ない
  • launch configの切り替えによる方法
    • まあできるけど自分ならやらないかな

(CMP401) Elastic Load Balancing Deep Dive and Best Practices

(BDT319) New! Amazon QuickSight: Cloud-native Business Intelligence

  • Directorの方。Amazon QuickSightは今回リリースされたもの。
  • Amazon QuickSight - Fast Business Intelligence by AWS
  • 対応するデータ
    • RDBやNoSQLはもとより、EMR, S3, ファイル、streamingのデータソースもサポートするらしい
  • SPICE: Super-fast Parallel In-memory optimized Calculation Engine
    • columnarデータを2から4倍圧縮する
    • SQLっぽい文法で扱える
    • fully managed
  • デモあったっぽい。ビデオみるか。
  • やっぱりやすいなー
    • ただGB課金は結構でかいかも
    • Enterprise EditionだとAD連携とかアクセスコントロールができる。あと2倍速い。
  • あとでビデオみよう

(DVO308) Docker & ECS in Production: How We Migrated Our Infrastructure from Heroku to AWS

  • Remindの方
    • 先生のためのmessagingサービス
    • 3000万ユーザ。USのpublic schoolの半数くらいで使われている
    • 20億メッセージがやり取りされている
    • 従業員50人以下、エンジニアは30人以下
  • Herokuはいいけど
    • 全部のappがpublicにアクセス可能
      • DBさえも
    • 制御できるところも限定されてる
  • The Twelve-Factor App 初めて知った。webアプリが守るべき12の要素
  • お、Goで書いてるのかな
  • 最初はCoreOS + Fleetでやってたらしい
    • routerはnginx
  • Dockerコンテナのbuildは git push したら外部CIでやってる
  • Introducing Empire: A self-hosted PaaS built on Docker & Amazon ECS | Remind Empireっていうのはこれのことか
  • Dockerコンテナのログつかうのにlogspoutつかってる
    • gliderlabs/logspout
    • Dockerコンテナのためのlog router
    • logはSumologicにながしてる
  • Docker imageのビルドには remind101/conveyor をつかっている

*1:結局月曜日から土曜日まで入院していました。これでアメリカ出張中だったら、、と考えると・・。チームのメンバーには迷惑をかけてしまいました。