SlideShare ist ein Scribd-Unternehmen logo
1 von 98
Downloaden Sie, um offline zu lesen
Integrating Multiple CDN Providers
Our experiences at Etsy

@lozzd • @ickymettle
Marcus Barczak

Laurie Denness

Staff Operations Engineers
@lozzd • @ickymettle
@lozzd • @ickymettle
Beginning of 2010

Today
@lozzd • @ickymettle
Background
▪ First started using a single CDN in 2008
▪ Exponential Growth
▪ Start of 2012 began investigation into running

multiple CDNs

@lozzd • @ickymettle
Why use a CDN?
▪ Goal: Consistently fast user experience globally
▪ Improve last mile performance by caching content

close to the user
▪ Offload content delivery from origin infrastructure
to the CDN provider

@lozzd • @ickymettle
Why use more than one CDN?
▪ Resilience
-

Eliminate single point of failure

▪ Flexibility
-

Balance traffic based on business requirements

▪ Cost
-

Manage provider costs
@lozzd • @ickymettle
The Plan

http://www.flickr.com/photos/malloy/195204215
The Plan
1. Establish evaluation criteria
2. Initial configuration and testing
3. Test with production traffic
4. Operationalising

@lozzd • @ickymettle
Evaluation Criteria

@lozzd • @ickymettle
http://www.flickr.com/photos/49212595@N00/5646403386
Evaluation Criteria
▪ Performance
▪ Configuration
▪ Reporting, Metrics and Logging
▪ Culture

@lozzd • @ickymettle
Performance
▪ Baseline Response Times
-

Should be within ±5% of our existing CDN provider’s
response times

▪ Hit Ratios and Origin Offload
-

Provider should achieve equivalent or better origin offload
performance and hit ratios

@lozzd • @ickymettle
Configuration
▪ Complexity
-

how complex is the providers configuration system

▪ Self service
-

can you make changes directly or do they require
professional services or other intervention

▪ Latency for changes
-

how quickly do changes take to propagate
@lozzd • @ickymettle
Reporting, Metrics and Logging
▪ Resolution
▪ Latency
▪ Delivery
▪ Customisation

@lozzd • @ickymettle
Culture
▪ Understand our culture
▪ Postmortems
▪ Access to technical staff
▪ Shared success

@lozzd • @ickymettle
Initial
Configuration
and Testing

http://www.flickr.com/photos/7269902@N07/4592239326
Clean the house
http://www.flickr.com/photos/mastergeorge/8562623590
Clean the house
▪ Managing caching TTLs from origin
-

CDNs honour the origin cache-control headers!

<LocationMatch ".(gif|jpg|jpeg|png|css|js)$">
Header set Cache-Control "max-age=94670800"
</LocationMatch>

@lozzd • @ickymettle
Clean the house
▪ Manage gzip compression from origin
-

Honoured by CDNs

-

Compression from origin to CDN

## mod_deflate compression - see OPS-1537 ##
AddOutputFilterByType DEFLATE text/html text/plain
text/css application/x-javascript [..]

@lozzd • @ickymettle
Clean the house
If you can do it at origin,
do it at origin

@lozzd • @ickymettle
Mean Time To Curl
http://www.flickr.com/photos/wwarby/3297205226
curl -i -H 'Host: img0.etsystatic.com' 
global-ssl.fastly.net/someimage.jpg
HTTP/1.1 200 OK
Server: Apache
Last-Modified: Sat, 09 Nov 2013 23:43:38 GMT
Cache-Control: max-age=94670800
[...]
X-Served-By: cache-lo82-LHR
X-Cache: MISS
X-Cache-Hits: 0
curl -i -H 'Host: img0.etsystatic.com' 
global-ssl.fastly.net/someimage.jpg
HTTP/1.1 200 OK
Server: Apache
Last-Modified: Sat, 09 Nov 2013 23:43:38 GMT
Cache-Control: max-age=94670800
[...]
X-Served-By: cache-lo82-LHR
X-Cache: HIT
X-Cache-Hits: 1
Mean Time To Curl = Done
https://www.etsy.com/listing/99871278
Mean Time To Curl
▪ No need to touch existing infrastructure
▪ Smoke test of functionality
▪ 10 minutes from configuration to curl
▪ New providers should be plug and play

@lozzd • @ickymettle
Testing In Production
http://www.flickr.com/photos/solarnu/10646426865
Testing with Production Traffic
▪ Images only at first
▪ Good test of caching performance
▪ Easy to test by swapping hostnames
▪ Made even easier with our A/B testing framework

@lozzd • @ickymettle
A/B Test Framework
▪ Fine grained control
▪ Enable test for specific users or groups
▪ Percentage of users
▪ All controlled via configuration in code
▪ Rapid and complete rollback

@lozzd • @ickymettle
Configure Mappings to CDNs
$server_config["image"] = array(
'akamai' => array(
'img0-ak.etsystatic.com',
'img1-ak.etsystatic.com',
),
'edgecast' => array(
'img0-ec.etsystatic.com',
'img1-ec.etsystatic.com',
),
'fastly' => array(
'img0-f.etsystatic.com',
'img1-f.etsystatic.com',
),
);

@lozzd • @ickymettle
Test Controls
$server_config['ab']['cdn'] = array(
'enabled' => 'on',
'weights' => array(
'akamai'
=> 0.0,
'edgecast' => 0.0,
'fastly'
=> 0.0,
'origin'
=> 100.0,
),
'override' => 'cdn_diversity',
);

@lozzd • @ickymettle
Metrics and Monitoring

@lozzd • @ickymettle
http://www.flickr.com/photos/nicolasfleury/6073151084
Metrics and Monitoring

Even if it doesn’t move, graph it anyway
@lozzd • @ickymettle
Metrics and Monitoring
Simplest approach: Provider’s dashboards

@lozzd • @ickymettle
Metrics and Monitoring
▪ Get more detail by pulling metrics in house
▪ Write script to pull data from API
▪ Create dashboards with data

@lozzd • @ickymettle
Metrics and Monitoring
▪ Get more detail by pulling metrics in house
▪ Write script to pull data from API
▪ Create dashboards with data

@lozzd • @ickymettle
Metrics and Monitoring

@lozzd • @ickymettle
Metrics and Monitoring

@lozzd • @ickymettle
Testing Plan
1. for c in $cdns; do rampup $c; done;
2. Deliberately slow and steady
3. Watch traffic increase
4. Watch origin offload increase
5. Watch performance

@lozzd • @ickymettle
Downsides of this approach
▪ AB testing can’t be used for main site
▪ Exposing your test CNAMEs
▪ Especially if hotlinking is a concern

@lozzd • @ickymettle
Downsides of this approach
▪ Exposing your test CNAMEs
▪ Especially if hotlinking is a concern

@lozzd • @ickymettle
How do you know it’s broke?
▪ Check the graphs!
▪ Check with your community
▪ Keep support in the loop

@lozzd • @ickymettle
Operationalising

http://www.flickr.com/photos/98047351@N05/9706165200
Content Partitioning

@lozzd • @ickymettle
Etsy’s site partitioning
Dynamic HTML Content
www.etsy.com

@lozzd • @ickymettle
Etsy’s site partitioning

Static Assets (js, css, fonts)
site.etsystatic.com

@lozzd • @ickymettle
Etsy’s site partitioning
Listing Images, Avatars
imgX.etsystatic.com

@lozzd • @ickymettle
Etsy’s site partitioning
Dynamic HTML Content
www.etsy.com
Static Assets (js, css, fonts)
site.etsystatic.com
Listing Images, Avatars
imgX.etsystatic.com

@lozzd • @ickymettle
Balancing Traffic in
Production

http://www.flickr.com/photos/wok_design/2499217405
Balancing Traffic Using DNS
▪ Traffic Manager
▪ Extends DNS to dynamically return records based

on rules
▪ Weighted round robin

@lozzd • @ickymettle
Balancing Traffic Using DNS
[2589:~] $ dig +short www.etsy.com
www.etsy.com.edgekey.net.
e2463.b.akamaiedge.net.
23.74.122.37
[2589:~] $ dig +short www.etsy.com
[2589:~] $ dig +short www.etsy.com
etsy.com.
cs34.adn.edgecastcdn.net.
38.123.123.123
93.184.219.54
[2589:~] $ dig +short www.etsy.com
global-ssl.fastly.net.
185.31.19.184

@lozzd • @ickymettle
Balancing Traffic Using DNS
[2589:~] $ dig +short www.etsy.com
etsy.com.
[2589:~] $ dig +short www.etsy.com
38.123.123.123
www.etsy.com.edgekey.net.
e2463.b.akamaiedge.net.
23.74.122.37
[2589:~] $ dig +short www.etsy.com
cs34.adn.edgecastcdn.net.
93.184.219.54
[2589:~] $ dig +short www.etsy.com
global-ssl.fastly.net.
185.31.19.184

@lozzd • @ickymettle
Balancing Traffic Using DNS
▪ Rule updates typically made via web UI
▪ Can be slow and error prone
▪ Changes need to be applied to all three domains
▪ API available to make changes programmatically

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
http://www.flickr.com/photos/foshydog/4441105829
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
cdncontrol

@lozzd • @ickymettle
DNS balancing downsides
▪ Low TTLs for fast convergence
▪ Mo QPS == Mo Money
▪ More DNS lookups for users
▪ Not 100% instant or

deterministic

@lozzd • @ickymettle
50% within 1
minute
Long Tail is Loooong

@lozzd • @ickymettle
Monitoring in Production
@lozzd • @ickymettle
http://www.flickr.com/photos/9229426@N05/5160787240
Whoopsie Page
▪ Static HTML delivered for 5xx errors
-

Branding

-

Translated error messages

-

Links to status page

@lozzd • @ickymettle
Whoopsie Page
▪ Static HTML delivered for 5xx errors
-

Branding

-

Translated error messages

-

Links to status page

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
[...]
<img src="//failure.etsy.com/status/images/beacon.gif?
beacon_source=fastly_origin_failure-etsy.com">
</body>
</html>

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line
3. Scrape them out minutely using logster
self.reg = re.compile('^S+(s:)? (?P<remote_addr>[0-9.]+),?
[0-9.,- ]+ [[^]]+] "GET /status/images/beacon.gif?
(beacon_)?source=(?P<source>S+) HTTP/1.d" d+ [d-]+ "(?
P<referrer>[^"]+)" "(?P<user_agent>[^"]+)" .*$')

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line
3. Scrape them out minutely using logster
4. Logster posts event counts to Graphite

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line
3. Scrape them out minutely using logster
4. Logster posts event counts to Graphite

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line
3. Scrape them out minutely using logster
4. Logster posts event counts to Graphite
5. Alert on Graphite graph in Nagios

@lozzd • @ickymettle
Failure Beacons
1. 1x1 tracking pixel embedded in page
2. Request creates an access log line
3. Scrape them out minutely using logster
4. Logster posts event counts to Graphite
5. Alert on Graphite graph in Nagios

@lozzd • @ickymettle
Failure Beacons
▪ Client IP address can be geolocated

@lozzd • @ickymettle
Failure Beacons
▪ Optional extra debugging information
[31/Oct/2013:07:06:42 +0000] "GET /status/images/
beacon.gif?beacon_source=fastly_origin_failure-etsy.com
&provider_error=Connection%20timed%20out
&server_identity=cache-ny57-NYC HTTP/1.1"

@lozzd • @ickymettle
Failure Beacons
▪ Optional extra debugging information

@lozzd • @ickymettle
Tracking Requests to Origin
GET / HTTP/1.1
User-Agent: curl/7.24.0
Accept: */*
X-Forwarded-Host: www.etsy.com
[...]
X-CDN-Provider: edgecast
[...]
Host: www.etsy.com

@lozzd • @ickymettle
Tracking Requests to Origin
GET / HTTP/1.1
User-Agent: curl/7.24.0
Accept: */*
X-Forwarded-Host: www.etsy.com
[...]
X-CDN-Provider: edgecast
[...]
Host: www.etsy.com

@lozzd • @ickymettle
Backend Monitoring
▪ Vendor APIs to bring data in house

@lozzd • @ickymettle
Backend Monitoring
▪ Logster on CDN provider header
▪ Vendor APIs to bring data in house

@lozzd • @ickymettle
Backend Monitoring
▪ Vendor APIs to bring data in house
▪ Data in-house benefits include
-

Integration with our anomaly detection systems

-

Consistent and unified view of all CDN metrics

-

We control data retention period

@lozzd • @ickymettle
Awareness
▪ Over 100 engineers
▪ Deploying 60 times a day
▪ Correlating external and internal services

@lozzd • @ickymettle
Awareness

@lozzd • @ickymettle
Awareness
Deploy lines

@lozzd • @ickymettle
Frontend Monitoring
▪ Performance is important to us
▪ Monitoring overall site performance
▪ Monitoring performance by CDN provider
▪ Real User Monitoring on key pages to track page

performance

@lozzd • @ickymettle
Frontend Monitoring
▪ Performance is important to us
▪ Monitoring overall site performance
▪ Monitoring performance by CDN provider
▪ SOASTA mPulse on key pages to track real user

page performance

@lozzd • @ickymettle
Downsides
http://www.flickr.com/photos/39272170@N00/3841286802
Debugging: What broke?
▪ MTTD/MTTR can be extremely low with this

system
▪ But not always

@lozzd • @ickymettle
Debugging: What broke?
▪ MTTD/MTTR can be extremely low with this

system
▪ But not always

@lozzd • @ickymettle
Debugging: What broke?
▪ Non technical member base
▪ Confusing and time consuming
▪ Amazing support team
▪ Log as much information as possible

@lozzd • @ickymettle
http://www.flickr.com/photos/sk8geek/4649776194

Conclusions/Takeaways
Great success
▪ 12 months in the benefits have far outweighed the

few downsides
▪ We’re continuing to evolve the system
▪ We’ll be sure to share our experience with the

community along the way

@lozzd • @ickymettle
Links/Open Source
▪ cdncontrol
http://github.com/etsy/cdncontrol
http://github.com/etsy/cdncontrol_ui

▪ logster
http://github.com/etsy/logster

▪ CDN API to Graphite scripts
http://github.com/lozzd/cdn_scripts
@lozzd • @ickymettle
Thanks!
Questions?
@lozzd • @ickymettle

Weitere ähnliche Inhalte

Was ist angesagt?

GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들DONGMIN LEE
 
AWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリAWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリAmazon Web Services Japan
 
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...Amazon Web Services
 
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...Amazon Web Services
 
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~Amazon Web Services Japan
 
[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様Shuji Kikuchi
 
Testing Android App Bundle with Appium
Testing Android App Bundle with AppiumTesting Android App Bundle with Appium
Testing Android App Bundle with AppiumMasayuki Wakizaka
 
Repository pattern in swift
Repository pattern in swiftRepository pattern in swift
Repository pattern in swiftnaoty_bot
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기Baekjoon Choi
 
AWS Black Belt Online Seminar 2017 Amazon S3
AWS Black Belt Online Seminar 2017 Amazon S3AWS Black Belt Online Seminar 2017 Amazon S3
AWS Black Belt Online Seminar 2017 Amazon S3Amazon Web Services Japan
 
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611樽八 仲川
 
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンスAmazon Web Services Japan
 
[AKIBA.AWS] VPN接続とルーティングの基礎
[AKIBA.AWS] VPN接続とルーティングの基礎[AKIBA.AWS] VPN接続とルーティングの基礎
[AKIBA.AWS] VPN接続とルーティングの基礎Shuji Kikuchi
 
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!Amazon Web Services Japan
 
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計Amazon Web Services Japan
 
CMP315_Optimizing Network Performance for Amazon EC2 Instances
CMP315_Optimizing Network Performance for Amazon EC2 InstancesCMP315_Optimizing Network Performance for Amazon EC2 Instances
CMP315_Optimizing Network Performance for Amazon EC2 InstancesAmazon Web Services
 
개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 introSeongyun Byeon
 

Was ist angesagt? (20)

GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들GCP 자격증 취득 후 찾아온 기회들
GCP 자격증 취득 후 찾아온 기회들
 
AWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリAWSで実現するバックアップとディザスタリカバリ
AWSで実現するバックアップとディザスタリカバリ
 
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
AWS, I Choose You: Pokemon's Battle against the Bots (SEC402-R1) - AWS re:Inv...
 
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...
Optimizing Network Performance for Amazon EC2 Instances (CMP308-R1) - AWS re:...
 
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
AWS Black Belt Online Seminar 2017 AWS体験ハンズオン~Deploy with EB CLI編~
 
[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様[AKIBA.AWS] VGWのルーティング仕様
[AKIBA.AWS] VGWのルーティング仕様
 
RDF 해설서
RDF 해설서RDF 해설서
RDF 해설서
 
Testing Android App Bundle with Appium
Testing Android App Bundle with AppiumTesting Android App Bundle with Appium
Testing Android App Bundle with Appium
 
Repository pattern in swift
Repository pattern in swiftRepository pattern in swift
Repository pattern in swift
 
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
나는 어떻게 알고리즘을 공부했을까? + 신기한 방법으로 문제 풀어보기
 
AWS Black Belt Online Seminar 2017 Amazon S3
AWS Black Belt Online Seminar 2017 Amazon S3AWS Black Belt Online Seminar 2017 Amazon S3
AWS Black Belt Online Seminar 2017 Amazon S3
 
負荷試験入門公開資料 201611
負荷試験入門公開資料 201611負荷試験入門公開資料 201611
負荷試験入門公開資料 201611
 
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス
20190306 AWS Black Belt Online Seminar Amazon EC2 スポットインスタンス
 
[AKIBA.AWS] VPN接続とルーティングの基礎
[AKIBA.AWS] VPN接続とルーティングの基礎[AKIBA.AWS] VPN接続とルーティングの基礎
[AKIBA.AWS] VPN接続とルーティングの基礎
 
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
AWS社員による怒涛のLTチャレンジ! なかなか飛行機に乗れてないので、Ruby on Jetsで飛んでみよう!
 
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
 
AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介AWS Database Migration Service ご紹介
AWS Database Migration Service ご紹介
 
CMP315_Optimizing Network Performance for Amazon EC2 Instances
CMP315_Optimizing Network Performance for Amazon EC2 InstancesCMP315_Optimizing Network Performance for Amazon EC2 Instances
CMP315_Optimizing Network Performance for Amazon EC2 Instances
 
개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro개발자를 위한 (블로그) 글쓰기 intro
개발자를 위한 (블로그) 글쓰기 intro
 
私とmysqlとROLE
私とmysqlとROLE私とmysqlとROLE
私とmysqlとROLE
 

Andere mochten auch

Content Delivery Networks (CDN) Industry Analysis February 2014
Content Delivery Networks (CDN) Industry Analysis February 2014Content Delivery Networks (CDN) Industry Analysis February 2014
Content Delivery Networks (CDN) Industry Analysis February 2014Chris Van Noy
 
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...IDATE DigiWorld
 
BigData & CDN - OOP2011 (Pavlo Baron)
BigData & CDN - OOP2011 (Pavlo Baron)BigData & CDN - OOP2011 (Pavlo Baron)
BigData & CDN - OOP2011 (Pavlo Baron)Pavlo Baron
 
Docker - The Linux Container
Docker - The Linux ContainerDocker - The Linux Container
Docker - The Linux ContainerBalaji Rajan
 
Netflix CDN and Open Source
Netflix CDN and Open SourceNetflix CDN and Open Source
Netflix CDN and Open SourceGleb Smirnoff
 
Monitoring CDN Performance
Monitoring CDN PerformanceMonitoring CDN Performance
Monitoring CDN PerformanceThousandEyes
 
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackKVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackBoden Russell
 
Content Delivery Network
Content Delivery NetworkContent Delivery Network
Content Delivery NetworkShiv Pandey
 

Andere mochten auch (12)

Content Delivery Networks (CDN) Industry Analysis February 2014
Content Delivery Networks (CDN) Industry Analysis February 2014Content Delivery Networks (CDN) Industry Analysis February 2014
Content Delivery Networks (CDN) Industry Analysis February 2014
 
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...
Future of CDN - Next 10 Years - Ahmet Ozalp, Akamai Technologies - DigiWorld ...
 
BigData & CDN - OOP2011 (Pavlo Baron)
BigData & CDN - OOP2011 (Pavlo Baron)BigData & CDN - OOP2011 (Pavlo Baron)
BigData & CDN - OOP2011 (Pavlo Baron)
 
CDN
CDNCDN
CDN
 
Docker - The Linux Container
Docker - The Linux ContainerDocker - The Linux Container
Docker - The Linux Container
 
Netflix CDN and Open Source
Netflix CDN and Open SourceNetflix CDN and Open Source
Netflix CDN and Open Source
 
Monitoring CDN Performance
Monitoring CDN PerformanceMonitoring CDN Performance
Monitoring CDN Performance
 
Rethinking Cloud Proxies
Rethinking Cloud ProxiesRethinking Cloud Proxies
Rethinking Cloud Proxies
 
Edge architecture ieee international conference on cloud engineering
Edge architecture   ieee international conference on cloud engineeringEdge architecture   ieee international conference on cloud engineering
Edge architecture ieee international conference on cloud engineering
 
Zuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne PlatformZuul @ Netflix SpringOne Platform
Zuul @ Netflix SpringOne Platform
 
KVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStackKVM and docker LXC Benchmarking with OpenStack
KVM and docker LXC Benchmarking with OpenStack
 
Content Delivery Network
Content Delivery NetworkContent Delivery Network
Content Delivery Network
 

Ähnlich wie Integrating multiple CDN providers at Etsy - Velocity Europe (London) 2013

Integrating multiple CDNs at Etsy
Integrating multiple CDNs at EtsyIntegrating multiple CDNs at Etsy
Integrating multiple CDNs at EtsyLaurie Denness
 
SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012Fabian Lange
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable productJulian Simpson
 
20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performanceAndrew Siemer
 
Introducing Backblaze B2, the lowest cost cloud storage on the planet.
Introducing Backblaze B2, the lowest cost cloud storage on the planet.Introducing Backblaze B2, the lowest cost cloud storage on the planet.
Introducing Backblaze B2, the lowest cost cloud storage on the planet.Backblaze
 
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013Nick Galbreath
 
Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Kamalesh Ramasamy
 
Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontendtkramar
 
2-day-dba-oracle.pptx
2-day-dba-oracle.pptx2-day-dba-oracle.pptx
2-day-dba-oracle.pptxRocky572078
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Peter Gfader
 
Consuming Cinder from Docker
Consuming Cinder from DockerConsuming Cinder from Docker
Consuming Cinder from DockerTesora
 
How Adobe uses Structured Streaming at Scale
How Adobe uses Structured Streaming at ScaleHow Adobe uses Structured Streaming at Scale
How Adobe uses Structured Streaming at ScaleDatabricks
 
Supercharging Optimizely Performance by Moving Decisions to the Edge
Supercharging Optimizely Performance by Moving Decisions to the EdgeSupercharging Optimizely Performance by Moving Decisions to the Edge
Supercharging Optimizely Performance by Moving Decisions to the EdgeOptimizely
 
Habitat hack slides - Infracoders Meetup Graz
Habitat hack slides - Infracoders Meetup GrazHabitat hack slides - Infracoders Meetup Graz
Habitat hack slides - Infracoders Meetup GrazInfralovers
 
Why use Gitlab
Why use GitlabWhy use Gitlab
Why use Gitlababenyeung1
 
Why and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsWhy and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsNGINX, Inc.
 
Integrating Oracle Data Integrator with Oracle GoldenGate 12c
Integrating Oracle Data Integrator with Oracle GoldenGate 12cIntegrating Oracle Data Integrator with Oracle GoldenGate 12c
Integrating Oracle Data Integrator with Oracle GoldenGate 12cEdelweiss Kammermann
 
Accelerating workloads and bursting data with Google Dataproc & Alluxio
Accelerating workloads and bursting data with Google Dataproc & AlluxioAccelerating workloads and bursting data with Google Dataproc & Alluxio
Accelerating workloads and bursting data with Google Dataproc & AlluxioAlluxio, Inc.
 

Ähnlich wie Integrating multiple CDN providers at Etsy - Velocity Europe (London) 2013 (20)

Integrating multiple CDNs at Etsy
Integrating multiple CDNs at EtsyIntegrating multiple CDNs at Etsy
Integrating multiple CDNs at Etsy
 
SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012SPDY - http reloaded - WebTechConference 2012
SPDY - http reloaded - WebTechConference 2012
 
Continuous Integration, the minimum viable product
Continuous Integration, the minimum viable productContinuous Integration, the minimum viable product
Continuous Integration, the minimum viable product
 
20 tips for website performance
20 tips for website performance20 tips for website performance
20 tips for website performance
 
Introducing Backblaze B2, the lowest cost cloud storage on the planet.
Introducing Backblaze B2, the lowest cost cloud storage on the planet.Introducing Backblaze B2, the lowest cost cloud storage on the planet.
Introducing Backblaze B2, the lowest cost cloud storage on the planet.
 
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013
Care and Feeding of Large Scale Graphite Installations - DevOpsDays Austin 2013
 
Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020Oracle ZDM KamaleshRamasamy Sangam2020
Oracle ZDM KamaleshRamasamy Sangam2020
 
Optimising Web Application Frontend
Optimising Web Application FrontendOptimising Web Application Frontend
Optimising Web Application Frontend
 
2-day-dba-oracle.pptx
2-day-dba-oracle.pptx2-day-dba-oracle.pptx
2-day-dba-oracle.pptx
 
Dibi Conference 2012
Dibi Conference 2012Dibi Conference 2012
Dibi Conference 2012
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...
 
Consuming Cinder from Docker
Consuming Cinder from DockerConsuming Cinder from Docker
Consuming Cinder from Docker
 
How Adobe uses Structured Streaming at Scale
How Adobe uses Structured Streaming at ScaleHow Adobe uses Structured Streaming at Scale
How Adobe uses Structured Streaming at Scale
 
Supercharging Optimizely Performance by Moving Decisions to the Edge
Supercharging Optimizely Performance by Moving Decisions to the EdgeSupercharging Optimizely Performance by Moving Decisions to the Edge
Supercharging Optimizely Performance by Moving Decisions to the Edge
 
Habitat hack slides - Infracoders Meetup Graz
Habitat hack slides - Infracoders Meetup GrazHabitat hack slides - Infracoders Meetup Graz
Habitat hack slides - Infracoders Meetup Graz
 
Why use Gitlab
Why use GitlabWhy use Gitlab
Why use Gitlab
 
Why and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company GrowsWhy and How to Run Your Own Gitlab Runners as Your Company Grows
Why and How to Run Your Own Gitlab Runners as Your Company Grows
 
Integrating Oracle Data Integrator with Oracle GoldenGate 12c
Integrating Oracle Data Integrator with Oracle GoldenGate 12cIntegrating Oracle Data Integrator with Oracle GoldenGate 12c
Integrating Oracle Data Integrator with Oracle GoldenGate 12c
 
Mobile web performance dwx13
Mobile web performance dwx13Mobile web performance dwx13
Mobile web performance dwx13
 
Accelerating workloads and bursting data with Google Dataproc & Alluxio
Accelerating workloads and bursting data with Google Dataproc & AlluxioAccelerating workloads and bursting data with Google Dataproc & Alluxio
Accelerating workloads and bursting data with Google Dataproc & Alluxio
 

Kürzlich hochgeladen

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.pdfUK Journal
 
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.pptxHampshireHUG
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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 Processorsdebabhi2
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
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 AutomationSafe Software
 
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 2024Rafal Los
 
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.pdfEnterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
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 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
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 slidevu2urc
 
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...Martijn de Jong
 
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 RobisonAnna Loughnan Colquhoun
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
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...Drew Madelung
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
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 Nanonetsnaman860154
 

Kürzlich hochgeladen (20)

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
 
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
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
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
 
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
 
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
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
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
 
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...
 
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
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
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...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
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
 

Integrating multiple CDN providers at Etsy - Velocity Europe (London) 2013