Hatena::ブログ(Diary)

富士山は世界遺産 このページをアンテナに追加 RSSフィード Twitter

2012-01-30

エンジニアサポート新年会2012 CROSS / LT枠「目指せ1秒切り!ECサイト表示高速化のワザ」

エンジニアサポート新年会2012 CROSS http://tech.nifty.co.jp/party/2012/ でLTしましたので報告。

概要

2012/1/27 15:00- ベルサール新宿グランド にて。

Slideshare

http://www.slideshare.net/ma2shita/1ec-11329759

Ust recorded.

http://www.ustream.tv/recorded/20033585/highlight/236646

3'59"くらいから私のセッションが始まります。早口ですみません、酔っ払ってました。

プレゼンの内容

速度が速くなると、報われますよ。

おわり。

あとがき

EC系ってこういう話題が少ない気がしますが、どうなんでしょうかね?

あと、ぜんぜん埋め込み方法がわかりません。

もう乗り換えようかな。。。

エンジニアサポート新年会2012 CROSS 参加のまとめ

エンジニアサポート新年会2012 CROSS http://tech.nifty.co.jp/party/2012/ に行ってたので、まとめ。

社内向けなんで、文章がアレなのはご勘弁を。

概要

2012/1/27 15:00- ベルサール新宿グランド にて。

私の参加目的
  1. UI/UX周りの話を聞きに行く
  2. LT枠をもらったので、その発表
  3. めぼしい人をリクルート
感想、得たこと

UI/UXはデザイナー側とデベロッパー側の歩み寄りと相互理解が、新しいモノを産んでいくんだろうな。

しかし、やっぱりマネージャーは蚊帳の外&対決相手なんでしょう。

LTはウケ重視にするべきですね!

まとめ / フロントエンドCROSS #cross2012d

http://tech.nifty.co.jp/party/2012/sessions/dRoom1.htm

全員そうでしたが、特にNHN JapanにおいてはUIについて、具体的な話が多かったです。

橋本 建吾 / NHN Japan

ベンチマークは、オンラインのサービス、オフライン(雑誌等、他媒体やターゲットとしている人達が関連してそうなモノ(たとえば駅とか))な資料を集める←→分類するを反復して、磨き上げる

プロトタイピングは、何日も、何回も作る。

デザインガイドは、仕様書と呼べるレベルまで落とす(Photoshopが使えれば誰でも作れる位の指示)

本田 樹 / NHN Japan

画面の話ではなく、その人の生活の中において、そのサービスがいつ・どんなときに使われる→だから、こういうデザインなんだ、というのが大切。

よく目に触れるところは「細部までのホスピタリティ」と、一過性や稀少なところは「ユーザ視点でそぎ落とす」。それを一連のブランドどして、一貫した(狭義の)デザインで提供できると、安心・安全といった信頼につながる。

瀬津 勇人 / ニフティ

デベロッパーも「信頼」というUXで見るなら、システムが安定している、高速に動作するといった面からも寄与できる部分がある。なので、改善するにあたって、どんなUXになるのか?という考えを持って開発できると、トクだろう。そういうデベロッパーって、あまりいないから。

技術力の高低と、UXの高低は比例しない。技術力が低くても、プレゼンテーションで昇華させる方法は、考えればいくらでもある。(「技術的には、なんてことない、〜〜をやってるだけなんですけどね」ってやつ。ゴマカシとは違いますよ)

田村 渡 / チームラボ

アイコンを使ったコラージュ(約30万個)のアートワーク制作に、イラレのバッチとか使っていたらしい。デザイナ視点だけでも、デベロッパ視点だけでも生まれない、そういうアートワークを生み出すためには、なにかともかくやってみる、お願いしてみるって事が大切。

あとがき

LTの話 → http://d.hatena.ne.jp/fujisan3776/20120130/1327922970

2011-11-30

全文検索エンジンgroongaを囲む夕べ2 参加のまとめ

gronnga勉強会「全文検索エンジンgroongaを囲む夕べ2」に行ってきましたのでまとめ。ツッコミ上等歓迎。

概要

2011-11-29(火) 19:00- VOYAGE GROUPさん (渋谷ファーストプレイス8F)

ハッシュタグ : #groonga

正直迷いましたので、10分遅刻(;;;

懇親会、、、出たかったけど、終電があるので出られませんでした(T_T

私の参加目的

社内で使ってるCRMシステム*1"B-Dash"の検索エンジンにgroongaを使ってるんですけど、こいつを良くしたいのでなんかいい話が無いかなー?という。

感想、得たこと

groonga自体はかなり安定している感じ。開発もすでに基礎から応用系になっている。

ってか、最近は位置情報検索、はやってるなー。PgSQLも、MongoDBもあるし。

全然別の視点ですけど、XYZ軸にアイテムをプロットして、位置情報検索を利用すれば、なんとなく一緒なモノを引っ張ってくる、とかそういう事ができるのではないだろうか。

まとめ

須藤氏@クリアコード セッション / groonga村

遅刻したので途中参加(すみません

知っての通り、Sennaの後継。

勉強会を聞くに当たっての基礎知識的なセッション

groonga(CLI)、rroonga(Rubyバインド)、mroonga(MySQL storage Engine)、nroonga(node.jsブリッジ(?))などの紹介。

<スライドURL待ち>

森氏@未来検索ブラジル セッション / 新年と収穫の祭り

索引の動的構築→登録即検索って、昔は異端だったらしい。

完全転置インデックスを動的にメンテナンスしていくのか、というのが実装ポイント。

とっても有用なドキュメントの紹介(書籍化の話も) → 検索エンジンはいかにして動くのか http://gihyo.jp/dev/serial/01/search-engine

●Roadmap

  • カラムストア性能強化
  • ファセット検索(分類検索。メタデータ)
  • ドリルダウン
  • 参照頻度をベースにしたインデックス圧縮
  • 類似文字列検索(編集距離、コサイン類似度)
  • 頻出パターン抽出
  • ストリーム処理機能(カラムストアの結果をダラダラと出すとか
  • スキーマレス(カーディナリティから適切な型を類推、、、とか)

<スライドURL待ち>

●質問タイムで出た質問:nroongaの存在意義って?

→ groongaって結構コネクション指向なんだけど(=対話的にいろいろ指示や結果をもらって更に指示を出せるって意味だと思う。)そういうのってHTTP的にはこれからの技術ならWebSocketとかになるじゃん。ゼロからやるより、node.jsとかでやれた方がいろいろ夢が広がるかなー。


Kentaro SHIBA セッション / mroonga

祝:mroonga 1.10リリース

featureはこれみて -> http://mroonga.github.com/ja/blog/2011/11/29/release.html

●mroonga動作モード

ストレージモード と ラッパーモード -> http://mroonga.github.com/ja/docs/userguide.html#usage-of-each-mode

●マルチカラムインデックス

できるけど、groongaコマンドなど、mroonga以外から更新をかけるとインデックス不整合になるんで、、、どうしろとw

●トークナイザーの指定

  • CREATE TABLE ... COMMENT='parser "TokenMecab"'
  • groonga_default_parser システム変数

どっちでもできるよ。

●rename tabel, alter tableに対応

groonga 1.2.8で積まれた機能を利用。

●Spider/VPストレージエンジン連携

スケール環境でも全文検索が可能(ただし、後述の「できないこと」にありますが、パラレル検索が未実装)

MariaDBデフォルトバンドル

個人的感想ですが、MariaDBはどうなのか。

<スライドURL待ち>

塩畑氏@ぐるなび セッション / 位置情報検索

未来検索ブラジルと2008年(Sennaの頃)から一緒に作り上げている

<後日update予定&スライドURL待ち>

●質問タイムで出た質問:インデックス壊れる事ってあります?

20qps/server * 3serversって環境でやってますが、トラブったことは無い。

ちなみに、3serversでのサービス方法は、3serversそれぞれに同じデータを配信(取り込み?)する、自社開発バックグラウンドプロセスがある。

奧野氏@フォルシア セッション / groonga with PostgreSQL

PgSQL 9.1からSQL/MED という仕組みでテーブルの拡張が可能となった。

MED -> Management of External DATA

●PGXN

CPANライクなPgSQL拡張リポジトリ

$ pgxn install tinyint
$ psql
psql> create extension tinyint;

-> coming soon!

●FDW

Foreign Data Wrapper -> ストレージエンジンに似てるもの

●PgSQLからgroongaを使うアプローチ

  • textsearch_groonga -> INDEX
  • groonga_fdw -> FDW

FDWは9.1から利用可能。SELECTのみだけどね。Oracleもサポートしているようだ。

須藤氏@クリアコード セッション / mroongaベンチマーク

ベンチマークと言っても、他のプロダクトとの比較では無く、InnoDBがーとかそういう話。

Kentaro SHIBA セッション / mroonga未サポート機能

要望の多いモノから順次というノリ。

矢田氏@未来検索ブラジル セッション / groonga開発予報

grn_dat (データ構造) の話。

grn_dat = 前方一致ができ、かつ参照時間に優れる

本来ダブル配列は参照ロックフリーでは無いが、それをなんとかしたところがすごい。

(ごめんなさい、ついていけませんでした)

あとがき

スタッフの方々、お疲れ様でしたー。

わかる範囲で書いてみましたが。。。よくわかっていないってことが、わかりました orz

*1:と呼ぶにはおこがましい

2011-11-16

MongoDB勉強会(第7回) 参加のまとめ

MongoDB勉強会(第7回)に行ってきましたのでまとめてみました、ツッコミ歓迎。

概要

2011-11-15(火) 15:00- GMO セルリアンタワー 11F

普段は休日に開催しているが、@davidmytton (co-founder, Server Density) に合わせたスケジュールで平日開催。

(このまとめはAとは?みたいなググレカス系情報は無く、私のところで有用な情報しか載ってませんのでアシカラズ・・・)

わたしの参加目的

ログストアとして使ってるMongoDBについて、運用ノウハウ他を学習するため。

まとめ

@doryokujin セッション / An Introduction to Fluent & MongoDB Plugins

種類によってフィールドが可変するログのストア先としてスキーマレスのMongoDBの相性は非常に良いが、ログを集めてMongoDBにストアするにはどんな方法があるのかという内容をMongoDB JP主催者、Takahiro Inoue(26)が紹介。*1

Fluent紹介。@frsyuki製 Event Collector Service。同様のモノには scribe(facebook)、flume(cloudera)、jubatus(NTTデータ + PFI)がある。

ログ集計前の収集戦略を「溜めて集める」から「流して集める」に変えるもの。これにより、ログの発生から集計対象となるまでのラグが少なくなる。

Fluentの詳しい話はscribdで。http://www.scribd.com/doc/66633067/Fluent-event-collector

ほか、@doryokujin製 Fluent Plugin "Aggregation Mongo"の紹介があったが、、、Fluentを使ってみないとわからないことが多かった。たぶん必要なんでしょう。。。(こんな内容でごめんなさい)

Fluentの話の延長でMongoDBが「Capped Collection」なる仕組みを知った。シーケンシャルに特化したコレクション形式。書込負荷がきわめて小さく、ファイルに吐くのと遜色ないレベルだそうです。→ http://www.mongodb.org/display/DOCS/Capped+Collections

資料中において、ネットワークダウンに対するアプローチとしてローカルにcapped collectionなMongoDBを持つという仕組みがありましたが、まずFluent自体がBuffered output pluginsを持っており、多少のダウンであればそれで十分だと思われる。ただ、永続的もしくはロストが致命的なのであれば、ローカルMongoDBへの書込も検討したらー、くらいの話。

http://fluentd.org/doc/plugin.html#buffered-output-plugins

■うちでのアプローチ

当社のログ収集の戦略自体は「流して集める」だが、実装はapache(stdout)+logger | syslog-ng | Format変換 | mongoimport | MongoDB。この部分のリプレースは十分可能。現在はnginx化時にこの仕組みが止まっているので、適用したい。

資料 : http://www.slideshare.net/doryokujin/an-introduction-to-fluent-mongodb-plugins


@davidmytton セッション / Monitoring and Queueing

MongoDB の健康状態を監視・管理するための様々なInfo & TipsサーバモニタリングサービスのServer Density co-founder、David Mytton(24)が紹介。

■総括
  • Keep it(Indexes(ALWAYS), Data(optional)) in RAM
  • Watch your storage
  • db.serverStatus()
  • rs.status()

Keep it in RAM : 遅いクエリー、タイムアウト、ディスクI/Oを見ることで、Index(やデータ)がon memoryが否か判別できる。(おそらく、クエリの改造、ensureIndexによる解決を試みて、次にメモリの増設などが検討されるのであろう)

Watch your storage : MongoDBはデータ格納領域としてあらかじめアロケーションOracleだとextentだな)することを忘れてはならない。これが結構コスト。際限なく増えるので、アドバイスとしてはディスク領域の70%ほどでmaxSizeを設定しておき、量が増えたらshardingで拡張していくようにするのが良いだろう。

db.serverStatus()、rs.status()の見方を詳しく説明。これは資料を見た方が早い。

■感想

この辺はRDBMSでのチューニングノウハウとあまり変わらないので、技術転用ができるからエンジニア育成についてもあまり困らない感じがした。

資料 : http://www.slideshare.net/boxedice/mongodb-tokyo-monitoring-and-queueing

■ちなみに、XFS/ext4の話

セッションとは別に個別でDavidに「Server DensityのMongoDBにはFileSystemに何を使っている?」という質問を行った。

結果、XFSを使っている。

理由:まず、allocation発生時でもコストが低いFSはXFS/ext4。Server DensityではFSレベルでのスナップショットを使いたかったが(用途は聞き忘れたが、たぶんバックアップext4はLVM経由でのスナップショットに対し、XFSはそれ自身がスナップショットの仕組みを持っているので管理上やパフォーマンスで有利だったから。という話でした。


@koyhoge セッション / AMNでの利用事例

広告配信ログの記録をPostgreSQLからMongoDBにスイッチした話をアジャイルメディアネットワークのKOYAMA Tetsuji(?)が紹介

PostgreSQL -> 死ぬ! -> Amazon SimpleDB -> 遅い! -> Amazon Simple Queue + SDB -> 金かかりすぎ! -> MongoDB という変遷。

どちらかというとMongoDBの話よりは、EC2上でMongoDBを動かすノウハウの話が多かった。(が、当面使うことが無いため。。。こんな内容で、ごめんなさい。)

資料 : http://www.slideshare.net/koyhoge/mongodb-case-study-for-amn


@muddydixon セッション / MongoDBHadoopの蜜月関係

Hadoopストレージは基本HDFS。ここをMongoDBにすることでメリットありますよ、という内容。

mongo-hadoop(https://github.com/mongodb/mongo-hadoop) はHadoopストレージMongoDBを使うことができるようになるHadoop Adapter。これでHadoopを計算機能に限定できるので、NameNode生きてる?とか、DataNode死んだー、残ってるデータは消してもいいのか?とか考えなくていくなるよねー。

また、MongoDBに格納することのメリットは、AdHocなデータはMongoDBにダイレクト問い合わせすればいいし、mapReduceしたくなったらHadoop経由で取得すればいいという、お得な関係。

ただ、12億レコードとかやると、BSON decoderの性能が顕著に出てくる。BSON decoderの改善が必要。workaround?としては、returnされるBSONドキュメントサイズを小さくする努力が必要。

資料 : https://github.com/muddydixon/mongotokyo7th

■感想

Hadoopって重厚長大感があったんですけど、それってHDFSが原因の50%だったんですけど、やってもいいか!?と思える内容でした。


@hasegaw セッション / MongoDB勉強会恒例(?) Fusion-IO 特別セッション

Ustも止まってたし、あまり書くのはまずいのかな?

データアクセスへのパス自体が違う、いままでのストレージとは違う製品なので、ミドルウェアアプリケーションもそれに合わせたチューニングが必要(なのですが、Fusion-IOを入れるだけで数十倍速くなってしまうので、必要性が感じられるかどうか?!という話でした。)まぁ、銀の玉ではないですが、それに近い製品だと感じました。


@yssk22 セッション / MongoDB on Cloud Foundry

CloudFoundryでMongoDB(以外も使えますよー)というお話。

CloudFoundry自体は、VMWareがPublicで利用できるよう公開(CloudFoundry.com)している話と、CloudFoundry.com相当を自前で作ることができるOSS(CloudFoundry.org)がある。

GAEやHerokuとの差別化ポイントは、GAEやHerokuはロックオンされてしまう <--> CFCF.comもあるしCF.orgで自前作れるというところ。自前とpublicが同じ環境ってのは、結構安心。(ですよね?)

どっちも差違は無いので、あまり意識せずに説明していただいた。

CloudFoundryの制御はvmcコマンド(gem install vmc)で行う。vmc loginとか、vmc appsとか vmc servicesとか、今風なサブコマンド。

vmcの実態はapi.cloudfoundry.comとREST通信してる。

■困っていること

MongoDB(に限らずですが)hogehoge.conf とかを編集する術が現在は無いので、レプリカセットの構築やcapped collection構築とかそういう細かいオペレーションをどうやって実装しようかなーーー?というところだそうです。

■感想

VMwareのくせに、おもったより周辺コミュニティがしっかりしてる。(笑)

あとがき

スタッフの方々、本当にお疲れ様でした&タメになりました&楽しかったです!

やっぱ勉強会は出ないと&アウトプットを出さないと。

追記(11/16(水) 13:30)

社内報告会してたら「Fusion-ioへの商品詳細リンクが無いじゃ無いか!」とクレームが出たので、、、しょうが無いから書きました。買ってください!

【ぷらっとオンライン】Fusion-io ioDrive Octal 5.12TB (MLC) (FS6-802-640-CS-0001)|通販

*1:実際、MongoDBの利用用途はもっぱらログストアのようだ。

2011-10-28

VirtualBox(4.1)でイメージファイルを動的にアタッチする方法

VBoxManage storageattach の使い方になります。

Guest OSがhotplug対応をしてるなら、仮想マシン稼働中でも実行可能です。*1

論よりコマンド

GUEST = 仮想マシン

アタッチ(取り付け)
host$ VBoxManage storageattach GUEST --storagectl 'SATA コントローラ' --port 1 --medium ~/VirtualBox\ VMs/GUEST/disk1.vdi --type hdd
デタッチ(取り外し)
host$ VBoxManage storageattach GUEST --storagectl 'SATA コントローラ' --port 1 --medium none

ちなみに

イメージファイルの作成方法
host$ VBoxManage createhd --filename ~/VirtualBox\ VMs/GUEST/disk1.vdi --sizebyte 1099511627776 --variant Standard

1099511627776 = 1TB

storagectl の探し方
host$ VBoxManage showvminfo GUEST | grep 'Storage Controller Name'

アタッチ/デタッチ後のGuest OSでの作業

たとえばSolaris 10(11)

アタッチ後...

GUEST# cfgadm -y -f -c connect sata0/1
GUEST# cfgadm -y -c configure sata0/1

デタッチ後...

GUEST# cfgadm -y -c unconfigure sata0/1
GUEST# cfgadm -y -c disconnect sata0/1

こんな感じでOS上での認識・解除ができます。

あとがき

書きためflushなう。

*1:hotplug対応してないOSでやった場合は。。。どうなるかわからん

2011-10-27

Xen3.2とXen4.0間での仮想マシンの互換性を確認してみた

結果を言ってしまうと

仮想マシン(設定ファイル・ディスクイメージ)の互換性はあり。

ただし、live migrationは上位バージョンへの一方通行のみ。下位バージョンへ戻したければ、仮想マシンをshutdownしてから下位バージョン上でxm createする。

概要

当社はXen3.2.1をDebian GNU/Linux 5.0(lenny)上で動かしてます。さすがに古いのでsqueezeにしたいのですが、Xenが4.0になってしまうので、互換性の心配があります。

でも、ためらってる場合では無いので、重い腰を上げて確認しましたとさ。

検証内容

Debian GNU/Linux 5.0(lenny)のxen-hypervisor-3.2-1-amd64(3.2.1-2)と、Debian GNU/Linux 6.0(squeeze)のxen-hypervisor-4.0-amd64(4.0.1-2)において、lenny側で作った仮想マシンについてsqueeze側上で以下の検証を行った。

  1. lennyで作成した仮想マシンはsqueezeで使用可能か
  2. lennyで動作中の仮想マシンはsqueeze間でlive migrationが可能か
事前準備
  1. 環境 : Mac OS X 10.7.2(Lion) + VirtualBox 4.1.4(r74291)
  2. Debian GNU/Linux 5.0 + Xen3.2.1をインストールした2台のマシンを用意、両マシン間でlive migrationが可能な状態にする。その上で、片方をapt-get dist-upgrade等によってsqueeze + Xen 4.0.1にアップグレードした状態にて検証を行った。
  3. 仮想マシンの作成はlenny上でxen-create-imageを使用。(仮想マシン名 vm0)

設定ファイルはscpで手動同期

  • /etc/xen/xend-config.sxp
  • /etc/xen/vm0.cfg

ディスクイメージファイルは別途構築済みのNFSサーバに配置、両マシンで /home/xen にマウント済み。

  • /home/xen/domains/vm0/*

検証1: lennyで作成した仮想マシンはsqueezeで使用可能か

結論

lennyで作成した仮想マシンsqueezeで起動できました。使用可能。

変換等は不要でした。

検証2: lennyで動作中の仮想マシンはsqueeze間でlive migrationが可能か

結論

lenny(Xen3.2.1) → squeeze(Xen4.0.1) はlive migration可能ですが、逆は不可能。

逆(squeeze -> lenny)を行ったときのエラーメッセージ

squeeze-host$ sudo xm migrate vm0 lenny-host --live
Error: Restore failed (from lenny-host)

気になった点

lenny→squeezeアップグレードを行ったあと、初めてxm create (もしくはlive migrationで移動)してきた場合、仮想マシンの立ち上げに1〜2分時間がかかるという症状がありました。

その後は再起動しても、他の仮想マシンを立ち上げても同症状が現れることはありませんでした。原因不明です。

bad workaroundだとは思いますが、lenny→squeezeアップグレードしたマシンでは、適当な仮想マシンを立ち上げた方が良さそうです。(Xenの動作確認にもなりますんで。。。といいわけ)ごめんなさい。ぜんぜん原因がわかりません&調べる余裕がありませんでした。

検証事項

検証時に得た知識

lenny -> squeeze アップグレード
$ sudo shutdown -r now
<< grub: 通常のkernelで起動 >>
$ sudo apt-get purge splashy
$ cat <<EOF | sudo tee -a /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ squeeze main
deb-src http://ftp.jp.debian.org/debian/ squeeze main
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
EOF
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install linux-image-2.6-amd64
$ sudo apt-get install udev
$ sudo shutdown -r now
<< grub: 最新のkernelで起動 >>
$ sudo apt-get dist-upgrade
$ sudo upgrade-from-grub-legacy
$ sudo rm -f /boot/grub/menu.lst*
$ sudo apt-get autoremove
Xen4 インストール
$ sudo apt-get install xen-linux-system-2.6-xen-amd64 linux-headers-2.6-xen-amd64 xen-hypervisor-4.0 \
                       bridge-utils debootstrap
$ sudo shutdown -r now
<< grub: XEN kernelで起動 >>

XEN kernelはdefault bootじゃありません。リモートから再起動する場合は、あらかじめdefaultを変更しておいてください。(でないと、通常のkernelで起動します。。。orz)

Solaris 11 express (ZFS) で NFS共有

192.168.78.0/24 からは root によるアクセスを許可する

$ sudo zfs set sharenfs='root=@192.168.78' rpool/xen

共有状況確認

$ dfshares
$ dfmounts

あとがき

久々に書いたな、兄者。