37
Architectural lessons learned from refactoring a Solr based API application. Torsten Bøgh Köster (Shopping24) Apache Lucene Eurocon, 19.10.2011

Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Embed Size (px)

DESCRIPTION

See conference video - http://www.lucidimagination.com/devzone/events/conferences/ApacheLuceneEurocon2011 In this case study I'll discuss architectural lessons learned from refactoring an existing REST-API backed by Apache Solr. The initial goal of the refactoring was to speed up data access while scaling from 5m documents to 20-50m documents stored in Solr. Under consideration was the hosting infrastructure, the REST API Java code and the Solr documents and configuration. In this talk I'll give a brief review of the results. "Pimping" the Solr configuration, the client access and the document structure achieved better results. But the elementary lesson learned was, that a significant increase of data access speed can only be realized with a functional redesign and a simplification of the REST API. NO CAPS ON CORES & SHARDS) I'll explain how this led us directly to distinct Solr cores and why we dropped the introduction of Solr shards or a breathing cloud infrastructure.

Citation preview

Page 1: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Architectural lessons learned from refactoring a Solr based API application.

Torsten Bøgh Köster (Shopping24) Apache Lucene Eurocon, 19.10.2011

Page 2: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Contents

Shopping24 and it‘s API

Technical scaling solutions

ShardingCachingSolr Cores„Elastic“ infrastructure

business requirements as key factor

Page 3: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

@tboeghk

Software- and systems- architect2 years experience with Solr3 years experience with Lucene

Team of 7 Java developers currently at Shopping24

Page 4: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

shopping24 internet group

Page 5: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

1 portal became n portals

Page 6: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

30 partner shops became 700

Page 7: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

500k to 7m documents

Page 8: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

index fact time

•16 Gig Data•Single-Core-Layout•Up to 17s response time•Machine size limited•Stalled at solr version 1.4•API designed for small tools

Page 9: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

scaling goal:15-50m documents

Page 10: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

ask the nerds

„Shard!“ That‘ll be fun!

„Use spare compute cores at Amazon?“

breathe load into the cloud

„Reduce that index size“

„Get rid of those long running queries!“

Page 11: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

data sharding ...

Page 12: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

... is highly effective.

125ms

250ms

375ms

500ms

1 4 8 12 16 20

1shard 2shard 3shard4shard 6shard 8shard

concurrent requests

Page 13: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Sharding: size matters

the bigger your index gets, the more complex your

queries are, the more concurrent requests,

the more sharding you need

Page 14: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

but wait ...

Page 15: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Why do we have such a big index?

Page 16: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

7m documents vs. 2m active poducts

Page 17: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

fashionproduct

lifecyclemeets SEO

Bastografie / photocase.com

Page 18: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Separation of duties! Remove unsearchable data from your index.

Page 19: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Why do we have complex queries?

Page 20: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

A Solr index designed for 1 portal

Page 21: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Grown into a multi-portal index

Page 22: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Let “sharding“ follow your data ...

Page 23: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

... and build separate cores for every client.

Page 24: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Duplicate data as long as access is fast.

andybahn / photocase.com

Page 25: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Streamline your index provisioning

process.

Page 26: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

A thousand splendid cores at your fingertips.

Page 27: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Throwing hardware at problems. Automated.

Page 28: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

evil traps: latency, $$

Page 29: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

mirror your complete system – solve load balancer problems

froodmat / photocase.com

Page 30: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

I said faster!

Page 31: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

use a cache layerlike Varnish.

Page 32: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

What about those complex queries? Why do we have them? And how do we get

rid of them?

Page 33: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Lost in encapsulation: Solr API exposed to world.

Page 34: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

What‘s the key factor?

Page 35: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

look at your business requirements

Page 36: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

decrease complexity

Page 37: Lessons Learned: Refactoring a Solr-Based API App - Torsten Koester

Questions? Comments? Ideas?

Twitter: @tboeghkGithub: @tboeghkEmail: [email protected]

Web: http://www.s24.com

Images: sxc.hu (unless noted otherwise)