Bereitstellung von Webanwendungen: eine Version für alle Clients oder für jeden seine eigene

7

Ich habe eine allgemeine Frage zur Softwarebereitstellung. Bei der Arbeit entwerfen wir ein CRM, das über Webbrowser verwendet wird. Mir wurde kürzlich mitgeteilt, dass jeder bestimmte Client einen eigenen Server hat (obwohl die Server meinem Unternehmen gehören, gehören sie weder ihnen noch befinden sie sich in ihren Büros).

Das stört mich ein wenig. Meiner Ansicht nach muss er beim Entwerfen einer Webanwendung berücksichtigen, dass er in der Lage sein wird, eine "weiche" Ausführung für alle seine Clients aufrechtzuerhalten (ohne über Replikation oder Lastausgleich zu sprechen), möglicherweise mit unterschiedlichen Datenbanken für jede, aber eine Anwendung ... Dies hilft insbesondere dabei, alle mit Patches und Upgrades auf dem Laufenden zu halten. Liege ich falsch ?? Mögen Sie mir helfen, diese Frage mit Ressourcen besser zu verstehen (mir müssen die richtigen Schlüsselwörter fehlen, um sie selbst zu finden). Ich verstehe eigentlich nicht, warum sie "den dritten Weg" zwischen "einer zentralen Webanwendung für alle" und "einer verteilten Desktopanwendung für jeden" gegangen sind.

Vielen Dank !

Shirraz
quelle

Antworten:

6

Das hängt vom Ansatz ab. Es ist viel einfacher, Tausende Server zu warten, die mit den heutigen Technologien identisch sind (Tools für die Jobautomatisierung wie Docker, Marionette, Koch, Ansible usw. - Hunderte davon).

Wenn Sie für jeden Kunden einen einzigen Server haben, können Sie die Ressourcen für jeden Kunden genauer planen und ihn für das bezahlen lassen, was er wirklich nutzt. Es macht auch Ihr Problem kleiner, was auch einige Vorteile hat.

Stellen Sie sich vor, Sie hätten 1000 Kunden in einer Datenbank mit insgesamt 2 TB Daten. Ihre Entwickler müssten SQL-Abfragen perfekt schreiben, um eine solche Datenbank schnell genug zu haben. Dieses Problem ist mit einer kleinen Datenbank für jeden Kunden viel kleiner.

Eine andere Frage, über die man nachdenken sollte, könnte die Sicherheit sein. Wenn Sie Ihre Kunden auf Anwendungsebene trennen müssen, müssen Ihre Entwickler sehr vorsichtig sein, welche Daten sie auswählen. Wenn Sie eine Datenbank pro Kunde haben, besteht eine geringere Wahrscheinlichkeit, dass Daten eines anderen Kunden verloren gehen.

Auf der anderen Seite können Sie mit einer einzigen Instanz für alle Kunden Ressourcen zwischen Ihren Kunden teilen und Geld für Hardware sparen.

Diese Entscheidung sollte daher zu Beginn des Projekts getroffen werden, nachdem eine Liste der Vor- und Nachteile erstellt wurde. Ich würde auch vorschlagen, einige Prototypen zu erstellen, damit Sie wissen, dass z. B. der Bereitstellungsprozess, Datenbankmigrationen usw. für Sie kein Problem darstellen.

Aus meiner Erfahrung schlage ich persönlich vor, für jeden Kunden eine Instanz zu haben, wenn Sie mit der Verwaltung vieler Instanzen fertig werden.

Yarik Dot
quelle
Es macht für mich Sinn und ich verstehe das ganze Bild besser ... Es wirft jedoch einige andere Fragen für mich auf ... In Bezug auf DBs gibt es keine Lösungen, um Datenbanken so zu replizieren / zu parzellieren, dass DBs nicht vorhanden sind. t Clients zugewiesen, aber dass Clients DBs zugewiesen sind (was das Gruppieren von "kleinen Clients" ermöglichen würde, während größere Clients einige andere Instanzen in wenigen Zahlen (oder allein) gemeinsam nutzen könnten? Es liegt wirklich daran, dass sich die gesamte IT-Welt von verteilten Programmen zu entfernen scheint zu zentralisierten Webanwendungen (insbesondere Google ... mit Chrome OS).
Shirraz
3

Wenn Sie für jeden Kunden getrennte Server haben, profitieren Sie von der Isolierung der Kundendaten und haben mehrere Anwendungsversionen. Es gibt jedoch einige Nachteile. Sie werden mehr Geld für Server ausgeben (da Sie Ressourcen nicht einfach zwischen Kunden teilen können) und die Bereitstellung ziemlich gut verwalten müssen. Wenn Sie nur eine Datenbank für alle Clients haben, müssen Sie sicherstellen, dass sich die Datenstruktur oder die Anforderungen der Bibliotheken nicht grundlegend ändern. Sie benötigen eine Map Client - App - Version, um sie auch verwalten zu können.

Ich habe für jeden Client in meiner Umgebung dieselbe Softwareversion, mit deren Hilfe wir Server warten und skalieren können (ich kann einfach einen neuen Server bereitstellen, der mit anderen identisch ist, und ihn einfach zum Loadbalancer hinzufügen). Außerdem muss ich nicht für jeden Kunden mit unterschiedlichen Endpunkten arbeiten.

Ondra Sniper Flidr
quelle
Würde ein angemessen umfangreiches Virtualisierungssetup nicht die meisten Vorteile der gemeinsamen Nutzung von Ressourcen ermöglichen und gleichzeitig die Nachteile der Kosten reduzieren (nicht beseitigen)?
ein CVn
1

Ich denke, dies ist eine recht frühe Einrichtung, und hier sind einige Gründe, warum ich es für eine schlechte Idee halte, separate Server über dem Ressourcen-Overhead zu halten:

  • Es besteht ein erhebliches Risiko, dass Erweiterungen für den einen oder anderen Kunden entwickelt werden, was später zu Konflikten führt. Aus kurzfristigen geschäftlichen Gründen kann dies zu technischen Schulden führen, die Sie niemals abschütteln können. Es kann in Zukunft einfach zu schwierig werden, diese widersprüchlichen Funktionen zusammenzuführen, und Sie haben möglicherweise die Wahl, diese Anpassungsclients auf einer alten Version aufzugeben oder bei ihnen zu bleiben, wenn Sie dies nicht möchten.

  • Ein multinationaler oder multistaatlicher Kunde oder sogar eine Reihe von Akquisitionen in einer Branche kann ein System erfordern, bei dem Daten getrennt sind, das jedoch gegenüber der Zentrale gemeldet werden kann. Dies würde Sie in jedem Fall zu einer Version mit mehreren Mandanten zwingen, was die Vorteile der Trennung von Datenbanken zunichte macht.

  • Alle erfolgreichen Saas-Unternehmen verwenden die aggregierten Daten letztendlich für kombinierte anonyme Funktionen wie Branchenstatistiken, Lernmöglichkeiten usw. Ich habe gesehen, dass diese von Xero und Mailchimp erfolgreich verwendet werden, und ich stelle mir vor, dass diese Daten sehr, sehr wertvoll sind.

jdog
quelle