Skip to content

Instantly share code, notes, and snippets.

@daniel-illi
Forked from amaierhofer/rubycafi.md
Last active August 29, 2015 14:27
Show Gist options
  • Select an option

  • Save daniel-illi/e365a5bac6f2f0031ac0 to your computer and use it in GitHub Desktop.

Select an option

Save daniel-illi/e365a5bac6f2f0031ac0 to your computer and use it in GitHub Desktop.

Caching

Problemstellung

  • API neu designed, Ziel Reaktionszeit der App immer <1s → alle benötigten Daten in 1 request/response
  • Peaks (von 50 auf 5000 Clients)
  • Multiprozess Architektur (Versandmodul, cron jobs, shared db)
  • Langsame Antwortzeiten aufgrund von DB Queries

Demo v5 API

curl -H 'WEAL_API_KEY: single' http://localhost:3000/v5/current.json | jq .

Probleme v5 API

  • Query hat keine Parameter, Information welche Entities in der response vorkommen werden aus der DB gelesen anhand des User records.
  • Komplexe Datenstruktur (nesting von entities)
  • Vermischung persönlicher / öffentlicher Daten da alle Daten in 1 request/response
  • SSL

Demo v6 API

curl 'http://localhost:3000/v6/current.json?zip_ids=1000&user_id=6' | jq .

Changes v6 API

  • Entity Ids als Parameter, keine DB queries nötig
  • Flachere Struktur
  • Nesting nur wenn gleiche Gültigkeit
  • unpersönliche, einfach cachebare Daten und persönliche Daten in separaten requests
  • alle unpersönlichen Daten gecacht
  • teure userbezogene Daten gecacht wo möglich

Internal Changes v6

  • Cache vorbefüllt, nicht on-demand
  • Komplette Anworten bzw Text Bausteine gecached (nicht json)
  • Primitives statt Objekte gecached (serialize / deserialize)
  • SSL für nicht sensitive requests deaktiviert

Nicht vergessen

  • Changes benchmarken (apache bench)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment