SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
SAMSUNG OPEN SOURCE CONFERENCE 2019
삼성 오픈소스 컨퍼런스
샤딩스피어 어디까지 써봤니?
지극히 개인적인 경험 중심의 데이터 샤딩 이야기
카카오뱅크 ㅣ 인프라 ㅣ 성동찬 (Chan.c)
2019.10.17
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
소개
우육빛깔

까칠행원
절대 깨지지 않는 견고한 서비스를 지향하는 국내 최초(아마도) 은행 오픈소스 데이터베이스 엔지니어
(KT하이텔 > 티몬 > 카카오 > 한국카카오은행)
• https://gywn.net
• https://gywn.blog
• https://www.facebook.com/dongchan.sung
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
목차
1. 샤딩이란 무엇인가!
2. 샤딩스피어는 무슨 물건이지?
3. 샤딩스피어 치명적인 매력
4. 샤딩 스피어 사용해보기
5. 샤딩 스피어 활용 1탄
6. 샤딩 스피어 활용 2탄
7. Finish
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
1. 샤딩이란 무엇인가!
초간단 훑어보는 샤딩 이야기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
1. 샤딩이란 무엇인가!
Huge Data
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
1. 샤딩이란 무엇인가!
Data1
Data3 Data4
Data2
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Range

Sharding
•범위로 데이터를 쪼갬
•샤드 추가가 상대적으로 쉬움
•샤드 불균형이 발생할 수 있음
USER_NO
~800만?
USER_NO

~200만
USER_NO

~400만
USER_NO

~600만
1. 샤딩이란 무엇인가!
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Modulus

Sharding
•나머지 연산으로 데이터를 쪼갬
•전반적으로 고른 트래픽 분포
•샤드 확장이 굉장히 어려움
0 1 2 3
CRC32(USER_ID) mod 4
1. 샤딩이란 무엇인가!
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
User A
User B
User C
User D
User E
MAPPER DB
shard1
shard2
shard3
1. 샤딩이란 무엇인가!
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
샤딩은 데이터를 쪼개는 방법입니다.
샤딩이란?
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
2. 샤딩스피어가 뭐지?
샤딩스피어도 간단하게 이야기해보아요.
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
2. 샤딩스피어가 뭐지?
Apache project
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
2. 샤딩스피어가 뭐지?
made in China
https://cdn.pixabay.com/photo/2017/11/20/12/15/china-2965332_1280.png
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
압도적인 트래픽, 모바일 서비스 강국
오히려 배워야할 “IT 선진국”
2. 샤딩스피어가 뭐지?
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
https://shardingsphere.apache.org
• Sharding-JDBC
• Sharding-Proxy
• Sharding-Sidecar (skip)
2. 샤딩스피어가 뭐지?
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding-JDBC
code
JAVA Application
Sharding-JDBC
DB
2. 샤딩스피어가 뭐지?
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding-Proxy
DB
JDBC
:3306
2. 샤딩스피어가 뭐지? Sharding-Proxy
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Logical schema
DB.user
DB1.test
DB2.user2
DB3.user3
DB1.user1
Shardingsphere
• Sharding-JDBC
• Sharding-Proxy
Logical schema
2. 샤딩스피어가 뭐지?
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
DB.code
Logical schema
DB1.test
DB2.user2, DB2.code
DB3.user3, DB3.code
DB1.user1, DB1.code
Logical schema
DB.user
}Shardingsphere
broadcast table
2. 샤딩스피어가 뭐지?
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Logical schema
SELECT
USER.*,
CODE.TYPE_DETAIL
FROM USER
JOIN CODE on CODE.TYPE = USER.USER_TYPE
WHERE USER.ID = 19810528
19810528 % 3 = 1
#0
#1
#2
2. 샤딩스피어가 뭐지?
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
3. 샤딩스피어 치명적인 매력
샤딩스피어에 대한 지극히 개인적인 의견
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
3. 샤딩스피어 치명적인 매력 Top Features
•Single Datasource
•SQL Parsing & Routing
•Merge ResultSet
https://shardingsphere.apache.org/document/current/en/features/sharding/principle/parse/
https://shardingsphere.apache.org/document/current/en/features/sharding/principle/route/
https://shardingsphere.apache.org/document/current/en/features/sharding/principle/merge/
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Single Datasource
DB1
DB2
DB3
DS#1
DS#2
DS#3
code
3-1. 샤딩스피어 치명적인 매력
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Single Datasource
DB1
DB2
DB3
DS code
}
3-1. 샤딩스피어 치명적인 매력
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
SQL parsing & Routing
SQL Parsing
SQL Routing
DB1
DB2
DB3
shard key
Route to #2
3-2. 샤딩스피어 치명적인 매력
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Merge ResultSet3-3. 샤딩스피어 치명적인 매력
Merge
DB1
DB2
}
SELECT * FROM TB ORDER BY x DESC LIMIT 5
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
4. 샤딩스피어 사용해보기
sharding-JDBC 시작하기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
4. 샤딩스피어 사용해보기 maven
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>3.1.0</version>
</dependency>
https://shardingsphere.apache.org/document/current/en/quick-start/sharding-jdbc-quick-start/
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Shardingsphere DataSource
hello shardingsphere
DataSource Map
Sharding Rule
ds.getConnection();
Single datasource
4. 샤딩스피어 사용해보기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
hello shardingsphere4. 샤딩스피어 사용해보기
Java configuration
Yaml configuration
VS
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Map<String, DataSource> dataSourceMap = new HashMap<>();
BasicDataSource dataSource1 = new BasicDataSource();

BasicDataSource dataSource2 = new BasicDataSource();

dataSourceMap.put("ds0", dataSource1);

dataSourceMap.put("ds1", dataSource2);
TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration();
tableRuleConfig.setLogicTable("mytable");
tableRuleConfig.setActualDataNodes("ds${0..1}.tb");
tableRuleConfig.setDatabaseShardingStrategyConfig(..);
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig);
DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap,
shardingRuleConfig, new ConcurrentHashMap(), new Properties());
Java configuration4. 샤딩스피어 사용해보기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
String yamFile = "sharding-config.yaml";
DataSource shardingDataSource = YamlShardingDataSourceFactory.createDataSource(new
File(yamFile));
Yaml configuration4. 샤딩스피어 사용해보기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
dataSources:
ds0: !!org.apache.commons.dbcp2.BasicDataSource
url: jdbc:mysql://127.0.0.1:3306/shard01
username: shard
password:
ds1: !!org.apache.commons.dbcp2.BasicDataSource
url: jdbc:mysql://127.0.0.1:3306/shard02
username: shard
password:
shardingRule:
tables:
mytable:
actualDataNodes: ds${0..1}.tb
databaseStrategy:
standard:
shardingColumn: skey
preciseAlgorithmClassName: net.gywn.algorithm.PreciseShardingCRC32
bindingTables:
- mytable
dataSources:
ds0: !!org.apache.commons.dbcp2.BasicDataSource
url: jdbc:mysql://127.0.0.1:3306/shard0
username: shard
password:
ds1: !!org.apache.commons.dbcp2.BasicDataSource
url: jdbc:mysql://127.0.0.1:3306/shard02
username: shard
password:
shardingRule:
tables:
mytable:
actualDataNodes: ds${0..1}.tb
databaseStrategy:
standard:
shardingColumn: skey
preciseAlgorithmClassName: net.gywn.algorithm.PreciseShardingCRC32
bindingTables:
- mytable
Yaml configuration
sharding-config.yaml
4. 샤딩스피어 사용해보기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
PreciseShardingAlgorithm
public class PreciseShardingCRC32 implements PreciseShardingAlgorithm<Comparable> {
public String doSharding(Collection<String> availableTargetNames,
PreciseShardingValue<Comparable> shardingValue) {
ArrayList<String> list = new ArrayList<String>(availableTargetNames);
Checksum checksum = new CRC32();
try {
byte[] bytes = shardingValue.getValue().toString().getBytes();
checksum.update(bytes, 0, bytes.length);
int seq = (int) (checksum.getValue() % list.size());
return list.get(seq);
} catch (Exception e) {}
return list.get(0);
}
}
4. 샤딩스피어 사용해보기
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
5. 샤딩 스피어 활용 1탄
샤드로 데이터 찢어서 옮길 때 유용하더군요.
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
5. 샤딩 스피어 활용 1탄 Sharding migration
Export & Import
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
???????????????
5. 샤딩 스피어 활용 1탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
DS#1
DS#2
DS#3
SELECT * FROM TB
App
Multi-Datasource
5. 샤딩 스피어 활용 1탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
App
DS
• ds#1
• ds#2
• ds#3
Single-Datasource
5. 샤딩 스피어 활용 1탄
SELECT * FROM TB
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
DB 하나에 쿼리 날리듯 작성하면 됨
SQL을 파싱해서 찾아낸 샤딩키 기준으로 데이터를 분산
5. 샤딩 스피어 활용 1탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
INSERT INTO TB (SKEY, INFO) VALUES (1, ‘ABCDE’);
logic table
shardingColumn
shardingValue
DS DS#1
DS#2
DS#3
db1.TB
db2.TB
db3.TB
actual table
5. 샤딩 스피어 활용 1탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Sharding migration
30억 데이터 20시간 이관 성공
500라인 간단한 프로그램으로 가치있는 결과를 얻게 됨
5. 샤딩 스피어 활용 1탄
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
6. 샤딩 스피어 활용 2탄
찢어진 데이터를 한눈에 바라보기
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Shard Rule
• User A
• User B
shard2
shard3App
User History
shard1
6. 샤딩 스피어 활용 2탄 Log Storage
개인화 서비스
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
고객 이력 관리
불특정 다수 데이터 접근
다양한 검색 요구 사항
6. 샤딩 스피어 활용 2탄
서비스 관리자
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
Shard Rule
shard1
shard2
shard3App
서비스 관리자
User History
where email = ‘chan.c@kakaobank.com’
and visit_date = ‘2019-05-28’
6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Merge
DB1
DB2
}
SELECT * FROM TB ORDER BY x DESC LIMIT 5
Log Storage6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
shard1
shard2
shard3
User History
select * from user_history
where email = ‘chan.c@kakaobank.com’
and visit_date = ‘2019-05-28’
select * from user_history
where nickname = ‘chan.c’
and visit_date = ‘2019-05-28’
select count(*) from user_history
where visit_date = ‘2019-05-28’
6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
shard1
shard2
shard3
total
1/3
6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
shard1
shard2
shard3
total
Log Storage6. 샤딩 스피어 활용 2탄
3x
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
shard1
shard2
shard3
select count(*)
from user_history
thread1
thread2
thread3
{
6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
어쩌다 병렬처리
최대 9배 막연한 성능 향상 기대
6. 샤딩 스피어 활용 2탄
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
Log Storage
mysql> select count(*)
-> from user_history;
+----------+
| count(*) |
+----------+
| 84950612 |
+----------+
1 row in set (2 min 9.23 sec)
mysql> select count(*)
-> from user_history;
+----------+
| count(*) |
+----------+
| 84950612 |
+----------+
1 row in set (17.13 sec)
VS
(sharding-proxy로 쿼리 테스트)
6. 샤딩 스피어 활용 2탄
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
7. Finish
벌써 정리시간이네요.
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
샤딩이란 무엇이었지?
데이터를 찢는 기술일 뿐입니다.
• Range Sharding
• Modulus Sharding
• 내맘대로 샤딩(Mapping)
7. Finish
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
“made in China” 샤딩 라이브러리
• Sharding-JDBC, Sharding-Proxy
• 매력포인트

- Single Datasource

- SQL Parsing & Routing

- Merge ResultSet
샤딩스피어는 뭐였더라???
7. Finish
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
서비스 특성에 따라 다양하게 활용해볼 수 있겠음
• 데이터 이관에서, 간단한 코드로 최대의 행복을 얻음
• 대량 데이터 관리 시 “어쩌다 병렬처리” 득
샤딩스피어는 어떻게 써볼까?
7. Finish
SAMSUNG OPEN SOURCE CONFERENCE 2019
SOSCON2019
세상은 넓고 천재들은 많다.
• 오픈 소스를 활용해보니, 원하는 바를 금방 이루었다.
• 오픈 소스를 써보려고 해보니, 제대로 쓰기 위해서 많은 학습이 필요하다.
• 오픈 소스로 얻은 작은 경험을 공유하는 것이 의미 있겠다.
개인 소감
7. Finish
SOSCON2019
SAMSUNG OPEN SOURCE CONFERENCE 2019
THANK YOU

Weitere ähnliche Inhalte

Ähnlich wie 샤딩스피어 어디까지 써봤니

[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요NAVER D2
 
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019Amazon Web Services Korea
 
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처hoondong kim
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019Amazon Web Services Korea
 
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...Amazon Web Services Korea
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuninghaiteam
 
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...Amazon Web Services Korea
 
18. Install - Spark Streaming Env.
18. Install - Spark Streaming Env.18. Install - Spark Streaming Env.
18. Install - Spark Streaming Env.merry7
 
Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Pumsuk Cho
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)EunChul Shin
 
DataWorks Summit 2018
DataWorks Summit 2018DataWorks Summit 2018
DataWorks Summit 2018Daesung Park
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista Community
 
(130316) #fitalk trends in d forensics (feb, 2013)
(130316) #fitalk   trends in d forensics (feb, 2013)(130316) #fitalk   trends in d forensics (feb, 2013)
(130316) #fitalk trends in d forensics (feb, 2013)INSIGHT FORENSIC
 
(120211) #fitalk application password decrypter
(120211) #fitalk   application password decrypter(120211) #fitalk   application password decrypter
(120211) #fitalk application password decrypterINSIGHT FORENSIC
 
(120211) #fitalk application password decrypter
(120211) #fitalk   application password decrypter(120211) #fitalk   application password decrypter
(120211) #fitalk application password decrypterINSIGHT FORENSIC
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayseung-hyun Park
 

Ähnlich wie 샤딩스피어 어디까지 써봤니 (20)

Spark Summit 2019
Spark Summit 2019Spark Summit 2019
Spark Summit 2019
 
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
[1B3]모바일 앱 크래시 네이버에서는 어떻게 수집하고 보여줄까요
 
2020.02.06 우리는 왜 glue를 버렸나?
2020.02.06 우리는 왜 glue를 버렸나?2020.02.06 우리는 왜 glue를 버렸나?
2020.02.06 우리는 왜 glue를 버렸나?
 
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
IDC 마이그레이션 여정기 (SundayToz) - 조성필 TD, Sunday Toz :: AWS Summit Seoul 2019
 
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
[AI & DevOps] BigData Scale Production AI 서비스를 위한 최상의 플랫폼 아키텍처
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
효율적인 빅데이터 분석 및 처리를 위한 Glue, EMR 활용 - 김태현 솔루션즈 아키텍트, AWS :: AWS Summit Seoul 2019
 
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
[Games on AWS 2019] AWS 사용자를 위한 만랩 달성 트랙 | Aurora로 게임 데이터베이스 레벨 업! - 김병수 AWS ...
 
Spark performance tuning
Spark performance tuningSpark performance tuning
Spark performance tuning
 
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...
오픈소스 ROS와 AWS RoboMaker를 통한 지능형 로봇앱 개발하기 - 윤석찬 (AWS 테크에반젤리스트), 박진용 (우아한 형제들) ...
 
4조 졸업작품
4조 졸업작품4조 졸업작품
4조 졸업작품
 
18. Install - Spark Streaming Env.
18. Install - Spark Streaming Env.18. Install - Spark Streaming Env.
18. Install - Spark Streaming Env.
 
Web devmobile 8회열린세미나
Web devmobile 8회열린세미나Web devmobile 8회열린세미나
Web devmobile 8회열린세미나
 
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)스프링군살없이세팅하기(The way to setting the Spring framework for web.)
스프링군살없이세팅하기(The way to setting the Spring framework for web.)
 
DataWorks Summit 2018
DataWorks Summit 2018DataWorks Summit 2018
DataWorks Summit 2018
 
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
Cloud-Barista 제4차 오픈 컨퍼런스 : CB-Spider / CB-Tumblebug : 멀티클라우드 인프라 서비스 (Multi-...
 
(130316) #fitalk trends in d forensics (feb, 2013)
(130316) #fitalk   trends in d forensics (feb, 2013)(130316) #fitalk   trends in d forensics (feb, 2013)
(130316) #fitalk trends in d forensics (feb, 2013)
 
(120211) #fitalk application password decrypter
(120211) #fitalk   application password decrypter(120211) #fitalk   application password decrypter
(120211) #fitalk application password decrypter
 
(120211) #fitalk application password decrypter
(120211) #fitalk   application password decrypter(120211) #fitalk   application password decrypter
(120211) #fitalk application password decrypter
 
Meteor Korea DEV School 1st day
Meteor Korea DEV School 1st dayMeteor Korea DEV School 1st day
Meteor Korea DEV School 1st day
 

샤딩스피어 어디까지 써봤니

  • 1. SAMSUNG OPEN SOURCE CONFERENCE 2019 삼성 오픈소스 컨퍼런스 샤딩스피어 어디까지 써봤니? 지극히 개인적인 경험 중심의 데이터 샤딩 이야기 카카오뱅크 ㅣ 인프라 ㅣ 성동찬 (Chan.c) 2019.10.17
  • 2. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 소개 우육빛깔
 까칠행원 절대 깨지지 않는 견고한 서비스를 지향하는 국내 최초(아마도) 은행 오픈소스 데이터베이스 엔지니어 (KT하이텔 > 티몬 > 카카오 > 한국카카오은행) • https://gywn.net • https://gywn.blog • https://www.facebook.com/dongchan.sung
  • 3. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 목차 1. 샤딩이란 무엇인가! 2. 샤딩스피어는 무슨 물건이지? 3. 샤딩스피어 치명적인 매력 4. 샤딩 스피어 사용해보기 5. 샤딩 스피어 활용 1탄 6. 샤딩 스피어 활용 2탄 7. Finish
  • 4. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 1. 샤딩이란 무엇인가! 초간단 훑어보는 샤딩 이야기
  • 5. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 1. 샤딩이란 무엇인가! Huge Data
  • 6. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 1. 샤딩이란 무엇인가! Data1 Data3 Data4 Data2
  • 7. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Range
 Sharding •범위로 데이터를 쪼갬 •샤드 추가가 상대적으로 쉬움 •샤드 불균형이 발생할 수 있음 USER_NO ~800만? USER_NO
 ~200만 USER_NO
 ~400만 USER_NO
 ~600만 1. 샤딩이란 무엇인가!
  • 8. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Modulus
 Sharding •나머지 연산으로 데이터를 쪼갬 •전반적으로 고른 트래픽 분포 •샤드 확장이 굉장히 어려움 0 1 2 3 CRC32(USER_ID) mod 4 1. 샤딩이란 무엇인가!
  • 9. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 User A User B User C User D User E MAPPER DB shard1 shard2 shard3 1. 샤딩이란 무엇인가!
  • 10. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 샤딩은 데이터를 쪼개는 방법입니다. 샤딩이란?
  • 11. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 2. 샤딩스피어가 뭐지? 샤딩스피어도 간단하게 이야기해보아요.
  • 12. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 2. 샤딩스피어가 뭐지? Apache project
  • 13. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 2. 샤딩스피어가 뭐지? made in China https://cdn.pixabay.com/photo/2017/11/20/12/15/china-2965332_1280.png
  • 14. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 압도적인 트래픽, 모바일 서비스 강국 오히려 배워야할 “IT 선진국” 2. 샤딩스피어가 뭐지?
  • 15. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 https://shardingsphere.apache.org • Sharding-JDBC • Sharding-Proxy • Sharding-Sidecar (skip) 2. 샤딩스피어가 뭐지?
  • 16. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding-JDBC code JAVA Application Sharding-JDBC DB 2. 샤딩스피어가 뭐지?
  • 17. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding-Proxy DB JDBC :3306 2. 샤딩스피어가 뭐지? Sharding-Proxy
  • 18. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Logical schema DB.user DB1.test DB2.user2 DB3.user3 DB1.user1 Shardingsphere • Sharding-JDBC • Sharding-Proxy Logical schema 2. 샤딩스피어가 뭐지?
  • 19. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 DB.code Logical schema DB1.test DB2.user2, DB2.code DB3.user3, DB3.code DB1.user1, DB1.code Logical schema DB.user }Shardingsphere broadcast table 2. 샤딩스피어가 뭐지?
  • 20. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Logical schema SELECT USER.*, CODE.TYPE_DETAIL FROM USER JOIN CODE on CODE.TYPE = USER.USER_TYPE WHERE USER.ID = 19810528 19810528 % 3 = 1 #0 #1 #2 2. 샤딩스피어가 뭐지?
  • 21. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 3. 샤딩스피어 치명적인 매력 샤딩스피어에 대한 지극히 개인적인 의견
  • 22. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 3. 샤딩스피어 치명적인 매력 Top Features •Single Datasource •SQL Parsing & Routing •Merge ResultSet https://shardingsphere.apache.org/document/current/en/features/sharding/principle/parse/ https://shardingsphere.apache.org/document/current/en/features/sharding/principle/route/ https://shardingsphere.apache.org/document/current/en/features/sharding/principle/merge/
  • 23. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Single Datasource DB1 DB2 DB3 DS#1 DS#2 DS#3 code 3-1. 샤딩스피어 치명적인 매력
  • 24. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Single Datasource DB1 DB2 DB3 DS code } 3-1. 샤딩스피어 치명적인 매력
  • 25. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 SQL parsing & Routing SQL Parsing SQL Routing DB1 DB2 DB3 shard key Route to #2 3-2. 샤딩스피어 치명적인 매력
  • 26. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Merge ResultSet3-3. 샤딩스피어 치명적인 매력 Merge DB1 DB2 } SELECT * FROM TB ORDER BY x DESC LIMIT 5
  • 27. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 4. 샤딩스피어 사용해보기 sharding-JDBC 시작하기
  • 28. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 4. 샤딩스피어 사용해보기 maven <dependency> <groupId>io.shardingsphere</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>3.1.0</version> </dependency> https://shardingsphere.apache.org/document/current/en/quick-start/sharding-jdbc-quick-start/
  • 29. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Shardingsphere DataSource hello shardingsphere DataSource Map Sharding Rule ds.getConnection(); Single datasource 4. 샤딩스피어 사용해보기
  • 30. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 hello shardingsphere4. 샤딩스피어 사용해보기 Java configuration Yaml configuration VS
  • 31. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Map<String, DataSource> dataSourceMap = new HashMap<>(); BasicDataSource dataSource1 = new BasicDataSource();
 BasicDataSource dataSource2 = new BasicDataSource();
 dataSourceMap.put("ds0", dataSource1);
 dataSourceMap.put("ds1", dataSource2); TableRuleConfiguration tableRuleConfig = new TableRuleConfiguration(); tableRuleConfig.setLogicTable("mytable"); tableRuleConfig.setActualDataNodes("ds${0..1}.tb"); tableRuleConfig.setDatabaseShardingStrategyConfig(..); ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration(); shardingRuleConfig.getTableRuleConfigs().add(tableRuleConfig); DataSource dataSource = ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, new ConcurrentHashMap(), new Properties()); Java configuration4. 샤딩스피어 사용해보기
  • 32. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 String yamFile = "sharding-config.yaml"; DataSource shardingDataSource = YamlShardingDataSourceFactory.createDataSource(new File(yamFile)); Yaml configuration4. 샤딩스피어 사용해보기
  • 33. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 dataSources: ds0: !!org.apache.commons.dbcp2.BasicDataSource url: jdbc:mysql://127.0.0.1:3306/shard01 username: shard password: ds1: !!org.apache.commons.dbcp2.BasicDataSource url: jdbc:mysql://127.0.0.1:3306/shard02 username: shard password: shardingRule: tables: mytable: actualDataNodes: ds${0..1}.tb databaseStrategy: standard: shardingColumn: skey preciseAlgorithmClassName: net.gywn.algorithm.PreciseShardingCRC32 bindingTables: - mytable dataSources: ds0: !!org.apache.commons.dbcp2.BasicDataSource url: jdbc:mysql://127.0.0.1:3306/shard0 username: shard password: ds1: !!org.apache.commons.dbcp2.BasicDataSource url: jdbc:mysql://127.0.0.1:3306/shard02 username: shard password: shardingRule: tables: mytable: actualDataNodes: ds${0..1}.tb databaseStrategy: standard: shardingColumn: skey preciseAlgorithmClassName: net.gywn.algorithm.PreciseShardingCRC32 bindingTables: - mytable Yaml configuration sharding-config.yaml 4. 샤딩스피어 사용해보기
  • 34. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 PreciseShardingAlgorithm public class PreciseShardingCRC32 implements PreciseShardingAlgorithm<Comparable> { public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Comparable> shardingValue) { ArrayList<String> list = new ArrayList<String>(availableTargetNames); Checksum checksum = new CRC32(); try { byte[] bytes = shardingValue.getValue().toString().getBytes(); checksum.update(bytes, 0, bytes.length); int seq = (int) (checksum.getValue() % list.size()); return list.get(seq); } catch (Exception e) {} return list.get(0); } } 4. 샤딩스피어 사용해보기
  • 35. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 5. 샤딩 스피어 활용 1탄 샤드로 데이터 찢어서 옮길 때 유용하더군요.
  • 36. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 5. 샤딩 스피어 활용 1탄 Sharding migration Export & Import
  • 37. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration ??????????????? 5. 샤딩 스피어 활용 1탄
  • 38. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration DS#1 DS#2 DS#3 SELECT * FROM TB App Multi-Datasource 5. 샤딩 스피어 활용 1탄
  • 39. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration App DS • ds#1 • ds#2 • ds#3 Single-Datasource 5. 샤딩 스피어 활용 1탄 SELECT * FROM TB
  • 40. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration DB 하나에 쿼리 날리듯 작성하면 됨 SQL을 파싱해서 찾아낸 샤딩키 기준으로 데이터를 분산 5. 샤딩 스피어 활용 1탄
  • 41. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration INSERT INTO TB (SKEY, INFO) VALUES (1, ‘ABCDE’); logic table shardingColumn shardingValue DS DS#1 DS#2 DS#3 db1.TB db2.TB db3.TB actual table 5. 샤딩 스피어 활용 1탄
  • 42. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Sharding migration 30억 데이터 20시간 이관 성공 500라인 간단한 프로그램으로 가치있는 결과를 얻게 됨 5. 샤딩 스피어 활용 1탄
  • 43. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 6. 샤딩 스피어 활용 2탄 찢어진 데이터를 한눈에 바라보기
  • 44. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Shard Rule • User A • User B shard2 shard3App User History shard1 6. 샤딩 스피어 활용 2탄 Log Storage 개인화 서비스
  • 45. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage 고객 이력 관리 불특정 다수 데이터 접근 다양한 검색 요구 사항 6. 샤딩 스피어 활용 2탄 서비스 관리자
  • 46. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage Shard Rule shard1 shard2 shard3App 서비스 관리자 User History where email = ‘chan.c@kakaobank.com’ and visit_date = ‘2019-05-28’ 6. 샤딩 스피어 활용 2탄
  • 47. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Merge DB1 DB2 } SELECT * FROM TB ORDER BY x DESC LIMIT 5 Log Storage6. 샤딩 스피어 활용 2탄
  • 48. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage shard1 shard2 shard3 User History select * from user_history where email = ‘chan.c@kakaobank.com’ and visit_date = ‘2019-05-28’ select * from user_history where nickname = ‘chan.c’ and visit_date = ‘2019-05-28’ select count(*) from user_history where visit_date = ‘2019-05-28’ 6. 샤딩 스피어 활용 2탄
  • 49. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage shard1 shard2 shard3 total 1/3 6. 샤딩 스피어 활용 2탄
  • 50. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 shard1 shard2 shard3 total Log Storage6. 샤딩 스피어 활용 2탄 3x
  • 51. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage shard1 shard2 shard3 select count(*) from user_history thread1 thread2 thread3 { 6. 샤딩 스피어 활용 2탄
  • 52. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage 어쩌다 병렬처리 최대 9배 막연한 성능 향상 기대 6. 샤딩 스피어 활용 2탄
  • 53. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 Log Storage mysql> select count(*) -> from user_history; +----------+ | count(*) | +----------+ | 84950612 | +----------+ 1 row in set (2 min 9.23 sec) mysql> select count(*) -> from user_history; +----------+ | count(*) | +----------+ | 84950612 | +----------+ 1 row in set (17.13 sec) VS (sharding-proxy로 쿼리 테스트) 6. 샤딩 스피어 활용 2탄
  • 54. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 7. Finish 벌써 정리시간이네요.
  • 55. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 샤딩이란 무엇이었지? 데이터를 찢는 기술일 뿐입니다. • Range Sharding • Modulus Sharding • 내맘대로 샤딩(Mapping) 7. Finish
  • 56. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 “made in China” 샤딩 라이브러리 • Sharding-JDBC, Sharding-Proxy • 매력포인트
 - Single Datasource
 - SQL Parsing & Routing
 - Merge ResultSet 샤딩스피어는 뭐였더라??? 7. Finish
  • 57. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 서비스 특성에 따라 다양하게 활용해볼 수 있겠음 • 데이터 이관에서, 간단한 코드로 최대의 행복을 얻음 • 대량 데이터 관리 시 “어쩌다 병렬처리” 득 샤딩스피어는 어떻게 써볼까? 7. Finish
  • 58. SAMSUNG OPEN SOURCE CONFERENCE 2019 SOSCON2019 세상은 넓고 천재들은 많다. • 오픈 소스를 활용해보니, 원하는 바를 금방 이루었다. • 오픈 소스를 써보려고 해보니, 제대로 쓰기 위해서 많은 학습이 필요하다. • 오픈 소스로 얻은 작은 경험을 공유하는 것이 의미 있겠다. 개인 소감 7. Finish
  • 59. SOSCON2019 SAMSUNG OPEN SOURCE CONFERENCE 2019 THANK YOU