タグ

ブックマーク / kanatoko.wordpress.com (4)

  • KinesisかS3か

    Kinesisを触ってはみたものの、特別「これは使いやすい!」という印象ではなかった。 Kinesisの用途は要するに AWSにガンガンデータを送る AWS側では、送られてきたデータを片っ端から処理する AWS側に着いたデータは処理しようがしまいが一定期間(現在は24時間)で消える というもの。 しかし、AWSへの送信は単純にHTTPSのPOSTリクエストであり、さらにBase64エンコードされているということで特に効率的な方法ではない。むしろ効率をまったく考慮しておらず、シンプルさ、扱いやすさに徹している。 HTTPSのPOSTリクエストであるにも関わらずサイズ上限(現在は50KB)がきついので、小さなデータを送る用途に限定される。 個人的に数十~百台程度のサーバからAWSへのログの集約(Log Aggregation)を計画しているのだが、Kinesisの用途にぴったりか?と考えた一方

    KinesisかS3か
    yass
    yass 2015/10/12
    " 数百~千/秒以上の、それぞれのサイズはそれほど大きくないデータを扱いたい場合にはKinesis、~数百/秒でそれぞれのデータのサイズはそれなりに大きくなる(50KB以上)場合にはS3だろうか。"
  • Hadoopのセカンダリソートを避け、より高速に値をソートする方法

    HadoopのReduceに渡されるのはキーと値のリストだが、このとき値のリストに含まれる各アイテム(値そのもの)はソートされていない。ソートされていて欲しい場合にはセカンダリソートと呼ばれるテクニックを使うのが定石とされているが、これは実装の面でも概念的な面でもバッドノウハウ的な側面がある。Hadoopには「キーをソートする」機能は実装されている。そこで、値をキーに入れてしまい、このHadoopに備わっている「キーをソートする」機能によって、実質的に値をソートしようというわけだ。 Map/Reduceというのはキーごとにデータを分割して処理する方法なので、「キーに値が入ったら分割がおかしくなるんじゃ?」と思うのは当然である。キーに値が入っていても、分割に影響しないよう、Partitioningクラスを自分で拡張し、分割の基準となる値(来のキー)には、値の影響が出ないようにするのだ。それ

    yass
    yass 2013/08/16
    " つまりセカンダリソートはウ○コだということなのである(w そこで、Java組み込み型のRDBMSであるH2を利用して、値のソートを行うというテクニックを使う。Reduceの処理において、単純にすべての値をH2データベースに格納"
  • Apacheのアクセスログを爆速でLTSVに変換する

    Apacheのアクセスログ(commonあるいはcombined形式)をLTSVに変換するツールをJavaで書いてみた。 使い方: mcp.jarをダウンロードし、 cat access_log | java -cp mcp.jar net.jumperz.app.MCP.MCP net.jumperz.io.multicore.example.MCombined2LTSV パースするコードそのものはこんな感じで普通。正規表現は使っていない。たぶんJava1.4以上でコンパイル可能。 こういう処理をさくっとマルチコア対応にするためのフレームワーク、MCPというのを作ったので、早速利用してみると、手元の4コアのマシンでは約140万行/秒(common形式のログ)という爆速で変換が終了する。dankogai氏が書かれているperlスクリプトより約20〜30倍速い(正規表現を使うかどうかという点

    Apacheのアクセスログを爆速でLTSVに変換する
  • HTTPサーバにJava NIOは必要か

    0x00. はじめに 筆者はJava製のWAF(Web Application Firewall)、Guardian@JUMPERZ.NETの開発とメンテナンスを行っている。元は自社のシステムを守るために(そして半分趣味で)作ったものだが、数年前にこれをコアのエンジンとしてさらに拡張し、SaaS型の商用サービス「Scutum(スキュータム)」を立ち上げた。 その後順調に顧客を獲得することができ、システムリソース的にも増強が必要となる段階などを経験した。Google、mixiやはてな等、さまざまな大規模サイトのインフラエンジニアの方々がインフラ設計に関する考え方などをインターネット上で公開してくれているおかげで、初期のシステム設計時に「将来的にスケールアウト可能なシステム構成にしておくこと」が重要であるということがわかっていた。その教えに従っていたおかげで、リソースの逼迫(ちなみに今回はCP

    HTTPサーバにJava NIOは必要か
    yass
    yass 2011/05/14
    "Linux上でOracleのJRE6系列を使う場合、64bitでメモリをたっぷり積んだマシンであれば1〜2万スレッドほど生成して動作させることも可能"
  • 1