[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"public-branding":3,"content-de-microservices-gaming-networks":8,"public-ads-config":680},{"siteName":4,"primaryColor":5,"accentColor":6,"faviconUrl":7,"logoUrl":7},"KiroCloud","#ffffff","#888888","",{"id":9,"title":10,"author":11,"body":12,"category":11,"description":23,"extension":666,"lastUpdated":11,"meta":667,"navigation":126,"order":668,"path":669,"readTime":11,"seo":670,"stem":678,"__hash__":679},"docs\u002Fdocs\u002Fde\u002Fmicroservices-gaming-networks.md","[object Object]",null,{"type":13,"value":14,"toc":660},"minimark",[15,20,24,32,35,40,50,53,55,59,62,68,70,74,77,376,379,628,630,634,656],[16,17,19],"h1",{"id":18},"microservices-vs-monolith-für-gaming-netzwerke-skalierbare-discord-minecraft-cloud","Microservices vs Monolith für Gaming-Netzwerke: Skalierbare Discord & Minecraft Cloud",[21,22,23],"p",{},"Kleine Gaming-Communities beginnen meist mit einem monolithischen System: Ein einziger Node.js-Prozess handhabt den Discord-Bot, stellt eine Express-Weboberfläche bereit und greift direkt auf lokale JSON-Dateien oder SQLite zu. Sobald die Community jedoch auf hunderte Spieler und zehntausende Discord-Mitglieder wächst, gerät dieser Aufbau ins Wanken: Ein einziger schwerer Web-Request blockiert den Bot, und ein Bot-Crash reißt das gesamte Dashboard mit in den Abgrund.",[21,25,26,27,31],{},"In diesem Leitfaden analysieren wir den Übergang vom Monolithen zu einer ",[28,29,30],"strong",{},"entkoppelten, modularen Microservices-Architektur",", wie sie KiroCloud für High-Traffic-Netzwerke bereitstellt.",[33,34],"hr",{},[36,37,39],"h2",{"id":38},"_1-die-grenzen-des-monolithen","1. Die Grenzen des Monolithen",[41,42,47],"pre",{"className":43,"code":45,"language":46},[44],"language-text","MONOLITH (Nicht resilient):\n┌────────────────────────────────────────────────────────┐\n│               Einziger Node.js Prozess                 │\n│  - Discord Bot Gateway WebSocket                       │\n│  - Web Dashboard REST API (Express)                    │\n│  - Minecraft RCON Socket                               │\n│  - Lokale SQLite Datenbank (Blockiert bei Write-Locks) │\n└────────────────────────────────────────────────────────┘\n  ▲ Crash in einem Teilbereich = Totalausfall für alle!\n","text",[48,49,45],"code",{"__ignoreMap":7},[21,51,52],{},"Sobald Web-Traffic (z. B. 200 Spieler öffnen zeitgleich das Dashboard) den Event-Loop blockiert, kann der Discord-Bot keine Heartbeats mehr senden und verliert die Verbindung.",[33,54],{},[36,56,58],{"id":57},"_2-die-moderne-kirocloud-ziel-architektur","2. Die moderne KiroCloud Ziel-Architektur",[21,60,61],{},"In einer resilienten Cloud-Architektur werden alle Komponenten in eigenständige, lose gekoppelte Services zerlegt:",[41,63,66],{"className":64,"code":65,"language":46},[44],"┌─────────────────────────┐          ┌─────────────────────────┐\n│     Discord Gateway     │          │    Web-Browser \u002F User   │\n└────────────┬────────────┘          └────────────┬────────────┘\n             │                                    │\n             ▼                                    ▼\n┌─────────────────────────┐          ┌─────────────────────────┐\n│  Bot Worker Service     │          │   Nuxt 4 Web Plattform  │\n│  (Discord.js \u002F Shards)  │          │   (Server-Side Rendered)│\n└────────────┬────────────┘          └────────────┬────────────┘\n             │                                    │\n             └──────────────┬─────────────────────┘\n                            ▼\n             ┌─────────────────────────────┐\n             │  Zentraler Redis Message    │\n             │  Broker & Event Bus         │\n             └──────────────┬──────────────┘\n                            │\n             ┌──────────────┼─────────────────────┐\n             ▼                                    ▼\n┌─────────────────────────┐          ┌─────────────────────────┐\n│   PostgreSQL Cluster    │          │ Minecraft Cloud Bridge  │\n│   (Persistente Daten)   │          │ (RCON \u002F PaperMC \u002F Proxy)│\n└─────────────────────────┘          └─────────────────────────┘\n",[48,67,65],{"__ignoreMap":7},[33,69],{},[36,71,73],{"id":72},"_3-asynchrone-event-verteilung-mit-redis-pubsub","3. Asynchrone Event-Verteilung mit Redis Pub\u002FSub",[21,75,76],{},"Anstatt dass der Discord-Bot direkt den Minecraft-Server blockiert, kommunizieren die Services über leichtgewichtige Event-Channels:",[41,78,82],{"className":79,"code":80,"language":81,"meta":7,"style":7},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F bot-event-publisher.ts (Im Discord-Bot)\nimport Redis from 'ioredis';\n\nconst redis = new Redis();\n\nexport async function publishPlayerVerification(discordId: string, minecraftName: string) {\n  const eventPayload = {\n    type: 'PLAYER_VERIFIED',\n    discordId,\n    minecraftName,\n    timestamp: Date.now(),\n  };\n\n  \u002F\u002F Veröffentlichung im Redis Event-Bus in \u003C 1 ms\n  await redis.publish('events:player:verified', JSON.stringify(eventPayload));\n  console.log(`[Event Bus] Spieler-Verifizierung für ${minecraftName} publiziert.`);\n}\n","typescript",[48,83,84,93,121,128,153,158,203,217,236,244,252,273,279,284,290,333,370],{"__ignoreMap":7},[85,86,89],"span",{"class":87,"line":88},"line",1,[85,90,92],{"class":91},"sHwdD","\u002F\u002F bot-event-publisher.ts (Im Discord-Bot)\n",[85,94,96,100,104,107,111,115,118],{"class":87,"line":95},2,[85,97,99],{"class":98},"s7zQu","import",[85,101,103],{"class":102},"sTEyZ"," Redis ",[85,105,106],{"class":98},"from",[85,108,110],{"class":109},"sMK4o"," '",[85,112,114],{"class":113},"sfazB","ioredis",[85,116,117],{"class":109},"'",[85,119,120],{"class":109},";\n",[85,122,124],{"class":87,"line":123},3,[85,125,127],{"emptyLinePlaceholder":126},true,"\n",[85,129,131,135,138,141,144,148,151],{"class":87,"line":130},4,[85,132,134],{"class":133},"spNyl","const",[85,136,137],{"class":102}," redis ",[85,139,140],{"class":109},"=",[85,142,143],{"class":109}," new",[85,145,147],{"class":146},"s2Zo4"," Redis",[85,149,150],{"class":102},"()",[85,152,120],{"class":109},[85,154,156],{"class":87,"line":155},5,[85,157,127],{"emptyLinePlaceholder":126},[85,159,161,164,167,170,173,176,180,183,187,190,193,195,197,200],{"class":87,"line":160},6,[85,162,163],{"class":98},"export",[85,165,166],{"class":133}," async",[85,168,169],{"class":133}," function",[85,171,172],{"class":146}," publishPlayerVerification",[85,174,175],{"class":109},"(",[85,177,179],{"class":178},"sHdIc","discordId",[85,181,182],{"class":109},":",[85,184,186],{"class":185},"sBMFI"," string",[85,188,189],{"class":109},",",[85,191,192],{"class":178}," minecraftName",[85,194,182],{"class":109},[85,196,186],{"class":185},[85,198,199],{"class":109},")",[85,201,202],{"class":109}," {\n",[85,204,206,209,212,215],{"class":87,"line":205},7,[85,207,208],{"class":133},"  const",[85,210,211],{"class":102}," eventPayload",[85,213,214],{"class":109}," =",[85,216,202],{"class":109},[85,218,220,224,226,228,231,233],{"class":87,"line":219},8,[85,221,223],{"class":222},"swJcz","    type",[85,225,182],{"class":109},[85,227,110],{"class":109},[85,229,230],{"class":113},"PLAYER_VERIFIED",[85,232,117],{"class":109},[85,234,235],{"class":109},",\n",[85,237,239,242],{"class":87,"line":238},9,[85,240,241],{"class":102},"    discordId",[85,243,235],{"class":109},[85,245,247,250],{"class":87,"line":246},10,[85,248,249],{"class":102},"    minecraftName",[85,251,235],{"class":109},[85,253,255,258,260,263,266,269,271],{"class":87,"line":254},11,[85,256,257],{"class":222},"    timestamp",[85,259,182],{"class":109},[85,261,262],{"class":102}," Date",[85,264,265],{"class":109},".",[85,267,268],{"class":146},"now",[85,270,150],{"class":222},[85,272,235],{"class":109},[85,274,276],{"class":87,"line":275},12,[85,277,278],{"class":109},"  };\n",[85,280,282],{"class":87,"line":281},13,[85,283,127],{"emptyLinePlaceholder":126},[85,285,287],{"class":87,"line":286},14,[85,288,289],{"class":91},"  \u002F\u002F Veröffentlichung im Redis Event-Bus in \u003C 1 ms\n",[85,291,293,296,299,301,304,306,308,311,313,315,318,320,323,325,328,331],{"class":87,"line":292},15,[85,294,295],{"class":98},"  await",[85,297,298],{"class":102}," redis",[85,300,265],{"class":109},[85,302,303],{"class":146},"publish",[85,305,175],{"class":222},[85,307,117],{"class":109},[85,309,310],{"class":113},"events:player:verified",[85,312,117],{"class":109},[85,314,189],{"class":109},[85,316,317],{"class":102}," JSON",[85,319,265],{"class":109},[85,321,322],{"class":146},"stringify",[85,324,175],{"class":222},[85,326,327],{"class":102},"eventPayload",[85,329,330],{"class":222},"))",[85,332,120],{"class":109},[85,334,336,339,341,344,346,349,352,355,358,361,364,366,368],{"class":87,"line":335},16,[85,337,338],{"class":102},"  console",[85,340,265],{"class":109},[85,342,343],{"class":146},"log",[85,345,175],{"class":222},[85,347,348],{"class":109},"`",[85,350,351],{"class":113},"[Event Bus] Spieler-Verifizierung für ",[85,353,354],{"class":109},"${",[85,356,357],{"class":102},"minecraftName",[85,359,360],{"class":109},"}",[85,362,363],{"class":113}," publiziert.",[85,365,348],{"class":109},[85,367,199],{"class":222},[85,369,120],{"class":109},[85,371,373],{"class":87,"line":372},17,[85,374,375],{"class":109},"}\n",[21,377,378],{},"Auf der Empfänger-Seite:",[41,380,382],{"className":79,"code":381,"language":81,"meta":7,"style":7},"\u002F\u002F minecraft-event-subscriber.ts (In der Minecraft Cloud Bridge)\nimport Redis from 'ioredis';\n\nconst subscriber = new Redis();\n\nsubscriber.subscribe('events:player:verified', () => {\n  console.log('[Subscriber] Höre auf Spieler-Verifizierungen...');\n});\n\nsubscriber.on('message', async (channel, message) => {\n  if (channel === 'events:player:verified') {\n    const data = JSON.parse(message);\n    \u002F\u002F Ausführung des Whitelist-Befehls auf dem Server via RCON\n    await executeSafeRconCommand(`whitelist add ${data.minecraftName}`);\n  }\n});\n",[48,383,384,389,405,409,426,430,458,479,487,491,530,554,579,584,615,620],{"__ignoreMap":7},[85,385,386],{"class":87,"line":88},[85,387,388],{"class":91},"\u002F\u002F minecraft-event-subscriber.ts (In der Minecraft Cloud Bridge)\n",[85,390,391,393,395,397,399,401,403],{"class":87,"line":95},[85,392,99],{"class":98},[85,394,103],{"class":102},[85,396,106],{"class":98},[85,398,110],{"class":109},[85,400,114],{"class":113},[85,402,117],{"class":109},[85,404,120],{"class":109},[85,406,407],{"class":87,"line":123},[85,408,127],{"emptyLinePlaceholder":126},[85,410,411,413,416,418,420,422,424],{"class":87,"line":130},[85,412,134],{"class":133},[85,414,415],{"class":102}," subscriber ",[85,417,140],{"class":109},[85,419,143],{"class":109},[85,421,147],{"class":146},[85,423,150],{"class":102},[85,425,120],{"class":109},[85,427,428],{"class":87,"line":155},[85,429,127],{"emptyLinePlaceholder":126},[85,431,432,435,437,440,442,444,446,448,450,453,456],{"class":87,"line":160},[85,433,434],{"class":102},"subscriber",[85,436,265],{"class":109},[85,438,439],{"class":146},"subscribe",[85,441,175],{"class":102},[85,443,117],{"class":109},[85,445,310],{"class":113},[85,447,117],{"class":109},[85,449,189],{"class":109},[85,451,452],{"class":109}," ()",[85,454,455],{"class":133}," =>",[85,457,202],{"class":109},[85,459,460,462,464,466,468,470,473,475,477],{"class":87,"line":205},[85,461,338],{"class":102},[85,463,265],{"class":109},[85,465,343],{"class":146},[85,467,175],{"class":222},[85,469,117],{"class":109},[85,471,472],{"class":113},"[Subscriber] Höre auf Spieler-Verifizierungen...",[85,474,117],{"class":109},[85,476,199],{"class":222},[85,478,120],{"class":109},[85,480,481,483,485],{"class":87,"line":219},[85,482,360],{"class":109},[85,484,199],{"class":102},[85,486,120],{"class":109},[85,488,489],{"class":87,"line":238},[85,490,127],{"emptyLinePlaceholder":126},[85,492,493,495,497,500,502,504,507,509,511,513,516,519,521,524,526,528],{"class":87,"line":246},[85,494,434],{"class":102},[85,496,265],{"class":109},[85,498,499],{"class":146},"on",[85,501,175],{"class":102},[85,503,117],{"class":109},[85,505,506],{"class":113},"message",[85,508,117],{"class":109},[85,510,189],{"class":109},[85,512,166],{"class":133},[85,514,515],{"class":109}," (",[85,517,518],{"class":178},"channel",[85,520,189],{"class":109},[85,522,523],{"class":178}," message",[85,525,199],{"class":109},[85,527,455],{"class":133},[85,529,202],{"class":109},[85,531,532,535,537,539,542,544,546,548,551],{"class":87,"line":254},[85,533,534],{"class":98},"  if",[85,536,515],{"class":222},[85,538,518],{"class":102},[85,540,541],{"class":109}," ===",[85,543,110],{"class":109},[85,545,310],{"class":113},[85,547,117],{"class":109},[85,549,550],{"class":222},") ",[85,552,553],{"class":109},"{\n",[85,555,556,559,562,564,566,568,571,573,575,577],{"class":87,"line":275},[85,557,558],{"class":133},"    const",[85,560,561],{"class":102}," data",[85,563,214],{"class":109},[85,565,317],{"class":102},[85,567,265],{"class":109},[85,569,570],{"class":146},"parse",[85,572,175],{"class":222},[85,574,506],{"class":102},[85,576,199],{"class":222},[85,578,120],{"class":109},[85,580,581],{"class":87,"line":281},[85,582,583],{"class":91},"    \u002F\u002F Ausführung des Whitelist-Befehls auf dem Server via RCON\n",[85,585,586,589,592,594,596,599,601,604,606,608,611,613],{"class":87,"line":286},[85,587,588],{"class":98},"    await",[85,590,591],{"class":146}," executeSafeRconCommand",[85,593,175],{"class":222},[85,595,348],{"class":109},[85,597,598],{"class":113},"whitelist add ",[85,600,354],{"class":109},[85,602,603],{"class":102},"data",[85,605,265],{"class":109},[85,607,357],{"class":102},[85,609,610],{"class":109},"}`",[85,612,199],{"class":222},[85,614,120],{"class":109},[85,616,617],{"class":87,"line":292},[85,618,619],{"class":109},"  }\n",[85,621,622,624,626],{"class":87,"line":335},[85,623,360],{"class":109},[85,625,199],{"class":102},[85,627,120],{"class":109},[33,629],{},[36,631,633],{"id":632},"_4-architektonische-vorteile-für-gaming-communities","4. Architektonische Vorteile für Gaming-Communities",[635,636,637,644,650],"ol",{},[638,639,640,643],"li",{},[28,641,642],{},"Unabhängige Skalierbarkeit:"," Der Web-Server kann bei Traffic-Spitzen horizontal skaliert werden, ohne dass zusätzliche Bot-Verbindungen zu Discord aufgebaut werden müssen.",[638,645,646,649],{},[28,647,648],{},"Fehlertoleranz:"," Wenn die Minecraft-Cloud-Bridge neu startet, puffert Redis anstehende Nachrichten. Weder der Bot noch das Dashboard stürzen ab.",[638,651,652,655],{},[28,653,654],{},"Wartungsfreiheit:"," Jede Komponente kann unabhängig aktualisiert werden – maximale Uptime für deine Spieler und Community-Mitglieder.",[657,658,659],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":7,"searchDepth":95,"depth":95,"links":661},[662,663,664,665],{"id":38,"depth":95,"text":39},{"id":57,"depth":95,"text":58},{"id":72,"depth":95,"text":73},{"id":632,"depth":95,"text":633},"md",{},0,"\u002Fdocs\u002Fde\u002Fmicroservices-gaming-networks",{"title":671,"description":23},{"Microservices vs Monolith für Gaming-Netzwerke":672,"description":673,"category":674,"order":123,"author":675,"readTime":676,"lastUpdated":677},"Skalierbare Discord & Minecraft Cloud","Architektur-Vergleich für wachsende Gaming-Communities. Entkopplung von Discord Bots, Web-Dashboards, Velocity Proxies und PostgreSQL.","architecture","Luca Lichtenwald","14 min","2026-10-09","docs\u002Fde\u002Fmicroservices-gaming-networks","kO6uuTt5P6GaQAySwt7c_9dpB6jq9gjYQT05pM986aE",{"enabled":126,"clientPubId":681,"docsSlotId":7,"newsSlotId":7,"guidesSlotId":7,"dashboardSlotId":7,"docsEnabled":126,"newsEnabled":126,"guidesEnabled":126,"dashboardEnabled":126},"ca-pub-9454065621077312"]