building a scalable system for tracking shipping packages

135
BUILDING A SCALABLE SYSTEM FOR TRACKING SHIPPING PACKAGES

Upload: premshree-pillai

Post on 20-Feb-2017

737 views

Category:

Technology


0 download

TRANSCRIPT

BUILDING A SCALABLE SYSTEM FOR TRACKING SHIPPING PACKAGES

WHERE IS MYPACKAGE?

https://www.etsy.com/listing/180703192/johannes-holst-sailboat-at-sea-1959

WHERE IS MYPACKAGE?

https://www.etsy.com/listing/180703192/johannes-holst-sailboat-at-sea-1959

PREMSHREE PILLAI

SR. ENGINEER, ETSY

PREVIOUSLY, YAHOO!

@premshree

AGENDA

https://www.etsy.com/listing/122960327/moleskine-cover-agenda-leather-cover

AGENDA

https://www.etsy.com/listing/122960327/moleskine-cover-agenda-leather-cover

Etsy

Shipping

Tracking Architecture

Monitoring

Q & A

empathy

https://www.etsy.com/listing/26849451/the-jetty-sad-girl-empathy-melancholy

empathy

noun \ˈem-pə-thē\ : the feeling that you understand and share another person's experiences and emotions : the ability to share someone else's feelings

https://www.etsy.com/listing/26849451/the-jetty-sad-girl-empathy-melancholy

https://www.etsy.com/listing/110699162/seeker-of-happiness-canvas-tote-bag-you

RE-IMAGINE COMMERCEIN WAYS THAT BUILD A MORE FULFILLING AND LASTING WORLD

https://www.etsy.com/listing/201864292/cleveland-map-street-map-vintage-print

Hong Kong

https://www.etsy.com/listing/162358227/old-map-of-hong-kong-and-environs-16-x

Zagrebhttps://www.etsy.com/listing/157215176/croatia-watercolor-painting-art-print

♥ POTTERY

https://www.etsy.com/listing/195729720/handmade-dinner-plate-ceramic-plate

SCOTTSDALE, AZ

ANDOVER, MA

LEFKIS, GREECE

https://www.etsy.com/listing/191371121/jael-green-red-sisal-basket-from-kenya

1.5 MILLION ACTIVE SELLERS

https://www.etsy.com/listing/191371121/jael-green-red-sisal-basket-from-kenya

1.5 MILLION ACTIVE SELLERS

21.7 MILLION ACTIVE BUYERS

https://www.etsy.com/listing/191371121/jael-green-red-sisal-basket-from-kenya

1.5 MILLION ACTIVE SELLERS

21.7 MILLION ACTIVE BUYERS

https://www.etsy.com/listing/191371121/jael-green-red-sisal-basket-from-kenya

$1.93 BILLION GMS (2014)

CARRIERS 250+

https://www.etsy.com/listing/129521877/original-world-map-watercolor-print

IN TRANSIT 500,000+

https://www.etsy.com/listing/129521877/original-world-map-watercolor-print

OUT FOR DELIVERY 10,000+

https://www.etsy.com/listing/129521877/original-world-map-watercolor-print

SHIPPING CARRIERS

FedEx

DHL

USPS

Australian Post

...

LET’S DIVE IN

mysql

tracking_events

SHIPPING APIS

GET http://production.shippingapis.com/ShippingAPI.dll?API=TrackV2&XML=%3CTrackFieldRequest+USERID%3D%22022XXXXH6696%22%3E%3CTrackID+ID%3D%22LZ13XXX3064US%22%3E%3C%2FTrackID%3E%3C%2FTrackFieldRequest%3E

GET http://production.shippingapis.com/ShippingAPI.dll?API=TrackV2&XML=%3CTrackFieldRequest+USERID%3D%22022XXXXH6696%22%3E%3CTrackID+ID%3D%22LZ13XXX3064US%22%3E%3C%2FTrackID%3E%3C%2FTrackFieldRequest%3E

TRACKING STATES

INFO_RECEIVED

PACKAGE_RECEIVED

IN_TRANSIT

DELAYED

OUT_FOR_DELIVERY

...

DELIVERED

STATE MAP

INFO_RECEIVED

“acceptance”

“processed at usps origin facility"

“accepted at usps origin sort facility”

“picked up”

INFO_RECEIVED

“tendered at fedex office”

“picked up"

“in fedex possession”

IN_TRANSIT

“dispatched from usps sort facility”

“sorting complete"

“local holiday - will attempt delivery on next working day”

“customs clearance processing

SELECT * FROM trackings WHERE last_access_date < ?

SELECT * FROM trackings WHERE last_access_date < ?

? = now() - 15

caveat lector

WHAT’S THE PROBLEM?

SIZE

SELECT * FROM trackings WHERE last_access_date < ? LIMIT ?

STRAGGLERS

SHARDING 101

SHOP

SHOP

USER

USER

SELECT * FROM trackings WHERE shard = ? AND last_access_date < ?

QUEUE

FAUX QUEUE

QUEUE_3_DAY

QUEUE_1_DAY

QUEUE_3_HOUR

QUEUE_1_HOUR

...

QUEUE_STOPPED

QUEUE MAP

INFO_RECEIVED => QUEUE_1_DAY

PACKAGE_RECEIVED => QUEUE_1_DAY

IN_TRANSIT => QUEUE_1_DAY

OUT_FOR_DELIVERY => QUEUE_1_HOUR

...

DELIVERED => QUEUE_STOPPED

INFO_RECEIVED => QUEUE_3_HOUR

PACKAGE_RECEIVED => QUEUE_3_HOUR

IN_TRANSIT => QUEUE_3_HOUR

OUT_FOR_DELIVERY => QUEUE_1_HOUR

...

DELIVERED => QUEUE_STOPPED

QUEUE AGE

QUEUE_3_DAY => 1*60*60*24*3

QUEUE_1_DAY => 1*60*60*24

QUEUE_3_HOUR => 3*60*60

QUEUE_1_HOUR => 1*60*60

SELECT * FROM trackings WHERE shard = ? AND queue = ? AND last_access_date < ?

SELECT * FROM trackings WHERE shard = ? AND queue = ? AND last_access_date < ?

last_access_date < time() - age

ASYNC

GEARMAN

unique job key(shard, queue)

IN SUMMARY

API

STATE MAP

SHARDING

CRON/ASYNC

FAUX-QUEUE

MONITORING

StatsD

StatsDStatsD::increment("usps.get_tracking_call");

github.com/etsy/statsd/

Tracking stats

Gearman worker calls

Tracking calls by provider

Tracking queues

CURL errors

tracking numbers

update tracking batch

get tracking (usps)

get tracking (canada post)

Tracking stats

Gearman worker calls

Tracking calls by provider

Tracking queues

CURL errors

get tracking (usps)

Tracking stats

Gearman worker calls

Tracking calls by provider

Tracking queues

CURL errors

curl errors (usps)

curl errors (fedex)

IMAGINARY QUESTIONS FROM YOU

IMAGINARY QUESTIONS FROM YOU

IMAGINARY QUESTIONS FROM YOU

ActiveMQ/RabbitMQ?

webhooks?

THANK YOU

https://www.etsy.com/listing/173815205/namaste-art-print

@premshree https://joind.in/15376

https://www.etsy.com/listing/173815205/namaste-art-print

QUESTIONShttps://www.etsy.com/listing/241859251/original-rainbow-abstract-question-mark