Apache Geode/GemFire入门(1)-基本概念和模块

在这个入门中我们将走一遍GemFire应用程序代码,学习GemFire Enterprise基本的特性。这个应用详解了GemFire怎么在VMs宕机情况下并不中断服务。当应用运行时动态地添加更多的存储,并且提供更小的延迟来访问你的数据。

入门概览

主要的概念

本入门涵盖了以下概念:


GemFire Distributed

System


运行在GemFire上的VMs组成了分布式系统。每一个MV都作为一个GemFire对等体存在。启动GemFire对等体,在每个VM对等体上你创建了一个缓存。每一个缓存管理到其他VM对等体的连接。通过UDP多播或者TCP位置服务,互相发现。


Regions


Region是一个分布式系统之上的抽象概念。一个Region允许你在系统的多个VM中存储数据,不用考虑数据存在那个对等体上。Region给你一个map接口能透明地从合适的VM上获取数据。这个Region类扩展了java.util.Map接口,

但是他也支持查询和事务。


Replicated regions


一个Replicated region保存着所有分区的数据拷贝


Partitioned regions


Partitioned regions只保存一部分分区的数据拷贝


Client caching


GemFire分布式系统是一个网格结构,所有的Peer直接互相连接。GemFire也支持客户端,客户端有他们自己的本地数据缓存,他们能够更新他们的本地缓存,通过注册服务器来更新改变的数据。


Shared-nothing persistence


GemFire支持’非共享’持久化,每一个peer持久化数据到本地磁盘,GemFire持久化也允许你在磁盘上维护一份配置的数据拷贝。

分布式系统和Region

 

1.     开始一个locator

通过UDP多播或者TCP位置服务GemFire能够动态发现成员,其中运行TCP位置服务的被称为Locator,Locator作为单独的进程运行,每一个新的VM连接到已有的Peer上。在这个例子中我们将要使用Locator。

 

2.     创建一份缓存

 

你将要在GemFire对等体上存储一些数据。第一步启动GemFire对等体创建一份缓存。缓存是GemFire的中心模块。他管理着到其他GemFire对等体的连接。

— ”locators” 属性告诉缓存哪一个locator用来发现其他的GemFire VM。

—“mcast-port” 属性告诉GemFire是否用多播发现来找到对等体。

—“log-level” 属性控制GemFire内部日志级别。设定error是为了限制消息的数量,这个将在”console”中显示。在调用创建结束后,对等体已经发现了其他的对等体同时连接他们。

 

3.     启动对等体

 

运行IDE中运行两次peer.java ,对等体启动,互相连接。

 

 

4.     创建People region(a replicated region)

 

GemFire Region是一个键值集合。他扩展了java.util.concurrent.ConcurrentMap接口。Region最简单的类型就是replicated region。每一个拥有replicated region的peer都存储一份整个region的拷贝。对replicated region所做的任何改变都同步发送到所有的peer中。

a.     查看一下GemFireDAO中initPeer方法,用RegionFactory创建region,在这个例子中,people region用RegionShortcut.REPLICATE构造,告诉工厂使用replicated region的配置,这个方法添加了缓存监听器到region。当region中的数据改变,你能够利用缓存监听器接受改变通告。这个应用包含了LoggingCacheListener类,他能把改变打印到控制台,能够让你看到条目怎么被分布的。

 

b.     看一下addPerson方法。通过调用region.put()方法添加条目到region。

    public void addPerson(String name, Profile profile) {

     people.put(name, profile);

    }

通过分布people对象到所有的对等体当中。在完成调用之后,每一份对等体都有一份person拷贝。

c.      添加people。在控制台中键入

>person Isabella
>person Ethan

 

你将在窗口中看到

In region people created key Isabella value Profile [friends=[]]
In region people created key Ethan value Profile [friends=[]]

 

5.创建Posts region(partitioned region)

 

你创建了大量的posts。如果你不想在每一台服务器上都拥有一份拷贝。

你能存储一份在partitioned region当中。一个partitioned region让你在你的分布式系统当中控制拷贝数量。数据在所有的对等体中分区。GemFire自动维护了每个分区的拷贝数量。    

看一下GemFireDAO的initPeer方法,你能使用PARTITION_XXX快捷键创建分区。创建posts区,这个方法使用PARTITIONED_REDUNDANT快捷键告诉GemFire创建一个分区来维护主备

拷贝。

 

5.     启动对等体应用

 

再启动一个对等体

 

6.     添加一个帖子

你将要看到只有一个VM上的监听器被调用。这是因为分区选择其中一份拷贝到主拷贝中。缺省情况下,GemFire只调用了维护主拷贝的对等体的监听器。

 

7.     用posts命令列出可用的posts命令

GemFire会从每一个各自的对等体中获取他们,

如果你杀了一个VMs,你仍然能够列出所有的条目。这就是VM的备份能力。

8.     kill掉peers

 

Client/server 缓存

 

你有一个全工作系统,但是现在UI代码正运行在相同的VM上,这些用例工作地很好,

但是对于其他人不需要,比如,如果你在UI层有一个web server,你可能想到增加或者减少web server的数量而不改变data server。或者你只需要100G的服务器,但是可能有数万个客户端会访问它。对于这个例子,有一个专门的GemFire服务器来服务GemFire客户端会更有意义。

GemFire服务器是GemFire对等体,但是他们也能监听客户端连接的端口,而GemFire客户端连接一个限制数量的服务器。

 

对于传统的peers,GemFire服务器仍然需要定义region。你可能已经有了peer代码,又创建了一个CacheServer,但是这个例子使用了cacheserver脚本。Cacheserver脚本从cache xml文件中读取了cache配置。Cache.xml 以声明的方式在缓存中定义region。

 

1.     用xml配置GemFire

所有在java代码能做的也都能在xml中定义,

 


 
<cache>
  <region name="people" refid="REPLICATE">
    <region-attributes>
      <cache-listener>
        <class-name>com.gemstone.gemfire.tutorial.storage.LoggingCacheListener</class-name>
      </cache-listener>
    </region-attributes>
  </region>
                       <region name="posts" refid="PARTITION_REDUNDANT">
    <region-attributes>
      <cache-listener>
        <class-name>com.gemstone.gemfire.tutorial.storage.LoggingCacheListener</class-name>
      </cache-listener>
    </region-attributes>
  </region>
</cache>

1.     启动缓存服务器

 

Cacheserver 脚本启动了jaguar对等体(监听客户端连接),又启动了两个缓存服务器,

 

3.     启动一个客户端

 

启动一个客户端和启动GemFire peer是一样的。在Jaguar客户端上,你创造一个ClientCache

连接到Locator来发现服务器,看一下GemFire DAO.initClient方法。这个方法所做的就是创建ClientCache。

 

一旦你创建一个ClientCache,他便维护了一个类似于JDBC的连接池。然而你不需要用GemFire从池中来做查询连接和返回他们,这个是自动发生的。池定位属性告诉你客户端怎么发现服务器。客户端使用相同的Locator发现缓存服务器。

 

设定订阅功能开启,订阅冗余属性运行客户端订阅更新服务端条目。如果你订阅通告(任何人添加的),这个更新被异步发送到客户端。因为更新被异步发送,他们需要在服务端队列化。提交冗余设定控制多少队列拷贝在服务端维护。

 

设定冗余级别为1意味着你能宕掉1个服务器而没有任何的消息丢失。

 

4.     创建一个proxy region,在客户端发Post消息

 

在客户端创建一个region类似于在peer中创建region。有两个类型的client region,proxy region和caching region。Proxy region并不在客户端存数据。CACHING_PROXY region允许客户端存储键值。这个例子使用了大量的posts,这样你不用在客户端缓存任何的posts。你能创建一个带有PROXY 的proxy region。看一看GemFireDAO.initPeer方法。这个方法创建了posts region

 

  posts = cache.<PostID, String>createClientRegionFactory(PROXY)
      .create("posts");

 

 

5.在客户端创建一个cache proxy region,People

你并没有很多people,所以在这个例子当中客户端缓存所有的people。第一你创建了一个有本地存储的region,ClientRegionShortcut.CACHING_PROXY。在initClient方法中,people region被创建。

6.调用registerInterest方法订阅从服务器上来的通告。

通过创建一个CACHING_PROXY,你能告诉GemFire缓存任何的people你从客户端创建出来的。然而,你也能选择任何的更新到people region的从其他的peer 或者别的客户端通过调用registerInterest方法。在这个案例中,你在所有people中想要register interest,这样你缓存整个people region在客户端。正则表达式匹配了所有的键值在people region中的。看一下initClient方法调用registerInterestRegex,

    people.registerInterestRegex(".*");

 

当registerInterestRegex方法被调用时,客户端下载已经存在的people。当一个new person 被添加到server上时,他被推到客户端。

 

7.从client中迭代键值

public Set<String> getPeople() {
    return people.keySet();
  }
  
  public Set<PostID> getPosts() {
    if(isClient) {
      return posts.keySetOnServer();
    } else {
      return posts.keySet();
    }
  }

 

8.在IDE中运行客户端应用程序

添加和停止Cache Servers

你能够动态的添加peers到服务器中当系统正在运行时。New peers动态地被其他peer和客户端发现。New peer自动接受一份拷贝由replicated region创建的。然而, partitioned region并不自动地分布数据到new peer如果你不显式地命令GemFire负载均衡partitioned region。

在cacheserver脚本中, 你能通过一个命令行来指定一个new peer将要触发一个所有partitioned region的负载均衡。

 

 

停止cache servers

1.     停止其中之一的cacheservers

数据仍然可用, 客户端自动忽略死掉的服务器。

 

2.在移动到下一步之前, 停止其他的缓存服务器。你能保持客户端处于运行状态。

时间: 2025-01-02 01:42:28

Apache Geode/GemFire入门(1)-基本概念和模块的相关文章

Apache Geode/GemFire入门(2)-基本概念和模块

使用持久化 GemFire支持无共享存储持久化.每一个VM写入他们的region data到自己的磁盘文件中. People region来说,每一个region将要写入整个的region到自己的磁盘文件中.而post region每一份拷贝都将要存在两个不同的peer中.   当你重启持久化成员,你需要调用cacheserver start并行地在每个服务器. 原因是GemFire保证了你完整的数据被在VM重启的时候被恢复.每一个VM只能持久化他自己的post部分.每一个GemFire VM等

Apache Geode/GemFire 数据分区和路由机制浅析

本篇文章主要讲解Apache Geode/GemFire 是如何进行数据分区的. GemFire和大多数分布式系统一样都采用 Hash 的方式对数据进行分区,将 Entry 数据分布到 PartitionedRegion 当中,大家都知道 Entry 数据主要保存在 ConcurrentHashMap 中,ConcurrentHashMap存放在 Bucket 中,在 PR 服务器启动后会为 PartitionedRegion创建相应的Bucket 来保存这个ConcurrentHashMap.

Apache Geode/GemFire功能特性简介(1)

  区域   复制区域 在区域中所有的数据被复制到每一个缓存服务器节点.复制区域使用了'multiple masters'复制组织结构.当数据区域被复制(没有分区),对于每一个数据条目没有指定的管理者,来自任意成员的初始更新并发地传播到每一个节点.一旦成功处理了这个事件,ACK作为一个回应发送回初始成员.初始成员接到返回的ACK之后,做出相应地数据更新调用处理.   每一个缓存服务器节点都维护了一份数据的拷贝.所以复制区域模式适合于系统中有大量读操作,少量写操作的情况下.   分区区域 在区域中

Apache Geode 毕业为 Apache 顶级项目

2016年11月21日,Apache软件基金会(the Apache Software Foundation,ASF)宣布 Apache Geode已从Apache孵化器毕业成为顶级项目(Top-Level Project),表明该项目的社区和产品已根据ASF的精英流程和原则得到良好管理. 2016年11月21日,Apache软件基金会(the Apache Software Foundation,ASF)宣布 Apache Geode已从Apache孵化器毕业成为顶级项目(Top-Level

《Linux系统编程(第2版)》——第1章 入门和基本概念 1.1 系统编程

第1章 入门和基本概念 摆在你面前的是一本关于系统编程的书,你将在本书中学习到编写系统软件的相关技术和技巧.系统软件运行在系统的底层,与内核和系统核心库进行交互.常见的系统软件包括Shell.文本编辑器.编译器.调试器.核心工具(GNU Core Utilities)以及系统守护进程.此外,网络服务.Web服务和数据库也属于系统软件的范畴.这些程序都是基于内核和C库实现的,可以称为"纯"系统软件.相对地,其他软件(如高级GUI应用),很少和底层直接交互.有些程序员一直在编写系统软件,而

Linux下Apache服务器使用入门----.htaccess

这个文件的作用就是,把它放在某个目录下面,它所修改的配置方案会应用到这个目录,及其子目录 开启方式: 在/etc/httpd/conf/httpd.conf文件中   <Directory /> Options FollowSymLinks AllowOverride None </Directory> 把AllowOverride None修改为其他参数.参数部分一共有一下几种:     ALL AuthConfig FileInfo Indexes Option Limit .

linux下Apache服务器使用入门----httpd.conf

如果安装centos,系统本身已经安装了apache,名字为httpd这个服务就是对应的apache service httpd start service httpd stop service httpd restart 下面介绍一下apache的几个重要的配置文件 1 httpd.conf 这个文件在/etc/httpd/conf目录下,文件大致分为三个部分: 主服务器部分 这个部分主要是使用一些参数定义服务器的功能等等. ### Section 1: Global Environment

Apache Commons IO入门教程(转)

  Apache Commons IO是Apache基金会创建并维护的Java函数库.它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的项目中,你却不得不重复的编写.这些类由经验丰富的开发者维护,对各种问题的边界条件考虑周到,并持续修复相关bug. 在下面的例子中,我们会向你演示一些不同功能的方法,这些功能都是在org.apache.commons.io包下.Apache Commons IO 是一个巨大工程,我们不会深入去剖析

Apache Geode Region 压缩介绍

本章描述了 region 压缩机制, 它的好处和利用率. 在 Geode 中有一种减少内存消耗的方式是在 Region 中启动内存压缩机制.Geode 允许你压缩内存的 region 值,使用插件化的压缩器.Geode 包含了 Snappy 压缩器作为内置的压缩编码器:然而,你能够为每个已经压缩的Region实现和指定一个不同的压缩器. 压缩什么值 在一个 Region 中当你启动压缩时,所有保存在 region 中的值都被压缩.Keys 和索引不能被压缩.新的值被压缩,当写入到缓存中时,当从缓