NEWS
States-DB
-
Habe mir gerade eine Version des js-Controllers gebaut, bei der der Serverteil des in-Memory-DB als separater Node-Prozess läuft. Funktioniert schonmal händisch. Ziel: Frage mich, ob damit die Event-Queue des Controlles sinnvoll entlastet wird. Möchte gerne einige Tests machen wegen der Performance. Hat jemand Ideen? V8-Profiling?
-
hab sowas noch nie gemacht, sorry kann ich wenig beisteuern …
-
Idee ist, das fest einzubauen, um Redis nicht notwendig zu machen. Komplexer können wir später immer noch. Momentan sehe ich, das serverseitig der socket.io einiges an Zeit braucht. Die SetStates nur wenig. Subscription-Emits. Verflixt. Mache auch gerade mein erstes Profiling mit V8. Hilfe.
-
um Redis nicht notwendig zu machen. `
Warum dieses?Ich habe gerade unfreiwillig einen Test mit dem Cubietruck hinter mir. Die System Load mit Redis liegt unter der Hälfte (bis etwa 0,3) bei der mit file.
IMHO sind die Schreibvorgänge das Nadelöhr, die von Redis optimiert werden.
Gruß
Rainer
-
Messe ich falsch? Setstate macht bei mir nur ca. 3% der Zeit aus. Wir sind hier in-Memory. Und die Persistierung erfolgt ja alle, was war das, 30 oder 60s. Die ist auch fix.
Ich sehe hier mehr die Socket-Kommunikation als Nadelöhr.
-
` > Redis natively runs on Linux flavors (and lately on ARM). Many developers, however, want the same Redis awesomeness on Windows, as well. Microsoft sponsored a project to port Redis onto Windows, but the project was discontinued according to Microsoft. With this option gone, what are your options now for running Redis on Windows?
Well, you've got a few.
Run Redis on the Windows Ubuntu Subsystem
Windows 10 comes with an Ubuntu subsystem that can run Redis on your Windows host. Once you have enabled developer mode, you can run Bash on Windows 10. Launch bash and do sudo apt-get install redis-server followed by redis-server on the command prompt. You will see Redis listening on port 6379. It is important to note that the Ubuntu subsystem is a developer mode capability. This subsystem is not built for running critical applications.
Run Redis on Docker for Windows
Docker on Windows can run Linux-based containers. Simply install Docker and change your container type to Linux on Windows 10. Following the PowerShell line will switch the container type & $Env:ProgramFiles\Docker\Docker\DockerCli.exe -SwitchDaemon. Once you have Linux containers enabled, you can simply do docker run -d -p 6379:6379 redis and you are good to go. `
Mit dem Wissen um die npm- und Node-Installationsthemen willst Du das obige den Windows-Anwender antun?
-
I have a tipi - no windows no gates
Ich denke bei WIN ist redis nicht nötig, die Hardware dazu hat genug Power
-
Kannst Du beim Profiling helfen?
-
das kann gut dein das socket.io auch das Nadelör ist. Redis nutzt da ja ein eher TCP/IP basiertes Protokoll …
Ich denke auch das in oder ausserhalb vom js.controler nicht mehr so den großen unterschied macht .... oder verhält es sich "standalone" performanter?
-
Kannst Du beim Profiling helfen? `
:lol: :lol: :lol: :lol:Der war gut; Ich bin nur User, leider
Gruß
Rainer
-
Du 12.000++Hilfen-User, Du… :lol:
-
oder verhält es sich "standalone" performanter?
Das ist Sinn und Zweck der Übung. :ugeek:
-
12.000++Hilfen-User, `
Eben!Vom User an den User
Noob oder Einsteiger bin ich jetzt aber wirklich nicht mehr; war vor drei Jahren noch ganz anders.
-
grüne linie oben = Load 1Min:links mit file: in der Spitze 4 und mehr; dann kam es wegen der immer länger werdenden responsezeiten zum Hänger, danach fuhr ioBroker mit einem Load von 6 (Dual-Core) gar nicht mehr vollständig hoch.
rechts dann auf redis umgestellt. Load 1Min auf 1 herunter
Gruß
Rainer
-
Was bedeutet load verglichen mit CPU-Last? CPU von 0-1?
Load = The os.loadavg() method returns an array containing the 1, 5, and 15 minute load averages.
The load average is a measure of system activity, calculated by the operating system and expressed as a fractional number. As a rule of thumb, the load average should ideally be less than the number of logical CPUs in the system.
-
Was bedeutet load verglichen mit CPU-Last? CPU von 0-1? `
CPU-Last habe ich aus "top" und den zweiten Wert parse ich aus /proc/stat und rechne (Usr+sys+nice) / (Usr+sys+nice+idle) (=0 - 100%)EDIT: das steht im Gauge - das Original ist auf einem anderen Rechner - hier kann man es kaum lesen; im Chart ist der zweite Wert über den parser)
Load (average) 5Min im Gauge und Load (average) 1Min im Chart wie du es zitiert hast über den (modifizierten) RPi2-Adapter.
EDIT2:
Hier die aktuelle Grafik (mit Redis)
Gruß
Rainer
-
Wieviele Events (State-Änderugnen, Messages wegen Subscriptions) hast du denn je 15s insgesamt im System im Schnitt?
CPU-Auslastung durch den js-Controller bei in-Memory bzw. für Redis bei Nutzung Redis Server dabei?
Hast Du beim JavaScript-Adapter alle States in der Subscription? History?
Und was ist nochmal das für ein Rechner, auf dem Redis läuft? Ich nehme an, zusammen mit dem Master-js-controller? Cubieboard3?
Ich denke, ich muss mal bei mir auf einem rpi installieren und messen. Der Intel i7-2600k ist zu fix. Trotz Windows. :mrgreen:
-
Ich gehe davon aus, das mit Sicherheit schon uWS bei engine.io getestet wurde? Sind ja jetzt wieder mit 3.1 oder so auf WS zurück… Ein Hauptteil der Last kommt von den Subscription-Messages. Das macht Redis wohl schneller bzw. mit weniger Overhead. Ach menno, Mir fällt gerade ohne große Änderung auch nix ein.
Die Datenhaltung in der States-DB ist ja von der Datenmenge her nichts Großes. Bloß der Kommunikationsaufwand. Ha, shared memory?
PS: Habe nichts gegen Redis. Bloß unter Windows....
-
socket.io in neueren Versionen gabmmehr Probleme als alles andere … leider. keine Ahnung was die da kaputt gemacht haben.
Ich denke optimierter ist nur ein "TCP basierters eigenes protokoll". Ich könnte da auch ein paar verrückte Ideen kommen ... aber die Diskutier ich lieber erstmal direkt mit Bluefox