JAWS DAYS 2015 に参加しました

スマートニュースの世界進出を支えるログ解析基盤 on AWS

  • ストレージとアプリケーションの分離
  • スポットインスタンスを活用して安く
  • ファクト、ディメンション、スタースキーマ

Fluentd

  • ログは日付×時間ごとに取っておく

Presto

Google Big Query

  • UDF (User Defined Function) が強力

[Deep Dive] まる見え、AWS!! ~CloudTrailとConfigからわかるAWSオペレーションのすべて~

CloudTrail

  • API管理、ロギング
  • APIコールだけでなく認証もロギング
  • 出力形式(フィールド)の説明、扱い方
  • Cloud Watch Logsと連携(Metrics Filter=特定の文字列が何回発生するか、を指定)
  • 特定インスタンスタイプのインスタンスが作成されたかの監視など

CloudFormation

  • メトリックフィルタの”自動”生成

  • ログをCloudSearchに突っ込みたい
  • JSONをテーブルにしてから、CloudSearchへ
  • Lambdaイベントドリブン with S3
  • 現状はリージョンは揃えないといけないけど、Lambdaすごく安い

「金融クラウド最新動向 ~AWSで金融イノベーション

FINTECH

[Deep Dive] AWS OpsWorksの仕組みと活用方法のご紹介

OpsWorks

  • Chefレシピの活用(DevOps as a service、Chef as a service)
  • スタック(レイヤーの集合)、レイヤー(各APPごとのEC2インスタンスの雛形)、という概念
  • OpsWorksエージェントが存在する
  • オンプレもエージェントをインストールすることでサポート
  • オートスケールによるスタック内のインスタンス数の増減をイベントとして、ELBに負荷分散対象として追加・削除ができる

Hadoop Trends and Best Practices of Running Hadoop on EC2

  • Hadoop commiter/founder HortonWorks
  • 名実共にHadoopのメインコミッター

HDP - Modern Data Architecture

  • 全データをHadoop一箇所に集約(一つのFSの上に)というコンセプト
  • データ・セットのサイズ・種類問わず連携・活用できるような柔軟性
  • 管理・運用が楽になる、セキュリティ、デプロイメント、全部一箇所でできてしまう

YARN over HDFS

  • Data Operating Systemというべきもの
  • その上でいろんなアプリが動く
  • リソースの利用率を最適化する

Tiered Storage

  • DataNodeはストレージではなくストレージコレクションとして見る
  • 要件によって、異なるストレージタイプが使いたい

Archival Tier GA

  • General Availability : 一般ユーザ向けのリリースってことね
  • ストレージコスト8倍

Erasure Coding

  • データの冗長保存により何倍も時間がかかる
  • パリティデータを別のところに(RAID5,6っぽい)

  • YARN containerを立てる
  • メモリだけではなくCPUもスケジューリング、アイソレーション
  • cgroupsを使う
  • YARN managerは全てのノードを同一視
  • 異なるアプリの要件によって、ノードを使い分ける
  • Node Label(これはHBase専用、とか)によって役割を分ける

Slider ( over YARN )

  • YARNに対応するのに設定ファイルを書くだけ
  • Docker over Sliderも考えている

Hive

Tez

  • ORC File (カラムベースフォーマット)
  • MapReduceの代わりに使う
  • 実行エンジンが全然違う
  • Hiveの生成する実行プラン、それをさらにOptimized

LLAP

  • YANRが受けたら、プロセスを立ち上げて、データを取ってくる、これでは遅い
  • デーモンを起動しておいて、HiveのクエリはなるべくLLAPにプッシュダウン
  • HDFSのデータをキャッシュする

Spark

  • HDP2.2.3
  • Hive on Spark

セキュリティ

  • Kerberos/KNOX
  • 権限管理
  • Ranger
  • HDFSの暗号化は開発中
  • GUIでアクセスコントロール

Ambari

  • 管理、インストール、など、Hadoop for everyone を達成するため

Hadoop on EC2

  • EMR(AWS Elastic MapReduce)は一時的なワークロード(バッチ処理)、要件が違う
  • HadoopはシーケンシャルI/Oが重要
  • EBSはランダムI/Oに特化している
  • ローカルストレージがポイント、インスタンスストア
  • マスタノードのデータはEBSでOK
  • S3はバックアップに使う

Hadoop オンプレは

  • NLSAS(安いやつ)
  • Hadoopは3Gbpsくらいしか使えない
  • サーバよりネットワークの方が伸びるペースが遅い
  • 新しいネットワーク規格(10GbE)は3世代のサーバがカバーできる

  • YARN Node Labelでインスタンスタイプを使い分ける
  • HBase ランダムI/O -> SSDに置くのが良い(i2.8x)
  • その他はHDDで安く

Hadoop on EC2 実際にやってみた

  • Ambariでインストール
  • HadoopSSDかHDDを教えてやる
  • hdfs -setStoragePolicy /hbase ALL_SSD -getStoragePocy /ssd
  • SSDがいっぱいになると、フォールバックして、HDDを使う

開発するように運用するインフラ

KAIZEN Platform

  • Github x CircleCI
  • Hubotにチャット流すのがテスト実行のトリガ
  • headless browserを使ってE2E(end-to-end)テストも自動化
  • yum --security -y update
  • Bugsnag, Pingdom, Pagerdirty
  • CircleCIがボトルネック

ドコモの画像認識APIAWSだった

  • DoCoMo developer support
  • たくさんAPI公開している
  • 画像認識、音声合成、など…
  • 画像を送るだけで商品の情報が分かる
  • 実際にやってみた結果

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )

{
  "recognitionId": "0b9df4a0-d05b-11e4-b975-06d1b328602f",
  "isFiltered": false,
  "candidates": [
    {
      "score": 39424.6015625,
      "itemId": "book_0001435661",
      "category": "book",
      "imageUrl": "http://ecx.images-amazon.com/images/I/61Gg9S8OUBL.jpg",
      "detail": {
        "author": [
          "西沢 夢路"
        ],
        "isbn10": "4797369450",
        "isbn13": "978-4797369458",
        "pages": "536",
        "itemName": "基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )",
        "releaseDate": "2012/05/01",
        "publisher": "ソフトバンククリエイティブ",
        "type": "大型本"
      },
      "sites": [
        {
          "url": "http://www.amazon.co.jp/gp/product/4797369450",
          "title": "Amazon.co.jp: 基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! ): 西沢 夢路: 本",
          "imageUrl": "http://ecx.images-amazon.com/images/I/61Gg9S8OUBL.jpg"
        },
        {
          "url": "http://www.7netshopping.jp/books/detail/-/accd/1106158338/subno/1",
          "imageUrl": "http://img.7netshopping.jp/bks/images/i8/1106158338.jpg"
        },
        {
          "url": "http://books.rakuten.co.jp/rb/11652697/",
          "imageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/9458/9784797369458.jpg"
        }
      ]
    },
    {
      "score": 9450.80859375,
      "itemId": "book_0000064734",
      "category": "book",
      "imageUrl": "http://ecx.images-amazon.com/images/I/51UMQ8Ils0L.jpg",
      "detail": {
        "author": [
          "宮本 信二"
        ],
        "isbn10": "4797359277",
        "isbn13": "978-4797359275",
        "pages": "544",
        "itemName": "基礎からのJava 改訂版 (基礎からのシリーズ)",
        "releaseDate": "2010/09/01",
        "publisher": "ソフトバンククリエイティブ",
        "lang": "日本語",
        "type": "大型本"
      },
      "sites": [
        {
          "url": "http://books.rakuten.co.jp/rb/6618132/",
          "imageUrl": "http://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7973/79735927.jpg"
        },
        {
          "url": "http://www.amazon.co.jp/gp/product/4797359277",
          "title": "Amazon.co.jp: 基礎からのJava 改訂版 (基礎からのシリーズ): 宮本 信二: 本",
          "imageUrl": "http://ecx.images-amazon.com/images/I/51UMQ8Ils0L.jpg"
        },
        {
          "url": "http://www.7netshopping.jp/books/detail/-/accd/1102957020/subno/1",
          "imageUrl": "http://img.7netshopping.jp/bks/images/i0/1102957020.jpg"
        }
      ]
    }
  ]
}

[Deep Dive] AWS Lambdaを紐解く

  • LambdaではLinux コンテナを起動している
  • Node.jsのコードをロードをデプロイ
  • /tmpに書き込みできるが、ファンクションが終了した時点でコンテナは破棄される
  • 前回の実行からあまり時間が立っていない場合前回のコンテナが再利用されnode.jsの初期化処理等がスキップされる
  • Lambdaでネイティブライブラリを使うにはAmazon Linuxコンパイルしてnpm installする
  • S3はPushモデル (inotify?)
    • 実行順序は順不同
    • リトライは3回まで
  • Dynamo DB/KinesisはPullモデル(ポーリング)
    • 実行順序はデータが登録された順序通り
    • リトライはデータが生きている間
  • context.done()によって明示的にファンクションを終了、引数にエラー番号・エラーメッセージを指定できる
  • Execution role、Invocation roleの違い
  • 再帰で無限ループに陥る可能性があるので注意

新サービスをSimpleWorkflow + OpsWorksで構築して解ったこと

  • SQSとSWFの区別
  • SQSはキューに入っているジョブの数に対して、Workerプロセス数を意識する必要がある
  • 同時に実行することができない場合があるし、最低1度のメッセージ到達性(複数がありえる)

SWF

  • タイマー処理、設定した日時に1度だけ実行することを保証してくれる
  • SWF側でやってくれる(SQSはWorkerプロセス(つまりジョブ)で考える必要がある)
  • タイムアウト、リトライ、もまかせられる
  • AMI作成→確認→ワーカープロセスダウン→別ワーカープロセスを作成
  • 周期処理もSWFにまかせることができるため、ワーカープロセスは完全に解放される(別のアクティビティを実行できる)
  • ジョブにsleepを実装する必要がない
  • ただ、デバッグが大変なので、SQSを使える場合はそちらの方が良い