MyCSS

2010/01/28

Amazon SQSの使いどころ 実際編 はてなブックマークに追加

Amazon SQSに関しての前回までの記事
AmazonSQSが使えるのは解ったとして、実際の所はどうなんでしょう?という所を、サンプルソースを交えて書いてみたいと思います。内容は自分の経験に基づいて書いてますが、実物と比べるとかなり簡略化していますのでご注意ください。でも、考え方としては大きく外れる事はありません。

想定するストーリー
PDFを作る処理をWeb上でやります。このPDFを作るには、最低でも数分かかる事が解っています。したがって、PDFが出来たら、ユーザーにメールでお知らせする事にします。


ここでは、フロントエンドにRuby on Railsを、バックエンドにJavaを用いています。両者は同一のデータベースを参照出来るようになっています。言い換えると、両者で共有している部分はデータベースだけで、粗な結合になっています。

フロントエンドの動き
フロントエンドの役割は、ユーザーと直接対話する事です。ここでは、PDF作成受付画面と、受付完了画面の表示を行います。

動きを解説する前に、少しデータベースに関して書いておきます。データベースは、ごく一般的なRDBを使用し、PDF作成ジョブを表す「Jobs」というテーブルを用意してあります。

このJobsテーブルは、このように定義してあります。
CREATE TABLE jobs (
  id SERIAL PRIMARY KEY,
  sqs_message_id VARCHAR(128),
  sqs_message_handle VARCHAR(256),
  status VARCHAR(50)
);
statusとは、PDFの作成状態がどうなっているのか?という識別子です。PDFの作成が始まっていなければwaiting、PDF作成中であればmaking、作成完了であればfinished、となります。
sqs_message_idとは、SQSにメッセージを投げると取得出来るIDで、SQSのQueueに積んであるメッセージを識別するものです。
sqs_receipt_handleとは、SQSからメッセージを受領したときに取得出来る文字列で、メッセージを削除するのに使用します。また、このカラムに値が入っているという事は、SQSメッセージを受けた事という目印にもなります。

フロントエンドはPDF作成のリクエストを受けると、Jobsテーブルに、status = 'waiting' でレコードを挿入します。次に、SQSメッセージにJob情報(ここではプライマリキーであるID)を書き込み、SQSのサーバに対してメッセージを投げます。その後「受け付けました」画面を出して、PDFが出来上がったらメールでお知らせする旨を表示します。
以上でフロントエンドの役割はおしまいです。

下記は、Ruby on Railsのコードの例です。これは、PDF生成リクエストを受け付けるコントローラ(Jobs)内のメソッド(create)を想定しています。SQSにアクセスするために、RightAwsを使っています。
class JobsController < ApplicationController
  def create
    @job = Job.new
    @job.status = 'waiting'

    if @job.save then # jobインサートが完了したら、SQSにメッセージを投げる
      sqs = RightAws::SqsGen2.new('AWSのID', 'AWSのSecretKey')
      queue = sqs.queue('SQSキュー名')
      message = queue.send_message(@job.id) # メッセージの中身はJobのID
      @job.sqs_message_id = message.id      # JobにSQSのメッセージIDを記録しておく
      @job.save!

      flash[:notice] = "PDFが出来たら、メールするので待っててね!"
      redirect_to :action => :thanks, :id => @job
    else
      render :nothing => true, :status => 500
    end
  end
end

バックエンドの動き
バックエンドは、ユーザーに見えない所でひたすらSQSを監視しています。バックエンドはメッセージの存在に気づいたら、それを一つ取り出し、中身を読みます。メッセージにはJobのIDが書いてありますから、それをもとにデータベースを見に行って、該当するレコードを引っ張りだします。PDFの作成が終わったら、ユーザーに「できたよ!」メールを送信し、Jobのstatusを「finished」にしておしまいです。
一つのジョブをこなしたら、またSQSの監視に戻ります。陰でひたすら作業する、地味でつらい仕事です(笑)。

下記はJavaのコードの例です。PollingCommandというRunnableとして実装していますので、サーバ側ではこのオブジェクトをScheduledThreadPoolなどで定期的に実行する事になります。また、SQSへのアクセスは、typicaを使用しています。
ちなみに、Javaのデータベースの扱いをどう書こうか迷ったのですが、解りやすさを優先させるため、エラーを全く考慮していない素のJDBCとしました。仕事では決してこのようなコードを書かないでくださいね(笑)。実物はS2JDBCを利用してサクサク書きました。
package com.dateofrock.blog.sqssample;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.xerox.amazonws.sqs2.Message;
import com.xerox.amazonws.sqs2.MessageQueue;
import com.xerox.amazonws.sqs2.SQSUtils;

public class PollingCommand implements Runnable {

 public void run() {
  // SQSからメッセージを受信
  MessageQueue msgQueue = null;
  Message message = null;
  try {
   // キューに接続
   msgQueue = SQSUtils.connectToQueue("SQSキュー名", "AWSのID", "AWSのSecretKey");
   // メッセージを一つ受け取る
   message = msgQueue.receiveMessage();
   if (message == null) {
    // メッセージが受け取れなかったらなにもしない
    return;
   }

   // メッセージの中にJobのプライマリキーが書いてある
   long jobId = Long.parseLong(message.getMessageBody());

   // ジョブステータスを作成中にアップデートし、receiptHandleを記録しておく。
   Job job = findById(jobId);
   job.status = "making";
   job.sqsReceiptHandle = message.getReceiptHandle();
   updateJob(job);

   // SQSからメッセージをdelete
   msgQueue.deleteMessage(message);

   // PDF生成してるつもり
   Thread.sleep(3000);
   // メールを送信してるつもり
   Thread.sleep(1000);

   // ジョブステータスを完了にアップデートしておく。
   job.status = "finished";
   updateJob(job);

  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public class Job {
  public long id;
  public String status;
  public String sqsMessageId;
  public String sqsReceiptHandle;
 }

 private void updateJob(Job job) {
  final String sql = "UPDATE jobs SET status = ? , sqs_message_id = ?, sqs_receipt_handle = ?, updated_at = ?";
  Connection con = null;
  try {
   con = DriverManager.getConnection("JDBCのURL", "DBユーザー名", "DBパスワード");
   PreparedStatement ps = con.prepareStatement(sql);
   ps.setString(1, job.status);
   ps.setString(2, job.sqsMessageId);
   ps.setString(3, job.sqsReceiptHandle);
   ps.setDate(4, new Date(System.currentTimeMillis()));
   ps.executeUpdate();
   ps.close();
  } catch (SQLException e) {
   e.printStackTrace();
  } finally {
   try {
    con.commit();
    con.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
 }

 private Job findById(long jobId) {
  final String sql = "SELECT * FROM jobs WHERE id = ?";
  Job job = null;
  Connection con = null;
  try {
   con = DriverManager.getConnection("JDBCのURL", "DBユーザー名", "DBパスワード");
   PreparedStatement ps = con.prepareStatement(sql);
   ps.setLong(1, jobId);
   ResultSet rs = ps.executeQuery();
   rs.next();
   job = new Job();
   job.status = rs.getString("status");
   job.sqsMessageId = rs.getString("sqs_message_id");
   job.sqsReceiptHandle = rs.getString("sqs_receipt_handle");
   rs.close();
   ps.close();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    con.commit();
    con.close();
   } catch (SQLException e) {
    e.printStackTrace();
   }
  }
  return job;
 }
}

まとめ
キューをまともに扱うとすると、結構大変です。ですが、その面倒な部分をSQSを使う事によって、比較的楽に非同期処理を実装する事が出来ました。今回の例では、わざわざ間に「Jobs」というテーブルを挟んだので、ちょっと面倒な事になっていますが、このような処理が不要なケースもあると思います。

SQSの活用例として記事にしておきました。どなたかのお役に立てれば幸いです。

2010/01/26

Dropboxで手軽にSubversionのリポジトリ はてなブックマークに追加

個人で開発をやる際、複数のマシンでソースコードの同期をはかりたい場合があると思います。その際、Web上の無料のホスティングサービスなどを利用する機会が多いかと思いますが、Dropboxを使って、お手軽にSubversionのリポジトリの同期に成功したので、メモしておきます。

unfuddle.com
・・・と言っておきながら、全く関係ないサイトの紹介です(汗)。個人的にはここ半年くらい、GitとSubversionが無料で使える、unfuddle.comというサイトを使っています。
このサービスはプロジェクト管理(Redmineがベース??)が出来るので、かなり使えます。GitHubGoogle CodeSourceForge.JPのような、オープンソース対象のホスティングサイトとは異なり、無料アカウントでリポジトリを非公開に出来るのがポイントです。

でも、このサイトは基本的に「本気モードプロジェクト(?)」が対象です。チケット切って開発するようなプロジェクトに使うべきで、ちょっとした実験コードやメモなどはコミットしにくいという問題があります。

リポジトリのレイアウトを工夫すれば何とかなりそうだけど、本気モードプロジェクトにゴミを紛れ込ませるのはちょっと(笑)・・もっと単純に、ソースの同期だけでいいから手軽にできる方法がないかな?と考えていました。

Dropboxがあるじゃないか
Dropboxは今や手放す事ができない、便利すぎるサービスです。こいつをソースコードの同期に使えないか、以前試してみた事がありました。やり方としては非常に安易で、Dropboxフォルダに直接プロジェクトを作るやり方です。ですが、これはお勧めできません。例えばEclipseでJavaをやってると頻繁にコンパイルが走るので、細かいファイルが沢山更新されます。すると、Dropboxも一生懸命同期しようとして、動作が重くなります。また、ログファイルなどの「同期が不要なファイル」も同期してくれるので、ファイルサイズが大きいと悲惨です。無駄に計算資源とネットワークリソースを使ってしまうという、エコな観点からも(?)NGですね。

なんかうまい事できないかなぁ、と思っていましたが、「gitとDropboxでお手軽・無料のSource Hostingを実現する」という記事を見つけ、それSubversionに応用しよう!という事で試してみました。(前置きが長い)

何をどうする?
単に、リポジトリをDropboxに同期させるだけです。以上。・・だと、ブログに書くまでもないので、自分のやった事をさらしておきます。

やった事
まず、最初にお断りですが、MacOSX環境の話になります。ですが、どのプラットフォームでも基本的には同じだと思います。※Windows環境で同じような事をやっている方がいらっしゃいました。

Dropboxのフォルダは、デフォルトで

/Users/ユーザー名/Dropbox

になりますが、自分の場合、同期したいマシン間でユーザー名が違う(笑)ので、パスが統一できません。仕方がないので、Dropboxの初期設定から「Dropbox Folder Location」を選んで、下記に変更しました。

/Users/Shared/Dropbox


場所は基本的にどこでも良いと思いますが、マシン環境によって変わらない場所の方が良いです。また、この例では物理的にフォルダを移動させていますが、シンボリックリンクでも行けます。

リポジトリは、このDropboxフォルダの下に作ります。

svnadmin create /Users/Shared/Dropbox/SVNRepository

リポジトリのURLは

file:///Users/Shared/Dropbox/SVNRepository

です。つまり、ローカルリポジトリを使いつつ、Dropboxにリポジトリ自体を同期させるというやり方です。※最初はsvnserve立てようとか思っていましたが、よく考えたらfile://でいいや、という事に気がつきました。

しばらく使ってみていますが、特に問題は起きていないです。複数台同時に作業して、コミット/アップデートしていくとタイミング的におかしな事になりかねませんが、出先のノートでコミット、自宅のデスクトップでチェックアウト・・なんていう使い方だと問題ないかと思います。

ちなみにコミットはローカルなので早いですよ(笑)。

2010/01/25

GAE/Jで実行環境を特定する はてなブックマークに追加

Google App Engine for Javaで、実行環境によって処理を切り替えたい場合のメモです。
Railsだったら、
if RAILS_ENV == 'production' then
# do something that's production-only
end
ですが、GAE/JのAPIを使うと、
if (SystemProperty.environment.value() == SystemProperty.Environment.Value.Production) {
// do something that's production-only
}
のようになります。

直接
System.getProperty("com.google.appengine.runtime.environment")
としても、"Production" とか "Development" という文字列を得る事が出来るようです。

Amazon SQSの使いどころ その2 はてなブックマークに追加

前回、キューを使って、時間がかかる処理を非同期で処理するフローを書きました。今回は、キューにAmazon SQSを使うと、なぜ嬉しいのか?を書いてみたいと思います。

メリット
その1:キューを作らなくていい
なんだかバカみたいですが、前回も書いた通り、信頼性のあるキューを作るのは大変な事です。既に実績のあるサービスを、格安(激安)で使えるのですから、利用しない手は無いです。信頼性という意味では、
メッセージを複数のデータセンターにコピーするので、メッセージが消える心配をしなくてよい。
とAmazon側は言っています。これぞまさにクラウドって感じですね。メッセージのやり取りはSSL経由で、さらにユーザー認証がかかっていますので、基本的なセキュリティーは保たれていると思います。
その2:導入が簡単
AmazonのAPIは大抵REST/SOAPの二種類が用意されていますが、SQSも例外ではありません。ただ、APIを素のまま利用するケースはまれだと思います。Java、Ruby、Pythonなど主要な言語のライブラリがありますので、そちらを使う事になるでしょう。自分の場合だと、メッセージを投げるフロントエンドはRubyでRightAwsを、メッセージを受けるバックエンドはJavaでtypicaを使っています。そもそもSQSで出来る事が単純なので、ライブラリ側のAPIも単純なものになっています。
その3:激安
一番大事な所ですが、安いというより、激安です。料金は、
$0.01 per 10,000 Amazon SQS Requests ($0.000001 per Request)
ですが、これだけ見ても??だと思います。実際に経験したケースだと、30秒おきにSQSにポーリングするスレッドを4本持ったサーバが2台、丸一ヶ月動いた時(単純計算で、30秒おきに8回、SQSにメッセージを取りに行く)で、
2,763,389 Requests $2.76
という請求が来ました。日本円にして250円くらいですので、為替レートの変動する事を考えるとほとんど誤差と言っても良いでしょう。仮に10倍だとしても2,500円ですから。

デメリット
とは言うものの、いい事ばかりではありません。かといって悪い事ではないんですが、独特のクセを知っておかないと想定外の動きをするので要注意です。
その1:メッセージの順番が保証されない
キューってFIFOだから、メッセージを入れた順番に受け取れると思いがちですが、実際は結構ばらついて返ってきます。これは、SQSがメッセージを複数データセンターにコピーする時間が影響してるのかな?と思います。


ですので、順番にシビアな事をやりたい場合は、別途その情報を管理する必要があります。
その2:メッセージ個数カウントが適当
これは「現在キューに何個のメッセージが溜まっているのか?」を正確に知る事が不可能という意味です。適当はちょっと言い過ぎですが、だいたい合っているというか、おおざっぱです。この辺もシビアにやりたい場合は問題になるかもしれません。
その3:メッセージの削除が保証されていない
自分は最初この制約を見たときに「えぇっ!」と思いましたが、実際はそれほど大変な問題ではありません。一度処理したメッセージには印をつけておいて、仮に再度受け取ったとしても実行済みで処理させない様にすれば良いだけです。自分はそうしています。ただし、経験上二重にメッセージを受け取った事は無いです。

総合するとメリットが上回る
デメリットに関しては、使う側で工夫すれば割と簡単に乗り越えられる問題じゃないかと思います。総合的に考えると、非常にコストパフォーマンスが高いのではないでしょうか?

ちなみに、今までの経験からすると、メッセージを投げてから受け取れるまで数秒、長い時だと30秒ほどかかる場合があります。肝心の信頼性ですが、今までメッセージが消えた事はありません。EC2やS3は結構な頻度で落ちてますが、SQSはそれほどでもないです。(気がついてないだけだったりして・・)

次回はサンプルコードを交えて、具体的にどのような実装になるのか解説してみたいと思います。

2010/01/22

Amazon SQSの使いどころ その1 はてなブックマークに追加

Amazon Web Serviceには「EC2」とか「S3」などの、いかにもクラウドなサービスの中に、地味だけど非常に便利なSimple Queue Service(以下、SQS)というサービスがあります。これはいったい何?という感じですけど、使いようによっては非常に有用なサービスです。日本語の解説は少ないのですが、この辺にありますね。
自分が手がけているWebのサービスでは、このSQSが結構重要な役割を果たしています。その経験を交えて解説してみようかな?という試みです。

キュー!
キューなんてものはあまりにも基本すぎて、特別な事じゃない感じがします。ですが、たとえプログラミング言語レベルで簡単に出来るとしても、実際にシステムで信頼性のあるものを作ろうとすると、なかなか大変です。また、そういったビジネスとは直接的に関係のない周辺層の部分を作るのは、限られた開発リソースだと苦しいものがあります。

そもそもWebのシステムでキューが必要なのか?という疑問がふつふつとわき上がってくるかと思いますが、最近ではWebで大量データを扱うなんて事は日常茶飯事ですから、結構使い道があるのじゃないかなぁ?と思います。

要は、時間のかかる処理を非同期で行いたいときに、キューがあれば便利だぜ!という事です。

非同期処理
一口に非同期と言ってもいろいろなレベルがあると思いますが、ここで言うのは、一つの処理に数分から数時間かかってしまう・・というレベルというものです。SQSの解説では、動画の変換なんかが例に挙げられていますが、動画がサーバにアップロードされると、サーバー側では変換処理のメッセージをキューになげて、すぐさま「受け付けました」画面を出す・・みたいな事を想像されると解りやすいかなと思います。

自分の場合は、PDFを扱っています。そのPDFは、テキストも多いですが、ネット上の画像を収集して随時張り込んで行く必要があり、点数が多いとかなりの時間がかかってしまいます。そのためPDFの作成要求があれば、いったんフロント側に立っているサーバーがメッセージをキューに放り込んで、別のサーバーがメッセージを取りに行く、と言った様なフローを作っています。



絵がしょぼくてすみませんorz

「受付のひと」は直接エンドユーザーに画面を提供するフロントエンドのサーバーです。
「PDFを作るひと」は、エンドユーザーからは見えない所にいるPDF生成専門のサーバーです。

「受付のひと」は、どういった内容のPDFを作るかをメッセージの中に書いて、キューに放り込み、「PDFが出来たらお知らせするから待っててね!」という画面をエンドユーザーに表示します。
「PDFを作るひと」は、定期的にキューをチェックして、メッセージがたまっていれば1つ取り出し、メッセージの内容に従ってPDFを作ります。出来上がったらエンドユーザーに「出来たよ!」メールを送信し、1つのジョブが完了です。その後は、またキューをチェックして・・と、延々と繰り返します。

おおざっぱに言うとこのような流れです。この話は、SQSに限った話じゃなくて、一般的なキューを扱う話になります。次回では、なぜSQSだと嬉しいのか?について書いて行きたいと思います。

2010/01/21

SSDのススメ はてなブックマークに追加


自宅で使っているメインマシンは、MacBook Pro 13です。2.53GHzで最初からメモリが4GBのものです。こいつは昨年末に買ったのですが、Amazon.co.jpでインナーイヤーイヤホンと同時購入すると激安になるキャンペーン(?)を利用して、結構おトクに買う事が出来ました。
このモデルは出てから半年くらい経つし、今年になってからCore i5/7搭載モデルが出るのは確実でしたが、そうそう待ってもいられないし、発売直後のモデルは何かと問題があったりするので、安全策を取りました。(Core i5モデルの情報がリークしていますね。)

そんで、少し予算が余ったので、最近だいぶ安くなったSSDでも入れてみるか?と思い立ち、ネットで色々調べて値段と評判のバランスが取れていたCFD CSSD-SM64NJ2をチョイス、買ってすぐにHDを引っこ抜いて入れ替えました。これは容量が64GBです。今時64GBって少ない様な気もしますが、このマシンのメインの用途が「開発」ですし、写真などは自宅のもう一台のMacに大量に入っていますので、特に不便を感じた事はありません。いざとなれば、引っこ抜いた250GBのディスクを外付けで使えばいいし・・。

あと、SSDで気になったのが、やはりプチフリと呼ばれる現象です。これも、問題となっている「JMF602」というコントローラチップでも大丈夫とか、Macはそもそも問題ないとか・・いろいろ情報が錯綜してどうにも解りません。大方の結論としては、IntelのSSDならまず間違いなさそうという事でしたけど、それだと何となく面白くない(笑)。プチフリったらその時じゃ、と思ってCFDにしましたけど、今の所全く問題ありません。

SSDにしてみて良かった点
起動が早いってのもありますが、これははっきり言ってすぐに慣れちゃいます。それよりもむしろHDのディスクが回っている・・という精神的呪縛(?)から逃れられ、持ち運ぶのが気楽になりました。意外な点としては、HDよりも重量が軽いのでMacも少し軽くなった事。とはいえ、数十グラムの違いだと思うので、気のせいかもしれません(笑)
あとは、マシンが静かになりました。CPUを酷使してファンが回りださない限り、全くの無音です。これは快適。
寒さに弱いのか?
良くなかった点、というか、謎な点が一つあります。
それは、寒い部屋に放置してマシンが冷えきった状態で電源ONすると、SSDを認識しなくなります!その場合は「option」キーを押しながら起動するとSSDを認識させます。
比較的暖かい日は大丈夫です。そんなもんですか??

ちなみに、SSDに俄然興味を持ったのは、この衝撃のムービーでした(笑)

2010/01/19

中小企業こそクラウドコンピューティングの波に乗れ はてなブックマークに追加

ここ一年くらい、お仕事でクラウドを使っています。
クラウドと言う言葉は昨年あたりからよく聞く言葉ですが、2010年の今年は普及期に入り、もっと一般的になって行くんじゃないかな?と思っています。
人によってクラウドの定義がまちまちなのでちょっとアレですが、この記事で書きたいのはAmazon EC2を導入した体験談です。

きっかけはある事件だった

自分が働いている会社は中小の印刷会社です。Web系の開発も細々とやっています。2008年頃までは、ごく普通にデータセンターを借りて、サーバを自前で用意していました。

しかし、事件は起きます。昨年、2009年の正月明け早々、あるサイトが突発的にアクセス数が跳ね上がり、にっちもさっちも行かなくなってしまったのです。このサイトは、ブログを製本するサービスで、大量のPDFを作ります。このサービスはサーバ負荷が比較的高いもので、大量の写真を貼っているブログを処理するときなどは、100MBのPDFを生成する事なんてざらだったりします。

アクセス数が増加した訳は、大手のブログが期間限定でバナーを張ってくれたからです。それって本来であれば大喜びすべき事ですけど、新規ユーザーさんが殺到してしまった結果、PDFの生成が追いつかなくなり、結果として門前払いをしなければならなくなりました。B2Cのサービスであればありがちな話かもしれませんけど、あの時の無力感と言ったらなかったです。なにせ、手をこまねいて見ているしか無いのですから・・。

一連の騒動が少し落ち着いた頃(新規ユーザーさんが見切りをつけた頃?)、ソフトウェアでもっと工夫は出来ないものか、色々検討してチューニングも施しました。でも、突発的な要求増加にはどうやったってソフトウェアだけでは限界があります。さらに、ブログの画像を外部から収集するという、どうにもならないボトルネックがある以上、マシンを並列に増やす意外に方法は無い、という結論になりました。(っていうか、最初から結論は解っていた・・)

じゃぁ、買うか?という事にもなりますが、いくらハードウェアが安くなったとはいえ、そう簡単に買えるものではありませんし、中小企業にとっては、サーバ一台買うのも大変な事です。さらに、マシンが増えるとなると、ラックを改めて借りるのか?とか、台数が増える=故障も増えるなので、人的リソースの面から運用面でやって行けそうにありませんでした。レンタルする、という方法も当然あります。実際に見積もりを出したりもしました。でも、意外にコストがかかりますし、そもそも普段暇なのに、突発的なアクセス増加のためにサーバを無駄にプールしとく事なんて出来ません。

他人の無責任な発言に事態が急展開する
そうして悶々と日々を過ごしているうちに、ある人から
クラウドあるんじゃね?
と言われ、ハッとしました。

悶々と凝り固まっている時こそ、他人の無責任な(?)発言は重要です(笑)一気に事態は急展開しました。


幸い、サーバの基本的な部分はJavaEEで構成されていたので、EC2に乗せる事は簡単です。一部画像処理にMac OSXのAPIを叩いていた部分を変更しただけで、基本的には動きました。あとはEC2の独特のクセを学習して、ストレージはS3と組み合わせるように一部プログラムを修正するのにひと月くらい、テストに半月くらい、そこから徐々に移行をやり始めて、完全に移行が完了するまで3ヶ月ほどでした。

その間、初期費用はゼロ。処理能力は数倍。月額の費用はデータセンターに支払っている額より少ないという「ホントに良いの?」状態でした。

もちろん、良い事ばかりじゃありません。その辺は追々書いて行きます。でも、新規サービスを開発しても運用出来ないというジレンマは、クラウドですっかり解消してしまいました。

2010/01/18

Google App Engine コードラボに参加してきました。 はてなブックマークに追加


Twitterでその開催を知りました。
http://groups.google.com/group/google-app-engine-japan/msg/5111153c099ef93b

土曜日の朝9時30分集合でしたが、出席率ほぼ100%という事で、皆さんの熱心さがよく分かります。

内容は、事前に頂いた資料に従って、チュートリアルを各自で行い、疑問があったら講師やチューターの方に質問するというスタイルです。
各章、だいたい1時間ほどでこなせる量でしたが、事前に予習されていた方やスキルの高い方はどんどん先へ進めているようでした。

チュートリアルの内容は、簡単なブログをApp Engineで実装するという内容。なにか特別なフレームワークなどは用いず、プレーンなServletとJSPでしこしこコーディンゴを行い、基本を知りましょう!というものです。ServletとJSPの基本を知っていれば、誰でも理解出来る内容です。データストアはもちろんBigTableですが、初心者に一番解りやすい(?)JDO APIを使ったものでした。

個人的にはこの本を斜め読みしただけで、実際に手を動かした事がありませんでした。でも、集まってみんなでコードを書いて、しかも先生がいるという贅沢な環境ですと、モチベーションが断然違いますねw。

今後の開催も予定されているようです。今回の講師&資料作成はCodeZineにも連載をしている山下氏。チューターの方々もApp Engineをすでに利用されているエキスパートな方たちばかりですし、Googleのオフィスに潜入(!?)出来るという楽しみもありますから、App Engineに少しでも興味があれば、次回に参加するべし!ですよ。

ブログを移動しました。 はてなブックマークに追加

今までExciteブログSeesarブログはてなダイアリーと渡り歩いてきましたが、最近はほとんど放置状態なのと、かろうじてちょぼちょぼ更新していたはてながどうにももっさりする・・ということで、あらためてBloggerを利用する事にしました。

さらにGoogle依存率が高まる事が若干不安ではありますが、趣味でAndroidの開発も始めた事だし、Bloggerにお世話になろうと決めた次第です・・。