2© 2015 Pivotal Software, Inc. All rights reserved. 2
Apache Geode 와
Spring
이창재 (jaylee@pivotal.io)| Pivotal | Advanced Platform Architects
April, 2016
3© 2015 Pivotal Software, Inc. All rights reserved.
Agenda
Ÿ Apache Geode 소개
Ÿ Spring Data Gemfire
Ÿ Spring Session
Ÿ Demo
4© 2015 Pivotal Software, Inc. All rights reserved.
5© 2015 Pivotal Software, Inc. All rights reserved.
6© 2015 Pivotal Software, Inc. All rights reserved.
Apache Geode 는?
open source distributed, in-
memory database for scale-out
applications
7© 2015 Pivotal Software, Inc. All rights reserved.
Geode 는?
Ÿ 온라인으로 수평 확장이 가능한 고가용성 및 Low latency in-
memory Data Grid
Ÿ Key/Value (Map) Store (+ ααααααααα)
Ÿ Open Source
– 2015년 4월 Pivotal Gemfire 를 Apache 재단에 기증
– Project Geode
– 2016년 4월 현재 1.0.0-M2
8© 2015 Pivotal Software, Inc. All rights reserved.
Geode - In Memory
Ÿ Data 를 메모리에 분산해서 저장
– JVM Heap
– Off Heap 사용 가능(defragmentation)
Ÿ Disk 에도 저장 가능
– Persistent
Ÿ Eviction 과 Expiration 지원
– Least Recently Used 기반 Eviction
– Time To Live 기반 Expiration
9© 2015 Pivotal Software, Inc. All rights reserved.
Geode In-Memory 데이타 분산
VM 1
VM 2 VM 3
10© 2015 Pivotal Software, Inc. All rights reserved.
Server 3Server 2
Bucket 3
*primary*
Bucket 1
secondary
Bucket 3
secondary
Bucket 2
*primary*
Server 1
Bucket 2
secondary
Bucket 1
*primary*
Geode In-Memory 데이타 분산 (Redundant = 1)
11© 2015 Pivotal Software, Inc. All rights reserved.
Server 3Server 2
Bucket 3
*primary*
Bucket 1
secondary
Bucket 3
secondary
Bucket 2
*primary*
Server 1
Bucket 2
secondary
Bucket 1
*primary*
Geode In-Memory 데이타 분산 (Redundant = 1)
Server 가 죽으면?
12© 2015 Pivotal Software, Inc. All rights reserved.
Server 1 Server 3Server 2
Bucket 2
secondary
Bucket 1
*primary*
Bucket 3
*primary*
Bucket 1
*primary*
Bucket 3
secondary
Bucket 2
*primary*
Bucket 2
secondary
Primary
Failover
Restore
Redundancy
Bucket 1
secondary
Geode In-Memory 데이타 분산 (Redundant = 1)
13© 2015 Pivotal Software, Inc. All rights reserved.
Geode – PARTITION REGION
Ÿ REGION
– Database 의 Table
– 메모리에 분산되서 저장되는 java.util.Map
Ÿ REDUNDANT 를 가지는 것과 안가지는 것(PARTITION,
PARTITION_REDUNDANT)
– REDUNDANT 즉 Backup 의 갯수는 지정 가능 – 0~3개
Ÿ Consistent Hashing
– 기본 113 개의 Bucket
Ÿ Map API 뿐만 아니라 SQL Query 도 지원
14© 2015 Pivotal Software, Inc. All rights reserved.
Geode – Key/Value (Map) Store (+ ααααααααα)
Ÿ In Memory Data Grid
Ÿ Data Colocation
– Master / Detail 형태의 data graph
Ÿ Data Serialization (PDX)
Ÿ FuctionService
Ÿ JTA 호환 Transaction
출처 : http://s.hswstatic.com/gif/grid-computing-1.gif
15© 2015 Pivotal Software, Inc. All rights reserved.
Geode – Key/Value (Map) Store (+ ααααααααα)
16© 2015 Pivotal Software, Inc. All rights reserved.
Geode – Key/Value (Map) Store (+ ααααααααα)
17© 2015 Pivotal Software, Inc. All rights reserved.
Gemfire vs Geode
Ÿ Open Source
Ÿ 상용 Support
Ÿ 기능상의 차이
– WAN 상의 클러스터 복제 (M2 에 이미 포함)
– Continuous Query (M2 에 이미 포함)
– C++, C# 지원
18© 2015 Pivotal Software, Inc. All rights reserved.
Demo Repo
https://github.com/eggboy/springcamp2016geode
https://github.com/eggboy/gemfiredemo
19© 2015 Pivotal Software, Inc. All rights reserved.
Spring Data Gemfire
20© 2015 Pivotal Software, Inc. All rights reserved.
Spring Data GemFire (SDG)
Spring Data 의 강력하고 단순한 프로그래밍 모델을 이용하여 Apache
Geode 이용가능.
Spring Ecosystem Integration…
– Spring Cache Abstraction / Transaction Management
– Spring Data Commons + REST
– Spring Integration (Inbound/Outbound Channel Adapters)
– Spring Data Flow (Input Source and Sinks)
21© 2015 Pivotal Software, Inc. All rights reserved.
Apache Geode combined with Spring Data GemFire
can be used as JSR-107 (JCache) caching provider
+ +
22© 2015 Pivotal Software, Inc. All rights reserved.
GRAILS
Full-stack, Web
Data Flow
Stream, Taps, Jobs
BOOT
Bootable, Minimal, Ops-Ready
Big,
Fast,
Flexible
Data Web,
Integration,
Batch
WEB
Controllers, REST,
WebSocket
INTEGRATION
Channels, Adapters,
Filters, Transformers
BATCH
Jobs, Steps,
Readers, Writers
BIG DATA
Ingestion, Export,
Orchestration, Hadoop
DATA
NON-RELATIONALRELATIONAL
CORE
GROOVYFRAMEWORK SECURITY REACTOR
23© 2015 Pivotal Software, Inc. All rights reserved.
Server 설정
Spring XML 기반 설정
24© 2015 Pivotal Software, Inc. All rights reserved.
Client 설정
Spring XML 기반 설정
25© 2015 Pivotal Software, Inc. All rights reserved.
with Spring
Geode 서버 시작
@SpringBootApplication
@ImportResource("/spring-data-gemfire-cache.xml")
@EnableGemfireRepositories
@EnableTransactionManagement
public class SampleDataGemFireApplication {
public static void main(String[] args) {
SpringApplication.run(SampleDataGemFireApplication.class, args);
}
}
혹은…
gfsh>start server –name=Example … --spring-xml-location=“spring-data-gemfire-cache.xml”
26© 2015 Pivotal Software, Inc. All rights reserved.
GemfireRepository
Repository 를 이용한 data 접근
public interface CustomerRepository extends GemfireRepository<Customer, Long> {
}
// Spring context.xml
<gfe-data:repositories base-package="io.pivotal.springcamp.geode.repository" />
27© 2015 Pivotal Software, Inc. All rights reserved.
GemfireTemplate
GemfireTemplate 을 이용한 data 접근
Ÿ 가장 단순한 data 접근 방법
Ÿ Gemfire/Geode API 변경으로 부터 자유로움
Ÿ Exception 이 Spring DAO Exception 으로 변경
Ÿ Transaction
<bean id="customerTemplate" class="org.springframework.data.gemfire.GemfireTemplate"
p:region-ref="Customer" />
28© 2015 Pivotal Software, Inc. All rights reserved.
Implementation
Annotation-based Function Implementation/Execution
package org.example.app.functions;
import …
@Component
public class ExampleFunctions {
@GemfireFunction
public Customer update(…) {
…
}
…
}
Example…
(Optional)…
<bean class=“org.example….ExampleFunctions”/>
29© 2015 Pivotal Software, Inc. All rights reserved.
Execution
Annotation-based Function Implementation/Execution
package org.example.app.function.executions;
import …
@OnRegion(“Example”)
public interface ExampleFunctionExecution {
Customer update(…);
}
And…
<gfe:annotation-driven/>
<gfe-data:function-executions base-package="org.example.app.function.executions">
30© 2015 Pivotal Software, Inc. All rights reserved.
JSR-107 (JCache), Spring Cache Abstraction
Geode Caching Provider
Ÿ With @Cacheable
Ÿ And @CachePut, @CacheEvict(allEntries=[true|false]),
@CacheConfig
– http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-jsr-107
Ÿ Or with JSR-107 using…
– @CacheResult, @CachePut, @CacheRemove, @CacheRemoveAll,
@CacheDefaults
31© 2015 Pivotal Software, Inc. All rights reserved.
Spring Session 과 Geode
32© 2015 Pivotal Software, Inc. All rights reserved. 32
12factor App Manifesto - VI. Processes
Twelve-factor processes are stateless and share-nothing.
Some web systems rely on “sticky sessions” – that is, caching user
session data in memory of the app’s process and expectingfuture
requests from the same visitor to be routed to the same process. Sticky
sessions are a violation of twelve-factor and should never be used
or relied upon.
33© 2015 Pivotal Software, Inc. All rights reserved.
Spring Session
Ÿ 일반적인 WAS 의 Clustering
– SESSION Replication-> Overhead
– 구성의 복잡
Ÿ HTTPSession 과 User 의 Object
들이 공존
– Session 이 차지하는 공간으로 인한
Heap 부족
34© 2015 Pivotal Software, Inc. All rights reserved.
Spring Session
Ÿ 플랫폼에 독립적인 세션 관리
Ÿ Annotation 기반에 쉬운 설정
Ÿ Persistence
Ÿ WebSocket 지원
Ÿ 지원하는 기술
– Redis
– Geode
– Hazelcast
35© 2015 Pivotal Software, Inc. All rights reserved.
Spring Session - @EnableGemFireHttpSession
36© 2015 Pivotal Software, Inc. All rights reserved.
Spring Session – Servlet Filter
출처 : http://www.slideshare.net/dgomezg/managing-users-data-with-spring-session
SpringCamp 2016 - Apache Geode 와 Spring Data Gemfire

SpringCamp 2016 - Apache Geode 와 Spring Data Gemfire

  • 2.
    2© 2015 PivotalSoftware, Inc. All rights reserved. 2 Apache Geode 와 Spring 이창재 (jaylee@pivotal.io)| Pivotal | Advanced Platform Architects April, 2016
  • 3.
    3© 2015 PivotalSoftware, Inc. All rights reserved. Agenda Ÿ Apache Geode 소개 Ÿ Spring Data Gemfire Ÿ Spring Session Ÿ Demo
  • 4.
    4© 2015 PivotalSoftware, Inc. All rights reserved.
  • 5.
    5© 2015 PivotalSoftware, Inc. All rights reserved.
  • 6.
    6© 2015 PivotalSoftware, Inc. All rights reserved. Apache Geode 는? open source distributed, in- memory database for scale-out applications
  • 7.
    7© 2015 PivotalSoftware, Inc. All rights reserved. Geode 는? Ÿ 온라인으로 수평 확장이 가능한 고가용성 및 Low latency in- memory Data Grid Ÿ Key/Value (Map) Store (+ ααααααααα) Ÿ Open Source – 2015년 4월 Pivotal Gemfire 를 Apache 재단에 기증 – Project Geode – 2016년 4월 현재 1.0.0-M2
  • 8.
    8© 2015 PivotalSoftware, Inc. All rights reserved. Geode - In Memory Ÿ Data 를 메모리에 분산해서 저장 – JVM Heap – Off Heap 사용 가능(defragmentation) Ÿ Disk 에도 저장 가능 – Persistent Ÿ Eviction 과 Expiration 지원 – Least Recently Used 기반 Eviction – Time To Live 기반 Expiration
  • 9.
    9© 2015 PivotalSoftware, Inc. All rights reserved. Geode In-Memory 데이타 분산 VM 1 VM 2 VM 3
  • 10.
    10© 2015 PivotalSoftware, Inc. All rights reserved. Server 3Server 2 Bucket 3 *primary* Bucket 1 secondary Bucket 3 secondary Bucket 2 *primary* Server 1 Bucket 2 secondary Bucket 1 *primary* Geode In-Memory 데이타 분산 (Redundant = 1)
  • 11.
    11© 2015 PivotalSoftware, Inc. All rights reserved. Server 3Server 2 Bucket 3 *primary* Bucket 1 secondary Bucket 3 secondary Bucket 2 *primary* Server 1 Bucket 2 secondary Bucket 1 *primary* Geode In-Memory 데이타 분산 (Redundant = 1) Server 가 죽으면?
  • 12.
    12© 2015 PivotalSoftware, Inc. All rights reserved. Server 1 Server 3Server 2 Bucket 2 secondary Bucket 1 *primary* Bucket 3 *primary* Bucket 1 *primary* Bucket 3 secondary Bucket 2 *primary* Bucket 2 secondary Primary Failover Restore Redundancy Bucket 1 secondary Geode In-Memory 데이타 분산 (Redundant = 1)
  • 13.
    13© 2015 PivotalSoftware, Inc. All rights reserved. Geode – PARTITION REGION Ÿ REGION – Database 의 Table – 메모리에 분산되서 저장되는 java.util.Map Ÿ REDUNDANT 를 가지는 것과 안가지는 것(PARTITION, PARTITION_REDUNDANT) – REDUNDANT 즉 Backup 의 갯수는 지정 가능 – 0~3개 Ÿ Consistent Hashing – 기본 113 개의 Bucket Ÿ Map API 뿐만 아니라 SQL Query 도 지원
  • 14.
    14© 2015 PivotalSoftware, Inc. All rights reserved. Geode – Key/Value (Map) Store (+ ααααααααα) Ÿ In Memory Data Grid Ÿ Data Colocation – Master / Detail 형태의 data graph Ÿ Data Serialization (PDX) Ÿ FuctionService Ÿ JTA 호환 Transaction 출처 : http://s.hswstatic.com/gif/grid-computing-1.gif
  • 15.
    15© 2015 PivotalSoftware, Inc. All rights reserved. Geode – Key/Value (Map) Store (+ ααααααααα)
  • 16.
    16© 2015 PivotalSoftware, Inc. All rights reserved. Geode – Key/Value (Map) Store (+ ααααααααα)
  • 17.
    17© 2015 PivotalSoftware, Inc. All rights reserved. Gemfire vs Geode Ÿ Open Source Ÿ 상용 Support Ÿ 기능상의 차이 – WAN 상의 클러스터 복제 (M2 에 이미 포함) – Continuous Query (M2 에 이미 포함) – C++, C# 지원
  • 18.
    18© 2015 PivotalSoftware, Inc. All rights reserved. Demo Repo https://github.com/eggboy/springcamp2016geode https://github.com/eggboy/gemfiredemo
  • 19.
    19© 2015 PivotalSoftware, Inc. All rights reserved. Spring Data Gemfire
  • 20.
    20© 2015 PivotalSoftware, Inc. All rights reserved. Spring Data GemFire (SDG) Spring Data 의 강력하고 단순한 프로그래밍 모델을 이용하여 Apache Geode 이용가능. Spring Ecosystem Integration… – Spring Cache Abstraction / Transaction Management – Spring Data Commons + REST – Spring Integration (Inbound/Outbound Channel Adapters) – Spring Data Flow (Input Source and Sinks)
  • 21.
    21© 2015 PivotalSoftware, Inc. All rights reserved. Apache Geode combined with Spring Data GemFire can be used as JSR-107 (JCache) caching provider + +
  • 22.
    22© 2015 PivotalSoftware, Inc. All rights reserved. GRAILS Full-stack, Web Data Flow Stream, Taps, Jobs BOOT Bootable, Minimal, Ops-Ready Big, Fast, Flexible Data Web, Integration, Batch WEB Controllers, REST, WebSocket INTEGRATION Channels, Adapters, Filters, Transformers BATCH Jobs, Steps, Readers, Writers BIG DATA Ingestion, Export, Orchestration, Hadoop DATA NON-RELATIONALRELATIONAL CORE GROOVYFRAMEWORK SECURITY REACTOR
  • 23.
    23© 2015 PivotalSoftware, Inc. All rights reserved. Server 설정 Spring XML 기반 설정
  • 24.
    24© 2015 PivotalSoftware, Inc. All rights reserved. Client 설정 Spring XML 기반 설정
  • 25.
    25© 2015 PivotalSoftware, Inc. All rights reserved. with Spring Geode 서버 시작 @SpringBootApplication @ImportResource("/spring-data-gemfire-cache.xml") @EnableGemfireRepositories @EnableTransactionManagement public class SampleDataGemFireApplication { public static void main(String[] args) { SpringApplication.run(SampleDataGemFireApplication.class, args); } } 혹은… gfsh>start server –name=Example … --spring-xml-location=“spring-data-gemfire-cache.xml”
  • 26.
    26© 2015 PivotalSoftware, Inc. All rights reserved. GemfireRepository Repository 를 이용한 data 접근 public interface CustomerRepository extends GemfireRepository<Customer, Long> { } // Spring context.xml <gfe-data:repositories base-package="io.pivotal.springcamp.geode.repository" />
  • 27.
    27© 2015 PivotalSoftware, Inc. All rights reserved. GemfireTemplate GemfireTemplate 을 이용한 data 접근 Ÿ 가장 단순한 data 접근 방법 Ÿ Gemfire/Geode API 변경으로 부터 자유로움 Ÿ Exception 이 Spring DAO Exception 으로 변경 Ÿ Transaction <bean id="customerTemplate" class="org.springframework.data.gemfire.GemfireTemplate" p:region-ref="Customer" />
  • 28.
    28© 2015 PivotalSoftware, Inc. All rights reserved. Implementation Annotation-based Function Implementation/Execution package org.example.app.functions; import … @Component public class ExampleFunctions { @GemfireFunction public Customer update(…) { … } … } Example… (Optional)… <bean class=“org.example….ExampleFunctions”/>
  • 29.
    29© 2015 PivotalSoftware, Inc. All rights reserved. Execution Annotation-based Function Implementation/Execution package org.example.app.function.executions; import … @OnRegion(“Example”) public interface ExampleFunctionExecution { Customer update(…); } And… <gfe:annotation-driven/> <gfe-data:function-executions base-package="org.example.app.function.executions">
  • 30.
    30© 2015 PivotalSoftware, Inc. All rights reserved. JSR-107 (JCache), Spring Cache Abstraction Geode Caching Provider Ÿ With @Cacheable Ÿ And @CachePut, @CacheEvict(allEntries=[true|false]), @CacheConfig – http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#cache-jsr-107 Ÿ Or with JSR-107 using… – @CacheResult, @CachePut, @CacheRemove, @CacheRemoveAll, @CacheDefaults
  • 31.
    31© 2015 PivotalSoftware, Inc. All rights reserved. Spring Session 과 Geode
  • 32.
    32© 2015 PivotalSoftware, Inc. All rights reserved. 32 12factor App Manifesto - VI. Processes Twelve-factor processes are stateless and share-nothing. Some web systems rely on “sticky sessions” – that is, caching user session data in memory of the app’s process and expectingfuture requests from the same visitor to be routed to the same process. Sticky sessions are a violation of twelve-factor and should never be used or relied upon.
  • 33.
    33© 2015 PivotalSoftware, Inc. All rights reserved. Spring Session Ÿ 일반적인 WAS 의 Clustering – SESSION Replication-> Overhead – 구성의 복잡 Ÿ HTTPSession 과 User 의 Object 들이 공존 – Session 이 차지하는 공간으로 인한 Heap 부족
  • 34.
    34© 2015 PivotalSoftware, Inc. All rights reserved. Spring Session Ÿ 플랫폼에 독립적인 세션 관리 Ÿ Annotation 기반에 쉬운 설정 Ÿ Persistence Ÿ WebSocket 지원 Ÿ 지원하는 기술 – Redis – Geode – Hazelcast
  • 35.
    35© 2015 PivotalSoftware, Inc. All rights reserved. Spring Session - @EnableGemFireHttpSession
  • 36.
    36© 2015 PivotalSoftware, Inc. All rights reserved. Spring Session – Servlet Filter 출처 : http://www.slideshare.net/dgomezg/managing-users-data-with-spring-session