MicrocosmWorksInnovoimassa ja Arkkitehtuuria Digitaalisessa Kosmoksessa
TietoaYhteystiedot
MicrocosmWorksInnovoimassa ja suunnittelemassa digitaalista kosmosta

Toimitamme IT-ratkaisuja, joilla on merkitystä. Olemme intohimoisia teknologiasta, turvallisuudesta ja autamme yrityksiä kasvamaan luotettavan, innovatiivisen IT-infrastruktuurin kautta.

[email protected]
+91 7011868196
New Delhi, India

AI Kasvuhubi

AI HubStartup-innovaatiotYrityskiihdyttämö

Ratkaisut

Kaikki ratkaisutHyvinvointi- ja kuntoilusovelluksetAI-videoplatformiAI-agenttikehitys

Resurssit

OivalluksetToimialan oppaatKäyttötapausmallitArkkitehtuurimallitTapaustutkimukset

Yritys

Tietoa meistäYhteystiedotTyömme

Palvelut

Digitaalinen konsultointiPilvi-infrastruktuuriSaaS-kehitysAI-kehitysVideoteknologia
ERP-kehitysZoho-mukautusOdoo-kehitysSalesforce-integraatioMukautettu CRM-kehitys
QuickBooks-integraatioIoT-ratkaisutLohkoketjukehitys
KyberturvallisuuskonsultointiIT-tuki - L3

© 2026 MicrocosmWorks. Kaikki oikeudet pidätetään.

TietosuojakäytäntöKäyttöehdot
Takaisin oivalluksiin
AI Development

Luotettavien aikavyöhyketietoisten push-ilmoitusjärjestelmien rakentaminen

Push-ilmoitusjärjestelmän suunnittelu, joka lähettää ilmoitukset oikeaan paikalliseen aikaan jokaiselle käyttäjälle, luotettavasti.

Mayank Joshi.webpMayank Chandra Joshi
•
July 31, 2026
•
Päivitetty August 29, 2026
•
5 min read
Untitled design (16).webp
5 min read

Luotettavan, aikavyöhyketietoisen push-ilmoitusjärjestelmän rakentaminen

Terveyden ja hyvinvoinnin sovelluksen piti lähettää henkilökohtaisia päivittäisiä muistutuksia – ateriamuistutuksia, mielialatarkistuksia, nesteytyskehotuksia, unimerkkejä ja mukautettuja muistutuksia – tuhansille käyttäjille ympäri maailmaa. Haasteena oli: jokaisen ilmoituksen piti saapua oikeaan paikalliseen aikaan, tarkalleen kerran, eikä koskaan toimimattomaan laitteeseen. Suunnittelimme ja rakensimme hajautetun putkilinjan, joka tekee tästä totta.

 

Haaste

  • Aikavyöhyketarkkuus mittakaavassa. "Kello 9 aamiaismuistutus" tarkoittaa eri asiaa jokaiselle käyttäjälle. Lähettäminen palvelimen ajassa lähettäisi ilmoituksen jollekin Sydneyssä kello 3 yöllä. Jokaisen ilmoituksen piti mukautua käyttäjän paikalliseen aikaan.
  • Ei roskapostia, ei päällekkäisyyttä. Cronejen ajoitukset menevät väistämättä päällekkäin ja ajetaan uudelleen. Ilman tiukkoja takeita yksittäinen käyttäjä voisi saada saman "aika lounaalle 🥗" -muistutuksen kaksi tai kolme kertaa – mikä johtaa nopeasti sovelluksen poistamiseen.
  • Laitteet ovat epäluotettavia. Käyttäjät poistavat sovelluksia, kumoavat käyttöoikeuksia ja vaihtavat push-tunnuksia jatkuvasti. Ilmoitusten lähettäminen sokeasti vanhentuneisiin tunnuksiin tuhlaa resursseja ja vääristää toimitusmittareita.
  • Tarkka ajoitus ilman raakaa voimaa käyttävää ajastinta. Satojen ilmoitusten toimittaminen tarkkoina minuutteina – ilman, että cron pommittaa tietokantaa 60 sekunnin välein – vaati älykkäämmän mekanismin kuin naiivi kysely.

 

Ratkaisumme

Rakensimme kolmivaiheisen putkilinjan, joka erottaa selkeästi mitä lähetetään, milloin lähetetään ja varsinaisen lähetyksen – jotta jokainen vaihe voi epäonnistua ja palautua itsenäisesti. Tietokanta on totuuden lähde, viestijono hoitaa tarkan ajoituksen, ja yksi työntekijäkerros keskustelee push-palveluntarjoajan kanssa.

image.webp

 

Arkkitehtuuri

  • Expo-notifications on React Native -asiakasohjelma, jossa on natiivikanavat, yksilölliset äänet ja syvät linkit, ja joka käyttää yhtä tunnusmuotoa ja toimitus-APIa sekä iOS- että Android-laitteille.
  • NestJS-taustaohjelma, jossa expo-server-sdk on yhtenäinen push-abstraktio FCM:n ja APNs:n yläpuolella.
  • MongoDB totuuden lähteenä – NotificationMessage-, NotificationToken- ja NotificationCounter-kokoelmat.
  • ActiveMQ (STOMP) viivejonot, yksi per kategoria (ateria, mieliala, aktiviteetti, turvallisuus, muistutukset), tarkkaa aikataulutettua toimitusta varten.
  • Creator crons, jotka luovat aikavyöhykkeen mukaan ratkaistuja ilmoitustietueita käyttäjää kohden.
  • Kuluttajatyöntekijät, jotka tilaavat jokaiseen jonoon ja suorittavat lopullisen validoinnin ennen lähettämistä.
  • AWS ECS Fargate, joka ajaa croneja ja kuluttajia; ActiveMQ omalla EC2-instanssilla.

 

Avainominaisuudet

  1. Aikavyöhyketietoinen ajoitus. Käyttäen date-fns-tz, jokaisen käyttäjän paikallinen lähetysaika lasketaan, muunnetaan takaisin UTC-aikaan tallennusta varten ja rajataan UTC-päivämääräikkunoilla, jotta taataan yksi muistutus päivässä.
  2. Tietokannan valvomakin toistettavuus. Odottavien viestien osittainen yksilöivä indeksi tekee kaksoiskappaleiden luomisesta mahdotonta – vaikka cron ajaisi kahdesti:
// Yksilöllinen vain, kun viesti on vielä PENDING-tilassa eikä sitä ole poistettu

schema.index(

  { userId: 1, notificationTokenId: 1, category: 1, label: 1, scheduledAt: 1 },

  { unique: true, partialFilterExpression: { status: 'pending', isDeleted: false } }

);

 

3. Tarkka toimitus viivejonoilla. Minuuttikohtaisen cronin sijaan ajastin asettaa viestit jonoon heti, mutta lykkää toimitusta tarkkaan eräpäiväminuuttiin käyttäen ActiveMQ:n `scheduled-delay` -otsikkoa:
 

client.send(`/queue/${queueName}`, {

  persistent: 'true'

  'AMQ_SCHEDULED_DELAY': String(delayMs), // toimitettu tarkalleen eräpäivänä

}, JSON.stringify(message));

 

4. Yksi aktiivinen tunnus laitetta kohden. Osittainen yksilöllinen indeksi takaa tasan yhden aktiivisen tunnuksen per laite; uudet kirjautumiset poistavat siististi vanhan tunnuksen, ja eksponentiaalisella viivästetyllä uudelleenyrityksellä selvitään samanaikaisista kirjautumisista.

5. Vastaanottovahvistuksen tarkistus + automaattinen puhdistus. Lähetyksen jälkeen kysymme Expo-kuittauksia. DeviceNotRegistered-vastaus deaktivoi välittömästi kuolleen tunnuksen, joten emme koskaan tuhlaa lähetystä siihen uudelleen.

f (receipt.status === 'error' &&

    receipt.details?.error === 'DeviceNotRegistered') {

  await this.deactivateToken(token); // lopeta lähettäminen toimimattomiin laitteisiin

}

 

6. Vikaantumiskatto. Jokaisella laitteella on uudelleenyrityslaskuri; kolmen peräkkäisen vian jälkeen tunnus poistetaan automaattisesti käytöstä – ei äärettömiä silmukoita, ei haamutunnuksia.

7. Käyttäjän tarkoituksen kunnioittaminen lähetyshetkellä. Ilmoitusasetus tarkistetaan uudelleen kuluttajan toimesta toimituksen yhteydessä, ei vain ajoituksen yhteydessä – joten käyttäjä, joka peruu tilauksen tuntia ennen muistutusta, ei koskaan saa sitä. Viestit palautuvat rehellisiin päätetiloihin: success, failed tai is_missed.

 

Tulokset

  • Jokainen käyttäjä saa muistutukset oikeaan paikalliseen aikaan, maailmanlaajuisesti – ei yhtään työajan ulkopuolista ilmoitusta.
  • Kaksoiskappaleilmoitukset eliminoitiin kokonaan tietokantatason toistettavuudella.
  • Kuolleet ja vanhentuneet laitetunnukset havaitaan ja poistetaan automaattisesti, pitäen toimituksen puhtaana.
  • Luotettavuus paranee ja tietokantakuormitus vähenee tarkan, minuuttitarkan toimituksen ansiosta ilman raakaa voimaa käyttävää ajastinta.

 

Teknologiapino

React Native · Expo Notifications · NestJS · TypeScript · MongoDB · ActiveMQ (STOMP) · expo-server-sdk · date-fns-tz · AWS ECS Fargate

Push-ilmoituksetAikavyöhykkeetAjoitusLuotettavuus
Mayank Joshi.webp

Tietoa kirjoittajasta

Mayank Chandra Joshi

AI & Cloud Solutions Expert at MicrocosmWorks

Building innovative AI-powered solutions and helping businesses transform through cutting-edge technology.

Haluatko oppia lisää?

Ota meihin yhteyttä keskustellaksemme siitä, kuinka voimme auttaa toteuttamaan nämä ratkaisut liiketoiminnassasi.

Ota yhteyttä

Usein kysytyt kysymykset

A timezone-aware notification system converts each user's local schedule into UTC before delivery, ensuring reminders arrive at the correct local time regardless of the user's location or daylight saving changes.

Database-level idempotency using unique indexes ensures each scheduled notification is created only once, even if scheduling jobs are retried or executed multiple times.

Delayed message queues deliver notifications at the exact scheduled time without constantly polling the database, improving delivery accuracy while reducing infrastructure load.

A reliable push notification system validates delivery receipts and automatically deactivates expired or unregistered device tokens, preventing failed notifications and improving delivery success rates.

A scalable push notification system combines timezone-aware scheduling, delayed message queues, idempotent database design, token lifecycle management, and delivery validation to ensure accurate and reliable notification delivery.

Comments (0)

Share your thoughts and join the conversation

Leave a Comment

Your email will not be published

No comments yet

Be the first to share your thoughts!