Benötige etwas Hilfe bzw. Beratung zum Thema Webserver

Olii

New Member
Hallo, mein Name ist Oliver,

ich war bislang immer ein Frontend Developer, aber nun begebe ich mich hinter die Kulissen. Ich beschäftige mich nun seit einigen Monaten damit mir Server seitige Programmiersprachen anzueignen und zu verstehen wie ein Server/Webserver überhaupt funktioniert.

Ich bin nun aber komplett verwirrt und deswegen wende ich mich an euch und hoffe auf etwas Hilfe.

Ziel ist es eine Mobile App in betrieb zu nehmen die auf gegenseitige Userinteractions beruht. Also die App funktioniert oder bzw. erfüllt nur dann den eigentlichen Zweck wenn viele User registriert sind und miteinander interagieren.

Die Mobile-App an sich ist nicht das Problem sonder die ganze Server Thematik.

Ich würde gerne also so einrichten das es gut Skalierbar ist. Sagen wir zu Anfang reicht es wenn 1000 User gehandelt werden können aber es wäre schön wenn man das ganze bis ca. 300.000 User skalieren könnte (oder mehr).

Ich bin auf diverse Anbieter die Skalierbarkeit anbieten wie Firebase, Google Cloud, Amazon Web Service etc.

Diese sind zu beginn günstig und gut aber bei steigender User-zahl sehr sehr sehr teuer.

Ich würde gerne sowas machen wie: Filestore bei AWS aber Zeitgleich eine eigene Infrastruktur auf Webservern zum handlen von Userdaten etc.

Das Problem ist, es gibt so viele Anbieter für Server das ich gar nicht mehr durchblicke. Und dann auch noch zu unterscheiden zwischen VPS Hosting und Web Hosting. Hinzukommend muss auch beachtet werden das dass ganze Global funktionsfähig sein müsste. Wenn alle Server in Deutschland sind wird jemand aus Australien wahrscheinlich ein paar Probleme haben.

Kann mir jemand Tipps geben wo ich suchen soll oder worauf ich besonders acht geben muss? Wie viel Cores etc. wären gut für ein Server?

Konkret: Wofür sollte ich mich entscheiden: VPS oder Webhosting?
Wie viel Ram, Cores etc. würde eine gute Maschine ausmachen? Und falls jemand Erfahrung mit AWS hat: Ist so ein Hybrid möglich, zwischen AWS und einem oder mehreren eigenen Servern?

Für Tipps, Verlinkungen zu Hilfreichen Beiträgen etc. bin ich sehr dankbar.

Gruß
Oliver
 
Vorweg eine dringende Warnung: ein Projekt von Grund auf hochskalierbar und hochredundant aus zu legen ist sowohl sehr kosten- als auch zeitintensiv. Am Ende wird deutlich mehr Entwicklungszeit in die Skalierbarkeit als das System selber gegangen sein. Du riskierst stark zuviel Gedanken in _potentielle_ Zukunft zu investieren und nicht genug in das eigentliche Projekt und am Ende verfehlt das Projekt deshalb dann sein Zeil und Einsatzszenaria.
Realistisch betrachtet: wenn ein Projekt so erfolgreich wird dass man Skalierbarkeit und HA braucht, kann man sich an dem Punkt entweder über Einnahmen oder Investitionsgelder generell auch die notwendigen Spezialisten leisten um diese dann auch durch zu führen.

Bei halbwegs vernünftiger Wahl der Technologien und saubere Code-Basis kann man oft schon stark skalieren ohne dass es eigentlich vorgesehen ist (Datenbank-Clustering, Loadbalancing Proxy, ...)

Falls du aus Interesse oder anderen Gründen trotzdem direkt damit anfangen willst, kann ich dir Queuing Technologien (Producer-Consumer) mit Echtzeit-Kommunikation und einem Datenbank-Cluster (bspw Mysql mit Sharding und Replication) empfehlen. Je nach eingesetzter Technologie und basierend auf meinen persönlichen Präferenzen könnte das bspw so aussehen:

- Frontend Server: NGINX als Loadbalancer mit Lua-basierter Firewalllogik (inklusive Hot-patches für Sicherheits- und Stabilitätsprobleme in der eigentlichen Business logic
- Backend Server: NodeJS mit Loopback als API-Handler
- Processing Queue: Apache ActiveMQ
- Datenbankserver: MongoDB und/oder Mysql je nachdem ob relationale Strukturen gebraucht werden.
- Caching System: Redis


Alternativ tut es vermutlich aber auch:
Nginx + PHP + Laravel + Mysql


Was ich damit zeigen will: man muss für extreme Ansprüche viele Technologien gut beherrschen oder man baut eine Lösung die "gut genug" ist und später verändert/erweitert/ausgetauscht wird.
 
Danke erstmal für deine sehr Hilfreiche Antwort, ich weiß das wirklich zu schätzen.

Du hast natürlich recht, ich mache mir viele Gedanken.

Also wenn man mal davon ausgehen würde es läuft gut (nur Beispielhaft) mit sehr vielen Usern, dann könnte man seine Struktur also in etwa so Aufbauen:
- Frontend-Server der alle Anfragen an nimmt
- Backend-Server (einer oder mehrere) der die Anfragen verarbeitet
- Datenbank-Server der die entsprechenden Daten liefert

Das alles für eine Person alleine ist schon etwas hart das stimmt. Aus Interesse würde ich es gerne irgendwann mal versuchen.

Was würdest du denn sagen was für so etwas besser geeignet wäre?: Ein Cloud, VPS oder Web-Server?
 
Am Ende ist alles das selbe, bis auf der Web-Server dort hat man bei den meisten Hoster keine Möglichkeit so etwas zu konfigurieren.

Das heißt ein vServer bzw. Cloud Server würde dafür reichen.
Bzgl. Cloud oder VPS, das kommt immer drauf an was die Last sagt, am Ende ist es aber eigentlich die gleiche Konfiguration, das heißt hast du zeigen sagen wir von 10-15 Uhr nur Last und der Rest sind gegenüber den anderen wir aber wenig Aufrufe, dann ist ein Cloud Server besser da du diese schneller abschalten kannst und somit Geld sparen kannst bzw. wenn mehr Last kommt als erwartet du relative einfach neue hinzufügen kannst.
Wäre daher denke ich die bessere Wahl.

Solltest du aber nur ca. 1-2h am Tag wenig Last haben würde eher ein Dedicated Cluster besser sein. Für mehr Leistung zahlst du gegenüber einem vServer weniger.
 
Auch danke für deine Antwort, sehr Hilfreich.

Also wäre es Sinnvoll anfangs, so lange die Userzahl gering ist, einen Cloud Server zu nutzen (z.B. AWS) und bei zunehmender Größe auf ein Dedicated Cluster umzustellen?

Sollte man sich sofort für ein Dedicated Cluster entscheiden ist das für einen alleine sehr viel Arbeit oder? Man muss sich wenn ich mich jetzt nicht vertue um die Sicherheit, um die Garbage-Collection, um das traffic handling etc alles selber kümmern.

Meinst du das wäre eine gute Vorgehensweise? Ich bin wirklich nicht so ganz am durchblicken deswegen entschuldigt meine Unwissenheit aber ich möchte gerne eine optimale Lösung finden und kann einfach keinen Ansatz fest machen...
 
Kubernetes ist auch einen Blick wert, wenn du deine Applikationen "containern" willst (z.B. mit Docker). Wir haben gerade einen Kubernetes-Cluster für ein Projekt aufgesetzt und sind ziemlich begeistert, der Aufwand ist initial nicht ganz ohne, aber mit dem gesammelten Wissen kommt man dann auch bei weiteren Projekten sehr viel schneller voran.
 
Back
Top