共计 8519 个字符,预计需要花费 22 分钟才能阅读完成。
原题目:Spring 认证中国教育管理中心 -Apache Geode 的 Spring 数据教程十二(Spring 中国教育管理中心)
6.12.1. 配置特定于类型的区域
Apache Geode 反对多种不同类型的 Regions。每种类型对应于 Region 的 DataPolicy,它确切地决定了 Region 中的数据将如何治理(即分布式、复制等)。
其余配置设置(例如区域的 scope)也会影响数据的治理形式。无关 更多详细信息,请参阅 Apache Geode 用户指南中的“存储和散发选项”。
当您应用通用 @Region 映射正文对应用程序域对象类型进行正文时,Spring Data for Apache Geode 决定要创立哪种类型的区域。SDG 的默认策略在确定要创立的 Region 类型时会思考缓存类型。
例如,如果您 ClientCache 应用 @ClientCacheApplication 注解将应用程序申明为 a,则 SDGPROXY Region 默认会创立一个客户端。或者,如果您 Cache 应用 the@PeerCacheApplication 或 @
CacheServerApplicationannotations 将应用程序申明为对等体,SDGPARTITION Region 默认会创立一个服务器。
当然,您始终能够在必要时笼罩默认值。为了笼罩 Spring Data for Apache Geode 利用的默认值,引入了四个新的 Region 映射正文:
@ClientRegion
@LocalRegion
@PartitionRegion
@ReplicateRegion
该 @ClientRegion 映射的正文是针对客户端应用程序。下面列出的所有其余 Region 映射正文只能在具备嵌入式 peer 的服务器应用程序中应用 Cache。
客户端应用程序有时须要创立和应用仅限本地的 Region,兴许是为了聚合来自其余 Region 的数据,以便在本地剖析数据并代表用户执行应用程序执行的某些性能。在这种状况下,除非其余应用程序须要拜访后果,否则不须要将数据散发回服务器。该区域甚至可能是长期的并在应用后被抛弃,这能够通过区域自身的闲暇超时 (TTI) 和生存工夫 (TTL) 过期策略来实现。(无关过期策略的更多信息,请参阅“配置过期”。)
区域级闲暇超时 (TTI) 和生存工夫 (TTL) 过期策略独立于并不同于入门级 TTI 和 TTL 过期策略。
在任何状况下,如果您想创立一个仅限本地的客户端 Region,其中数据不会散发回服务器上具备雷同名称的相应 Region,您能够申明 @ClientRegion 映射正文并将 shortcut 属性设置为
ClientRegionShortcut.LOCAL,如如下:
ClientCache 具备仅限本地的客户端区域的 Spring 应用程序
@ClientRegion(shortcut = ClientRegionShortcut.LOCAL)
class ClientLocalEntityType {..}
所有特定于 Region 类型的正文都提供了额定的属性,这些属性在 Region 类型之间是通用的,并且仅特定于该类型的 Region。比方注解中的 collocatedWith 和 redundantCopies 属性 PartitionRegion,PARTITION 只实用于服务端,Regions。
能够在此处找到无关 Apache Geode Region 类型的更多详细信息。
6.12.2. 配置的集群定义区域
除了 @
EnableEntityDefinedRegions 注解之外,Spring Data for Apache Geode 还提供了反向注解 @EnableClusterDefinedRegions. 与其依据应用程序用例 (UC) 和需要(最常见和合乎逻辑的办法)定义和驱动的实体类来创立您的区域,您还能够依据 ClientCache 应用程序所在集群中已定义的区域来申明您的区域将连贯。
这容许您应用服务器集群作为数据定义的次要起源来集中配置,并确保集群的所有客户端应用程序具备统一的配置。这在疾速扩大同一客户端应用程序的大量实例以解决云治理环境中减少的负载时特地有用。
这个想法是,用户应用 Apache Geode 的 Gfsh CLI shell 工具定义区域,而不是驱动数据字典的客户端应用程序。这有一个额定的益处,当额定的对等点被增加到集群时,它们也将领有并共享雷同的配置,因为它被 Apache Geode 的集群配置服务记住。
Spring 认证中国教育管理中心 -Apache Geode 的 Spring 数据教程十二
例如,用户可能在 Gfsh 中定义了一个 Region,如下所示:
应用 Gfsh 定义区域
gfsh>create region –name=Books –type=PARTITION
Member | Status |
---|---|
ServerOne | Region “/Books” created on “ServerOne” |
ServerTwo | Region “/Books” created on “ServerTwo” |
gfsh>list regions
List of regions
Books
gfsh>describe region –name=/Books
………………………………………………….
Name : Books
Data Policy : partition
Hosting Members : ServerTwo
ServerOne
Non-Default Attributes Shared By Hosting Members
Type | Name | Value |
---|---|---|
Region | size | 0 |
| data-policy | PARTITION
应用 Apache Geode 的 Cluster Configuration Service,增加到服务器集群以解决减少的负载(在后端)的任何其余对等成员也将具备雷同的配置,例如:
向集群增加额定的对等成员
gfsh>list members
Name | Id |
---|---|
Locator | 10.0.0.121(Locator:68173:locator)<ec><v0>:1024 |
ServerOne | 10.0.0.121(ServerOne:68242)<v3>:1025 |
ServerTwo | 10.0.0.121(ServerTwo:68372)<v4>:1026 |
gfsh>start server –name=ServerThree –log-level=config –server-port=41414
Starting a Geode Server in /Users/you/geode/cluster/ServerThree…
…
Server in /Users/you/geode/cluster/ServerThree… on 10.0.0.121[41414] as ServerThree is currently online.
Process ID: 68467
Uptime: 3 seconds
Geode Version: 1.2.1
Java Version: 1.8.0_152
Log File: /Users/you/geode/cluster/ServerThree/ServerThree.log
JVM Arguments: -Dgemfire.default.locators=10.0.0.121[10334]
-Dgemfire.use-cluster-configuration=true
-Dgemfire.start-dev-rest-api=false
-Dgemfire.log-level=config
-XX:OnOutOfMemoryError=kill -KILL %p
-Dgemfire.launcher.registerSignalHandlers=true
-Djava.awt.headless=true
-Dsun.rmi.dgc.server.gcInterval=9223372036854775806
Class-Path: /Users/you/geode/cluster/apache-geode-1.2.1/lib/geode-core-1.2.1.jar
:/Users/you/geode/cluster/apache-geode-1.2.1/lib/geode-dependencies.jar
gfsh>list members
Name | Id |
---|---|
Locator | 10.0.0.121(Locator:68173:locator)<ec><v0>:1024 |
ServerOne | 10.0.0.121(ServerOne:68242)<v3>:1025 |
ServerTwo | 10.0.0.121(ServerTwo:68372)<v4>:1026 |
ServerThree | 10.0.0.121(ServerThree:68467)<v5>:1027 |
gfsh>describe member –name=ServerThree
Name : ServerThree
Id : 10.0.0.121(ServerThree:68467)<v5>:1027
Host : 10.0.0.121
Regions : Books
PID : 68467
Groups :
Used Heap : 37M
Max Heap : 3641M
Working Dir : /Users/you/geode/cluster/ServerThree
Log file : /Users/you/geode/cluster/ServerThree/ServerThree.log
Locators : 10.0.0.121[10334]
Cache Server Information
Server Bind :
Server Port : 41414
Running : true
Client Connections : 0
Spring 认证中国教育管理中心 -Apache Geode 的 Spring 数据教程十二
如您所见,“ServerThree”当初具备“Books”区域。如果任何或所有服务器呈现故障,当它们复原时,它们将具备与“书籍”区域雷同的配置。
在客户端,可能会启动许多 Book Store 客户端应用程序实例以针对 Book Store 在线服务解决书籍。“图书”区域可能是实现图书商店应用程序服务所需的许多不同区域之一。SDG 不用独自创立和配置每个区域,而是容许从集群中不便地定义客户端应用程序区域,如下所示:
从集群定义客户端区域 @
EnableClusterDefinedRegions
@ClientCacheApplication
@EnableClusterDefinedRegions
class BookStoreClientApplication {
public static void main(String[] args) {....}
...
}
@
EnableClusterDefinedRegions 只能在客户端应用。
您能够应用
clientRegionShortcutannotation 属性来管制在客户端上创立的 Region 的类型。默认状况下,PROXY 会创立一个客户端区域。设置 clientRegionShortcut 为 ClientRegionShortcut.CACHING_PROXY 实现“近缓存”。此设置实用于从集群定义的区域创立的所有客户端区域。如果您想管制从集群上定义的区域创立的客户端区域的个别设置(如数据策略),那么您能够实现 RegionConfigurer 基于区域名称的自定义逻辑。
而后,在您的应用程序中应用“书籍”区域就变得很简略了。能够间接注入“Books”区域,如下:
应用“书籍”区域
@org.springframework.stereotype.Repository
class BooksDataAccessObject {
@Resource(name = "Books")
private Region<ISBN, Book> books;
// implement CRUD and queries with the "Books" Region
}
或者,甚至依据应用程序域类型(实体)定义一个 Spring Data Repository 定义 Book,映射到“Books”区域,如下所示:
将“书籍”区域与 SD 存储库一起应用
interface BookRepository extends CrudRepository<Book, ISBN> {
...
}
而后,您能够将您的自定义 BooksDataAccessObject 或注入 BookRepository 到您的应用程序服务组件中,以执行所需的任何业务性能。
6.12.3. 配置驱赶
应用 Apache Geode 治理数据是一项沉闷的工作。通常须要进行调整,并且您必须联合应用性能(例如,eviction 和 expire)来应用 Apache Geode 无效地治理内存中的数据。
鉴于 Apache Geode 是一个内存中数据网格 (IMDG),数据在内存中治理并散发到参加集群的其余节点,以最大限度地缩小提早、最大化吞吐量并确保数据高度可用。因为并非所有应用程序的数据通常都适宜内存(即便跨整个节点集群,更不用说在单个节点上),您能够通过向集群增加新节点来减少容量。这通常被称为线性横向扩大(而不是纵向扩大,这意味着增加更多内存、更多 CPU、更多磁盘或更多网络带宽——基本上是减少每个系统资源以解决负载)。
尽管如此,即便有节点集群,通常也必须只将最重要的数据保留在内存中。内存不足,甚至冒险靠近满负荷,很少(如果有的话)是一件坏事。Stop-the-world GC 或更糟的是 OutOfMemoryErrors,将使您的应用程序进行运行。
因而,为了帮忙治理内存并保留最重要的数据,Apache Geode 反对最近起码应用 (LRU) 驱赶。也就是说,Apache Geode 依据最近应用起码应用算法拜访这些条目标工夫来驱赶 Region 条目。
要启用驱赶,请应用 正文应用程序类 @EnableEviction,如下所示:
启用驱赶的 Spring 应用程序
@SpringBootApplication
@PeerCacheApplication
@EnableEviction(policies = {
@EvictionPolicy(regionNames = "Books", action = EvictionActionType.INVALIDATE),
@EvictionPolicy(regionNames = { "Customers", "Orders"}, maximum = 90,
action = EvictionActionType.OVERFLOW_TO_DISK,
type = EvictonPolicyType.HEAP_PERCENTAGE)
})
class ServerApplication {..}
驱赶策略通常设置在服务器中的区域上。
如前所述,该 policies 属性能够指定一个或多个嵌套 @EvictionPolicy 正文,每个正文都独自满足一个或多个须要利用驱赶策略的区域。
此外,您能够援用 Apache
Geodeorg.apache.geode.cache.util.ObjectSizer 接口的自定义实现,它能够定义为 Spring 容器中的 bean,并通过应用 objectSizerName 属性按名称进行援用。
AnObjectSizer 容许您定义用于评估和确定区域中存储的对象大小的规范。
无关 驱赶配置选项的残缺列表,请参阅 @EnableEviction 正文 Javadoc。
能够在此处找到无关 Apache Geode 驱赶的更多详细信息。
6.12.4. 配置过期
与 eviction 一起,到期还能够通过容许存储在区域中的条目到期来治理内存。Apache Geode 反对生存工夫 (TTL) 和闲暇超时 (TTI) 条目过期策略。
Spring Data for Apache Geode 的基于注解的过期配置基于 在 Spring Data for Apache Geode 1.5 版中增加的 晚期和现有条目过期注解反对。
实质上,Spring Data for Apache Geode 的过期正文反对基于 Apache
Geodeorg.apache.geode.cache.CustomExpiry 接口的自定义实现。此 o.a.g.cache.CustomExpiry 实现查看存储在区域中的用户应用程序域对象是否存在类型级别的到期正文。
Spring Data for Apache Geode 提供以下过期正文:
Expiration
IdleTimeoutExpiration
TimeToLiveExpiration
一个应用程序域对象类型能够应用一个或多个过期正文进行正文,如下所示:
应用程序域对象特定的过期策略
@Region(“Books”)
@TimeToLiveExpiration(timeout = 30000, action = “INVALIDATE”)
class Book {..}
要启用过期,请应用 正文应用程序类 @EnableExpiration,如下所示:
启用过期的 Spring 应用程序
@SpringBootApplication
@PeerCacheApplication
@EnableExpiration
class ServerApplication {..}
除了利用域对象类型级别的过期策略外,您还能够间接应用 @EnableExpiration 注解一一 Region 独自配置过期策略,如下:
具备特定于区域的到期策略的 Spring 应用程序
@SpringBootApplication
@PeerCacheApplication
@EnableExpiration(policies = {
@ExpirationPolicy(regionNames = "Books", types = ExpirationType.TIME_TO_LIVE),
@ExpirationPolicy(regionNames = { "Customers", "Orders"}, timeout = 30000,
action = ExpirationActionType.LOCAL_DESTROY)
})
class ServerApplication {..}
后面的例子为设置过期策略 Books,Customers 和 Orders 地区。
过期策略通常设置在服务器的 Region 上。
无关 到期配置选项的残缺列表,请参阅 @EnableExpiration 正文 Javadoc。
能够在此处找到无关 Apache Geode 到期的更多详细信息。
6.12.5. 配置压缩
除了 eviction 和 expire 之外,您还能够通过压缩配置数据区域以缩小内存耗费。
Apache Geode 容许您应用可插入 Compressors 或不同的压缩编解码器在内存中压缩区域值。Apache Geode 默认应用 Google 的 Snappy 压缩库。
要启用压缩,请应用 正文应用程序类 @EnableCompression,如下所示:
启用区域压缩的 Spring 应用程序
@SpringBootApplication
@ClientCacheApplication
@EnableCompression(compressorBeanName = “MyCompressor”, regionNames = { “Customers”, “Orders”})
class ClientApplication {..}
thecompressorBeanName 和 theregionNames 属性都不是必须的。
该 compressorBeanName 默认为 SnappyCompressor,使阿帕奇的 Geode 的 SnappyCompressor。
该 regionNames 属性是一个区域名称数组,用于指定启用压缩的区域。默认状况下,如果 regionNames 未明确设置属性,则所有区域都会压缩值。
或者,您能够应用文件中的
spring.data.gemfire.cache.compression.compressor-bean-name 和 spring.data.gemfire.cache.compression.region-names 属性 application.properties 来设置和配置这些 EnableCompression 正文属性的值。
要应用 Apache Geode 的区域压缩性能,您必须 org.iq80.snappy:snappy 在应用程序的 pom.xml 文件(对于 Maven)或 build.gradle 文件(对于 Gradle)中蕴含依赖项。仅当您应用 Apache Geode 对区域压缩的默认反对时才须要这样做,默认状况下应用 SnappyCompressor。当然,如果您应用另一个压缩库,则须要在应用程序的类门路中蕴含该压缩库的依赖项。此外,您须要实现 Apache Geode 的 Compressor 接口以适应您抉择的压缩库,将其定义为 Spring 压缩器中的 bean,并将设置 compressorBeanName 为这个自定义 bean 定义。