Mooi he? Dat we kritisch kunnen zijn over de toegankelijkheid van actuele reisinformatie.
Geeft alleen maar aan dat we het besef van vanzelfsprekendheid al voorbij zijn. Waarvoor alle kudos daarvoor aan de OV-chef in de reacties hierboven. :)
Desalniettemin is het positief dat je direct aan de bel trekt, ik vermoed dat de stille meerderheid reeds was/is afgehaakt.
Dan inhoudelijk:
TimeoutsDe timeouts die je hebt ontvangen zijn bij overmatig gebruik van de publieke API ontstaan.
De Vertrektijd.Info API is opgesplitst in een publieke/openbare API en een niet-publieke API (voor afnemers met een SLA).
Hierbij worden 4 servers (ESXI) op 3 locaties met loadbalancers ontsloten in een failover setup (2 x 2); dit doen we softwarematig (haproxy/vps) voor de gratis publieke API en hardwarematig (Aloha/colocatie) voor de niet-publieke API.
Hierdoor kunnen we private/commerciele afspraken en publiek gebruik goed gescheiden houden.
Helaas blijkt dat de publieke api al gauw onnodig wordt/werd misbruikt, 250 requests per seconde was geen uitzondering.
Om dit tijdelijk te mitigeren hebben we tijdelijk een 'harde' rate limit van pakweg 10 requests/sec per IP gehanteerd, en de betreffende gebruikers aangeschreven.
Het hanteren van een rate limit is onzes inziens echter niet wenselijk, iedere vorm van rate limiting heeft zo z'n nadelen.
We schalen daarom liever mee en maken goede afspraken.
Hier werken we aan. Inmiddels is de loadbalancer opgeschaald.
We zien geen timeouts meer in de logging van onze loadbalancer.
Ter controle en ondeugd nog even een api-wijde benchmark met jouw api-key:
siege -t*m -d* -c* -H 'X-Vertrektijd-Client-API-Key: **api key**' -i -v -f Amsterdam.txt
Transactions: 14390 hits
Availability: 99.97 %
Elapsed time: 59.26 secs
Data transferred: 133.37 MB
Response time: 0.41 secs
Transaction rate: 242.83 trans/sec
Throughput: 2.25 MB/sec
Concurrency: 100.33
Successful transactions: 14390
Failed transactions: 4
Longest transaction: 6.34
Shortest transaction: 0.06
Dan voor de liefhebbers nog een postmortem van de gefaalde requests, deze waren:
https://api.vertrektijd.info/departures/_nametown/Amsterdam/Osdorppln/ Don Boscostr
https://api.vertrektijd.info/departures/_nametown/Amsterdam/CS/ De Ruyterkade
https://api.vertrektijd.info/departures/_nametown/Amsterdam/De Boelelaan/ VU
https://api.vertrektijd.info/departures/_nametown/Amsterdam/CS/ De Ruyterkadedoor gebrekkige URL-encoding: "/ " => "%2F " :)
Geen dataMocht je geen data terugkrijgen, koppel dat dan vooral hier terug!
Of er wel of niet data aanwezig is, en of die data juist is, is lastig programmatisch te beoordelen.
Ik peuter dan ook graag het fijne voor je los.
Vriendelijke groet,
Jochem