Gleyzer両氏によって共同開発されました。2019で、同言語の発表を行いました。InfoQはPurdy氏に言語と、氏らが解決を目指した問題について聞きました。設計/アーキテクチャアジャイルマニュフェスト:ソフトウェアアーキテクトの視点ソフトウェアアーキテクトの役割と責任はアジャイルソフトウェア開発のためのマニフェストの価値と矛盾していると見えますが、優れたアーキテクトはアジャイル開発チームをサポートするテクニックを見つけています。Streamingは、ストリーミングデータのためのSQLライクなインターフェースを提供します。Streamsによって、Redisがストリーミングデータを複数のプロデューサとコンシューマの間で消費、保持、配信することができるようになります。ソフトウェア開発のマニフェストたゆまず息もつかずに市場に突進することで、会社を静かに消滅の崖っぷちへと追い込みます。それは設計してコードを書く方法を再考する時です。簡単さへの投資は、速さへの投資です。簡単さは知的財産の主鉱脈でもあります。競争上の優位性は、一度失ったら、もう一度手に入れることはほとんど不可能です。Buytaerts氏が過去10年間にわたって、企業がDevOps採用のハイプサイクルをくぐり抜け、変革に対する誤解を解消する過程を支援してきた経験について語ります。清一このシリーズのパート1(参考記事)で、私たちはAtomサーバー(リンク)を紹介しました。それは、Atomストアをつくるための拡張性のあるオープンソースフレームワークです。Atomストアは、GData(リンク)形式でAtomパブリッシングプロトコル(リンク)を結合することに基づいた、データサービスアーキテクチャにおける新しいトレンドです。AtomサーバーはHomeaway.comのロード回数がとても多く、高い可用性のデータ流通システムにて用いられました。いうのも、大きくそしてさまざまな種類のクライアントとの通信が必要で、Atomサーバーは特にクライアントを中心に進化してきたからです。これは、AtomPubの仕様にいくつかの拡張機能を付加することに動機づけられました。注目すべきものは、自動タグ、バッチ、そしてアグリゲートフィードです。自動タグカテゴリは、AtomPubで最も有用なコンセプトの一つです。Atomカテゴリ(リンク)は、基本的に名前-値のペア(Atomでは、これらをとスキームとタームと呼んでいます。)であり、追加的なメタデータとしてAtomエントリに関連があります。これは、クライアントがオリジナルのデータを操作することなく、データを分類して新しい関係を必要に応じて適用することができる強力なコンセプトです。関連スポンサーコンテンツAtomサーバーは、自動的にエントリのカテゴリメタデータを保持します。これらのカテゴリ(例えばANDやOR)に対して、しっかりとしたBooleanのクエリーのメカニズムも提供しています。(GDataも同様のメカニズムで、それはこのシリーズのパート1(参考記事)で詳細を説明しました。Atomサーバーにおいてとても重要な役割を演じているカテゴリですが、私たちが初めに優先させた機能の一つは、「自動タグ」エントリの機能でした。自動タグ機能は、送信されたエントリ(PUT)のコンテンツをベースとし自動的にカテゴリを計算します。自動タグ付けは、EntryAutoTaggerインターフェースを実装することによって達成されます。EntryAutoTaggersは、Spring(リンク)のようなIOCコンテナを使っているAtomサーバーのワークスペースに実装されます最も一般的なエントリのコンテントタイプはXMLです。それゆえ、AtomサーバーではXPathAutoTaggerの実装を提供しています。EntryAutoTaggerは、そのコンテントXMLに対してXPath表現を実行することをベースとしたエントリのためのカテゴリ生成が簡単にできるように構成されています。以下のコンテントXMLを例にとります。<size>small</size></widget>/widget/colorや/widget/sizeのようなXPath表現は、(urn:color)redや(urn:size)smallのカテゴリを生成するでしょう。クライアントは、これらのカテゴリを明示的につくったり、それらの存在を認識する必要すらありません。XPathAutoTaggerはXMLコンテンツを読み込んでカテゴリを自動的に生成します。フィードリーダーは、カテゴリ化されたフィードを取得し、要求した全てのカテゴリが存在することを認識します。システムはカテゴリをきちんと管理するために、潜在的に信頼できないクライアントには依存しません。ストアは、通常、複数の異なるワークスペースや相互に関係のあるデータで構成されたコレクションを内包しています。ある企業が各従業員に対するエントリで一つのワークスペースを含むAtomストアで、別のワークスペースは従業員たちの会議を含むものをもっているとします。給与支払い部門は、給与手続きのために従業員のフィードを取得したいでしょうし、ビル管理人は会議予約を監視する必要があります。これらは共に、最も単純なAtomPubフィードの例です。他の例として、すべての会議が各従業員と結合しているフィードを望んでいるプロジェクトマネージャーがいるとしましょう。マネージャに対し、データセットを関連づけている間に2つの別々のフィードの取得を強制するのではなく、従来のAtomPubでそうしているように、Atomサーバーではアグリゲートフィードの概念を加えています。アグリゲートフィードは、すべてのエントリ、別々のワークスペースやコレクションであっても、単一のデータフィードとして結合することができます。Atomサーバーは、カテゴリの強力な概念を利用してアグリゲートフィードをつくります。アグリゲートフィードに対するスキームを結びつけるために、特定のスキーム(先に述べたカテゴリのスキーム/タームのペア)が選択されます。アグリゲートとして結び付けられなければならない2つ以上のエントリは、同じ結合スキーム内の同じタームでタグ付けられなければなりません。アグリゲートフィードは、ワークスペースが$joinとして指定したURIを利用して特定されます。アグリゲートフィードURIは、そのURIで指定されたスキームに存在しているユニークなタームのそれぞれに対して、一つのエントリを含んでいます。これらのエントリは、アグリゲートの適切なコンポーネントエントリを含むアグリゲート要素として、そのエントリの内容にアグリゲートされます。例に戻り、その企業にはAtomストア内に以下のデータがあると仮定します。</meeting>プロジェクトマネージャーが「従業員の会議」のアグリゲートフィードを引き出す前に、私たちは、結合したいそれぞれのエントリに関して適切なAtomカテゴリをつくらなければなりませんでした。それは、唯一のカテゴリのスキームが「アグリゲートカテゴリ」を定義していて、スキーム内にあるそれぞれのカテゴリのタームが「カテゴリエントリ」を定義しています。これは、ほとんどの場合、前述したAutoTaggerのメカニズムを利用するでしょう。私たちがurn:EIDと自身の結合スキームを設定した場合、エントリに対して以下のカテゴリを定義するでしょう。(urn:EID)345これらのカテゴリがエントリに適用されるとともに、プロジェクトマネージャーは、スキーム「urn:EID」をベースとしたアグリゲートフィードをすぐに引き出すことができます。すべてのアグリゲートフィードに対するワークスペースが$joinであるので、使用するURLは以下のようになります。http://your.atomserver/$join/urn:EIDurn:EIDスキームのユニークなタームごとに一つのエントリでアグリゲートフィードを返します。それぞれのエントリの内容は、要素です。EntryのXMLのセットを含んでいます。アグリゲートフィードのレスポンスは、以下のようになるでしょう。簡潔さのために、XML要素の多くが削除されていることに注意してください。</feed>アグリゲートフィードに関して注意すべき重要事項がいくつかあります。アグリゲートフィードに対するシーケンス番号(その番号はタグで返され、Atomサーバー内の一貫したフィードページングに利用されます)は、その「子のエントリ」すべての中で最も大きいシーケンス番号と同じです。重要なのは、アグリゲートの要素のいずれかが変わると、次にそのアグリゲートフィードがとるときに、そのアグリゲートが返されるということです。アグリゲートエントリに対するカテゴリのセットは、すべてのコンポーネントにおけるカテゴリの結合です。アグリゲートフィードはカテゴリ検索を前提とするかもしれません。したがって、リクエスト/$join/urn:EID/-/(urn:department)は、(urn:department)devのカテゴリで定義した私たちのフィードからすべてのアグリゲートエントリをとります。/$join/urn:EID?locale=en_US)。少なくともコンポーネントの一つが所定の場所にローカライズされていれば、ローカライズされたアグリゲートエントリだけは存在します。ローカライズされたエントリがなければ、そのアグリゲートはフィード内で何も返されません。要素の内部のエントリで新たな3つのXML要素を定義します。コンポーネントエントリのロケールを含む(もしあれば)これらの要素によって、アグリゲートフィードのコンシューマがプログラムで容易にアグリゲートのそれぞれのコンポーネントの特性を決めることができます。バッチそれぞれのエントリに対して別々のサーバー呼び出しにしようとすると、潜在するラウンドトリップオーバーヘッドがあるため、オペレーションの集まりをバッチ化して単一のリクエスト(POST、PUT、DELETE)にすることでシステムのパフォーマンスメリットが得られます。残念ながら、AtomPubではバッチのメカニズムを提供していないので、私たちはAtomサーバーにバッチの機能を追加しました(GDataの同様の機能からヒントを得ました)。バッチ処理の実装をよりRESTfulにするのであれば、HTTPの中のマルチパートの機能を使うべきでしょう。私たちのクライアントが利用する言語で適用範囲が広いものを考慮し、この技術はクライアントにとって複雑すぎると判断しました。代わりに、私たちはURLベースの仕組みを選択しました。私たちは、バッチが記述されていることを意味する「BATCH」といったカスタムのHTTPメソッドの利用も少しだけ考えました。クライアントのインターオペラビリティの最大化を考え、私たちは「標準的な」HTTPメソッドのセットにこだわることに決めました。バッチ操作を示すために別のURIを使用しました。Atomサーバーでのバッチ操作は、$batchという特別なエントリIDを使用するコレクションの「仮想」エントリをPUTすることによって完了します。http://your-atom-server/widgets/acme/$batchwidgetsワークスペース内のacmeコレクションでのバッチ操作を示しています。このURIの構造は、与えられたバッチ操作が特定のワークスペースとコレクションの中のエントリだけに適用されるという点に注意してください。バッチのPUTに対するリクエストのXMLの内容は、Atomフィードで、バッチ内のそれぞれのアイテムに対するAtomエントリを含んでいます。エントリは、いくつかの可能な拡張を加え、特定のリクエストとして正確につくられます。Atomサーバーは、http://atomserver.org/namespaces/1.0/batchの名前空間の中に、新たな拡張XML要素を宣言します。(DELETE)なのかを指定することができます。これらの要素は、グローバルにバッチフィード全体に適用されるか、それぞれのエントリ個々に適用されるかのいずれかです。バッチリクエストは以下のようになります。</feed>エントリ123を更新し、234を削除しようとします。XMLレスポンスの内容は、この場合も、初めのバッチリクエストのそれぞれのエントリに対応する一つのエントリのAtomフィードです。これらのエントリは、対応するバッチリクエストにおいて同じ順序で現れます。これらのレスポンスエントリのそれぞれにおいて、Atomサーバーは、エントリが単独のオペレーションとしてサブミットされる場合に、返されるHTTPのステータスコードを意味するカスタム要素を追加します。成功したエントリに対し、レスポンスは次のようになります。reason="CREATED"/>エラーが発生すると、エラーコードと理由が与えられます。Error"/>さらに、どのくらいのinserts、updates、deletes、errorsが発生したのかを示すためのフィードレベルとして要素があります。上記の例に対して、以下を受け取ります。errors="0"/>この「ロールアップ」レポートの検査は、クライアントがレポートされたエラーが0でないときに特定のエラーに対する備えを固めることができます。設計によってスケーラビリティやインターオペラビリティを可能とするので、私たちはAtomPubの上にAtomサーバーを築き上げました。標準による構築によって、私たちの問題に立ち向かうためにAtomコミュニティの多くの人々の知恵を活用することができます。目を向け、私たちはバッチや楽観的同時並行性といったいくつかの有用な拡張を追加しました。私たちがAtomサーバーの利用法を拡張するにつれ、自動タグやアグリゲートフィードを含む追加機能の必要性が明らかになりました。Atomクライアントと共にインターオペラビリティを追加することが容易にできました。Atomの力は、私たちがこれらの強力な機能を、私たちのクライアントの多くとともに味わうこの単純なインタラクションを犠牲にすることなく追加することができたときに真に明らかなものとなりました。それは、両者のそれぞれの長所と言えます。2008年5月のオープンソースのデビュー以来、Atomサーバーはかなりの関心を生み出しました。私たちはより多くの人々がAtomサーバーを選択し、それを利用し、私たちにそれの足りない点を教えてくれることを望んでいます!Atomサーバーは、http://www.atomserver.orgからダウンロードすることができ、数分で実行することができます。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツがお送りいたします。25万人ものシニアデベロッパーのコミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。よい世界へ私たちが暮らす世界を大切に思い、よりよいものにしたいと考えています。人のためのソフトウェア開発を加速し私たちのミッションを実現することで、この思いを成し遂げようとしています。私たちは利益の1%をさまざまな慈善団体に寄付しています。会社として、また従業員��して、そうしたことの価値を強く信じているからです。with.プライバシーBTあなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。アドレス*Eメールを変更すると確認のメールが配信されます。会社名:現在の会社名をご入力ください。Other組織規模:現在の組織規模をご入力ください。2,501+国:現在の国を設定してください。Zimbabwe都道府県:現在の都道府県に設定してください。次の都道府県にアップデートする:ニュースレターを購読しますか?インダストリーメールを購読しますか?本Eメールに登録すると、以前より関心のあったトピックの関連情報をお送りする場合がございます。詳細はこちらのプライバシーポリシーをご覧ください。newsletter?新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。