Frage

Ich brauche ein System zu entwerfen, die diese grundlegenden Komponenten:

  • Ein Webserver, die ~ 100 Anfragen / s werden immer. Der Webserver muss nur Daten in Rohdaten-Repository-Dump.
  • Raw-Daten-Repository, die eine einzelne Tabelle hat, die 100 Zeilen bekommt / s vom Webserver.
  • Eine rohe Datenverarbeitungseinheit (Einfache Verarbeitung, nicht viel. Das Entfernen ungültige Rohdaten, Einfügen fehlende Komponenten in beschädigte Rohdaten usw.)
  • Verarbeitete-Daten-Repository

Ist es sinnvoll, in ein solches System machen eine Dienstschicht zu haben, auf dem alle Komponenten gebaut werden würde? Alle Zwischenkomponenten Interaktion wird die Dienstschichten durchlaufen. Während dies würde das System leicht erweiterbar und wartbar machen, wäre es nicht auch eine erhebliche Auswirkungen auf die Leistung haben, da ich so viel Verkehr zu Griff haben?

War es hilfreich?

Lösung

Was sehen Sie als die Kosten für eine separate Serviceschicht?

Wie vergleichen diese Kosten mit den Kosten, die Sie muss incur? In Ihrem Fall, dass scheint zumindest zu sein

  1. ein Netzwerk lesen für die Anforderung
  2. eine Datenbank schreiben für Rohdaten
  3. eine Datenbank gelesen von Rohdaten
  4. eine Datenbank Schreiben von verarbeiteten Daten

Plus einige Daten munging.

Welche Art von Dienstleistungen haben Sie einen Sinn? Vielleicht

  • saveRawData ()
  • getNextRawData ()
  • writeProcessedData ()

Warum ist der Aufwand mehr als ein Prozeduraufruf? Service muss nicht „separaten Prozess“ oder „Web-Service-Rangierung“ bedeuten.

Ich behaupte, dass Struktur immer von Wert ist, Trennung von Bedenken in Ihrer Anwendung wirklich ankommt. Im Vergleich mit Datenbankaktivitäten werden ein paar Prozeduraufrufe selten viel kosten.

Im Vorbeigehen: die persistierende von Raw-Daten könnte am besten zu einer Warteschlange-System durchgeführt werden. Sie können dann, indem er viele Warteschlange Leser auf verschiedenen Rechnern einige natürliche Skalierung, wenn Sie sie benötigen. In der Tat wird das Warteschlangen-System einzuführen natürlich einige Service-ähnliche Konzepte.

Andere Tipps

Hier ist, was passieren kann, wenn man gegen sie schützen.

In der Kommunikation zwischen den Schichten wird ein Teil Format wie XML gewählt. Dann Sie es bauen und ausführen und die Leistung herauszufinden, ist nicht zufrieden stellend.

Dann Chaos Sie um mit Profilern, die Sie verlassen erraten, was das Problem ist.

Wenn ich auf ein Problem wie das funktionierte, habe ich die Stack Technik und fand schnell das Problem. Sie hätte gedacht, es war I / O. NICHT. Es war, dass die Daten in XML-Konvertierung und das Parsen von XML-Datenstruktur zu erholen, wurde etwa 80% der Zeit. Es war nicht allzu schwer, eine bessere Art und Weise zu tun, , die zu finden. Ergebnis - a. 5-fach Speedup

persönlich das Gefühl, dass Sie zu viel auf niedrigen Niveau Implementierungsdetails werden könnten konzentrieren, wenn das System zu entwerfen. Bevor wir uns an, wie die Komponenten zu legen, Baugruppen oder Dienstleistungen, die Sie sollten das System, wie man Architekt denken.

Sie können mit den folgenden hohen Anweisungen beginnen, aus denen Ihre Systemarchitektur zu bauen um:

  1. Überprüfen Sie die technischen Fähigkeiten des Entwicklungsteams und die Operationen / Support-Team.
  2. Vereinbaren Sie eine anfängliche endliche Liste von Systemen, die zu Ihren Diensten integrieren, die Protokolle, die sie unterstützen und einige SLAs.
  3. Entscheiden Sie sich für die Messaging-Strategie.
  4. Verstehen Sie, wie Sie Ihren Service / System bereitstellen werden.
  5. Entscheiden Sie sich für die Wahl der Middleware (ESBs, Message Broker, usw.), Datenbanken (SQL, Oracle, Memcache, DB2, etc.) und 3rd-Party-Frameworks / Tools.
  6. Entscheiden Sie sich für Ihre Caching und Datenlatenz-Strategie.
  7. Break Ihre Anwendung in den verschiedenen Bereichen der Wirtschaft Verantwortung -. Dies ermöglicht es Ihnen, die Arbeit aufzuteilen und ermöglichen eine einfachere Kommunikation von Meilensteinen während der Entwicklung / Prüfung und Implementierung
  8. werden jede Komponente-Design wie erforderlich, um die Verantwortungsbereiche gerecht zu werden. Die Verantwortungsbereiche sollten Sie automatisch zu entscheiden, führen, wie Komponente, Montage oder Service zu entwerfen.

Offensichtlich nicht alle oben Ihren speziellen Fall passen, aber ich würde vorschlagen, dass sie zumindest einige Gedanken gegeben werden sollen.

Viel Glück.

Abstraktion und Tiering einführen wird Latenz, aber die eigentliche Frage ist, was gewinnen Sie die Kosten (n) lohnt sich zu machen? Lose Kopplung, Governance, Skalierbarkeit, Wartbarkeit wert sind echte $.

Auch die besten gestaltete Schicht App wird zeigt mehr Latenz als eine App direkt mit einem DB zu sprechen. Benutzer, die das ursprüngliche System wissen den Unterschied spüren. Sie dürfen nicht wie es, so dass dies eine politische Frage so viel wie ein technisches sein kann.

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