API開発のためのプログラミング言語"Ballerina"の直感的な構文について解説します。認証や承認、OpenAPIツール、可観測性、SQL/NoSQLクライアントライブラリなど、重要な言語機能についても論じます。記事を読み終えれば、Ballerinaが次のバックエンドAPI開発の有力な候補である理由がよく理解できるでしょう。2022年4月InfoQ編集チームが2022年に進化するソフトウェアアーキテクチャと設計のトピックをどのように見ているかの概要です。アーキテクトが今、何を設計しているかに焦点を当てています。Pan氏が、分散データベースシステムにおけるシャーディングアーキテクチャのパターンについて論じます。ShardingSphereプロジェクトがデータシャーディングの課題にいかに対処しているかを説明した上で、DistSQLを使って分散データベースと暗号化テーブルを生成する方法の実例2つを論じています。カルチャー&手法カオステストで、見えない課題からアプリケーションのレジリエンスを改善するこの記事では、Netflixが提唱するカオステストの原則を列挙した。読者は、カオステストが提供するメリットとデメリットを理解できるはずだ。することで、カオステストを行うかどうかの判断材料となる。リスクに対するすべてのメリットを考慮して、カオステストを行うために経営陣を説得すべき理由も説明した。3)の仕様は、エンタプライズでのJavaの長いマーチにおいて、非常に重要な中間地点となった。仕様が、コミュニティからのインプットで作り上げられたのは、非常に明白である。一貫性のあるサービスパラダイムを示しており、もっとPOJOフレンドリで、一般的に複雑でなくなっている。5のアノテーションによってもたらされた間接のレベルが、このパラダイムをもっと強力にし、同時に開発者の労力を減らした。悪くて古い決定を捨てて、違う新しい解決を求める意欲によって、そのフレームワークは、以前、EJBを敬遠した人々に興味深いものになった。Entitiesに替った。2.1やそれ以前では、平均的なbeanに必要なJavaのクラスやinterfaceが手に余るほどあったが、2つぐらいで済むようになった。「規約は設定に勝る(Convention-over-configuration)」ベースのデフォルト値の実現で、起動して、走らせるのが、もっと簡単になった。3.0は、革命だった。3.1は、非常に使える、かつありがたい進化である。3.1のフィーチャである。仕様のゆっくりしたペースは、許せることである-不完全なモデルをほとんど進化しない仕様に凍結するより、80%の達成率のほうがマシである。その完成を歓迎しないわけがない。2.1より14ページ少ない。この投稿で、これらのフィーチャのいくつかをレビュ-し、その利用法を考える。3.1でのいくつかの大きな変更は、プラットフォームへの追加ではなく、プラットフォームを使う際に、必要な決まりきったことを減らしたことである。柔軟性を高めるために、ユーザインターフェースAPIの表面積を増したものもある。柔軟性をもたらしたものもある。シングルトン(Singleton)シングルトン(singleton)は、1つ余分な保証をする、新しいタイプのセッションbeanである:beanは、動いているJVM1つにつき、1つしか生成されない。このフィーチャで、よりよいサービスが可能になるユースケースがたくさんある:例えば、キャシュ。アプリケーションサーバがまだ提供していないリソースへの共通のビューを保証する能力が、別の例である。永続的に保存される必要のない、しかし再生成するとなると高価な、貴重なデータ用の単純な保管場所が、別のオプションである。(わざとらしい)例を見てみよう。2.0を使って)作成されていると、仮定する。}}全てのクライアントは、単に、ChatRoomインスタンスへの参照を取得して、同じミュータブルな状態を更新できる。クライアントは、取得の際に、同じインスタンスへのアクセスを保証されている。これは、セッションbeanなので、他のいかなるセッションbeanと同じ保障を提供している:このbeanは、完全にスレッドセーフである。world!");chatRoom.disconnect();シングルトンは、コンカレントなアクセスができるように設計されている。今回の仕様で、開発者は、並列処理に関して精巧な制御ができるようになった。この動きは、デフォルトである。明示的に、コンテナ管理のコンカレンシィ(並行処理)を使うことが宣言できる、そのためには、@javax.ejb.ConcurrencyManagement(CONTAINER)とアノテートする。beanをもっとコントロールしたければ、@javax.ejb.ConcurrencyManagement(BEAN)を使う。コンテナ管理のコンカレンシィは、メソッドレベルあるいはクラスレベルで、アクセスのタイプを明記することが必要である。デフォルトで、以下のように規定してもよい、すべてのビジネスメソッドは、クラスレベルで@javax.ejb.Lock(WRITE)を使って、シリアライズされ、それから、状態の変更による2次的な問題がないように、メソッドは、事実上、"read-only"になるように場合には、最適化する。read-onlyのメソッドは、@Lock(READ)でアノテートする。アノテートされたメソッドへの全てのアクセスは、シリアライズされ、終了するまで、あるいは、タイムアウトが起きるまで、クライアントからのアクセスは、ブロックされる。値をとる@AccessTimeoutアノテーションを使って、タイムアウトの長さを制御することができる。このコンカレンシィ制御を利用するために、ChatRoomの最初の実装コードを変更することができる。}当然、ChatRoomのようなものは、ユーザとポストの数が、アプリケーションサーバのメモリを使い尽くせば、最終的にメモリ枯渇で死んでしまう。EntityManagerを使って保持し、それから破壊する)定期的なガーベッジコレクタを想像しよう。2.1以来、EJBは、タイマのメカニズムを持っている。ミリ秒間隔でいつも動くものなので、設定がかなり面倒である。3.0では、その状況が少し改善されたが、タイマが、本質的に手続き的に宣言され、間隔ベースなことは、変わらないままだった。週の頭に何かをセットアップしたいと思うなら、大変なことだった。Fluxのような様々な他のスケジューラをやめて、宣言型で、柔軟性のあるタイマサービスを提供することによって、事態を改善した。3.1は、よいソリューションである。我々のChatRoomに戻ることにする。古いデータを調べて、ガーベッジコレクトするbeanをスケジュールしたいと思う。}}書いたメソッドは、データを検索し、高速なチェックを行う-必要なら-古い/関係のないチャットログを消去するので、管理可能な状況に保つことができる。ここでは、メソッドが1時間毎に必ず走るような、宣言型のモデルを使った。3.0のTimerServiceを使うこともできる。3.0では、beanは、最低1つのinterface(ローカルあるいは、リモートのビジネスinterface)をサポートする必要があった。Interfaceが、beanのクライアントにとって、beanのビューとして使うことができるからである。interface経由の間接参照は、非常に強力な技法であるが、時々事を複雑にするだけのことがある。3.1では、interfaceを持たないbeanを書くことができる。その場合、クライアントへのビューは、クラスが見せる公開メソッドである。}}このbeanのクライアントは、普通に、単に注入によりbeanを取得し、起動する。;...非同期サービススケーリング問題を扱う最も単純な方法は、(能力が伴なうまで)この問題を扱わないことである!このアプローチは、最も有名には、SEDA(段階的イベントドリブンアーキテクチャ)パターンの特徴があることであり、ボトルネックは、キューイングすることで避ける。このため、依頼した仕事は、キューに入れられ、クライントは、先に進むことができる。コンポーネントのダウンストリームに時間がかかり、システムに負荷がかかっている場合、このパターンが、遅いコンポーネントによって、システムがダウンしないことを保証する。スケーリングに対するもう一つのアプローチは、一方向のメッセージ交換で、クライアントからの呼び出しをブロックしないことである。別のアプローチは、非同期で単純に動き、結果が戻るまで、クライント側での実行を進める。3.1における、サービスの新しい非同期サポートにより実現した。beanクラスや個々のメソッドを@javax.ejb.Asynchronousでアノテートすると、呼び出しの結果が戻るまで、クライアントは、ブロックされるべきでないことをコンテナに言うことになる。これにより、クライアントは、直ちに、続行し、そして-理論的には-コンテナが、作業をバッファして、都合のいい時に実行できる、ようにできる。beanクラスかビジネスinterfaceが@Asynchronousでアノテートされていれば、beanのすべてのメソッドは、保留される。ないと、@Asynchronousでアノテートされたメソッドだけが保留される。java.util.concurrent.Future<V>.のインスタンスを返す。Future<V>のインスタンスを調べることができるが、呼出しの結果は、直ちに、クライアント側のスレッドで存続し、ブロックしない。このように、EJBが1時間2時間かかろうが、問題ではなく、クライアントは、影響されない。概念的には、これは、JMSキューにリクエストを送る、という単独のジョブでサービスを呼ぶのと同じである。Future<V>のインスタンスは、ジョブのキャンセルや結果を待つのに使わうこともできる。クライアントにおける処理中のコンテキストは、非同期メソッドには、伝搬しない。REQUIREDは、実際上、非同期メソッドに対しては、REQUIRES_NEWである。例をみよう:いくつものwebサービスと通信し、その結果を集めるサービスを作ろうと思う。結果は、欲しいが、クライアントのリクエスト(webページ、たぶん?)を止めたままにできない。3.1は、また.WARファイル内部へのデプロイをサポートする、という劇的に簡単なデプロイのパラダイムを提供する、最初のバージョンの仕様となった。beanコンポーネントになる。beanは、またWEB-INF/ejb-jar.xmlファイルを使っても、定義できる。.WARにパッケージされたbeanは、1つのネームスペースを共有し、そして.WARの環境の一部になる。WEB-INF/libディレクトリ内の.jarにパッケージ化するのは、こうして、意味的には、WEB-INF/classesディレクトリ内にクラスを置くのと等価である。たくさんのアプリケーションにとって、EJBテクノロジは、必要以上のものである。Liteは、session-beanコンポーネントの使用を中心とした、もっと効率化したサブセットを提供する。これは、EJBコンポーネントを組み込み可能なように使え、ユニットテストも単純にする方法を提供する。セッションbeanをサポートする。Beanは、ローカルなinterfaceあるいは、interface無しのビューを持つことができる。これらは、インターセプターと協働でき、トランザクションやセキュリティのようにコンテナのサービスを使うことができる。3.1は、開発者用のツールキットの中の強力なツールであり、明らかに、たいていのアプリケーションの80%のユースケースに合うものに、進化してきた。将来は、この仕様にとって良い方向である。SEの削除メカニズムを使って、あるフィーチャを将来の削除の標的にしている、最初のリリースでもある。将来、取り除かれる可能性のある仕様としては、以下のものがある。1.4で加えられた)。3.0)で始まった開発からのすばらしい次のステップを示した。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見るあなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。あなたの意見をお聞かせください。毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。サンプルを見る様々なイノベーターとアーリーアダプターがお送りするテクノロジーの概要を見る。自分がまだ知らないことに気づいていないと知るあなたが興味のあるトピックスをいつでも最新な情報に。あなたのメールアドレスはこちら国を選んでください。プライバシーポリシーに従って私の個人情報を扱うことに同意します。Inc.プライバシーBT。