Head Firstデザインパターン 第2版 (Head First Design Patterns, 2nd Edition)

オライリー・ジャパンから、「Head Firstデザインパターン 第2版 ――頭とからだで覚えるデザインパターンの基本」が発売されます。これは、2005年に発売された「Head Firstデザインパターン」の改訂版です。私は、第1版、第2版両方の監訳を担当しました。 デザインパターンに興味にあるソフトウェア エンジニアの方は、是非チェックしてみてください! A Japanese version of "Head First Design Patterns, 2nd Edition" is published now. This is a revised edition of "Head First Design Patterns" (published in 2004). I am a translation supervisor of both editions. If you are a software engineer who has interest in design patterns, please check … Continue reading Head Firstデザインパターン 第2版 (Head First Design Patterns, 2nd Edition)

デザイン パターン – IoTと集約 (Design patterns – IoT and aggregation)

Azure Blog > Design patterns – IoT and aggregation (2018/10/29) https://azure.microsoft.com/blog/design-patterns-iot-and-aggregation/ Rafat Sarosh (Principal Program Manager, Azure Cosmos DB) この記事では、高スループットでIoTデータを挿入し、それから、レポートのために異なるフィールドで集約を使う方法を学んでいきます。このデザイン パターンを理解するためには、Azure Cosmos DBをよく知っており、変更フィード、要求ユニット (RU)、Azure Functionsを十分理解している必要があります。これらがあなたにとって新しい概念である場合は、これらについて学ぶために、前述のリンクに進んでください。 多くのデータベースは、データをパーティション分割することで、極めて高いスループットと低いレイテンシを達成しています。これは、MongoDB、HBase、Cassandra、Azure Cosmos DBといった、すべてのNoSQLデータベース エンジンに当てはまります。これらすべてのデータベースは、パーティション分割、つまりシャーディングのために、無限にスケール アウト可能です。 Azure Cosmos DBを、より詳しく見てみましょう。トップ レベルで、コンテナーが定義されています。コンテナーをテーブル、コレクション、またはグラフと考えることができますが、コンテナーは、すべての情報を保持する主要なエンティティです。Azure Cosmos DBは、このトップ レベル エンティティを定義するために、「コンテナー」という用語を使っています。Azure Cosmos DBはマルチ モデル データベースなので、このコンテナーは、SQL API、MongoDB APIではコレクションと、Gremlin APIではグラフと、Cassandra API、Table APIではテーブルと同義です。 コレクションは、コレクションのスループット要件を基にして割り当てられた、多数の物理パーティションを持ちます。今日、10,000 RUに対して10パーティションを持つ可能性がありますが、明日にはこの数値が変わる可能性があります。常に必要となるスループットに集中すべきであり、割り当てられるパーティション数を気にするべきではありません。前述したように、データの使用状況によって、パーティション数は変わります。 高スケールのスループットと低レイテンシを達成するためには、データの挿入時にパーティション キー、行キーを指定し、データの読み取り時に同じパーティション キー、行キーを使う必要があります。適切なパーティション キーを選択すれば、データがすべてのパーティションにわたって均等に分散され、読み取り/書き込み操作を1桁ミリ秒で実行できるようになります。 Azure Cosmos … Continue reading デザイン パターン – IoTと集約 (Design patterns – IoT and aggregation)

Azure Cosmos DB パーティション分割デザイン パターン – パート1 (Azure Cosmos DB partitioning design patterns – Part 1)

Azure Blog > Azure Cosmos DB partitioning design patterns – Part 1 (2018/10/25) https://azure.microsoft.com/blog/azure-cosmos-db-partitioning-design-patterns-part-1/ Rafat Sarosh (Principal Program Manager, Azure Cosmos DB) この記事では、データを効率的に分散し、アプリケーションのパフォーマンスを改善し、より高速なルックアップを可能にするための、パーティション キーの使い方を学びます。この記事の前提条件は、Azure Cosmos DBの一般知識と、変更フィード、要求ユニット (RU)、Azure Functionsの十分な理解です。 高いスループットで挿入したいデータを持っており、2つ以上の異なるキーでクエリすることを想像してみましょう。このシナリオでは、あなたが航空会社に勤めており、ユーザーの予約情報をコレクションに格納する必要がある、と仮定します。ユーザー データは、次のように定義されます。 あなたは、パーティション キーとして、多くの可能な値から「UserId」(ユーザーの電子メール アドレス) を選択します。「UserId」は各ユーザーに固有のものであり、これによってデータが十分に分散されるようになるので、これはパーティション キーとして良い選択です。図1に示したように、データは、すべてのパーティションにわたって均等に分散されます。しかし、データをクエリする際に、常に「UserId」が分かっているわけではありません。ユーザーの姓やユーザーのPNR (旅客予約記録) を使って、データをクエリしたい場合もあります。 図1:パーティションにわたって均等に分散されたデータ Azure Cosmos DBは、既定ですべてのデータにインデックスを作成します。「LastName」でデータをクエリしようとする場合、結果を得られますが、パーティション キーのないクエリはファンアウト クエリになるので、より多くの要求ユニット (RU/s) がかかります。ファンアウト クエリはすべてのパーティションを確認します。これには余分なRU/sがかかり、アプリケーションのパフォーマンスに影響を与えることがあります。データが少なく、パーティション数も少ない場合は、ファンアウト クエリの大幅な副作用に気づかないことがありますが、多数のパーティション、大量のデータを持つようになり始めると、ファンアウト クエリがアプリケーションに弊害をもたらすことがあります。頻度の低いクロス パーティション クエリは問題ありませんが、それが頻度の高いクエリの場合、解決策は何でしょうか? 1つの選択肢は、「PNR」から「UserId」へのマッピングのための「PNR」コレクション、「LastName」から「UserId」へのマッピングのための「LastName」コレクションという、2つのルックアップ コレクションを持つことです。「PNR」コレクションは、パーティション キー、行キーとして「PNR」を持ち、値として「UserId」を持ちます。 これらの異なるルックアップ コレクションは、アプリケーションをより効率的にします。PNRで詳細をルックアップするには、まず、「UserId」を取得するために、「PNR」コレクションをクエリします。それから、「UserId」を使って、「User」コレクションをクエリします。これら2回の呼び出しは数ミリ秒以内に完了でき、単一のファンアウト … Continue reading Azure Cosmos DB パーティション分割デザイン パターン – パート1 (Azure Cosmos DB partitioning design patterns – Part 1)

[書籍プレゼント] クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き

2014年に発行した書籍「クラウドデザインパターン Azureを例としたクラウドアフリケーション設計の手引き」の在庫を見つけたので、5名様にプレゼントします。 3年前の書籍ですが、今でもクラウド アプリケーションのアーキテクチャ設計に役立つ情報が満載です。 当選した方は、9月末までに、書籍の感想をブログ、Qiitaなどで公開してくださいね。 [書籍プレゼント] クラウドデザインパターン Azureを例としたクラウドアプリケーション設計の手引き https://satonaoki.connpass.com/event/65389/ クラウドデザインパターン Azureを例としたクラウドアフリケーション設計の手引き (2014/06/09) http://ec.nikkeibp.co.jp/item/books/P98330.html http://www.nikkeibp.co.jp/atclpubmkt/book/14/P98330/ http://amzn.to/2wAycLu Azure Architecture Center > Cloud Design Patterns https://docs.microsoft.com/azure/architecture/patterns/ クラウド設計パターン インフォグラフィック https://azure.microsoft.com/ja-jp/resources/infographics/cloud-design-patterns/ [Azure Deep Dive] クラウド デザイン パターン ~優れたシステム構築のためのガイダンス~ (2015/10/05) https://www.slideshare.net/satonaoki/200151004-mad-cdp https://satonaoki.wordpress.com/2015/10/29/azure-deep-dive/

[Serverless Meetup Tokyo #3] Serverless in Azure (Azure Functionsのアップデート、事例、デザインパターンなど (仮))

「Serverless Meetup Tokyo #3」で、Azure Functions、Azure Logic Appsを中心とした、Azureにおけるサーバーレスのセッションをしました。 Serverless Meetup Tokyo #3 (2017/07/12) https://serverless.connpass.com/event/51922/ Serverless in Azure (Azure Functionsのアップデート、事例、デザインパターンなど (仮)) https://www.slideshare.net/satonaoki/20170712serverlessmeetupazure https://togetter.com/li/1129181 https://www.slideshare.net/satonaoki/20170712serverlessmeetupazure https://twitter.com/takubun2323/status/885084974784884736 https://twitter.com/ohtk79/status/885086779539369984 https://twitter.com/nekoruri/status/885087013652791296 https://twitter.com/ke_ni_/status/885088718004080641 https://twitter.com/haray_isa/status/885091078227058689 https://twitter.com/nekoruri/status/885092401437716480 Developers.IO > Serverless Meetup Tokyo #3 レポート (2017・07・12) http://dev.classmethod.jp/cloud/serverless-meetup-tokyo-3/ セッションで紹介した関連リンクです。 Azure Functions https://azure.microsoft.com/services/functions/ Try Azure Functions (契約なしで使える1時間の無料試用版) https://functions.azure.com/try Azure Logic Apps https://azure.microsoft.com/services/logic-apps/ Microsoft Flow https://flow.microsoft.com/ Serverless Design … Continue reading [Serverless Meetup Tokyo #3] Serverless in Azure (Azure Functionsのアップデート、事例、デザインパターンなど (仮))