2011-12-08 9 views
1

私たちは、今や(10年のような)長い間、積極的に開発/保守を行ってきたシステム(Java Webアプリケーション)を持っています。このシナリオで動作するデザインパターンはありますか?

私たちがやっていることは、WebアプリケーションにRESTful APIを実装することです。 Jerseyを使用したこのWebアプリケーションは、メインアプリケーションと一緒に実行するか、クラウドにデプロイできるようにするための別個のプロジェクトになります。そのため、当社のアプリケーションの性質や年齢の

は、我々は負荷を抑える手助けするために、データベース(postgresの)の上(やや)包括的なキャッシング層を実装しなければなりませんでした。とにかく、RESTful APIでは、データベースの負荷を維持するために、データベースの代わりにGETリクエストが最初にキャッシュに送られるという考えがあります。

キャッシュには、登録されたAPIユーザーのほとんどが必要となることを確実にするための方法で入力されます。

キャッシュ・ミスがあった場合、必要なデータは、データベース(また、プロセス内のキャッシュに入力されている)から取得する必要があります。

明らかに、これは私のコード内のRESTfulなエンドポイントメソッドから透過的でなければなりません。私たちは、DBとキャッシュとの通信を処理するための「ブローカ」を作成するという考えを思いつきました。 RESTレイヤーはID(検索する場合)またはポピュレートされたJavaオブジェクト(挿入/更新する場合)を渡し、ブローカは検索/更新/無効化などの処理を行います。

問題もあります拡張性のまず、APIは他のサーバと一緒に使用されるため、データベースへのアクセスは問題にはなりませんが、クラウドにデプロイする場合は、システムと通信する別のBroker実装が必要になります( (潜在的には内部APIを使用して)別の方法でデータベース(つまりデータベース)にアクセスします。

私はすでに、私はこれを実装する方法について大まかなアイデアを持っていますが、それはおそらく、適切なパターンが存在する可能性があるため問題である私を襲いました。自分の解決策を考え出すのではなく、確立されたパターンに従うことができれば、それはおそらくより良い選択になるでしょう。何か案は?

+0

通常のサービス/ DAO /などのようなサウンドです。パターンを私には、しかし、私は本当にあなたが探している答えの種類はよく分かりません。通常、キャッシングはDAO層とDB層との間で処理され、サービスはキャッシングに関する懸念を知らない。 –

答えて

0

パターンはありません。インタフェースの背後にある初期DBサービスを隠し、意図した動作をテストしてから、キャッシュ層を使用する実装に切り替えます。あなたがそれをするのを助けるのに、依存症注射が一番いいと思いますか? http://en.wikipedia.org/wiki/Decorator_pattern

0

は、あなたのニーズに合わせますDecoratorパターンのような音。

あなたは、データアクセスのためのようなものDAOインターフェイスを作成することができます

Value get(long id); 

をそして、まず、直接DBの実装を作成し、その後、DAOインスタンスの基礎となる呼び出してキャッシュの実装を作成し、この場合にはそれがあるべきDBの実装。

キャッシュの実装には、独自の管理キャッシュから、それが失敗した場合DAOをアンダーレイから値を取得しようとします。

古いアプリケーションまたはRESTの両方は、実装の詳細を知らずにDAOインターフェイスのみを表示し、将来は実装を自由に変更できます。

1

Ehcacheのは、それがSelfPopulatingCacheを呼び出すだけで、このようなキャッシュの実装があります。

リクエストはキャッシュではなく、データベースに対して行われます。次に、キャッシュミスがある場合、Ehcacheはあなたのためにデータベース(またはあなたが持っている外部データソース)を呼び出します。

あなたは1つだけ方法があるCacheEntryFactory実装する必要があります。その名の通り、Ehcacheのはかなり標準工場のパターンで、この概念を実装しそう

Object createEntry(Object key) throws Exception; 

を...

+0

ehcacheに言及するため+1 – Wivani

0

最高のデザインHTTPリクエストを透過的にキャッシュするためのパターンはanHTTPcacheです。

関連する問題