タグ

ブックマーク / siguniang.wordpress.com (13)

  • SSHの多重接続について

    tl;dr デプロイツールによっては 同じサーバに SSH で何回もコマンドを実行することがある(ansible とか)。 コマンドごとに毎回コネクション(トンネル)を確立するとオーバーヘッドも大きくなる。 OpenSSH は $HOME/.ssh/config に次の設定を書くことで、接続を多重化(multiplex)することができる。 # $HOME/.ssh/config Host machine1 HostName machine1.example.org ControlPath ~/.ssh/controlmasters/%r@%h:%p ControlMaster auto ControlPersist 1h multiplex 前後の速度差 SSH を使ってリモートサーバで echo コマンドを実行した時の速度差を計測 before multiplex $ time ssh

    SSHの多重接続について
  • Dead Letter Channel Pattern with RabbitMQ

    メッセージングシステムで送信されたメッセージが正常に処理されなかった場合どうするのか? RabbitMQ 2.8 以降では expire したメッセージや拒否されたメッセージを dead letter として専用の exchange に転送する事ができる。 dead letter になるユースケース 以下のケースで、メッセージは dead letter になる The message is rejected (basic.reject or basic.nack) with requeue=false The TTL for the message expires Enterprise Integratin Patterns との対比 Gregor Hohpe & Bobby Woolf の “Enterprise Integratin Patterns” では 前者は Invalid M

    Dead Letter Channel Pattern with RabbitMQ
  • Ansibleのコールバックプラグインを使ってみる

    Ansible にはコールバックプラグインというのがあり、プレイブックの実行終了や異常終了などの各種イベントをフックして特別な処理を仕掛けることができる。 なかなか便利な機能だと思うけど、ポインター的なドキュメントしか存在せず、自分でコールバックプラグインを作りたければ、既存のプラグインのコード読めみたいな書き方しかされていない。 プレイブックを実行し、hipchat コールバックプラグインでチャットループに実行結果を通知するところまでをメモ。 ping するだけのプレイブックの作成 まずは Ansible プレイブックの作成。 localhost に対して ping を実行するだけのプレイブックを作成する。 hosts ファイル プロビジョン対象。 今回はローカルホストに対して実行する。 $ cat hosts localhost ansible_connection=local pin

    Ansibleのコールバックプラグインを使ってみる
  • curl –resolveでコマンドラインから名前解決する

    HTTP サーバに名前ベースのバーチャルホスト設定がされていて、設定されているホスト名でアクセスしたい場合は Host ヘッダーを渡せばOK IP アドレス 10.0.1.2 に http://www.example.com のホストでアクセスするときには以下のようにする。 curl $ curl --header "Host: www.example.com" http://10.0.1.2/ wget $ wget --header="Host: www.example.com" http://10.0.1.2/ telnet $ telnet 10.0.1.2 GET / HTTP/1.1 Host: www.example.com <Return> <Return> リクエストURLのホストをゴニョゴニョする処理が入っている場合、上の手順ではまずい。 そのため hosts ファイル

    curl –resolveでコマンドラインから名前解決する
  • [nginx]S3をバックエンドにngx_small_lightで画像を動的にリサイズ

    S3 で公開しているバケットをバックエンドに nginx モジュール ngx_small_light を利用して画像をリサイズする方法をメモ http://d.hatena.ne.jp/akishin999/20130619/ にローカルの画像を対象にした画像変換手順が書かれているので、そこに S3 バックエンドを追記しただけとも言える。 ngx_small_light について github で公開 https://github.com/cubicdaiya/ngx_small_light pixiv の中の人が開発した nginx モジュール Apache 向け mod_small_light の nginx 移植 https://code.google.com/p/smalllight/ 画像変換エンジンは ImageMagick/Imlib2/GD から選択可能 構成 client

    [nginx]S3をバックエンドにngx_small_lightで画像を動的にリサイズ
  • シーケンスの代わりにuuidをIDとして使う

    stop using numbers as IDs. just use UUIDs. seriously — Postgres: The Bits You Haven’t Found by pvh UUID の違い v1 Generate a UUID from a host ID, sequence number, and the current time. v3 Generate a UUID from the MD5 hash of a namespace UUID and a name. v4 Generate a random UUID v5 Generate a UUID from the SHA-1 hash of a namespace UUID and a name. この内、ID として利用できるのは v1 と v4 の2つ。v1 は最後 48 ビットがハード固有のノー

  • exponential backoffのメモ

    exponential backoffとは? データ送信処理が失敗して再送信するときに、失敗回数が増えるに連れて再送信するまでの待ち時間を指数関数的に増やす仕組みを exponential backoff という。 有名な例としては Carrier sense multiple access with collision detection (CSMA/CD) や Carrier sense multiple access with collision avoidance(CSMA/CA) といった通信方式で、失敗回数 N に対して、[0, 2^N-1] からランダムな数を選び、その slot time 分だけ待って再送信するようになっている。 ランダムに選んでいるのは、複数の通信が同じタイミングで失敗した時に、また同じタイミングで再送されないようにするため。 また、失敗回数が一定値を超え

    exponential backoffのメモ
  • Memory Overcommit

    redis を起動すると、以下の2行目のように「RAMが少ない場合は vm.overcommit_memory = 1 にするように!」という警告メッセージが表示される。 $ ./redis-server [9703] 19 Feb 01:02:07 * Server started, Redis version 2.4.7 [9703] 19 Feb 01:02:07 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.over

    Memory Overcommit
  • [PostgreSQL]COPYコマンドでNULLを扱う

    PostgreSQL の COPY コマンドでデータインポートする際に、 NULL を扱う方法をメモ。 元データのフォーマットは TSV と CSV を想定。 データ投入先のテーブル 次のテーブルを考える。 各カラムは not null。 create table t( id integer, name text ); postgres=# \d t Table "public.t" Column | Type | Modifiers --------+---------+----------- id | integer | name | text | COPY コマンドのシンタックス COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | STDIN } [ [ WITH ] ( option [, ...] ) ]

    [PostgreSQL]COPYコマンドでNULLを扱う
  • /var/lock/subsys/ ってなに?

    RedHat のプロセスの停止処理がおかしいというので init スクリプト周りを眺めていたら、どういうわけか /var/lock/subsys/ ディレクトリ以下を操作していた。 /var/lock/subsys/ 以下のファイルを何に使っているのかわからなかったので、ちょっと調べてみた。 結果的に言えば↓の RedHat Magazine の記事にかいてあることを確認しただけ。 RedHat Magazines Issue #8 June 2005 Why do init scripts require lock files? by Bradford Hinson http://www.redhat.com/magazine/008jun05/departments/tips_tricks/ /var/lock/subsys/ が作成されるタイミング CentOS(RedHat) の

    /var/lock/subsys/ ってなに?
  • GNU Parallel作者が書いたParallel:The Command-Line Power Toolを読んだ

    プログラムを並列処理する GNU Parallel というプログラムがある。このプログラムの作者 Ole Tange が usenix February 2011, Volume 36, Number 1 に “The Command-Line Power Tool” という記事を書いていたので読んでみた。6ページで GNU Parallel の主要機能がひと通り解説されているので、GNU Parallel の機能をピンポイントでしか知らない人(=自分)が読むと、いろいろと使いどころが湧いて来ると思う。 GNU Parallel: The Command-Line Power Tool February 2011, Volume 36, Number 1 Authors: Ole Tange https://www.usenix.org/publications/login/februar

    GNU Parallel作者が書いたParallel:The Command-Line Power Toolを読んだ
  • InstagramのIDシャーディングについて

    約1年前の Instagram Engineering Blog で ID のシャーディングについて解説されていたのでメモ。 Sharding & IDs at Instagram http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram 背景 毎秒大量に行われる写真投稿やユーザーの行動をデータベースに保存するために、Instagram ではシャーディングを行なっている。 データベースにデータ格納するにあたり、シャードが別であっても、写真といったコンテンツごとにユニークなIDを振らないといけない。 Before writing data into this set of servers, we had to solve the issue of how to assign uniqu

  • Redisのメモリ管理ポリシーについて

    オンメモリ KVS の Redis では、使用メモリに上限を設定し、閾値を超えた場合のポリシー(maxmemory-policy)を複数の中から設定できるようになっている。 パラメータとポリシーを整理したのが以下 使用メモリの上限値 redis.conf の次のパラメータで設定する。 maxmemory maxmemory-policy メモリ使用量が閾値を超えている状況でキー追加する場合の振る舞いを定義する。以下の 6 つの maxmemory-policy から選択できる。 volatile-lru : remove the key with an expire set using an LRU algorithm allkeys-lru : remove any key accordingly to the LRU algorithm volatile-random : remove

    Redisのメモリ管理ポリシーについて
  • 1