SlideShare a Scribd company logo
1 of 188
Download to read offline
How to build a scalable
SNS via Polling & Push
Kewang
三竹資訊
2
Who I am
●
王慕羣
● Java / Node.js / AngularJS
● SQL-like / HBase
● Mentor: NIU CSIE
GitHub: kewang
Google Play: 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 買東西、手機逛週年慶、財政園地、證交
所、綜所稅申報 ... 等
18
System Architecture
19
System Architecture
20
System Architecture (Backend)
21
System Architecture (Backend)
HadoopCon 2014
22
System Architecture (Frontend)
23
Agenda
● Variety of sync mechanisms
● Polling & Push
● RESTful API Design
● API Blueprint
24
Variety of sync mechanisms
25
Variety of sync mechanisms
● Polling
● Comet
● Long Polling
● WebSocket
● Engine.IO (Socket.IO)
26
Polling
send scheduling request
27
Polling
client server
28
Polling
client server
T0
T1
T2
29
Polling
client server
T0
T1
T2
T4
T5
T6
30
Polling
client server
T0
T1
T2
T4
T5
T6
T8
T9
T10
31
Polling
● Pros
– Easy to implement
● Cons
– No efficiency
32
Comet
a never died HTTP request
33
Comet
client server
34
Comet
client server
T0
T1
35
Comet
client server
T0
T1
36
Comet
client server
T0
T1
T3
T2
37
Comet
client server
T0
T1
T3
T6
T2
T5
38
Comet
client server
T0
T1
T3
T6
T8
T2
T5
T7
39
Comet
client server
T0
T1
T3
T6
T8
T12
T2
T5
T7
T11
40
Comet
● Pros
– Save more network traffic
● Cons
– Blocking IO issue
– Always get server response, can't send another request
41
Long Polling
send a long time request repeatedly
when response received
42
Long Polling
client server
43
Long Polling
client server
T0
T1
44
Long Polling
client server
T0
T1
45
Long Polling
client server
T0
T1
T4
T3
46
Long Polling
client server
T0
T1
T4
T3
T5
47
Long Polling
client server
T0
T1
T4
T3
T5
48
Long Polling
client server
T0
T1
T4
T3
T5
T21
T20
49
Long Polling
● Pros
– Save a little network traffic
– Can send another request
● Cons
– I don't know
50
WebSocket
FDX communications channels
over a single TCP connection
51
WebSocket
client server
52
WebSocket
client server
53
WebSocket
client server
T0
T1
T2
54
WebSocket
client server
T0
T1
T2
T3
T4
T5
55
WebSocket
client server
T0
T1
T2
T3
T4
T5
T9
T10
T11
56
WebSocket
client server
T0
T1
T2
T3
T4
T5
T17
T18
T19
T9
T10
T11
57
WebSocket
● Pros
– Bidirectional communication
– Save more network traffic
● Cons
– Proxy & Firewall issue
58
Engine.IO
communication layer for Socket.IO
59
Engine.IO - Socket.IO history
0.1~0.6.2 0.6.3~0.6.17 0.7.0~0.9.17 1.0.0~now
websocket ✓ ✓ ✓ ✓
server-events ✓
flashsocket ✓ ✓ ✓
htmlfile ✓ ✓
xhr-multipart ✓ ✓
xhr-polling ✓ ✓ ✓
jsonp-polling ✓
polling ✓
60
Engine.IO - Overview
61
Engine.IO - Overview
● Ensure the most reliable realtime communication
62
Engine.IO - Overview
● Ensure the most reliable realtime communication
● Always establishes a long-polling connection first
63
Engine.IO - Overview
● Ensure the most reliable realtime communication
● Always establishes a long-polling connection first
– then tries to upgrade to better transports that are
"tested" on the side
64
Engine.IO - Upgrade transport seamlessly
65
Engine.IO - Upgrade transport seamlessly
● Switches from polling to another transport in
between polling cycles
66
Engine.IO - Upgrade transport seamlessly
● Switches from polling to another transport in
between polling cycles
● To ensure no messages are lost, the upgrade packet
will only be sent once all the buffers of the existing
transport are flushed and the transport is
considered paused
67
Engine.IO
client server
68
Engine.IO
client server
T0
T1
69
Engine.IO
client server
T0
T1
70
Engine.IO
client server
T0
T1
71
Engine.IO
client server
T0
T1
T6
T5
T7
72
Engine.IO
client server
T0
T1
T11
T6
T5
T7
T10
73
Engine.IO
client server
T0
T1
T11
T6
T5
T7
T10
74
Engine.IO
client server
T0
T1
T11
T6
T12
T13
T14
T5
T7
T10
75
Engine.IO
● Pros
– Auto-switch different network scenario
● Cons
– Use particular protocol at server & client
76
Polling & Push
77
Why we don't use WebSocket
● Server
– Many corporate proxies block WebSocket traffic
● Client
– Many personal firewalls and antivirus softwares block
WebSocket traffic
78
Push != Notification
79
Push != Notification
80
Push != Notification
Push Notification
Notification
Push Notification
Notification
81
Push - Overview
● Non-IM
– Breaking news notification
– Remittance notification
– Call off work notification
– Email notification
– ......etc.
● IM
– Message notification
82
How it works?
83
When unsafe APIs done - Server
1.Store affected devices' ID & API ID to database
2.Send Push to affected devices
84
When unsafe APIs done - Client
● Send an unified GET request
– GET /datas
85
When unsafe APIs done - Client
● Send an unified GET request
– GET /datas
● Push off
– apply frequency rapidly to achieve realtime, but waste
resources
86
When unsafe APIs done - Client
● Send an unified GET request
– GET /datas
● Push off
– apply frequency rapidly to achieve realtime, but waste
resources
● Push on
– apply frequency long to save resources
– when Push comes, send request to get newest data to
achieve realtime
87
Push - Push off
client server
88
Push - Push off
client server
T0
T1
T2
89
Push - Push off
client server
T0
T1
T2
T4
T5
T6
90
Push - Push off
client server
T0
T1
T2
T4
T5
T6
T8
T9
T10
91
Push - Push on
client server SNS
92
Push - Push on
client server
T0
T1
T2
SNS
93
Push - Push on
client server
T0
T1
T2
T22
T23
T24
SNS
94
Push - Push on
client server
T0
T1
T2
T22
T23
T24
SNS
T30
95
Push - Push on
client server
T0
T1
T2
T22
T23
T24
T31
T32
T33
SNS
T30
96
Fallback
● Don't polling everything
● Every GET APIs provide UI operation
97
Fallback
98
RESTful API design
99
RESTful API Design
● HTTP method
● Common examples
● Is Graph API RESTful?
● Actual example
● Internal & Open API
100
GET - Retrieve a resource
● A request to the server should never change the
resource state
101
GET - Retrieve a resource
● A request to the server should never change the
resource state
● Incidental side effects are OK
– Like logging
102
GET - Retrieve a resource
● A request to the server should never change the
resource state
● Incidental side effects are OK
– Like logging
● Common response code
– 200 OK
103
GET - Retrieve a resource
● A request to the server should never change the
resource state
● Incidental side effects are OK
– Like logging
● Common response code
– 200 OK
– 301 Moved Permanently
104
GET - Retrieve a resource
● A request to the server should never change the
resource state
● Incidental side effects are OK
– Like logging
● Common response code
– 200 OK
– 301 Moved Permanently
– 404 Not Found (related to DELETE)
– 410 Gone (related to DELETE)
105
DELETE - Remove a resource
● A request to the server should destroy the
resource & never refer to it again
106
DELETE - Remove a resource
● A request to the server should destroy the
resource & never refer to it again
● Common response code
– 200 OK
– 202 Accepted
– 204 No Content
107
POST
108
POST
● POST-to-append
109
POST
● POST-to-append
● Overloaded POST
110
POST-to-append
● A request to the server should create a new
resource
111
POST-to-append
● A request to the server should create a new
resource
● Common response code
– 201 Created
112
POST-to-append
● A request to the server should create a new
resource
● Common response code
– 201 Created (plus "Location" header)
113
POST-to-append
● A request to the server should create a new
resource
● Common response code
– 201 Created (plus "Location" header)
– 202 Accepted
114
Overloaded POST
● Providing a block of data, such as the result of
submitting a form, to a data-handling process
115
Overloaded POST
● Providing a block of data, such as the result of
submitting a form, to a data-handling process
● "Data-handling process" can be anything
116
Overloaded POST
● Providing a block of data, such as the result of
submitting a form, to a data-handling process
● "Data-handling process" can be anything
– POST /users/sort
117
Overloaded POST
● Providing a block of data, such as the result of
submitting a form, to a data-handling process
● "Data-handling process" can be anything
– POST /users/sort
– POST /login
118
Overloaded POST
● Providing a block of data, such as the result of
submitting a form, to a data-handling process
● "Data-handling process" can be anything
– POST /users/sort
– POST /login
– ...etc.
119
PUT - Update a resource
● A request to the server should modify the resource
120
PUT - Update a resource
● A request to the server should modify the resource
● Common response code
– 200 OK
– 204 No Content
121
Idempotent & Safe
122
Idempotent & Safe
● Idempotent
– A HTTP method can be called many times without
different outcomes
123
Idempotent & Safe
● Idempotent
– A HTTP method can be called many times without
different outcomes
● Safe
– Do not modify resources
124
Idempotent & Safe
Idempotent Safe
GET yes yes
DELETE yes no
POST no no
PUT yes no
125
Common examples
126
GET /users
127
GET /users
● Retrieve all users' brief
128
GET /users
● Retrieve all users' brief
{
"users": [
{
"name": "kewang",
"slogan": "Hello World"
},
{
"name": "Tony Stark",
"slogan": "I'm Iron Man"
},
{
"name": "America captain",
"slogan": "U.S.A."
}
]
}
129
GET /users/:user_id
130
GET /users/:user_id
● Retrieve a specific user information
131
GET /users/:user_id
● Retrieve a specific user information
{
"name": "kewang",
"slogan": "Hello World",
"birthday": "19831108",
"sex": 0,
"email": [
"cpckewang@gmail.com",
"kewang@mitake.com.tw"
],
"company": "mitake"
}
132
GET /users/:user_id/avatars
133
GET /users/:user_id/avatars
● Retrieve a specific user's all avatars' URL
134
GET /users/:user_id/avatars
● Retrieve a specific user's all avatars' URL
{
"avatars": [
{
"url": "http://www.s3.com/abc.png",
"created": 1413385358
},
{
"url": "http://www.s3.com/def.png",
"created": 1401239876
},
{
"url": "http://www.s3.com/ghi.png",
"created": 1348303844
}
]
}
135
GET /users/:user_id/avatar
136
GET /users/:user_id/avatar
● Retrieve a specific user's avatar URL
137
GET /users/:user_id/avatar
● Retrieve a specific user's newest avatar URL
138
GET /users/:user_id/avatar
● Retrieve a specific user's newest avatar URL
{
"url": "http://www.s3.com/abc.png"
}
139
Is Graph API RESTful?
Facebook powered
140
Graph API - Overview
Graph API - Overview
● Everything is a "node" has a unique ID
142
Graph API - Overview
● Everything is a "node" has a unique ID
● Two nodes connect each other with a "edge"
143
Graph API - Overview
● Everything is a "node" has a unique ID
● Two nodes connect each other with a "edge"
● A node information contains some "fields"
144
Graph API - Are two people friends?
● GET /{user-a-id}/friends/{user-b-id}
145
Graph API - Does someone like a Page?
● GET /{user-id}/likes/{page-id}
146
Graph API - Publishing new Status Updates
● POST /{user-id}/feed
● POST /{page-id}/feed
147
Graph API - Uploading Photos
● POST /{user-id}/photos
● POST /{page-id}/photos
● POST /{album-id}/photos
148
So, Graph API is RESTful?
149
Graph API isn't RESTful
Deprecating the REST API
150
An actual example
Kick a user from system
151
V1 - Kick a user from system
152
V1 - Kick a user from system
● Kick by myself
153
V1 - Kick a user from system
● Kick by myself
– DELETE /me
154
V1 - Kick a user from system
● Kick by myself
– DELETE /me
● Kick somebody
155
V1 - Kick a user from system
● Kick by myself
– DELETE /me
● Kick somebody
– DELETE /:user_id
156
V2 - Restore a user to system
157
V2 - Restore a user to system
● PUT /:user_id
158
V2 - Restore a user to system
● PUT /:user_id
– Restore somebody to system
159
V2 - Restore a user to system
● PUT /:user_id
– Restore somebody to system
– Change somebody information
160
V3 - Update a user status
161
V3 - Update a user status
● PUT /:user_id/status
162
V3 - Update a user status
● PUT /:user_id/status
– Kick somebody from system
163
V3 - Update a user status
● PUT /:user_id/status
– Kick somebody from system
– Restore somebody to system
164
Internal & Open API
165
Internal API design guideline
166
Internal API design guideline
● Minimize data size
167
Internal API design guideline
● Minimize data size
● Merge operations
168
Internal API design guideline
● Minimize data size
● Merge operations
● Field names are short & convoluted
169
Internal API design guideline
● Minimize data size
● Merge operations
● Field names are short & convoluted
● Customize request & response for official apps
170
Open API design guideline
171
Open API design guideline
● Minimize data size
172
Open API design guideline
● Minimize data size
● Field names are simple & clear
173
Open API design guideline
● Minimize data size
● Field names are simple & clear
● Build request & response generally
174
Differences - GET /users
Internal API
{
"us": [{
"id": "2d3f1a",
"nm": "Kewang",
"el": "kkk@mail.com"
}, {
"id": "9a4f57",
"nm": "Hans",
"el": "hhh@mail.com"
}]
}
Open API
{
"users": [{
"id": "2d3f1a",
"name": "Kewang"
}, {
"id": "9a4f57",
"name": "Hans"
}]
}
175
API Blueprint
176
API Blueprint
● Introduction
● Aglio
● API-Mock
● Postman
177
Introduction
● Web API Language
● Pure Markdown
● Design for Humans
● Understandable by Machines
● Powerful Tooling
● Easy Lifecycle
178
Hello World
179
Complex example
180
Aglio - API Blueprint renderer
181
Aglio - Complex example
182
API-Mock & Postman
183
Live DEMO
184
References
185
References
186
References
●
Browser 與 Server 持續同步的作法介紹
● Comet (programming)
● Engine.IO: the realtime engine
● Engine.IO Protocol
● API Design Optimized for Mobile Platform
● HTTP GET with request body
● Does Google treat 404 and 410 status code differen
tly
187
188

More Related Content

What's hot

What's hot (20)

Namespaces for Local Networks
Namespaces for Local NetworksNamespaces for Local Networks
Namespaces for Local Networks
 
4Developers: Dns vs webapp
4Developers: Dns vs webapp4Developers: Dns vs webapp
4Developers: Dns vs webapp
 
DNSSEC signing Tutorial
DNSSEC signing Tutorial DNSSEC signing Tutorial
DNSSEC signing Tutorial
 
DNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing SolutionsDNS High-Availability Tools - Open-Source Load Balancing Solutions
DNS High-Availability Tools - Open-Source Load Balancing Solutions
 
DNSTap Webinar
DNSTap WebinarDNSTap Webinar
DNSTap Webinar
 
Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1Phd tutorial hawq_v0.1
Phd tutorial hawq_v0.1
 
Http caching basics
Http caching basicsHttp caching basics
Http caching basics
 
Replication skeptic
Replication skepticReplication skeptic
Replication skeptic
 
2017 DNSSEC KSK Rollover
2017 DNSSEC KSK Rollover2017 DNSSEC KSK Rollover
2017 DNSSEC KSK Rollover
 
Docker and Fargate
Docker and FargateDocker and Fargate
Docker and Fargate
 
Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]Caching the Uncacheable [Long Version]
Caching the Uncacheable [Long Version]
 
BIND 9 logging best practices
BIND 9 logging best practicesBIND 9 logging best practices
BIND 9 logging best practices
 
Rolling the Root KSK
Rolling the Root KSKRolling the Root KSK
Rolling the Root KSK
 
The DNSSEC KSK of the root rolls
The DNSSEC KSK of the root rollsThe DNSSEC KSK of the root rolls
The DNSSEC KSK of the root rolls
 
Passive DNS Collection -- the 'dnstap' approach, by Paul Vixie [APNIC 38 / AP...
Passive DNS Collection -- the 'dnstap' approach, by Paul Vixie [APNIC 38 / AP...Passive DNS Collection -- the 'dnstap' approach, by Paul Vixie [APNIC 38 / AP...
Passive DNS Collection -- the 'dnstap' approach, by Paul Vixie [APNIC 38 / AP...
 
What is new in BIND 9.11?
What is new in BIND 9.11?What is new in BIND 9.11?
What is new in BIND 9.11?
 
Part 3 - Local Name Resolution in Linux, FreeBSD and macOS/iOS
Part 3 - Local Name Resolution in Linux, FreeBSD and macOS/iOSPart 3 - Local Name Resolution in Linux, FreeBSD and macOS/iOS
Part 3 - Local Name Resolution in Linux, FreeBSD and macOS/iOS
 
FIWARE Data Management in High Availability
FIWARE Data Management in High AvailabilityFIWARE Data Management in High Availability
FIWARE Data Management in High Availability
 
Windows Server 2016 Webinar
Windows Server 2016 WebinarWindows Server 2016 Webinar
Windows Server 2016 Webinar
 
ModSecurity 3.0 and NGINX: Getting Started - EMEA
ModSecurity 3.0 and NGINX: Getting Started - EMEAModSecurity 3.0 and NGINX: Getting Started - EMEA
ModSecurity 3.0 and NGINX: Getting Started - EMEA
 

Viewers also liked

Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
Dan McKinley
 
Big Data in Real-Time at Twitter
Big Data in Real-Time at TwitterBig Data in Real-Time at Twitter
Big Data in Real-Time at Twitter
nkallen
 
Cracking the Facebook Coding Interview
Cracking the Facebook Coding InterviewCracking the Facebook Coding Interview
Cracking the Facebook Coding Interview
Gayle McDowell
 

Viewers also liked (14)

為什麼Method數超過65535會build fail?
為什麼Method數超過65535會build fail?為什麼Method數超過65535會build fail?
為什麼Method數超過65535會build fail?
 
The inherent complexity of stream processing
The inherent complexity of stream processingThe inherent complexity of stream processing
The inherent complexity of stream processing
 
Android architecture blueprints overview
Android architecture blueprints overviewAndroid architecture blueprints overview
Android architecture blueprints overview
 
大型App面臨的挑戰
大型App面臨的挑戰大型App面臨的挑戰
大型App面臨的挑戰
 
Demystifying Data Engineering
Demystifying Data EngineeringDemystifying Data Engineering
Demystifying Data Engineering
 
The Secrets of Building Realtime Big Data Systems
The Secrets of Building Realtime Big Data SystemsThe Secrets of Building Realtime Big Data Systems
The Secrets of Building Realtime Big Data Systems
 
Rxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJavaRxjava 介紹與 Android 中的 RxJava
Rxjava 介紹與 Android 中的 RxJava
 
Model View Presenter for Android
Model View Presenter for AndroidModel View Presenter for Android
Model View Presenter for Android
 
Facebook Architecture - Breaking it Open
Facebook Architecture - Breaking it OpenFacebook Architecture - Breaking it Open
Facebook Architecture - Breaking it Open
 
facebook architecture for 600M users
facebook architecture for 600M usersfacebook architecture for 600M users
facebook architecture for 600M users
 
Big Data Architecture
Big Data ArchitectureBig Data Architecture
Big Data Architecture
 
Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
 
Big Data in Real-Time at Twitter
Big Data in Real-Time at TwitterBig Data in Real-Time at Twitter
Big Data in Real-Time at Twitter
 
Cracking the Facebook Coding Interview
Cracking the Facebook Coding InterviewCracking the Facebook Coding Interview
Cracking the Facebook Coding Interview
 

Similar to How to build a scalable SNS via Polling & Push

Aditya - Hacking Client Side Insecurities - ClubHack2008
Aditya - Hacking Client Side Insecurities - ClubHack2008Aditya - Hacking Client Side Insecurities - ClubHack2008
Aditya - Hacking Client Side Insecurities - ClubHack2008
ClubHack
 
Firebase introduction
Firebase introductionFirebase introduction
Firebase introduction
Mu Chun Wang
 

Similar to How to build a scalable SNS via Polling & Push (20)

Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
Cross the Streams! Creating Streaming Data Pipelines with Apache Flink + Apac...
 
Aditya - Hacking Client Side Insecurities - ClubHack2008
Aditya - Hacking Client Side Insecurities - ClubHack2008Aditya - Hacking Client Side Insecurities - ClubHack2008
Aditya - Hacking Client Side Insecurities - ClubHack2008
 
Web前端性能优化 2014
Web前端性能优化 2014Web前端性能优化 2014
Web前端性能优化 2014
 
CIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEMCIRCUIT 2015 - Monitoring AEM
CIRCUIT 2015 - Monitoring AEM
 
Information Technology - Discover the Root Cause and Develop a solution throu...
Information Technology - Discover the Root Cause and Develop a solution throu...Information Technology - Discover the Root Cause and Develop a solution throu...
Information Technology - Discover the Root Cause and Develop a solution throu...
 
Making the Most of HTTP In Your Apps
Making the Most of HTTP In Your AppsMaking the Most of HTTP In Your Apps
Making the Most of HTTP In Your Apps
 
The Hacking Games - A Road to Post Exploitation Meetup - 20240222.pptx
The Hacking Games - A Road to Post Exploitation Meetup - 20240222.pptxThe Hacking Games - A Road to Post Exploitation Meetup - 20240222.pptx
The Hacking Games - A Road to Post Exploitation Meetup - 20240222.pptx
 
Presto Summit 2018 - 07 - Lyft
Presto Summit 2018 - 07 - LyftPresto Summit 2018 - 07 - Lyft
Presto Summit 2018 - 07 - Lyft
 
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitchesDEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
DEF CON 23 - CASSIDY LEVERETT LEE - switches get stitches
 
Autonomous Transaction Processing (ATP): In Heavy Traffic, Why Drive Stick?
Autonomous Transaction Processing (ATP): In Heavy Traffic, Why Drive Stick?Autonomous Transaction Processing (ATP): In Heavy Traffic, Why Drive Stick?
Autonomous Transaction Processing (ATP): In Heavy Traffic, Why Drive Stick?
 
Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014Recipes for a successful production cloudfoundry deployment - CF Summit 2014
Recipes for a successful production cloudfoundry deployment - CF Summit 2014
 
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
Cloud Foundry Cookbook: Recipes for a Successful Cloud Foundry Deployment in ...
 
Stateful Stream Processing at In-Memory Speed
Stateful Stream Processing at In-Memory SpeedStateful Stream Processing at In-Memory Speed
Stateful Stream Processing at In-Memory Speed
 
Swift distributed tracing method and tools v2
Swift distributed tracing method and tools v2Swift distributed tracing method and tools v2
Swift distributed tracing method and tools v2
 
Firebase introduction
Firebase introductionFirebase introduction
Firebase introduction
 
OSA Con 2022 - Specifics of data analysis in Time Series Databases - Roman Kh...
OSA Con 2022 - Specifics of data analysis in Time Series Databases - Roman Kh...OSA Con 2022 - Specifics of data analysis in Time Series Databases - Roman Kh...
OSA Con 2022 - Specifics of data analysis in Time Series Databases - Roman Kh...
 
[WSO2Con EU 2018] The Rise of Streaming SQL
[WSO2Con EU 2018] The Rise of Streaming SQL[WSO2Con EU 2018] The Rise of Streaming SQL
[WSO2Con EU 2018] The Rise of Streaming SQL
 
WAF Bypass Techniques - Using HTTP Standard and Web Servers’ Behaviour
WAF Bypass Techniques - Using HTTP Standard and Web Servers’ BehaviourWAF Bypass Techniques - Using HTTP Standard and Web Servers’ Behaviour
WAF Bypass Techniques - Using HTTP Standard and Web Servers’ Behaviour
 
Openstack Summit Vancouver 2015 - Maintaining and Operating Swift at Public C...
Openstack Summit Vancouver 2015 - Maintaining and Operating Swift at Public C...Openstack Summit Vancouver 2015 - Maintaining and Operating Swift at Public C...
Openstack Summit Vancouver 2015 - Maintaining and Operating Swift at Public C...
 
Analyzing NGINX Logs with Datadog
Analyzing NGINX Logs with DatadogAnalyzing NGINX Logs with Datadog
Analyzing NGINX Logs with Datadog
 

More from Mu Chun Wang

More from 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 推薦景點計算速度
 
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 文件規範的三大領頭之一
 
團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作
 
Git 經驗分享
Git 經驗分享Git 經驗分享
Git 經驗分享
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 

Recently uploaded

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
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

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
 
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
 
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
 
🐬 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...
 
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
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
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
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
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
 

How to build a scalable SNS via Polling & Push