XML-data via ZMQ outputten naar een API

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Mijn vraag:
Ik wil een stabiele en efficiënte mogelijkheid om een XML-feed gepushed via ZMQ naar een API te brengen.

De NS heeft via het NDOV-loket een ZMQ-datastroom met actuele treinposities, en daar wil ik wat mee doen. Ik weet dat elke halve minuut een XML-bestand via ZMQ wordt gepushed met de actuele locaties. Nu heb ik een poosje geleden een simpele Python implementatie geschreven waarmee je deze data steeds naar een bestand kan schrijven. Maar efficiënt is het niet, en het idee heb ik maar even 'on hold' gezet tot ik een keer wat beters bedacht.

Nu zit ik te denken om de XML-feed naar Redis te schrijven, zodat het in het geheugen wordt opgeslagen, zodat ik de key uit Redis, met daarin de XML-feed, naar een API kan outputten, zodat ik dus met iets als api.site.nl/api/locations steeds de actuele locaties kan ophalen.

Zoiets als dit (met een beetje hulp van ChatGPT):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from flask import Flask, jsonify
import redis

app = Flask(__name__)
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)

@app.route('/api/locations', methods=['GET'])
def get_xml_data():
    xml_data = redis_client.get('locations')
    if xml_data:
        return Response(xml_data, content_type='application/xml')
    else:
        return jsonify({'message': 'XML data not found'}), 404

if __name__ == '__main__':
    app.run(debug=True)


Relevante software en hardware die ik gebruik
Redis, Docker, Python met de nodige modules

Wat ik al gevonden of geprobeerd heb
Ik heb al ontdekt dat dit een mogelijkheid was. Maar misschien kan dit nog werden geperfectioneerd? Ik ben geen ultieme kei in Python en Redis.

Nu vroeg ik mij af: Is dit wel een goede setup, en zit ik op het goede spoor (pun intended) wat in ieder geval beter is dan constant een xml-file genereren? Of kan dit nog beter en efficiënter?

En ja, als ik het voor elkaar heb. Dan breng ik het vast wel uit voor Docker.

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️

Beste antwoord (via AW_Bos op 13-02-2024 15:42)


  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Vast wel, anderzijds: is het een XML van tientallen of honderden MB's? Of een XML van een paar kb? Want een responsje van een paar kb wegschrijven elke halve minuut zal je de kop ook niet kosten. Voor requests zal het OS de read-cache vast afdoende gebruiken. Maar ook met een simpele memcached zou je er waarschijnlijk al zijn. Of Redis. Net wat je wil.
Als het niet heel duidelijk is waarvoor je optimaliseert, wat je requirements zijn, hoeveel requests je verwacht, wat de hardware is (hoeveel geheugen, I/O performance etc) kan er hooguit globaal gezegd worden dat het "vast wel zal performen zolang 't geen Facebook proporties aanneemt".

Maar eigenlijk is je bedoeling dus gewoon elke halve minuut een XML ontvangen die de vorige XML vervangt en met je API wil je dus altijd die laatste XML kunnen uitvragen en dient je API als een soort "cache" van die ZMQ?

[ Voor 13% gewijzigd door RobIII op 13-02-2024 15:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Alle reacties


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Eerste wat in me opkomt: waarom zet je het niet in een DB? Ofwel door steeds de huidige locaties te updaten, danwel telkens een record met nieuwe locaties toe te voegen zodat je ook wat historie hebt. Vanuit je API kun je vervolgens de DB queryen.

Maar Redis is ook een optie hoor. Het is maar net wat je wil / waar je voor kiest.

[ Voor 79% gewijzigd door RobIII op 13-02-2024 14:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Dat zou ook nog kunnen. :)
Maar eerst wil ik even kijken ik de XML-feed via de API kan gebruiken. Maar deze set-up klinkt verder wel goed qua performance?

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

AW_Bos schreef op dinsdag 13 februari 2024 @ 14:41:
Maar eerst wil ik even kijken ik de XML-feed via de API kan gebruiken. Maar deze set-up klinkt verder wel goed qua performance?
Definieer performance. Verwacht je hordes requests (als in de miljoenen per uur)? Waar liggen je zorgen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Ik verwacht geen hordes aan bezoekers. Maar deze performance moet toch wel beter zijn dan elke halve minuut schrijfacties uit te voeren van een xml-bestand.

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Vast wel, anderzijds: is het een XML van tientallen of honderden MB's? Of een XML van een paar kb? Want een responsje van een paar kb wegschrijven elke halve minuut zal je de kop ook niet kosten. Voor requests zal het OS de read-cache vast afdoende gebruiken. Maar ook met een simpele memcached zou je er waarschijnlijk al zijn. Of Redis. Net wat je wil.
Als het niet heel duidelijk is waarvoor je optimaliseert, wat je requirements zijn, hoeveel requests je verwacht, wat de hardware is (hoeveel geheugen, I/O performance etc) kan er hooguit globaal gezegd worden dat het "vast wel zal performen zolang 't geen Facebook proporties aanneemt".

Maar eigenlijk is je bedoeling dus gewoon elke halve minuut een XML ontvangen die de vorige XML vervangt en met je API wil je dus altijd die laatste XML kunnen uitvragen en dient je API als een soort "cache" van die ZMQ?

[ Voor 13% gewijzigd door RobIII op 13-02-2024 15:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
RobIII schreef op dinsdag 13 februari 2024 @ 15:00:

Maar eigenlijk is je bedoeling dus gewoon elke halve minuut een XML ontvangen die de vorige XML vervangt en met je API wil je dus altijd die laatste XML kunnen uitvragen en dient je API als een soort "cache" van die ZMQ?
Dat klopt helemaal.

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Acties:
  • +1 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 21:26

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

Dan zie ik geen probleem in je eerste maar ook net in je huidige setup :)

[ Voor 7% gewijzigd door RobIII op 13-02-2024 15:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Ah, dankjewel! Dan ga ik eens aan de slag!

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️


Acties:
  • 0 Henk 'm!

  • Swedish Clown
  • Registratie: November 2010
  • Laatst online: 10-04 22:41

Swedish Clown

Erlang <3

Ik ben toch wel benieuwd naar de vraag die @RobIII eerder stelde in hoe groot de XML bestanden (gemiddeld genomen) zijn. Indien het hier gaat om enkele kb of honderden MBs kan dat wel degelijk nog een draai geven aan de architectuur.

Zo op het oog volledig eens met @RobIII en je eigen suggestie d:)b

Always looking for developers wanting to work with Erlang.


Acties:
  • +1 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 22:27

AW_Bos

Liefhebber van nostalgie... 🕰️

Topicstarter
Het gaat om tientallen kilobytes. Dus ik ga voorlopig geen beren op de weg zien, denk ik :).

Inmiddels ben al al aan het schrijven van de applicatie. Dankjewel! :)

[ Voor 75% gewijzigd door AW_Bos op 14-02-2024 12:39 ]

☀️ Goedemorgen zonneschijn! ☀️
☀️Ja, je maakt me zo gelukkig, en door jou voel ik me fijn! ☀️

Pagina: 1