タグ

ブックマーク / dsas.blog.klab.org (36)

  • コンテナによるLVS-Web構成 : DSAS開発者の部屋

    はじめに KLabさんの協力会社として一緒にお仕事をさせて頂いておりますクラスターコンピューティングと申します。今回はコンテナを利用したLVS-Web構成の構築を試してみました。 従来の物理サーバを仮想マシンやコンテナで置き換え、1つの物理システム上に複数のシステムを構築ししたり、必要に応じて動的にシステムを構築するなどのことは最近とはいわずよくおこなわれています。コンテナはそのフットワークの軽さからこれらの用途にとくに有効です。 コンテナはNamespaceやcgroupなどの技術を利用して独立したリソースをコンテナ毎に確保することにより仮想化環境を提供する一方、カーネル自体はホストのカーネルをホストの上のすべてのコンテナで共用しています。今回は、ipvsやiptablesなどカーネル空間の機能がコンテナ内でも利用できるのかの確認とともに、それらの機能を利用したコンテナによるシステム構成

    コンテナによるLVS-Web構成 : DSAS開発者の部屋
    defiant
    defiant 2016/11/01
    LXCの活用事例じゃないか!! 勉強会でお話聞きたいなw
  • PHPのセッションIDは暗号論的に弱い乱数生成器を使っており、セッションハイジャックの危険性がある : DSAS開発者の部屋

    下記の文章は、PHPのセッションIDに対する攻撃についてFull Disclosure MLに2010年に投稿された文章を和訳したものです。訳者の意見としては、攻撃の成立条件は極めて厳しく、そこまで深刻度は高くないと考えています。 とはいえ、疑似乱数列への攻撃がどのように行われるのか、その可能性を示す文章は比較的珍しいもののように思います。暗号論的に安全な疑似乱数とは何か、なぜ必要なのかといった内容を間接的に教えてくれる面白い文章だと感じましたので、今回翻訳してみました。 (以下、原文の和訳です) 原文:http://seclists.org/fulldisclosure/2010/Mar/519 Advisory (c) 2010 Andreas Bogk <andreas () andreas org> Product:PHP Version:5.3.2 以降 脆弱性の種類:暗号論的な

    PHPのセッションIDは暗号論的に弱い乱数生成器を使っており、セッションハイジャックの危険性がある : DSAS開発者の部屋
  • WebSocket アプリの負荷分散 : DSAS開発者の部屋

    最近 SPDY と WebSocket がアツいですね。 再来週の SPDY & WS 勉強会 も、定員100名に対して 参加者が 247 名とかなりアツいことになっています。 その予習というわけでもないですが、最近 WebSocket を実サービスへの 導入方法を考えながら遊んでいたので、 WebSocket の負荷分散方法について 考えていることを書いておこうと思います。 ステートフルな WebSocket アプリケーション HTTP サービスは基的にステートレスな実装になっており、リクエストが来るたびに DBサーバーや memcached などのバックエンドから情報を取得して返していました。 この構成では Web アプリ自体は完全にステートレス化することができているので、 負荷分散機はラウンドロビン等のアプリケーションを無視した負荷分散をすることができました。 しかし、 WebSo

    WebSocket アプリの負荷分散 : DSAS開発者の部屋
  • PHP Extensionを作ろう第4回 - Extension開発に適したPHPを用意する : DSAS開発者の部屋

    はじめまして、@hnwと申します。一部の方々に非常に人気があったシリーズ「PHP Extensionを作ろう」久々の続編です。といっても、今回はExtensionのソースコードは一行も出てきません。Extensionを作る準備段階の話題です。 PHP Extension開発時にオススメのPHPビルドオプションがあるのをご存じでしょうか。これは「拡張モジュール開発用に PHP をビルドする方法」でも紹介されているのですが、「--enable-debug --enable-maintainer-zts」というものです。 稿ではこのビルドオプションについて解説し、php-buildを利用して環境構築する方法についても紹介します。 PHPのメモリ管理の概要 まずPHPのメモリ管理について簡単に紹介します。 Apache prefork MPM+mod_phpの組み合わせを例に挙げますと、Apac

    PHP Extensionを作ろう第4回 - Extension開発に適したPHPを用意する : DSAS開発者の部屋
    defiant
    defiant 2012/11/28
  • 過負荷をかわす Apache の設定 : DSAS開発者の部屋

    KLab Advent Calendar 2011 「DSAS for Social を支える技術」の9日目です。 前回は php を動かしている Apache の手前にリバースプロキシを 置く必要性を解説しました。 今日は、 その前の php のプロセス数を絞る設定と合わせて、実際に Apache で 設定する方法を紹介します。 以降、 php を動かしている Apache の事をアプリサーバー、リバースプロキシ+ 静的ファイル配信を行っている Apache の事をプロキシサーバーと呼びます。 基設定 まずは基的な設定のおさらいです。 アプリサーバー 並列数を絞るには MaxClients を設定します。アプリがどれくらいの時間を CPUの処理で使って、どのくらいの時間を外部リソース待ちに使っているかにも よりますが、だいたいCPU数の1.5倍〜2倍くらいが適当だと思います。 Hyp

    過負荷をかわす Apache の設定 : DSAS開発者の部屋
  • 高負荷でも安定したサービスを提供するためのリバースプロキシ : DSAS開発者の部屋

    KLab Advent Calendar 2011 「DSAS for Social を支える技術」の8日目です。 前回は php のプロセス数を絞ることのメリットを解説しました。 プロセス数を絞るには FPM を使うなどの方法もありますが、 DSAS for Social では php は Apache + mod_php を使っていて、 それにリバースプロキシを組み合わせて利用しています。 今日はこのリバースプロキシの役割を説明して行きます。 以降、リバースプロキシのことを単にプロキシと呼びます。 プロキシを使う理由 そもそも、なぜプロキシを使うのかを説明しておきます。 5秒ルール ケータイ向けのソーシャルアプリでは、ユーザーからのリクエストは 一旦プラットフォームのサーバーを経由して、アプリを提供している Webサーバーに到達します。 このとき、アプリ側のレスポンスがあまりに遅いとプ

    高負荷でも安定したサービスを提供するためのリバースプロキシ : DSAS開発者の部屋
  • クラッシュダンプからカーネルメッセージを取り出すツール「crashdmesg」を作りました : DSAS開発者の部屋

    Linuxカーネルには、カーネルパニック時にkexecを使ってダンプ取得用のカーネル(セカンドカーネル)を起動する仕組みがあります。 このセカンドカーネルは予めリザーブされたメモリ内で起動するため、クラッシュしたカーネルが処理していたメモリの内容はそのまま残っていて、procファイルシステム経由でクラッシュダンプを取得する事ができます。 このDSASブログでも、以前「Linuxでクラッシュダンプを採取(1) 〜 kexec + kdump を使ってみる 〜」と言うタイトルでクラッシュダンプの取得方法をご紹介しました。 「crashdmesg」は、kexec+kdumpで保存したクラッシュダンプから、カーネルメッセージの内容を取り出すツールです。 デバッガと比べてはるかに軽量なため、セカンドカーネル上で直接/proc/vmcoreからカーネルメッセージを取り出すこともできます。 最近のクラッ

    クラッシュダンプからカーネルメッセージを取り出すツール「crashdmesg」を作りました : DSAS開発者の部屋
  • Linuxでクラッシュダンプを採取(1) 〜 kexec + kdump を使ってみる 〜 : DSAS開発者の部屋

    専用パーティーションを切らずにシステムを構築してしまったがために、クラッシュダンプを採取できなくて苦しんでいる人(って私ですが)にとってはとっても魅力的な仕組みがカーネルに取り込まれたみたいです。導入手順も Documentation/kdump/kdump.txt に非常にわかりやすく書かれているので、比較的スムーズに組み込むことができそうな予感がします。 kexec の機能を利用して別のカーネル(kdumpを組み込んだもの)を起動すると、/proc/vmcore から元のカーネルのクラッシュダンプを採取できるというものなので、通常利用するカーネル(以下、ファーストカーネル)と、パニック時に動き始めるカーネル(以下、セカンドカーネル)の二つのカーネルを作る必要があります。 以下、kdump.txt より抜粋 A) First kernel or regular kernel: -----

    Linuxでクラッシュダンプを採取(1) 〜 kexec + kdump を使ってみる 〜 : DSAS開発者の部屋
  • 負荷試験ツール「インターネット破壊」を公開しました : DSAS開発者の部屋

    負荷試験ツール インターネット破壊を公開しました。 こちらはずっと社内で負荷試験に使用していたツールです。社内で使用していたものなので、ソーシャルアプリ向けの機能などが多少追加されていますが、もちろんんそれ以外のWebアプリケーションでも使用できます。 基的にはApache JMeterのようなWebアプリケーションむけのシナリオ負荷試験ツールです。コマンドラインオペレーションだけで実行でき、サーバー上で簡単に負荷試験を実施できるのが特徴です。POSTリクエストなどはもちろん、レスポンスのチェックやUserAgentの偽装、ランダムな値をパラメーターにセットする機能も実装しています。 注意: 当然ながら自分の管理下にないサイトに向けて負荷試験ツールを実行するのは絶対にやめてください。非常に危険です。 物騒な名前がついていますが、これは完全にわたしの小児的感性の趣味によるところです。地震で

    負荷試験ツール「インターネット破壊」を公開しました : DSAS開発者の部屋
  • OpenSSL-1.0.0 でのハッシュリンク使用は要注意 : DSAS開発者の部屋

    先日(03/29)、OpenSSL のメジャーバージョンアップ版 1.0.0 がリリースされました。 ちょうど1年ほど前から beta リリースが出ていましたが、ついに正式にリリースとなりました。 早速ソースコードをダウンロードして試してみたところ、気になるところを見つけたので記事にします。 サブジェクトのハッシュ OpenSSLには、証明書や CRL に含まれるサブジェクトや発行者名を 8文字で表現されるハッシュ値に変換する機能があります。 このハッシュ値は、OpenSSL のコマンドラインや SSL/TLS の実装として OpenSSL をリンクしているアプリケーションに対して、個々の CA証明書や CRL のファイルをディレクトリごと指定する際にファイル名として使用します。 $ openssl x509 -noout -hash -in hoge.pem このようなコマンドラインで、

    OpenSSL-1.0.0 でのハッシュリンク使用は要注意 : DSAS開発者の部屋
  • Apache 2.3向けモジュールを作成しました: mod_session_memcache : DSAS開発者の部屋

    これまで数回に渡ってApache 2.3のmod_sessionとmod_auth_formを探ってきましたが、このたび、セッションストレージにmemcacheを使ってみてはどうかということで、新規のApacheモジュールとしてmod_session_memcacheを開発しました。こちらで公開いたします。 http://log.blog.klab.org/support/mod_session_memcache/mod_session_memcache-0.1.0.tar.gz mod_session_memcache ビルドにあたっては、Apache 2.3のソースパッケージを解凍した先のディレクトリでパッチ形式で扱います。まず、以前の紹介と同じようにhttpd体と上記mod_session_memcacheのそれぞれtarballを取得して解凍したら、出来上がったディレクトリに移動

    Apache 2.3向けモジュールを作成しました: mod_session_memcache : DSAS開発者の部屋
  • Apacheのアクセスログをsyslog経由で出力するためのモジュールを作りました : DSAS開発者の部屋

    皆さんは、負荷分散環境でのApacheのアクセスログをどのように取り扱ってますか? 通常、Apacheのログは動作サーバ上のローカルファイルとして出力されるので、 Webサーバを同時に何台も稼働させて負荷分散を行うような環境では、それらすべ てのWebサーバのログファイルを集めなければなりません。ローカルファイルとし て出力されるということは、Webサーバの台数分だけログファイルがばらけること を意味します。考えるだけでめんどくさいですね。 KLabでは、このApacheログを2パターンを使い分けて集めています。ひとつは syslogによるリモート出力を使い、全Webサーバからのログ出力を一か所に集中さ せる方法です。これは、CustomLogディレクティブにloggerコマンドを使用するこ とで可能です。 CustomLog "|/usr/bin/logger -p local6.inf

    Apacheのアクセスログをsyslog経由で出力するためのモジュールを作りました : DSAS開発者の部屋
  • PHP Extension を作ろう第2回 - 引数と返値 : DSAS開発者の部屋

    前回の Hello World のサンプルプログラムで一通りの PHP Extension の作成手順を見てきました。しかし helloworld() の様に引数も返値も無い関数だけではプログラミング言語として不便ですので今回は PHPPHP Extension におけるデータタイプの詳細と引数、返値の渡し方について見ていきましょう。 PHP のコードから C言語で書かれたコードへとデータをやり取りする上で「型」についての疑問が浮かび上がります。動的形付けされた PHP の変数を静的に形付けされた C言語で扱うにはどうしたらよいのでしょうか。 まずは、PHP 内部でのデータ表現を知るために PHP のソースを覗いて見ましょう。 php-x.x.x/Zend/zend.h より typedef union _zvalue_value { long lval; /* long value

    PHP Extension を作ろう第2回 - 引数と返値 : DSAS開発者の部屋
    defiant
    defiant 2009/03/11
  • PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋

    PHP で汎用的なライブラリを作成するフレームワークには大きく分けて2種類あるようです。 ひとつは PEAR のように PHP でクラスライブラリを作る方法、もう一つが今回紹介する PECL の様に PHP 自体を拡張するモジュールを書く方法です。 なぜ PHP Extension ? ひとつは、過去に C で書かれた既存のライブラリを流用したい場合に PHP Extension を作成すれば自然に PHP のコードに結合することが出来ます。また、PEAR の様に PHP で書いたコードと比べると若干高速になります。 それでは実際に helloworld という名前の PHP Extension を作成してみましょう。PHP のソースを展開すると php-x.x.x/ext というディレクトリがありますので $ cd php-x.x.x/ext $ ./ext_skel --extname

    PHP Extension を作ろう第1回 - まずは Hello World : DSAS開発者の部屋
    defiant
    defiant 2009/03/11
  • PHP Extension を作ろう第3回 - クラスを作ろう : DSAS開発者の部屋

    今回は PHP Extension でクラスを実装する方法を紹介します。 クラスと言えばオブジェクト指向によるプログラミングに欠かせないシステムであり、PHP にももちろんこの仕組みが用意されていることはご存じかと思います。 クラスを実装するにあたり、インスタンス、プロパティ、メソッドなどと言ったキーワードが登場してきますが、これらをどの様にして PHP Extension で実装していくかを見ていきましょう。 最初は PHP4 と PHP5 での PHP Extension の実装方法の違いなども紹介していくつもりだったのですが、PHP4 と PHP5 でクラスに関する仕様が大きく変わっており PHP Extension の実装方法もまた大きく異なっていることを知りました。残念ながら今回は PHP5 での実装方法に限定させた頂きます。 クラス設計 まず最初に今回どの様なクラスを作成するか

    PHP Extension を作ろう第3回 - クラスを作ろう : DSAS開発者の部屋
    defiant
    defiant 2009/03/11
  • 花粉の飛散量を取得する Perlモジュール : DSAS開発者の部屋

    すっかり花粉が飛び交う季節になってしまいました。 今や花粉症は5人に1人疾患する症状とも言われており、マスクや薬などによる花粉対策の準備を始めている方が多いのではないかと思います。 そこで、今回はプログラマに出来る花粉対策を紹介したいと思います。 花粉症対策にはとにかく花粉を吸わないことが重要です。 大量の花粉にばく露されることで、症状が悪化したり、今まで花粉症で無かった人も花粉症が発症する場合があります。 つまり花粉が多く飛んでいる時間帯をなるべく避けることが有効な花粉対策なのですが、 天気予報の花粉飛散情報は1日単位のデータだったりして、参考にならないことが多いです。 環境省が運用する花粉観測システム(はなこさん)では1時間毎の花粉飛散データが公開されています。 1時間毎に花粉飛散データが更新されるため外出のタイミングを決定するのに役立ちます。 プログラマであれば、このデータを cro

    花粉の飛散量を取得する Perlモジュール : DSAS開発者の部屋
  • Python2.x/3.0のunicode内部表現について : DSAS開発者の部屋

    イントロ Python2.6/3.0共にRC版がリリースされ、正式リリースが近づいて来ました。Python3.0の大きな変更の一つが、 Python2.xのstrとunicodeがunicode文字列のstrに統合され、従来のstrの代わりにbytesを導入することで、バイト列と文字列が明確に分けられたことです。 現在、Python2.5では、unicode文字列の内部表現がucs2のものとucs4のものがあり、それぞれの間では拡張 モジュールの互換性がなくなっています。Python2.6/3.0でこの状況がどう変化するのか調べてみました。 Python2.xのunicode内部表現について Python2.5/2.6では、configureオプションに、--enable-unicode=ucs[24] というものがあり、デフォルトでは2になっています。 また、FedoraやUbuntuの

    Python2.x/3.0のunicode内部表現について : DSAS開発者の部屋
  • DSAS開発者の部屋:ケータイやクローラの判別などに使えるmod_cidr_lookupを公開しました

    mod_cidr_lookupというApacheモジュールを公開しました。 http://lab.klab.org/wiki/Mod_cidr_lookup mod_cidr_lookupは、アクセスしてきたクライアントのIPアドレスが、指定したCIDRブロック群のいずれかにマッチするかどうかを判別するApacheモジュールです。 Apache 2.0と2.2系に対応しています。 マッチした結果は、環境変数 (X_CLIENT_TYPE) とHTTPリクエストヘッダ (X-Client-Type) にセットするので、Apache自身とバックエンドのWebアプリの両方で同じ情報を参照することができます。 このモジュールを使うメリット 簡単にクライアントの種類を知ることができる 判別処理はモジュールが行ってくれるので、のちほどお見せるように、Webアプリやhttpd.confでは環境変数やリク

    DSAS開発者の部屋:ケータイやクローラの判別などに使えるmod_cidr_lookupを公開しました
  • linux のシステムコールをフックする : DSAS開発者の部屋

    最近、とあるクローズドソースなデバイス管理ツールの挙動が気になり、その動作について解析してみることにしました。 プログラムをデバッグしたり解析したい時、どんなシステムコールが呼ばれ、どのような引数が渡されているかを、調べることができる strace は非常に有用です。 しかし、strace では ioctl で渡される複雑なデータ構造を表示することはできないため、システムコールをフックして引数を表示するという手段を取ることにしました。 そんな訳で linux でシステムコールをフックする方法について調べて見たところ、意外といろいろな方法が有ることを知りましたので、試してみた方法を幾つか紹介したいと思います。 注)今回の実験に使用した linux kernel のバージョンは 2.6.25.11 です。異なるバージョンではこの実験通りにはならない場合があります。 LD_PRELOAD を使っ

    linux のシステムコールをフックする : DSAS開発者の部屋
  • DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋

    Cでプログラムを書いていて大量のメモリを確保したくなったとき、大抵は mallocを使うと思いますが、その際には戻り値がNULLかどうかを判断してエラー処理に飛ばすと思います。しかし、Linux のメモリ管理サブシステムには「メモリ・オーバーコミット」という機構があり、実装されているメモリ以上の領域を確保できてしまいます。 #include <stdio.h> #include <stdlib.h> int main() { int i; char *p; for(i=0;i<65536;i++){ p = (char *)malloc(65536); if(0 == (long)p){ break; } } printf("SIZE=%dMB\n",i*65536/1024/1024); return(0); } swapoff したメモリ 1G のマシンでこれを実行するとこんな感じにな

    DBサーバ向けLinuxチューニングを考える 〜 メモリオーバーコミット編 : DSAS開発者の部屋