---
title: "Reaaliaikaiset kojelaudat: Laravel, Redis ja WebSockets"
description: "Näin rakennat Laravelilla reaaliaikaiset kojelaudat ja hälytykset suurille datavirroille: puskurointi, jonot, lähetys, aggregointi ja dynaamiset kynnykset."
canonical: https://sdk.enterprises/fi/insights/real-time-dashboards-laravel
language: fi
---

# Reaaliaikaiset kojelaudat: Laravel, Redis ja WebSockets

Päivitetty: 2026-09-25

> Laravel pystyy pyörittämään reaaliaikaisia kojelautoja suurivolyymisten datavirtojen päällä, kunhan raakatapahtumat eivät koskaan päädy selaimeen: puskuroi vastaanotto Redisiin, käsittele se jonotetuissa taustaprosesseissa, esikoosta tiedot aikaikkunoihin ja lähetä WebSocketien kautta vain tiivistelmiä. Hälytä viimeaikaisesta historiasta opituilla dynaamisilla kynnyksillä kiinteiden rajojen sijaan, ja ota käyttöön erillinen suoratoistoalusta, kun uudelleentoiston, järjestyksen tai volyymin tarpeet kasvavat Redis-jonojen ulottumattomiin.

## Pidä raakatapahtumat poissa selaimesta

Reaaliaikaisten kojelautojen yleisin virhe on lähettää jokainen saapuva tapahtuma jokaiselle yhdistetylle näytölle. Suurella volyymilla selaimet jäävät jälkeen, WebSocket-palvelin ruuhkautuu ja kaaviosta tulee joka tapauksessa lukukelvoton.

Jaa järjestelmä neljään vaiheeseen: vastaanotto, käsittely, aggregointi ja lähetys. Jokaisella vaiheella on oma kapasiteettinsa, ja se voi hidastua viemättä muita mukanaan. Kojelauta saa aggregoituja päivityksiä kiinteässä tahdissa, esimerkiksi kerran sekunnissa paneelia kohden, ei raakatapahtumia.

Kehittäjämme käyttivät tätä rakennetta Slumpissa, alustassa, joka seuraa reaaliajassa 5G-verkon trendejä ja kapasiteetti-indikaattoreita ja ennustaa verkon saturaatiota operaattoreille eri puolilla Etelä-Espanjaa. Alusta rakennettiin Laravel 11- ja 12-taustajärjestelmälle, joka vastaanottaa suurivolyymista suoratoistodataa.

## Puskuroi vastaanotto, jotta liikennepiikeistä ei tule katkoja

Vastaanottopäätepisteen pitää tehdä mahdollisimman vähän: validoida sisältö, lisätä se puskuriin ja palata. Jäsentäminen, rikastaminen ja tietokantakirjoitukset kuuluvat taustaprosesseille.

Kohtuullisella volyymilla Redis toimii hyvin puskurina. Työnnä tapahtumat Redis-listaan tai -streamiin ja anna taustaprosessien hakea ne erissä, koska yksi erälisäys on tietokannalle paljon kevyempi kuin satoja yksirivisiä lisäyksiä.

- Validoi skeema ja hylkää virheelliset tapahtumat jo reunalla
- Palaa nopeasti äläkä koskaan kirjoita ensisijaiseen tietokantaan pyynnön sisällä
- Lue puskurista erissä äläkä yksi tapahtuma työtä kohden
- Rajaa puskurin pituus ja hälytä, kun se kasvaa, jotta vastapaine näkyy ennen kuin siitä tulee datan menetystä

## Skaalaa käsittelyä erillisillä jonoilla ja Horizonilla

Redisiin perustuvat Laravel-jonot antavat taustaprosesseja, joita voi lisätä vaakasuunnassa. Laravel Horizon näyttää jonokohtaiset prosessimäärät, läpäisyn ja odotusajat, joiden avulla tarkistat, pysyykö käsittely vastaanoton tahdissa.

Erottele jonot prioriteetin mukaan. Hälytysten arvioinnin ei pidä koskaan odottaa historiallisen uudelleenkäsittelyn ruuhkan takana, joten anna käsittelylle, aggregoinnille, hälytyksille ja vienneille omat jononsa ja prosessijoukkonsa.

Tee jokaisesta työstä idempotentti. Datavirrat toimittavat tapahtumia uudelleen, taustaprosessit kaatuvat kesken erän ja uudelleenyrityksiä tapahtuu, joten saman tapahtuman käsitteleminen kahdesti ei saa tuplata laskuria. Tapahtumatunniste, joka tarkistetaan lyhytikäistä Redis-joukkoa vasten, riittää usein.

## Aggregoi aikaikkunoihin ennen lähetystä

Kojelaudat näyttävät nopeuksia, keskiarvoja, persentiilejä ja trendejä, eivät yksittäisiä tapahtumia. Laske ne taustaprosesseissa kiinteisiin aikaikkunoihin, esimerkiksi sekunneittain ja minuuteittain, jokaiselle näytettävälle kohteelle: solulle, alueelle, asiakkaalle.

Pidä reaaliaikaiset aggregaatit Redisissä aikaikkunoittain avainnettuina hasheina tai järjestettyinä joukkoina (sorted set), ja kirjoita jokainen suljettu aikaikkuna tietokantaan historiaa varten. Historiataulujen kyselysuunnittelu on yhtä tärkeää kuin reaaliaikainen polku, koska käyttäjät loitontavat näkymän päivään tai viikkoon.

Slumpissa Redis-välimuistin uudelleensuunnittelu ja kyselyjen optimointi lyhensivät vastaanoton viivettä, mikä piti reaaliaikaisen näkymän ajan tasalla kuormituksen alla.

## Lähetä tiivistelmiä WebSocketien kautta Reverbillä tai palveluna

Laravel broadcasting lähettää tapahtumia kanaville, joita käyttöliittymä tilaa Laravel Echon kautta. Laravel Reverb on Laravelin oma WebSocket-palvelin, ja palveluina tarjottavat vaihtoehdot, kuten Pusher tai Ably, toimivat saman broadcasting-API:n kautta.

- Lähetä ajastetusti aggregoidusta tilasta, ei kerran jokaista saapuvaa tapahtumaa kohden
- Käytä yksityisiä kanavia ja valtuuta jokainen tilaus palvelimella, jotta käyttäjät näkevät vain ne kohteet, jotka heillä on oikeus nähdä
- Lähetä tiiviitä tilannekuvia tai muutoksia, ei kokonaisia tietojoukkoja
- Anna asiakasohjelman yhteyden palautuessa ladata nykyinen tila HTTP:n kautta ja jatkaa sitten virtaa
- Aja useita Reverb-instansseja kuormantasaajan takana ja Redis pub/sub niiden välillä, kun yhteysmäärät kasvavat

## Hälytä dynaamisilla kynnyksillä kiinteiden rajojen sijaan

Kiinteät kynnykset epäonnistuvat suoratoistomittareissa molempiin suuntiin. Liikenne kello 3 yöllä ei muistuta lainkaan liikennettä kello 20, joten yksi raja joko hälyttää koko yön tai ohittaa päiväajan ongelmat.

Dynaaminen kynnys vertaa jokaista uutta arvoa perustasoon, joka on opittu saman kohteen ja saman viikonajan viimeaikaisesta historiasta. Yksinkertainen ja selitettävä versio pitää liukuvaa keskiarvoa ja keskihajontaa kohteittain ja viikon tunneittain ja hälyttää, kun arvo pysyy tuon vaihteluvälin ulkopuolella useamman peräkkäisen aikaikkunan ajan.

Slumpissa dynaaminen poikkeamahälytys vähensi manuaalista valvontaa, koska operaattoreille ilmoitettiin todellisista poikkeamista sen sijaan, että he tuijottivat näyttöjä.

- Vaadi pysyvyyttä, esimerkiksi kolme peräkkäistä aikaikkunaa vaihteluvälin ulkopuolella, kohinan vähentämiseksi
- Pidä yksi avoin hälytys kohdetta ja ehtoa kohden, päivitettynä eikä toistettuna
- Sisällytä jokaiseen hälytykseen nykyinen arvo, perustaso, vaihteluväli ja linkki paneeliin
- Käy vaimennetut ja ohitetut hälytykset säännöllisesti läpi ja hienosäädä vaihteluväliä

## Tiedä, milloin ottaa käyttöön erillinen suoratoistoteknologia

Laravel ja Redis kattavat paljon, mutta niillä on rajansa. Harkitse Kafkaa, Redpandaa tai hallinnoitua suoratoistopalvelua, usein yhdessä virtaprosessorin kuten Apache Flinkin kanssa, kun tarvitset raakatapahtumien pitkää säilytystä ja uudelleentoistoa, tiukkaa avainkohtaista järjestystä monen kuluttajan kesken tai läpäisyä, jossa Redisin muistista tulee pullonkaula.

Siirtymän ei tarvitse tapahtua kerralla. Pidä Laravel API:n, kojelautojen, hälytysten hallinnan ja lähetyksen hoitajana ja aseta datavirta aggregointivaiheen eteen. Rakennamme ja laajennamme tämän muotoisia reaaliaikaisia järjestelmiä vastaanotosta niihin hälytyssääntöihin, joihin operaattorit luottavat.

## Tärkeimmät havainnot

- Älä koskaan virtauta raakatapahtumia selaimiin; lähetä aggregoituja tiivistelmiä kiinteässä tahdissa.
- Pidä vastaanottopäätepiste kevyenä ja puskuroi tapahtumat Redisiin taustaprosessien eräkäsittelyä varten.
- Erottele jonot prioriteetin mukaan ja tee jokaisesta työstä idempotentti, jotta uudelleenyritykset eivät voi sotkea laskureita.
- Viimeaikaiseen historiaan perustuvat dynaamiset kynnykset tuottavat vähemmän ja hyödyllisempiä hälytyksiä kuin kiinteät rajat.
- Ota Kafka tai vastaava alusta käyttöön, kun tarvitset uudelleentoistoa, tiukkaa järjestystä tai Redisin ylittävää volyymia, ja pidä Laravel sovelluskerroksena.

## UKK

### Pystyykö Laravel pyörittämään reaaliaikaisia kojelautoja suurille tietomäärille?

Kyllä, kun arkkitehtuuri pitää raskaan työn poissa pyyntöpolulta: kevyt vastaanottopäätepiste, Redis-puskuri, jonotetut taustaprosessit, jotka aggregoivat aikaikkunoihin, ja WebSocket-lähetykset, joissa on vain tiivistelmiä. Laravel palvelee silloin API:a, kojelautoja ja hälytyksiä, ja taustaprosessit skaalautuvat itsenäisesti.

### Kannattaako WebSocketeihin käyttää Laravel Reverbiä vai Pusheria?

Reverb on Laravelin oma WebSocket-palvelin, ja se toimii omassa infrastruktuurissasi, mikä sopii tiimeille, jotka haluavat hallita kustannuksia ja tietojen sijaintia. Pusher tai Ably poistavat WebSocket-palvelinten ylläpitotyön. Molemmat käyttävät samaa Laravelin broadcasting-API:a, joten voit vaihtaa myöhemmin.

### Mikä on dynaaminen kynnys valvonnassa?

Dynaaminen kynnys on hälytysraja, joka lasketaan saman mittarin, kohteen ja viikonajan viimeaikaisesta historiasta kiinteän luvun sijaan. Se mukautuu päivittäisiin ja viikoittaisiin vaihteluihin, joten hälytykset laukeavat todellisista poikkeamista eivätkä tavallisista huipuista.

## Liittyvät palvelut

- [Räätälöity ohjelmisto](https://sdk.enterprises/fi/services/product-engineering)
