概览

Apache Geode (incubating) 是一个数据管理平台,提供实时的、一致的、贯穿整个云架构地访问数据关键型应用.

Geode 池化了服务器上的内存, CPU, 网络资源, 和本地磁盘,跨多个进程来管理应用对象和应用行为. 它使用了动态数据复制和分区技术来实现高可用, 高性能, 高可扩展性, 和容错. 另外, 对于一个分布式数据容器, Apache Geode 是一个基于内存的数据管理系统, 提供了可靠的异步事件通知和可靠的消息投递.

Apache Geode 是一个相当成熟, 强健的技术, 最初由GemStone Systems 公司开发(位于美国俄勒冈州的比弗顿市). 商标为 GemFire™, 此项技术初期被广泛应用在金融领域, 用于华尔街交易平台,作为事务性, 低延时的数据引擎. 那么今天Apache Geode 有超过600家大中型企业级用户, 主要是必须满足低延时和24x7 高可靠要求的,高可扩展的关键业务应用系统.

 此工程目前在ASF下正处于孵化阶段, 通过孵化器来提供赞助. 孵化对于所有新加入的工程很重要,直到基础设施, 通信, 决策流程足够稳定,和其他成功的 ASF工程一致. 当孵化器状态完成或代码稳定时, 它提示此工程完全由 ASF 承认.

主要概念和模块

缓存 是一个抽象的概念, 在一个 Geode 分布式系统中用于描述一个节点.

在每个缓存中, 你定义数据 regions. 数据 regions 类似于传统关系型数据库中的'表'的概念, 以分布式的方式来管理数据 , 表现为名/值对儿形式. 在分布式系统的每个缓存成员中, 一个 复制 region 保存数据的拷贝. 一个 分区 region 跨缓存成员来同步数据. 在系统配置后, 客户端应用能够访问regions 中的分布式数据, 而不需要知道系统整体架构的知识. 你能够定义监听器来接收通知, 当数据发生变化时, 同时你也能够定义超时标准来删除在一个 region 中的废弃掉的数据.

Locators 提供了发现和负载均衡服务. 你配置带有 locator 服务列表的客户端, 同时 locators 维护一个成员服务器的动态列表. 默认情况下, Geode 客户端和服务器使用端口 40404 和多播来互相发现.

Geode 包含了如下的特性:

  • 结合冗余, 复制, 和 "shared nothing" 的一致性架构来交付 '自动防故障' 的可靠性和高性能.
  • 水平扩展到数千个缓存成员, 具有多种缓存拓扑结构来满足不同的企业级部署需求. 缓存能够跨多台机器进行分布.
  • 异步和同步缓存更新传播.
  • Delta 传播只分发新版本和旧版本的变化量 (delta) , 而不是整个对象, 从而可以节省大量的网络开销.
  • 通过经过优化的, 低延时的通信层进行可靠的异步事件通知, 高保障的消息投递.
  • 在没有额外硬件的辅助下, 应用可以加速4 到 40,000 倍.
  • 数据感知和实时BI. 当你查询时, 如果数据变化了, 你能够立刻在系统中看见数据的变化.
  • 集成 Spring 框架来加速和简化高可扩展、高并发和事务型企业级应用的开发复杂度.
  • JTA 兼容的事务支持.
  • 集群的配置可以写到文件中和导出到其他集群中.
  • 通过HTTP做 远程集群管理.
  • 基于REST应用开发的REST APIs.
  • 滚动升级是可行的, 但是需要服从新特性的限制问题.

5分钟内上手 Geode 

 从 http://geode.incubator.apache.org/releases/ 下载和安装Geode 二进制安装包, 安装说明如下 http://geode.incubator.apache.org/docs/

在路径中, 包含了所安装的 bin 目录, 启动一个 locator 和 server:

$ gfsh 
gfsh> start locator --name=locator 
gfsh> start server --name=server 

创建一个 region:

gfsh> create region --name=region --type=REPLICATE 

写一个 client 应用:

HelloWorld.java
import java.util.Map;
import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.*;

public class HelloWorld {
  public static void main(String[] args) throws Exception {
    ClientCache cache = new ClientCacheFactory()
      .addPoolLocator("localhost", 10334)
      .create();
    Region<String, String> region = cache
      .<String, String>createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY)
      .create("region");

    region.put("1", "Hello");
    region.put("2", "World");

    for (Map.Entry<String, String>  entry : region.entrySet()) {
      System.out.format("key = %s, value = %s\n", entry.getKey(), entry.getValue());
    }
    cache.close();
  }
}

 

编译和运行 HelloWorld.java. classpath 应该包含 geode-dependencies.jar.

$ javac -cp /some/path/incubator-geode/geode-assembly/build/install/apache-geode/lib/geode-dependencies.jar HelloWorld.java 
$ java -cp .:/some/path/incubator-geode/geode-assembly/build/install/apache-geode/lib/geode-dependencies.jar HelloWorld

应用开发

Geode 应用可以使用如下的客户端技术来写入: