SlideShare una empresa de Scribd logo
1 de 167
Descargar para leer sin conexión
How to build a scalable
SNS using HBase
Kewang
三竹資訊
Who I am
●
王慕羣
● Java / Node.js / AngularJS
● SQL-like / HBase
Github: kewang
Facebook: kewangtw
Linkedin: kewangtw
Slideshare: kewang
Mail: cpckewang@gmail.com
Who Mitake is
三竹資訊
Who Mitake is
三竹資訊
大家都唸 Mitake
Who Mitake is
三竹資訊
大家都唸 Mitake ,但我們公司都唸 Mitake
Who Mitake is
三竹資訊
Mitake 不唸作 MiTAC 啊!!!
Who Mitake is
三竹資訊
Who Mitake is
三竹資訊
●
簡訊平台
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:臺銀、土銀、富邦、台新、聯邦、臺
企銀、遠銀、華南、澳盛、郵局、合庫、渣打 ...
等 18 家
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:臺銀、土銀、富邦、台新、聯邦、臺
企銀、遠銀、華南、澳盛、郵局、合庫、渣打 ...
等 18 家
●
產壽險:
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:臺銀、土銀、富邦、台新、聯邦、臺企
銀、遠銀、華南、澳盛、郵局、合庫、渣打 ... 等 18
家
● 產壽險:全球、明台、新光、新安東京、富邦 ... 等
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:臺銀、土銀、富邦、台新、聯邦、臺企
銀、遠銀、華南、澳盛、郵局、合庫、渣打 ... 等 18 家
● 產壽險:全球、明台、新光、新安東京、富邦 ... 等
●
其他:
Who Mitake is
三竹資訊
●
簡訊平台
●
行動下單:不計其數
●
行動銀行:臺銀、土銀、富邦、台新、聯邦、臺企銀、
遠銀、華南、澳盛、郵局、合庫、渣打 ... 等 18 家
● 產壽險:全球、明台、新光、新安東京、富邦 ... 等
● 其他: udn 買東西、手機逛週年慶、財政園地、證交
所、綜所稅申報 ... 等
System Architecture
19
System Architecture
20
System Architecture (Backend)
21
System Architecture (Frontend)
22
System Architecture (Frontend)
MOPCON 2014 CfP
23
Agenda
● Rowkey design
● Best Practice in Java
● API Blueprint
● HBase Dataflow
24
Rowkey design
25
Rowkey design - Avoid hotspotting
26
Rowkey design - Avoid hotspotting
● Sorted lexicographically
27
Rowkey design - Avoid hotspotting
● Sorted lexicographically
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
28
Rowkey design - Avoid hotspotting
● Sorted lexicographically
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
29
Rowkey design - Avoid hotspotting
● Sorted lexicographically
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
30
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
31
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
32
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
BOX
33
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
BOX
34
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
BOX
a-foo-1
35
Rowkey design - Avoid hotspotting
● Salting, Hashing or Reversing
Region 3
Region 1
Region 2
foo-1
foo-2
foo-3
foo-4
BOX
a-foo-1
b-foo-2
c-foo-3
d-foo-4
36
Rowkey design - Refining ID
37
Rowkey design - Refining ID
● SHA1: 40 bytes
– 3204c3aefcca4a556f0f7547d056235fa823af3a
38
Rowkey design - Refining ID
● SHA1: 40 bytes
– 3204c3aefcca4a556f0f7547d056235fa823af3a
● UUID: 36 bytes
– 22bfad60-39d2-11e4-916c-0800200c9a66
39
Rowkey design - Refining ID
● SHA1: 40 bytes
– 3204c3aefcca4a556f0f7547d056235fa823af3a
● UUID: 36 bytes
– 22bfad60-39d2-11e4-916c-0800200c9a66
● MD5: 32 bytes
– 27734b3f4f98e709f58c6ddb0193164e
Too long !!!
41
Rowkey design - Refining ID
● X Algorithm
42
Rowkey design - Refining ID
● X Algorithm: 12 bytes
43
Rowkey design - Refining ID
● X Algorithm: 12 bytes
– Auto increment
44
Rowkey design - Refining ID
● X Algorithm: 12 bytes
– Auto increment
– Ordered
45
Rowkey design - Refining ID
● X Algorithm: 12 bytes
– Auto increment
– Ordered
– Counts to 2.17E21
Rowkey design - Refining ID
● X Algorithm: 12 bytes
– Auto increment
– Ordered
– Counts to 2.17E21
– e.g: H00000001B12
47
Rowkey design - Authenticating
48
Rowkey design - Authenticating
● Get frequently
49
Rowkey design - Authenticating
● Get frequently
User Id ID0000001A3B
Access Token d66e3b70-3666-11e4-8c21-0800200c9a66
Expired Time 1410077636
50
Rowkey design - Authenticating
● Get frequently
● Multi-login
51
Rowkey design - Authenticating
● Get frequently
● Multi-login
User Id ID0000001A3B
Token 0 d66e3b70-3666-11e4-8c21-0800200c9a66+1410077636+Device1
Token 1 92e84bf9-7852-492d-b56a-13ba7acb8fb5+1410123456+Device2
52
Rowkey design - Rice dumpling
53
Rowkey design - Rice dumpling
54
Rowkey design - Rice dumpling
55
Rowkey design - Rice dumpling
Id ME00000024AC
Title Announce
Content We are hiring
56
Rowkey design - Rice dumpling
Id ME00000024AC
Title Announce
Content We are hiring
Id ME00000024AC.ME00000037ZZ
Title (n/a)
Content I want to join your team !!!
57
Rowkey design - Rice dumpling
Id ME00000024AC
Title Announce
Content We are hiring
Id ME00000024AC.ME00000037ZZ
Title (n/a)
Content I want to join your team !!!
58
Rowkey design - Access controlling
59
Rowkey design - Access controlling
60
Rowkey design - Access controlling
Only A, B can see it.
61
Rowkey design - Access controlling
Only A, B can see it.
Of course, including me.
62
Rowkey design - Access controlling
● When post a message (Write)
63
Rowkey design - Access controlling
● When post a message (Write)
– Generate ACL Id
64
Rowkey design - Access controlling
● When post a message (Write)
– Generate ACL Id
– Put ACL Id to message, and reader's ACLs
65
Rowkey design - Access controlling
● When post a message (Write)
– Generate ACL Id
– Put ACL Id to message, and reader's ACLs
● When read my messages (Read)
66
Rowkey design - Access controlling
● When post a message (Write)
– Generate ACL Id
– Put ACL Id to message, and reader's ACLs
● When read my messages (Read)
– Scan my ACLs, and all messages
67
Rowkey design - Access controlling
● When post a message (Write)
– Generate ACL Id
– Put ACL Id to message, and reader's ACLs
● When read my messages (Read)
– Scan my ACLs, and all messages
– If my ACLs contains message's ACL Id, can SHOW it
68
Rowkey design - Access controlling
Write
69
Rowkey design - Access controlling
ACL hash hash(A, B, K)+C+R
ACL Id AI0070AD
Write
70
Rowkey design - Access controlling
ACL hash hash(A, B, K)+C+R
ACL Id AI0070AD
Message Id ME00000024AC
Title Announce
Content We are hiring
ACL Id AI0070AD
Write
71
Rowkey design - Access controlling
ACL Id+User Id AI0070AD+A AI0070AD+B AI0070AD+K
Create 1 1 1
Read 1 1 1
Update 0 0 0
Delete 0 0 0
Write
72
Rowkey design - Access controlling
User Id+ACL Id A+AI0070AD B+AI0070AD K+AI0070AD
Create 1 1 1
Read 1 1 1
Update 0 0 0
Delete 0 0 0
ACL Id+User Id AI0070AD+A AI0070AD+B AI0070AD+K
Create 1 1 1
Read 1 1 1
Update 0 0 0
Delete 0 0 0
Write
73
Rowkey design - Access controlling
Read
74
Rowkey design - Access controlling
User Id+ACL Id K+AI0070AD K+AI028577
Create 1 1
Read 1 1
Update 0 1
Delete 0 1
Read
75
Rowkey design - Access controlling
User Id+ACL Id K+AI0070AD K+A1028577
Create 1 1
Read 1 1
Update 0 1
Delete 0 1
Read
Message Id ME00000024AC
Title Announce
Content We are hiring
ACL Id AI0070AD
76
Rowkey design - Access controlling
User Id+ACL Id K+AI0070AD K+A1028577
Create 1 1
Read 1 1
Update 0 1
Delete 0 1
Read
Message Id ME00000024AC
Title Announce
Content We are hiring
ACL Id AI0070AD
77
Rowkey design - Statistics
78
Rowkey design - Statistics
● Variety of types
– e.g., Likes, Comments, Registrations
79
Rowkey design - Statistics
● Variety of types
– e.g., Likes, Comments, Registrations
● By unit
– i.e., hourly,daily,weekly,monthly,yearly
80
Rowkey design - Statistics
● Variety of types
– e.g., Likes, Comments, Registrations
● By unit
– i.e., hourly,daily,weekly,monthly,yearly
● By user
81
Rowkey design - Statistics
Unit+Time Base+User Id+Type H+20140908+AAA+Like
11 7
15 22
21 15
Unit+Time Base+User Id+Type D+201409+AAA+Like
08 44
11 58
82
Rowkey design - Statistics
● Sum counts from 2014/9/7 to 2014/9/20 group by
user or counting type
Unit+Time Base+User Id+Type D+201409+AAA+Like
02 20
08 52
09 41
... ...
20 55
83
Rowkey design - Statistics
● Sum counts from 2014/9/7 to 2014/9/20 group by
user or counting type
Unit+Time Base+User Id+Type D+201409+AAA+Like
02 20
08 52
09 41
... ...
20 55
84
Rowkey design - Statistics
● Sum AAA's counts from 2014/9/7 to 2014/9/20
group by counting type
Unit+Time Base+User Id+Type D+201409+AAA+Like
02 20
08 52
09 41
... ...
20 55
85
Rowkey design - Statistics
● Sum AAA's like counts from 2014/9/7 to 2014/9/20
Unit+Time Base+User Id+Type D+201409+AAA+Like
02 20
08 52
09 41
... ...
20 55
86
Rowkey design - Summary
● Avoid hotspotting
● Refining ID
● Authenticating
● Rice dumpling
● Access controlling
● Statistics
87
Best Practice in Java
88
No. 1
89
No. 1
USE HashMap
90
No. 1
USE HashMap
NoSQL is different from RDBMS
91
No. 1 USE HashMap
OLD
92
No. 1 USE HashMap
public class Validation1 {
private String accessToken;
private long expiredTime;
public Validation1() {
accessToken = null;
expiredTime = -1;
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public long getExpiredTime() {
return expiredTime;
}
public void setExpiredTime(long expiredTime) {
this.expiredTime = expiredTime;
}
}
OLD
93
No. 1 USE HashMap
NEW
94
No. 1 USE HashMap
public static final String ACCESS_TOKEN = "access token";
private Map<String, byte[]> putMap;
public Validation1() {
super();
}
public Validation1(Result result) {
super(result);
}
public String getAccessToken() {
return Bytes.toString(putMap.get(ACCESS_TOKEN));
}
public void setAccessToken(String accessToken) {
putMap.put(ACCESS_TOKEN, Bytes.toBytes(accessToken));
}
NEW
95
No. 1 USE HashMap
public static final String ACCESS_TOKEN = "access token";
private Map<String, byte[]> putMap;
public Validation1() {
super();
}
public Validation1(Result result) {
super(result);
}
public String getAccessToken() {
return Bytes.toString(putMap.get(ACCESS_TOKEN));
}
public void setAccessToken(String accessToken) {
putMap.put(ACCESS_TOKEN, Bytes.toBytes(accessToken));
}
NEW
96
No. 1 USE HashMap
● Bytes.toXXX() returns always Type XXX or NULL
97
No. 1 USE HashMap
● Bytes.toXXX() returns always Type XXX or NULL
– Or throws Exception
No. 1 USE HashMap
● Bytes.toXXX() returns always Type XXX or NULL
– Or throws Exception
● Improve default value in Java
99
No. 2
100
No. 2
ONE table, MULTI domains
101
No. 2
ONE table, MULTI domains
NoSQL is different from RDBMS
102
No. 2 ONE table, MULTI domains
● In RDBMS
–
–
–
● In NoSQL
–
–
–
103
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
–
–
–
● In NoSQL
–
–
–
104
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
–
–
–
● In NoSQL (at runtime)
–
–
–
105
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
–
–
● In NoSQL (at runtime)
–
–
–
106
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
–
–
● In NoSQL (at runtime)
– Rowkey always changes
–
–
107
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
– Schema is fixed
–
● In NoSQL (at runtime)
– Rowkey always changes
–
–
108
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
– Schema is fixed
–
● In NoSQL (at runtime)
– Rowkey always changes
– Schema always changes
–
109
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
– Schema is fixed
– DAO serves one domain
● In NoSQL (at runtime)
– Rowkey always changes
– Schema always changes
–
110
No. 2 ONE table, MULTI domains
● In RDBMS (at design time)
– Primary key affects only one column
– Schema is fixed
– DAO serves one domain
● In NoSQL (at runtime)
– Rowkey always changes
– Schema always changes
– DAO serves many domains
111
No. 2 ONE table, MULTI domains
User Id ID0000001A3B
Access Token d66e3b70-3666-11e4-8c21-0800200c9a66
Expired Time 1410077636
112
No. 2 ONE table, MULTI domains
User Id ID0000001A3B
Access Token d66e3b70-3666-11e4-8c21-0800200c9a66
Expired Time 1410077636
User Id+ACL Id ID0000001A3B+AI0070AD
Create 1
Read 1
Update 0
Delete 0
113
No. 2 ONE table, MULTI domains
User Id ID0000001A3B
Access Token d66e3b70-3666-11e4-8c21-0800200c9a66
Expired Time 1410077636
User Id+ACL Id ID0000001A3B+AI0070AD
Create 1
Read 1
Update 0
Delete 0
114
No. 2 ONE table, MULTI domains
● A DAO maps to a domain in RDBMS
115
No. 2 ONE table, MULTI domains
● A DAO maps to a domain in RDBMS
DB DAO Domain A
116
No. 2 ONE table, MULTI domains
● A DAO maps to multiple domains in NoSQL
117
No. 2 ONE table, MULTI domains
● A DAO maps to multiple domains in NoSQL
DB DAO
Domain A1
Domain A2
Domain A3
118
No. 2 ONE table, MULTI domains
● A DAO maps to multiple domains in NoSQL
● Build a middle layer to translate multiple domains
DB DAO
Domain A1
Domain A2
Domain A3
119
No. 2 ONE table, MULTI domains
● A DAO maps to multiple domains in NoSQL
● Build a middle layer to translate multiple domains
DB DAO
Domain A1
Domain A2
Domain A3
Schema
120
No. 2 ONE table, MULTI domains
● A DAO maps to multiple domains in NoSQL
● Build a middle layer to translate multiple domains
DB DAO
Domain A1
Domain A2
Domain A3
Schema
121
No. 2 ONE table, MULTI domains
private String checkDomainType(Result result) {
if (result.isEmpty()) {
return null;
} else {
String rowkey = Bytes.toString(result.getRow());
String[] splitKey = rowkey.split(DIVIDER);
if (splitKey.length == 1) {
}
}
}
122
No. 2 ONE table, MULTI domains
private String checkDomainType(Result result) {
if (result.isEmpty()) {
return null;
} else {
String rowkey = Bytes.toString(result.getRow());
String[] splitKey = rowkey.split(DIVIDER);
if (splitKey.length == 1) {
return DOMAIN_TYPE_VALIDATION1;
}
}
}
123
No. 2 ONE table, MULTI domains
private String checkDomainType(Result result) {
if (result.isEmpty()) {
return null;
} else {
String rowkey = Bytes.toString(result.getRow());
String[] splitKey = rowkey.split(DIVIDER);
if (splitKey.length == 1) {
return DOMAIN_TYPE_VALIDATION1;
} else if (splitKey.length == 2) {
return DOMAIN_TYPE_VALIDATION2;
}
}
}
124
No. 2 ONE table, MULTI domains
private String checkDomainType(Result result) {
if (result.isEmpty()) {
return null;
} else {
String rowkey = Bytes.toString(result.getRow());
String[] splitKey = rowkey.split(DIVIDER);
if (splitKey.length == 1) {
return DOMAIN_TYPE_VALIDATION1;
} else if (splitKey.length == 2) {
return DOMAIN_TYPE_VALIDATION2;
} else {
return DOMAIN_TYPE_VALIDATION3;
}
}
}
125
No. 2 ONE table, MULTI domains
private String checkDomainType(Result result) {
if (result.isEmpty()) {
return null;
} else {
String rowkey = Bytes.toString(result.getRow());
String[] splitKey = rowkey.split(DIVIDER);
if (splitKey.length == 1) {
return DOMAIN_TYPE_VALIDATION1;
} else if (splitKey.length == 2) {
return DOMAIN_TYPE_VALIDATION2;
} else {
return DOMAIN_TYPE_VALIDATION3;
}
}
}
Customize
126
No. 3
127
No. 3
NoSQL is different from RDBMS
128
No. 3
NoSQL is different from RDBMS
REALLY !!!
129
API Blueprint
130
131
API Blueprint - Introduction
132
API Blueprint - Introduction
● Web API Language
133
API Blueprint - Introduction
● Web API Language
● Pure Markdown
134
API Blueprint - Introduction
● Web API Language
● Pure Markdown
● Design for Humans
135
API Blueprint - Introduction
● Web API Language
● Pure Markdown
● Design for Humans
● Understandable by Machines
136
API Blueprint - Introduction
● Web API Language
● Pure Markdown
● Design for Humans
● Understandable by Machines
● Powerful Tooling
137
API Blueprint - Introduction
● Web API Language
● Pure Markdown
● Design for Humans
● Understandable by Machines
● Powerful Tooling
● Easy Lifecycle
138
API Blueprint - Hello World
139
API Blueprint - Hello World
140
API Blueprint - Complex
141
API Blueprint - Complex
142
HBase dataflow
143
HBase dataflow
conserve your domain know-how
144
HBase dataflow - Solve what ?
145
HBase dataflow - Solve what ?
● How to conserve system know-how about Put, Get,
Scan or other operations in HBase ?
146
Paper & Pen ?
147
Paper & Pen ?
148
Redmine / KM ?
149
Redmine / KM ?
150http://kewangtw.github.io/hbase-dataflow/
151
HBase dataflow - introduction
152
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
153
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
154
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
– to JSON / Markdown
155
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
– to JSON / Markdown
– to PNG / PDF
156
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
– to JSON / Markdown
– to PNG / PDF
● Import from JSON
157
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
– to JSON / Markdown
– to PNG / PDF
● Import from JSON
● Write title & summary
158
HBase dataflow - introduction
● HBase operation - Put, Delete, Get, Scan, Filters
● Export
– to JSON / Markdown
– to PNG / PDF
● Import from JSON
● Write title & summary
● Open source
159
Live DEMO
160
Design API Step by Step
161
Design API Step by Step
1.Paper & pen always are your friends
162
Design API Step by Step
1.Paper & pen always are your friends
2.Use HBase dataflow to simulate data's flow
163
Design API Step by Step
1.Paper & pen always are your friends
2.Use HBase dataflow to simulate data's flow
3.Export it
164
165
References
● HBase in Action
● apiblueprint, aglio
● HBase dataflow
166
167

Más contenido relacionado

Similar a How to build a scalable SNS using HBase

A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
HostedbyConfluent
 
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
it-people
 

Similar a How to build a scalable SNS using HBase (20)

The slower the stronger a story of password hash migration
The slower the stronger  a story of password hash migrationThe slower the stronger  a story of password hash migration
The slower the stronger a story of password hash migration
 
PayPal Real Time Analytics
PayPal  Real Time AnalyticsPayPal  Real Time Analytics
PayPal Real Time Analytics
 
A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
A Glide, Skip or a Jump: Efficiently Stream Data into Your Medallion Architec...
 
Coding a SaaS
Coding a SaaSCoding a SaaS
Coding a SaaS
 
Web前端性能优化 2014
Web前端性能优化 2014Web前端性能优化 2014
Web前端性能优化 2014
 
Introducing MongoDB Stitch, Backend-as-a-Service from MongoDB
Introducing MongoDB Stitch, Backend-as-a-Service from MongoDBIntroducing MongoDB Stitch, Backend-as-a-Service from MongoDB
Introducing MongoDB Stitch, Backend-as-a-Service from MongoDB
 
Compliance Superpowers - Ben Blair, Chicago
Compliance Superpowers - Ben Blair, ChicagoCompliance Superpowers - Ben Blair, Chicago
Compliance Superpowers - Ben Blair, Chicago
 
ql.io at NodePDX
ql.io at NodePDXql.io at NodePDX
ql.io at NodePDX
 
"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk
"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk
"Fintech inside of a SaaS powered by 2000+ Microservices", Volodymyr Malyk
 
[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote[MongoDB.local Bengaluru 2018] Keynote
[MongoDB.local Bengaluru 2018] Keynote
 
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
Jonathan Ellis "Apache Cassandra 2.0 and 2.1". Выступление на Cassandra conf ...
 
Learn to use Stratio Crossdata
Learn to use Stratio CrossdataLearn to use Stratio Crossdata
Learn to use Stratio Crossdata
 
Beyond php - it's not (just) about the code
Beyond php - it's not (just) about the codeBeyond php - it's not (just) about the code
Beyond php - it's not (just) about the code
 
When it all GOes right
When it all GOes rightWhen it all GOes right
When it all GOes right
 
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
PostgreSQL - масштабирование в моде, Valentine Gogichashvili (Zalando SE)
 
3452 - Managing your applications
3452 - Managing your applications3452 - Managing your applications
3452 - Managing your applications
 
Beyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the codeBeyond PHP - it's not (just) about the code
Beyond PHP - it's not (just) about the code
 
Beyond CSS Architecture
Beyond CSS ArchitectureBeyond CSS Architecture
Beyond CSS Architecture
 
Apache Pinot Meetup Sept02, 2020
Apache Pinot Meetup Sept02, 2020Apache Pinot Meetup Sept02, 2020
Apache Pinot Meetup Sept02, 2020
 
Probo.ci Drupal 4 Gov Devops 1/2 day Presentation
Probo.ci Drupal 4 Gov Devops 1/2 day Presentation Probo.ci Drupal 4 Gov Devops 1/2 day Presentation
Probo.ci Drupal 4 Gov Devops 1/2 day Presentation
 

Más de Mu Chun Wang

Más de Mu Chun Wang (20)

如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
 
深入淺出 autocomplete
深入淺出 autocomplete深入淺出 autocomplete
深入淺出 autocomplete
 
你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事
 
網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體
 
老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統
 
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
 
Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Funliday 新創生活甘苦談
Funliday 新創生活甘苦談
 
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
 
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件
 
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 
Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?
 
Git 可以做到的事
Git 可以做到的事Git 可以做到的事
Git 可以做到的事
 
那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-Control那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-Control
 
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 Library
 
如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌如何與 Git 優雅地在樹上唱歌
如何與 Git 優雅地在樹上唱歌
 
API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一
 
Git 經驗分享
Git 經驗分享Git 經驗分享
Git 經驗分享
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 

Último

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Último (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 

How to build a scalable SNS using HBase