スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

2009-01-01から1年間の記事一覧

今度はServletContext+UUIDで負荷分散状況を調べてみた #appengine

@higayasuoさんのつぶやき: #appengine でリクエストを処理するスレッドは1インスタンスあたり1つという仮定は正しい。ただし、インスタンスの特定にRuntimeのhashCodeを使うのは間違いでFilterなどで起動時にServletContextにUUIDなどを突っ込んで調べるの…

RedditにApp Engine Jaページを作りました

RedditにApp Engineの日本語の情報を集めるページを作ってみました。ブログやスライドなど、なんでも投稿お待ちしてます!http://www.reddit.com/r/AppEngineJa/

ロックを使わずにmemcacheで値を受け渡す方法

memcacheに対するロックを書かずに、リングバッファみたいなキューを作って値を受け渡しする方法が以下の記事で紹介されてました:Memcache lockless queue implementation値を書き込むときはこんな感じ。例のincrementメソッドでアトミックに連番を取得して…

Task Queueのタスクがどのように複数のJVMに負荷分散されるか試したよ #appengine

ご存じのとおり、App EngineのJVM(App Server)はクラスタ化されていて負荷分散される――というのがGoogleの説明です。しかし、WebブラウザからApp Engineに届くHTTPリクエストや、Task Queueのタスクによって呼び出されるHTTPリクエストは、実際にどのよう…

私はいかにしてXMPPで悩むのをやめ、Tornadoを愛するようになったか

appengine java night #2 の私のLT「私はいかにしてXMPPで悩むのをやめ、Tornadoを愛するようになったか」の資料です。この資料のベースとなった調査結果等は、XMPPカテゴリの各記事で見られます。XMPP and TornadoView more presentations from kazunori279.

appengine java night #2 終わりました!

appengine java night #2 にご参加いただいた皆様お疲れ様でした&ありがとうございました!ひがさんとshin1ogawaさんをはじめ、浅海さん、yuroyoroさん、cactusmanさん(乱入感謝!)など、なんだかキャラ立ちすぎな方々(ほめ言葉)とその場で議論できたり…

Fuji Xerox 1121、Smalltalk-80、Interlisp-Dの話

最近なぜか私のTLにはマニアックな若者が増えてきて、Smalltalk/Lispマシンの話とかすると妙に反応があったので、まとめ。私とSmalltalk-80との運命的な出会い(いやほんと人生が変わった)は、マイコン雑誌「I/O」のSmalltalk-80紹介記事でした。1985年ご…

appengine java night #2のお知らせ

appengine java night #2のお知らせです。今回もまたまたひがさんとshin1ogawaさんによるセッションの続きです。また同じ会場でLT見ながら懇親会やりますので、こちらもぜひご参加ください! 詳細はこちらをご覧ください。http://atnd.org/events/1793 http:…

Task Queue君とmemcache君、疑って正直すまんかった

ここ2日くらいデバッグではまりました。もともとこんな処理してるコードです: a. クライアントが大量データダウンロードのリクエストを投げ、ポーリングをはじめる b. リクエストに基づいてTask Queueに数個〜数10個のタスクが積まれる c. 個々のタスクの結…

MacRubyについてまとめ

昨日の深夜になぜか私のTLの人たちがMacRubyのVM実装についてつぶやき始めたのでまとめておく。@shudoさん: RT @wtakuo: MacRuby 0.5 beta 1 はすごい.YARVからLLVMに変更.それによってGILの心配がなくなる.さらに並列処理はGCDを利用.AOTも提供.もは…

ejabberd、EC2、GoogleTalkまわりのメモ

前回にひきつづき、GAEとFlashをXMPPでつなごうとしてます。 Amazon EC2でejabberdを動かす ejabberd on Amazon EC2 Ubuntu AMI My first problem came when I tried to communicate with users registered in other Jabber servers like Jabber.org and Goo…

AS3で動くXMPPクライアントを探す

GAE/Py+FlashでXMPP接続したい! この目標に向けていろいろ調査中です。 GAE/PyとGoogle Talkをつなぐ これはとても簡単にできました。特に参考になったのは、civicさんの Google App Engine の XMPPをPythonで書いてみる-1というページ。これをまねして、 …

PydevでApp Engineプロジェクトを作る

GAE/Jとの戦いをくぐり抜けてなんとかproductionリリースしたところ、モリアの坑道を抜けたガンダルフが白くなったように、気がついたら私もJava使いからPython使い(※見習い)へと変身してしまいました(まあまたJava案件になれば戻ると思いますが)。Pytho…

Memcacheでスピンロックを実装してTask Queue処理結果を集約してみるテスト

TaskQueueで分散処理した結果をまとめるときは、排他を考慮する必要があります。Datastoreを使う場合なら、単に結果を新規エンティティとして追加したり、エンティティグループの楽観排他を使ったりすればOKです。一方、やっぱりMemcacheでスピーディーに集…

ColaboloがAdobe AIR Contest 2009で業務アプリ賞

ColaboloがAdobe AIR Contest 2009で「業務アプリケーション賞」を受賞しました!わ〜い! http://www.adobe.com/jp/events/aircon2009/awards/

Datastore/Memcacheフリーズで消費されたCPU時間のグラフ

MLのやりとりでJasonさんに見せるためにここにアップ。

ITアーキテクト「分散キー/バリュー・ストアの実力」

IDG「ITアーキテクト」の最終号に最初で最後の記事を書きました。バキっぽい出だしにしてみました。Google App Engineの要、Bigtableを通して知る 分散キー/バリュー・ストアの実力 http://www.itarchitect.jp/mag/pdf/ita_vol025_Feature4.pdf (冒頭のみ)

NoClassDefFoundErrorが発生するメカニズム

謎なエラーのひとつ、NoClassDefFoundErrorについてヒントとなりそうなポストがMLにありました。http://groups.google.com/group/google-appengine-java/browse_thread/thread/ec4a06cd90cc49f3# You had a request back at 09-25 06:27AM 29.110 that excee…

sun.misc.Unsafe#parkって何?

Datastoreやmemcacheが固まる時によく出てくる「sun.misc.Unsafe#park」って何だろ?と思ってググってみたら(←なぜか変換できた。ATOKすばらしす)、以下のページによると「Object#wait」みたいなもんらしい。。http://d.hatena.ne.jp/freebeans/20080509/p…

複雑なクエリのためのプロパティを仕込んでおく方法

以前、コンポジットインデックスを自作するというエントリを書きましたが、そのためにわざわざ新しいエンティティを作らずに、普通のエンティティにコンポジットインデックス代わりのプロパティを持たせる方法をちょこちょこ使い始めました。例えば、以下の…

謎なエラーのためにお金を払うの巻

appengineをここ10日くらいproductionで運用して、もうひとつ気づきました。CPUコストのほとんどが、アプリケーションの正常動作ではなくて、Datastoreやmemcacheが勝手に固まる謎のエラーによるものってことです。Datastoreやmemcacheが固まると、そのまま3…

Multihomingというより、もうグローバルな単体計算機の気がす

http://home.att.ne.jp/sigma/satoh/diary.html (個別記事にリンクがない〜) 分散アルゴリズムに多少知識がある方ならば、Paxosを含む3相トランザクションプロトコルは遅いことは常識。だから遅延が大きいことは当初から予想されたことだと思います(個人…

お願い:appengine java night #1 登録には本名が必要です

appengine java night #1 にご登録いただいた皆さんへ、たくさんのご登録ありがとうございました! ひとつ重要なお願いです。告知ページでお知らせしましたとおり、Google東京オフィスの入館には事前に「本名」の事前登録が必要となります。もしappengine ja…

謎なエラーを集めてみよう

appengineを運用していると、ときおり原因不明のエラーが起きます。Googleが説明する0.1%程度のエラーとはちょっと違う感じがします。どれも毎回起きるわけじゃなくて、一時的に頻発したりします。想像するに、特定のApp Serverノード上でデプロイやクラスロ…

appengine java night #1のお知らせ

利用者同士で実践的ノウハウを共有するためのGAE/J勉強会、appengine java night #1の開催のお知らせです。 id:higayasuoさんとshin1ogawaさんをスピーカーに迎え、皆さんとわいわい議論&情報交換できればと思います。ぜひ以下ページからご参加登録ください…

productionサーバーの移行が終わった

ここ2か月ほどは、AIRクライアント+Railsサーバーで動いていた既存サービスをappengineに移行する作業を地道に進めてきました。先週末はそのリリース(ってもユーザーさん的には変化がない)があり、なんとか大きな問題はなく移行が完了しました。リリース…

Migration to a Better Datastoreの要点メモ・その2

Migration to a Better Datastoreの要点の後半です(前半はこちら)。 Megastoreレプリケーションで解決 Megastoreとは、Bigtable上に実装されたGoogle内部のライブラリ 宣言的スキーマ(スキーマ定義ってこと?)、複数行トランザクション、セカンダリイン…

Migration to a Better Datastoreの要点メモ・その1

appengine blogにポストされたMigration to a Better Datastoreの要点をピックアップしてみました。間違い等ありましたらご指摘ください! Googleは「マルチホーミング」を追求している データセンター単位でのダウンに対応する リードオンリータイプのアプ…

Seasarカンファレンスの「Bigtable脳」を見たメモ

Seasar Conference 2009 Autumnのひがさんのセッション「SQL脳からBigtable脳へ」を見てきました。おおこれはB脳だ!と思った部分: レンジスキャンがBigtableのかなめ Bigtableは単なるKVSではなく「ソートされたキー」があるKVSという点が重要 自分の要件…

DXEセミナー「Flex/AIR×GAE/J 開発tips」の資料

本日のDXEセミナー「Flex/AIR×GAE/J開発tips」の資料です。Flashデザイナーさん向けに、Flex/AIRとGAE/Jを組み合わせた事例紹介、Blaze/DS利用法、その他tipsを簡単にまとめてあります。Flex/AIR×GAE/J 開発tipsView more presentations from kazunori279.