Frage

Wie würden Sie eine gehostete Webanwendung entwerfen? Ich betrachte Anwendungen wie Basecamp, Kampagnenmonitor, Freshbooks usw., bei denen Benutzer online anmelden können und die Anwendung für sie gehostet wird.

  1. Würden Sie 1 große Datenbank verwenden, um alle Daten Ihres Kunden zu speichern, oder würden Sie Daten unterschiedlich behandeln? Würden Sie mehr als 1 Datenbank verwenden? Würden Sie für jeden Kunden eine Datenbank erstellen?
  2. Würden Sie Ihre Codebasis für jeden Anmeldung/Kunden duplizieren, oder würden Sie 1 Codebasis verwenden, um alle Kunden zu verarbeiten?
  3. Gibt es andere Designelemente, an die ich nachdenken sollte?
  4. Irgendwelche Websites oder Bücher da draußen, die darüber sprechen?

Bearbeiten: Ich habe einen MSDN-Artikel gefunden, in dem die Datenarchitektur mit mehreren Mietern erörtert wurde:http://msdn.microsoft.com/en-us/library/AA479086.aspx#mlttttda_topic4

War es hilfreich?

Lösung

Siehe 37 Signals - sie sind Experten in diesem Bereich und haben viele Artikel, in denen sie Community -Fragen beantworten (viele wie Ihre sollten auftauchen).

Hochskalierbarkeit = 37signals Architektur

Fragen Sie 37Signals: Wie verarbeiten Sie Kreditkarten?

In Bezug auf die Anzahl der Datenbanken von David Heinemeier Hansson in Was möchtest du wissen?

Einige technische Antworten…

Lance, alle unsere geplanten Abrechnungsvorgänge sind automatisiert. Alles, was uns von dem wahnsinnig machen würde. Es ist besonders wichtig sicherzustellen, dass die Notfallbehandlung für Versagen von Kreditkarten vorhanden ist. Zuletzt habe ich nachgesehen, ich glaube, 5% unserer Gebühren wurden dank Kreditkarten abgelaufen, die abgelaufen, über das Limit oder geschlossen wurden. Achten Sie darauf, das anmutig zu bewältigen.

Wir verwenden nur Authorize.net und eine separate Kreditkartenanwendung (winzige App, die in Schienen entwickelt und von den anderen Apps im internen Netzwerk über Ruhe verwendet werden), die die Nummern sicher halten.

Warren, wir laufen kostenlos und bezahlen Konten in derselben Datenbank. Es ist eine Datenbank pro Anwendung. Eine Datenbank pro Konto ist normalerweise eine wirklich, wirklich schlechte Idee. Normalerweise sind die Daten ziemlich normalisiert, aber wir sind definitiv nicht religiös. Ich schätze meinen Quellcode im Allgemeinen über mein Schema. Wenn ich also einen besseren/schöneren Quellcode erhalten kann, indem ich ein Schema beugt, mache ich das normalerweise. Beginnen Sie jedoch von normalisierten und denormalisieren Sie, wie die Leistung oder die Codestruktur dies verlangt.

Jason, wir verwenden E -Mails für SMS. Alle US-amerikanischen Carriers haben ein telefon@carrier-gateway.com Gateway.

Jake gut, ahh, die gute alte Frage, aber es skaliert es ". Das habe ich vor ein paar Jahren geantwortet. Seitdem hat sich für uns nichts geändert. Wir verwalten jeden Tag Millionen und Millionen von dynamischen Anfragen, ohne nur auf viel Caching zurückzugreifen (die meisten Bildschirme in den meisten unserer Anwendungen unterscheiden sich jeweils pro Benutzerbasis, sodass traditionelle Caching-Programme schwieriger zu bewerben sind).

Es gibt viele andere Rails -Anwendungen, die zig Millionen von täglichen Anfragen verwalten. Alle folgen mehr oder weniger den gleichen gemeinsamen Ansatz. Alle Techniken zur Skalierung hoch und hoch sind da draußen. Es ist kaum eine schlüsselfertige Lösung, aber alles, was verspricht, das zu sein, das normalerweise nur voll davon ist.

Andere Tipps

Wenn Sie nur über Tausende von Kunden sprechen (gegenüber Hunderttausenden oder Millionen), ist der Unterschied ziemlich minimal, es sei denn, Sie wissen, dass Sie Tische haben, die möglicherweise Tausende von Zeilen pro Kunden oder mehr haben. Dann könnte sich Ihr Design ändern.

Normales Setup für einen relationaldatenbasierten Datenspeicher wird a customer_id Fremdschlüssel zu den meisten Ihrer Tabellen. Dann zeigen Sie diese Daten nur niemandem außer diesem Kunden (oder in Fällen, in denen sie irgendwie angegeben haben, dass explizite Berechtigungen jemand anderem erteilt werden).

Machen Sie sich keine Sorgen über RDBMS -Skalierungsprobleme, bis es so aussieht, als ob Sie mehrere Millionen Zeilen in einer Tabelle haben könnten. Dann könnte es Zeit sein, einen verteilten Schlüssel-/Wertspeicher zu untersuchen. Aber denken Sie daran, dass diese Art von Problem die gute Art von Problem ist, denn vermutlich bedeutet dies, dass Sie eine Menge Bargeld verdienen.

dh die Skalierungsbrücke überqueren, wenn Sie dazu kommen. Entwerfen Sie Dinge nach bestem Besten Ihrer aktuellen Fähigkeit, aber ansonsten ist die vorzeitige Optimierung die Wurzel aller Bösen.

Ich arbeite als Berater für eine Reihe von SaaS -Apps und habe also unterschiedliche Architekturen gesehen. Ich würde empfehlen:

  1. Eine Datenbank für alle Kunden. Entwerfen Sie das DB gut, damit Sie einen Hauptschlüssel für den Benutzer haben, der Ihre eigene eindeutige ID ist. Ich habe einige Unordnung gesehen, bei denen das Design effektiv (nicht eigentlich, aber genauso gut) so etwas wie E -Mail, Telefonnummer usw. als Hauptschlüssel gemacht hat). Werfen Sie auch nicht alles in eine riesige Benutzertabelle.

    1. Sie möchten irgendwann mit dem Verfolgung vieler Benutzerinteraktionsverhalten anfangen. Dafür können Sie einen NoSQL-Namenswertspeicher verwenden und für eine spätere Analyse beginnen, Ereignisse hineinzuwerfen. Oder verwenden Sie so etwas wie Mixpanel oder KissMetrics.

    2. Behalten Sie die täglichen KPIs im Auge, indem Sie Zeilen an einen KPI -Tisch schreiben, der es einfach macht, das zu fragen, was im Laufe der Zeit passiert ist. Andernfalls möchten Sie am Ende Fragen der DB stellen und herausfinden, dass es sich um eine riesige Frage handelt.

Ein wesentlicher Vorteil einer einzigen SQL -DB ist, dass Ihre Marketingperson SQL (empfohlen!) Kennt, sie können sie einfach direkt abfragen. Wenn Sie die NoSQL -Route gehen, ist es viel schwieriger, und dann beginnt das Marketing, Annahmen zu treffen, die normalerweise falsch sind, und Sie verschwenden viel Zeit damit, auf der Grundlage dieser Annahmen auf den falschen Weg zu gehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top