2010年1月2日土曜日

Tomato FeedをGoogle App Engineで運用開始

私が運用しているNota.jpRakusai.orgなどのウェブサイト上にブログの新着情報を出すために利用しているTomato Feedというシステムを誰でも使えるように公開したのでお知らせします。



このシステムは、ブログとホームページを別々に持っているとき、ホームページにブログの新着記事を一覧で表示することができる手軽なシステムがなかったので開発しました。ホームページはきれいなものを作っておき、頻繁に情報を更新するのはブログやノータで行うというように二つを分けて使っている方には便利に使ってもらえると思います。二つが統合されたCMSを使っていない場合は、同じことを実現するのにプログラミングが必要なのでとても手間です。
Rakusai.orgでは、2カ所、Tomato Feedが使われています。)

実は、このシステムを開発したのは何年も前だったのですが、一般に公開すると負荷が高いと思い、これまで個人用途で使ってきました。しかしここに来て、Google App EngineというGoogleのウェブサービスホスティングが登場し、機能が必要十分なところまで向上したので、こちらにソースコードを移行しました。しばらく使ってみたところ、非常に安定しているので一般に公開することにした次第です。

Google App Engine1週間ほど使ってみたので、技術的な感想を書いてみたいと思います。

技術的な難易度
- 勉強を兼ねてPHPのコードをすべてPythonに書き直しました。Pythonは初めてでしたが、とてもいい言語だと感じました。様々な機能を標準でimportして使えます。文法に適度な制約があり、簡単に学習できます。そして、読みやすい。Object Pascal(Delphi)に似た感覚です。

- Google WebApp フレームワークが普段つかっている自作のPHPフレームワークにとても近い。つまり最近のMVCウェブフレームワークと比較するとモデルが切り離されており、完全にコントローラーやビューに統合されていない。個人的にはがちがちのフレームワークはきらいなので、このほうが好みです。

- Unicodeまわりがはまりどころです。PythonのUnicodeEncodeErrorを知るが参考になりました。print type(変数名) するとunicode型かstr(ascii)型かわかるので、まずはこれを手当たり次第使っていろいろと調査。わたしはプログラムの中身はほとんどunicode型で統一するようにしたところ、エラーはでなくなりました。

- BigTableのインデックスにも制約が多いです。いままでのリレーショナルデータベースでも最近はほとんどJOINやGROUP BYは使っていませんから、その点は問題なく移行できました。しかし、Googleにアップロード(デプロイ)後、しばらくインデックスが作成されるまで待たねばならないのが最初はよく分かりませんでした。簡単なインデックスの作成を待つこと2時間。

運用とスケーラビリティー
- 速度は満足。Amazon S3よりも速いようだ。世界のどこからアクセスしても均一の速度でアクセスできるならば、すばらしい。今後より詳しく測定することにする。
- サブドメインなしの独自ドメインで運用できないのが痛い(サブドメイン付きなら可能)
- DBアクセス(データ取得)がときどき(3日に一回ほど)謎のタイムエラーになる。フィルタのかけ方などに寄るようだ。なぜこれが起こるのかは不明。
- ログがほぼリアルタイムで表示されるのはすばらしい(下図)


↑まだまだ余裕

結論
- サーバーのスケーラビリティを考えなくてよいのは画期的。また、この規模ならば、ほぼ無料なのもよい。今後、運用を続けながら本当に使える技術か、注視していきたい。

0 件のコメント:

コメントを投稿