キャッシュの使用
JHipsterでは、キャッシュは2つのレベルで使用できます。
- Spring Cache抽象化を使用します。これは、アプリケーションが生成されるときの個別の質問にあり、Spring Bootの
@EnableCaching
アノテーションを使用します。これは、特定のビジネスニーズに合わせて調整する必要があり、Hibernateの第2レベルのキャッシュよりも高いレベルで動作します。 - Hibernateの第2レベルのキャッシュを使用します。アプリケーションのパフォーマンスを大幅に向上させることができるキャッシュソリューションであり、JHipsterで一般的に行われている振る舞いです。このオプションは、SQLデータベースで、Spring Cacheの使用を選択した場合にのみ使用できます。
Spring CacheとHibernateの第2レベルのキャッシュは同じキャッシングソリューションを使用しますが、同じレベルでは動作しません。キャッシュの無効化の問題がさらに複雑になるため、同じオブジェクトに対して両方を使用することはお勧めしません。代わりに、次のように使用することをお勧めします。
- Spring Cacheは、DTOで一般的に使用されるような、上位レベルまたは集約オブジェクト用
- Hibernate第2レベルキャッシュは、SQLリクエストの数を減らすため、データベースにマップされたエンティティ用
JHipsterは、次のキャッシュ実装をサポートしています。
- Ehcache,
- Caffeine,
- Hazelcast,
- Infinispan,
- Memcached,
- Redis.
詳細は以下のとおりです。
共通の構成
キャッシュはCacheConfiguration
クラスで構成され、JHipster共通アプリケーションプロパティを使用しての調整もできます。
Ehcacheを使ったキャッシング
EhcacheはJHipsterのモノリスを備えたデフォルトのキャッシュです。Ehcacheは非常に高速に起動するため、「通常の」モノリスに最適なソリューションです。
JHipsterではEhcacheは分散キャッシュとして動作できません。新しいノードをプログラムで追加できるAPIがないためです。
Ehcacheは、JHipsterの共通アプリケーションプロパティの2つのプロパティ(time-to-live-seconds
およびmax-entries
)を定義するCacheConfiguration
Spring configuration beanで構成されます。アプリケーション固有のApplicationProperties
Spring configuration beanには、さらにプロパティを追加できます。
デフォルトでは、time-to-live-seconds
のデフォルト値は、dev
モードとprod
モードの両方で3600秒(1時間)です。また、max-entries
のデフォルト値は、dev
モードで100エントリ、prod
モードで1,000エントリです。
これらの値は、特定のビジネス・ニーズに応じてチュー ニングする必要があります。JHipster監視画面は、アプリケーションでのキャッシュの使用状況をよりよく理解するのに役立ちます。これらの値を調整するには、Ehcacheのドキュメントも参照してください。
Caffeineによるキャッシング
Caffeineは、ハイパフォーマンス、準最適キャッシュライブラリであり、JHipsterのモノリスで使用するためのEhcacheの代替です。
Ehcacheと同様に、Caffeineは分散キャッシュとしては動作しません。
Jhipsterは、Ehcacheと同じCaffeineのデフォルト設定を生成します。ただし、追加のオプションを追加して、ニーズに合わせての調整もできます。Caffeineキャッシュ設定はCacheConfiguration
Spring configuration beanで行われますが、アプリケーション固有のプロパティはApplicationProperties
Beanに追加できます。次の3つのファイルは、独自のCaffeine設定を定義するのに便利です。
-
CacheConfiguration
Bean内のCaffeineConfiguration
クラスを使用し、Caffeineプロパティを追加します。 -
TypesafeConfigurator
はreference.conf
とともに、サポートされているすべてのCaffeineプロパティへの参照として使用できます。
Hazelcastを使ったキャッシング
Hazelcastは(Ehcacheのように)ローカルキャッシュとして動作できますが、分散キャッシュとしても動作できます。その結果、次のようになります。
- マイクロサービスがスケールすることを考慮し、マイクロサービスのデフォルトオプションとなります。
- ゲートウェイがスケールすることを考慮し、ゲートウェイのデフォルトオプションとなります。Hazelcastはゲートウェイのレート制限情報を配信するために使用されます。
- モノリス内で使用される場合、Hazelcastは、スケールするためにJHipster Registryを手動で設定する必要があります。
アプリケーションをスケールさせるために、Hazelcastは設定されたサービスディスカバリを使用して新しいノードを見つけ、水平にスケールします。マイクロサービスとゲートウェイでは、これはJHipster RegistryとConsulの両方で動作し、モノリスでは手動で設定したJHipster Registryでのみ動作します。
新しいノードが追加されると、それ自体がサービスディスカバリに登録され(たとえば、JHipsterレジストリで使用可能になります)、同じタイプの他のノードを検索します。同じタイプの1つまたは複数のノードが検出されると、それらを使用してクラスタ化されたキャッシュが作成されます。各ノードのログには、次の例のようなメッセージが表示されます。
[172.18.0.10]:5701 [dev] [3.7]
Members [4] {
Member [172.18.0.10]:5701 - 3cbddfcd-0229-4cd5-be55-4611927a9071 this
Member [172.18.0.5]:5701 - 204d457d-f6fe-43f2-8e8d-497e96b3f08e
Member [172.18.0.14]:5701 - 7804d535-86fb-46be-b2a5-d7801dc6a4df
Member [172.18.0.11]:5701 - 6114ae28-56cd-4840-a575-4d73a6003744
}
Hazelcastとうまく連携するために、JHipsterにはHazelcast Management Centerのサポートが含まれています。
- これは独自の製品であるため、無料で監視できるのは2つのノードのみであることに注意してください。しかし、アプリケーションのテストとしては十分です。
- これは、JHipster共通アプリケーションプロパティを使用し、キー
jhipster.cache.hazelcast.management-center
を使用して、application-dev.yml
およびapplication-prod.yml
ファイルに設定されます。デフォルトではオフになっています。 - JHipsterは、Hazelcast Management Centerを実行するためのDocker Compose設定を生成します。Docker Composeドキュメントを読み、
docker-compose -f src/main/docker/hazelcast-management-center.yml up -d
を使用してアプリケーションを実行してください。
Infinispanによるキャッシング
Infinispanは、インメモリ・ローカル・キャッシュおよびクラスタ・キャッシュとして機能する、高性能なキャッシュ・ソリューションです。複数のキャッシュ・モードをサポートしています。
JHipsterでは以下の用途でInfinispanを使用できます。
- Spring Cache抽象化の実装として
- Hibernateの第2レベルのキャッシュとして
事前設定されたデフォルト設定は次のとおりです。
- エンティティは無効化キャッシュモードで動作します。
- アプリケーション固有のキャッシュについては、3つのキャッシュ構成が事前に定義されています。
- local-app-data:ノードにローカルなデータをキャッシュする場合
- dist-app-data:ノード間(分散レプリカ数によって決定されるコピーの数分)でデータを分散キャッシュする場合
- repl-app-data:ノード間でデータをレプリケートする場合
JHipsterの共通アプリケーションプロパティを使用すると、キャッシュ内の個々の操作モードのそれぞれに対する削除、存続可能時間、最大エントリ、および分散モードのレプリカ数を調整できます。アプリケーション固有のキャッシュの場合はjhipster.cache.infinispan
のプロパティを、Hibernateの第2レベルのキャッシュの場合はspring.jpa.properties
のプロパティを調整してください。
JHipsterレジストリが有効になっている場合、ノードリストはレジストリから設定されます。JHipsterレジストリが有効になっていない場合、ノードのディスカバリはInfinispan Jar内にパッケージ化されたconfig-file
で定義されたデフォルトのトランスポート設定に基づいて行われます。Infinispanは、Kubernets/OpenShift、AWS、Azure、Googleなど、ほとんどのプラットフォームでディスカバリをネイティブにサポートしています。
Infinispan 9.0.0.Final GA以降のリリースでは、ネイティブのKUBE_PINGディスカバリを使用して、KubernetesおよびOpenShiftでInfinispan組み込みキャッシングアプリケーションを実行するためのサポートが追加されましたが、Hibernateの依存関係はまだ9.xリリースに更新されていないため、ネイティブディスカバリはKubernetesおよびOpenShiftではサポートされていません。ただし、インスタンスディスカバリにJHipsterレジストリを使用することで、アプリケーションを実行できます。