タグ

Google App Engineに関するmatsukazのブックマーク (34)

  • Task Queue戦記 - スティルハウスの書庫の書庫

    とても遅かった以前の実装をTask Queueを使って書き換えることができました。感想をまとめると、 Task Queueはすばらしい。30分かかってた処理が3分で終わるようになった(前の実装がヘボいのではという疑惑はさておき) 処理を複数のタスクに分割して並列処理する(map)は簡単だけど、memcacheを使ってその結果をまとめる(reduce)のは面倒 reduce不要な用途(一括削除とか)や、reduceが簡単な場合(数の集計とか)、あとmemcache使わずにDatastoreに集約する使い方なら、そんなに苦労しないだろう memcacheを介してデータの配布や収集をするとき、とくに収集時の排他を書く必要あり(こういうバグりそうな/バグを再現できなさそうなコードは書きたくない) MemcacheService#incrementを使ってスピンロックを実装した memcacheはい

    Task Queue戦記 - スティルハウスの書庫の書庫
  • GAEで不定期のイベント処理をするならTask Queue

    決まった時刻や間隔で定期的に何か処理をしたい場合はCronを使用しますが、直前になるまで時刻が分からなかったり、突発的に発生するイベントの処理にはTask Queueを使います。 Task Queueはプログラム上から実行する時間を指定して登録できるCronに似たシステムです。CronがGETメソッドでパラメータ無しで呼び出されるのに対して、Task Queueは基的にPOSTメソッドで呼び出され、パラメータも渡すことができます。 ちなみに、Task Queueはまだ実験的なシステムで現在はgoogle.appengine.api.labs.taskqueueというパスになっていますが、正式サービスに昇格する際にgoogle.appengine.api.taskqueueに変わる予定なので注意してください。 呼び出し元がユーザではなくGAEのシステムというだけで、それ以外は普通のCGIと

    GAEで不定期のイベント処理をするならTask Queue
  • Song of Cloud: TaskQueueを使ってメールを送信する

    GAEにはMail送信サービスがあり、これを使ってEメールを送信することができます。 しかし、メール送信は必ず成功するとは限らないので、通常はメールを送信する際、送信の成功/失敗を確認し、失敗時には再送信するよう処理すると思います。 GAEでもそういう処理を書くことはできますが、「レスポンスを30秒以内に返さなければならない」という制約があるため、ひとつの処理の中で何度も繰り返すかもしれない処理を行うと、途中でタイムアウトとなり強制的に処理が中断されてしまう可能性があります。 そこで、より確実にメール送信を行うことができるよう、同じくGAEで使えるTaskQueueサービスを使いバックグラウンドでメール送信をする仕組みを作りました。 例えばあるフォームからPOSTされたときにメールを送信しようとした場合、 1. ServletでPOSTを受け取り、送信するメールの情報を作成 2. Task

  • Google App Engineを使って無料で自宅用プロキシを運用 | ライフハッカー・ジャパン

    デスク配線がスッキリ。Ankerの全部入り12 in 1モニタースタンドが突然8,250円OFFされてた #Amazonセール

    Google App Engineを使って無料で自宅用プロキシを運用 | ライフハッカー・ジャパン
  • GAE/Jで運用中に発生する例外(と一部対処法) : CB NANASHI管理人ブログ

    2010年02月24日22:34 カテゴリGoogle App Engineサイト構築 GAE/Jで運用中に発生する例外(と一部対処法) App Engineでのアプリケーション実行中に私が遭遇した不測の例外やエラーについて、原因と(一部のみですが)対策を書いてみます。 あくまでも個人的な経験に基づくもので、多分に推測を含みますが、多少ともお役に立てば幸いです。例外の種類は随時追加したいと思います。コードの誤りや、よりよい対策などがあれば、お知らせ頂ければ幸いです。 今回記述した例外、エラーの種類 DatastoreTimeoutException ApiProxy$UnknownException ApiProxy$CapabilityDisabledException GCacheException DeadlineExceededException ConcurrentModific

  • App Engineでバージョンによる楽観的排他制御 - ひがやすを技術ブログ

    Song of Cloudで送金のトランザクション処理パターンが紹介されていました。 http://songofcloud.gluegent.com/2009/11/blog-post_18.html 同様のpython版がこちら Distributed Transactions on App Engine - Nick's Blog 上記のやり方で基的には問題はないのですが、バージョン管理による楽観的排他制御を行っていないので、送金だけを考えるなら、残高を差分で更新しているので大丈夫ですが、これを一般的なパターンに拡張しようとすると、楽観的排他制御は必要になります。 楽観的排他制御とは、エンティティにバージョン番号を持たせておいて、メモリ読み込んだときのバージョン番号と書き込むときのバージョン番号が等しいことを確認する方法で、RDBMSの場合は、次のようなSQLを実行することで実現しま

    App Engineでバージョンによる楽観的排他制御 - ひがやすを技術ブログ
  • App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ

    Google App EngineではRDBMSのようなUnique Indexをサポートしていません。ユニーク制限を実現する場合は、トランザクション中でKeyを使ったgetとputを組み合わせる必要があります。 ここでは、email addressがユニークだったらそれを確定してtrueを返し、そうでない場合にはfalseを返すコードを考えます。 最初にトランザクションを使わないコードを見てみましょう。KeyFactory.createKeyの最初に引数は、kindといってテーブル名みたいなものです。 public boolean putUniqueEmailAddress(String value) { DatastoreService ds = DatastoreServiceFactory.getDatastoreService(); Key key = KeyFactory.cr

    App Engineのユニーク制限を正しく理解しよう - ひがやすを技術ブログ
  • App EngineのEntityGroupを理解しよう - ひがやすを技術ブログ

    App EngineのEntitiGroupは、Keyの親子関係を利用して組み立てられたEntityの集まりです。 Entityとは、Bigtable上の1つの行で、ユニークに識別するためのKeyを持っています。 Keyは、種類をあらわすkindとAppEngineから自動的に採番されるidもしくはアプリケーション側で自由に決めることのできるnameで構成されます。 通常は、AppEngineの自動採番に任せますが、Emailのアドレスをキーに使いたい場合などは、nameを使います。kindはテーブル名のようなものだと思ってください。 Keyの親子関係は次のようにして作ります。 Key grandparentKey = KeyFactory.createKey("Grandparent", "しげお"); Key parentKey = KeyFactory.createKey(grand

    App EngineのEntityGroupを理解しよう - ひがやすを技術ブログ
  • 【Google App Engine】 TaskQueueはスケールしない!?

    TaskQueueによって、何がどう改善されるかについて、Reflex iTextを使って具体的に調べてみたので報告したい。特に、パフォーマンスについて、先日の記事(ココ)と比較しながら説明する。 やりたいことは単純で、大量のPDFをいかに短時間で生成するかである。前回のテストでは、クライアントから大量のリクエストを投げることでこれを実現しようとしたが、リトライ処理が多発してスケールしなかった。では、TaskQueueを使うとどうなるのだろうか。今回はそこにポイントを絞って調べてみた。 TaskQueue概要 まず、TaskQueueであるが、これはWebHook型のキューシステムで、Task自体を通常のServletとして書くことができる。Googleのサンプルを見ればわかるように、QueueFactory.getDefaultQueue().add()を使って、URLとRequestP

    【Google App Engine】 TaskQueueはスケールしない!?
  • http://www.machu.jp/posts/20090903/p01/

  • GroovyとGoogle App Engineでアプリ開発(後編) ~Googleのサービスを利用する方法

    今回は番外編として、Java上で動くスクリプト言語「Groovy」を使って、Google App Engineのアプリケーションを作成してみましょう。第2回の記事では、「データストア」や「ユーザー」といったGoogleのサービスを利用する方法について、解説していきます。 はじめに 前回、GroovyでGAEを利用する基について説明を行いましたが、正直、「GAEを利用する」という意味はあまり感じられなかったかもしれません。別にTomcatで動かしてもよかったんじゃ...と思った方もいることでしょう。 GAEを利用する最大の利点は、「Googleが提供する各種サービスをそのままアプリケーション内から利用できる」という点にあります。今回は、主なサービスの利用について説明していきます。 対象読者 JSPを書くのは正直しんどい...と近頃感じる人 Ruby on Railsスタイルの開発に興味が

    GroovyとGoogle App Engineでアプリ開発(後編) ~Googleのサービスを利用する方法
  • GroovyとGoogle App Engineでアプリ開発(前編) ~GroovyでWeb開発を行うための基本

    はじめに Javaプログラマであれば、Google App Engine(GAE)がJavaに対応したとき、すぐさま試してみた人も多いのではないでしょうか。Javaに対応するということには、実は非常に深い意味があります。それは同時に「Java仮想マシン上で動く、あらゆる言語に対応する」ということでもあるのです。 GroovyもJava上で動くスクリプト言語なので、当然ですがGAEで利用できます。そこで今回は、GroovyでGAEのアプリケーション開発を行ってみましょう。 対象読者 JSPを書くのは正直しんどい...と近頃感じる人 Ruby on Railsスタイルの開発に興味があるという人 MVCフレームワークをJavaで学びたいという人 JavaによるGoogle App Engineプログラミングに興味がある人 GAEでGroovyを利用する Google App Engine(GAE

    GroovyとGoogle App Engineでアプリ開発(前編) ~GroovyでWeb開発を行うための基本
  • GoogleでOpenIDを取得する

    GoogleのブログサービスBloggerでブログサイトを作れば、そのURLがそのままOpenIDとなる。ブログサイトをわざわざ作りたくない場合は、OpenID for Google AccountというGoogle App Engineのサービスが稼動しているのでこれを利用しよう。これならば、Googleアカウントさえ持っていればOpenIDとしてすぐに使える。 実は、BloggerのURLがOpenIDになっているのを知らずに、日で最初のOpenIDプロバイダであるOpenID.ne.jpでOpenIDを取得したのだが、どうもここのサイトが心もとなく感じたので、少し調べてみると、様々な不安の声が上がっていることを知った。サーバが落ちる、登録確認メールに不具合がある、SSLを利用していない、などなど。そんな声もあってか、ついには究極の個人情報漏洩対策が取られたようで、ここでOpenID

    matsukaz
    matsukaz 2009/08/21
    OpenIDのサンプルが公開されているようで。ありがたい~
  • GAE/Jで1MBを超えるファイルのアップロード、保存

    GAEではFileのアップロードは10MBまでOKだが、DataStoreに保存できるのは1MBまで…という制限がある。分割して保存すればいいんだけど、それをラクにするためのライブラリが作られているよぅで、Google Cookbookで紹介されている。 App Engine Recipe - [GoogleFileService] Storing large files up to 10MB using Java Servletgoogle-file-service - Google Codeで公開されていて、そのままeclipseのプロジェクトとして配布しているっぽい。

    matsukaz
    matsukaz 2009/07/22
    ファイルのアップロード
  • Google App Engineのtips集 - スティルハウスの書庫の書庫

    (随時更新中です。間違いなどありましたらコメントをお願いします!) このページのtinyurl: http://tinyurl.com/gaetips Datastoreのtips Bigtableの内部構造 BigtableによるDatastoreの実装 Datastoreによるクエリの実装 トランザクションとエンティティグループ Datastoreのtips List Proprtyとmerge joinの使い方 GAE一般のtips GAEのサーバー構成とリクエストの流れ Task Queue APIの使い方 開発環境とプロダクション環境の違い Flex/AIR+GAEのtips GAE/JにBlazeDSを組み込む BlazeDSの番環境へのデプロイでハマる Datastore APIの取り扱いでハマる App Engine開発の便利な参考ページ TOPGATEさんのGoogle

    Google App Engineのtips集 - スティルハウスの書庫の書庫
    matsukaz
    matsukaz 2009/06/19
    GAEに関する各種TIPS
  • 【Google App Engine】 BigTableのJDBCラッパー jiql

    GAE/JでSQLをどうしても使いたい方に朗報。jiqlというものを使えば、jdbc clientとしてBigTableに実際に保存されたデータにアクセスできるようになる。 これを使えるようにするには、jiqlのページから、jiql.jarとjiql.jspをダウンロードして、GAEアプリケーションに配置すればよい。それぞれ、WEB-INF/lib/の下と、./に置く。 ただし、jiql.jspにはBugがあり、jspコンパイル時にエラーとなるため、以下のように修正する。(try catchのスコープ外でString sql=""を定義する) jiql testpage jiql testpageでは、hostやuser、password、datasourcenameを入れる箇所があるが、とりあえず何も入れないで、exampleのsqlを入れてqueryボタンを押すだけで実行結果が見れる。

    matsukaz
    matsukaz 2009/06/16
    jiqlの説明
  • Google App Engine for Java (GAE/J) で Bigtable CRUDを行う Flex アプリ作成法 - hamadakoichi blog

    週末、GoogleAppEngine for Java (GAE/J)で動作し BigtableでCRUDを試せる簡易Flexアプリを作成してみた。 以下に作成法を紹介する。 RemotingにはBlazeDS を使用。 http://koichi-hamada.appspot.com/ 作成において、次のサイトを参考にした。今回、参考サイトになかった Update、Deleteも追加している。 Flex Meets Google App Engine Flex Remoting on Google App Engine 前提/環境 以下、GAE/J Eclipse plugin、Flex Builder plugin のEclipseインストールは完了している前提で進める。 インストールは次をご参考に: Google App Engine for Javaを使ってみよう!(1)Googl

    Google App Engine for Java (GAE/J) で Bigtable CRUDを行う Flex アプリ作成法 - hamadakoichi blog
    matsukaz
    matsukaz 2009/06/16
    サンプル混みで公開中。
  • ユカイ、ツーカイ、カイハツ環境!(5) App Engine/AptanaなどJavaクラウド4つを徹底比較 (1/3) - @IT

    App Engine/AptanaなどJavaクラウド4つを徹底比較:ユカイ、ツーカイ、カイハツ環境!(5)(1/3 ページ) Javaはクラウド戦国時代に突入! クラウドコンピューティングのブレイクとともにさまざまなクラウドサービスが提供され始めました。特に、PaaSサービスを提供する「Google App Engine」(以下、GAE)の登場はインパクトを与え、Javaに対応したGAEの類似サービスとして「Stax」「Morph AppSpace」が登場しました。GAEも遅れてJavaサポートを発表したり、統合開発環境を提供していたAptanaが「Aptana Cloud」のJava対応を行うなど、Java対応のクラウドは戦国時代に突入しました。そして、まだ動かすことはできませんが、サン・マイクロシステムズが先日のJavaOneで「Sun Cloud」を発表し、Amazon EC2に近

    ユカイ、ツーカイ、カイハツ環境!(5) App Engine/AptanaなどJavaクラウド4つを徹底比較 (1/3) - @IT
    matsukaz
    matsukaz 2009/06/11
    Aptana、Stax、Morph AppSpaceとの比較
  • クラウド環境ではデータベースは「非正規化」して使う? - @IT

    2009/06/09 2009年4月7日、グーグルは利用者が作成したアプリケーションをスケーラブルなホスティング環境で稼働させられるクラウド系サービス「Google App Engine」で、新たにJavaをサポート言語に加えた。Java言語のサポートによって、業務アプリケーションのクラウド移行は起こるのか? Google App Engine担当者に話を聞いた。 米グーグル デベロッパー・アドボケートのフレッド・ソーサー(Fred Saucer)氏。もともとJavaによる業務アプリケーション開発のコンサルタントだったが、最近グーグルに入社したという ――コンシューマ市場ではクラウドサービスの受容が進む一方、企業ユーザーはクラウド移行に消極的にも見えます。 ソーサー氏 確かにコンシューマのほうが新しいものを試して、利用するようになるのが速い傾向はあります。でも、そうしたコンシューマ向けサー

    matsukaz
    matsukaz 2009/06/11
    GAE担当者に聞くGAEの特徴。
  • Google App Engine 10の事実 | エンタープライズ | マイコミジャーナル

    Google App Engine Google App Engine Teamは10 things you (probably) didn't know about App Engineにおいて、Google App Engineによる開発方法が変わる10の事実を紹介している。App Engine Teamはディスカッショングループに参加することで、ユーザがGoogle App Engineのいくつかの事実に注目していないことに気がついたという。これを知ると知らないのとでは、Google App Engineを使った開発方法が変わってくるということだ。紹介されている事実は次のとおり。 バージョン番号は数値ではなく文字列。このためバージョン番号にliveやdevといった文字列を使うこともできる アプリケーションは複数のバージョンを同時に実行できる。version.latest.yourap

    matsukaz
    matsukaz 2009/06/11
    Google App Engineによる開発方法が変わる10の事実