Ich implementiere eine neue Funktion, die Daten aus Datenbanken auf mehreren Servern erfordert. Ich muss nur Daten von all diesen Servern zusammenführen und sortieren. Die zwei Optionen, die mir in den Sinn kommen, sind:
Verwenden Sie Verbindungsserver und schreiben Sie eine einfache Abfrage, um die Daten zu vereinen und zu sortieren, die von einem Server ausgeführt werden, und sammeln Sie Daten von den anderen.
Verwenden Sie die Anwendung, um die Daten von allen Servern zu sammeln und zum Sortieren an SQL Server zurückzusenden (Sie möchten die Sortierung nicht in der Anwendung implementieren).
Wir führen unsere Server in Aktiv / Aktiv-Clustern in SQL Server 2008 r2 aus. Alle Datenbanken haben die gleichen Berechtigungen. Wenn Sie Zugriff auf eine Datenbank / einen Server haben, haben Sie die Berechtigung für alle. Dies ist eine öffentlich zugängliche Anwendung (für die eine Benutzeranmeldung erforderlich ist).
Was sind die Risiken bei der Verwendung von Verbindungsservern? Gibt es Sicherheitslücken, mit denen ich mich befassen sollte? Gibt es Probleme beim Ausführen von Verbindungsservern in Aktiv / Aktiv-Clustern? Gibt es im Vergleich zur Alternative signifikante Leistungsprobleme?
Es scheint ein allgemein negatives "Summen" über Verbindungsserver zu geben, aber ich kann nichts Konkretes finden, das mich glauben lässt, dass es dort echte Bedenken gibt.
Antworten:
Verbindungsserver können sehr gut funktionieren, solange Sie die Auswirkungen durchdacht haben:
Sicherheit: Eine wichtige Überlegung ist, dass Server mit Verbindungsservern einem erheblichen Risiko ausgesetzt sind, wenn sie kompromittiert werden. Selbst wenn Sie für jeden Benutzer unterschiedliche Anmeldeinformationen für unterschiedliche Server haben (was verhindern würde, dass ein Angreifer auf andere Ressourcen zugreift, wenn der einzige Angriffsvektor durchgesickert / entdeckt / erraten wurde), kann der Link all dies effektiv umgehen. Der Link umgeht auch Schutzmaßnahmen, die die anderen Datenbanken vor dem öffentlichen Netzwerk verbergen, z. B. wenn einer oder mehrere der Server keine Daten an eine öffentliche Schnittstelle liefern und daher normalerweise auf keinen Fall über Ihre Firewalls sichtbar sind. Sie könnten denken: "Nun, ist das gleiche Risiko nicht ein Problem bei der Replikation?" worauf die Antwort ja lautet, aberDie Replikation erfolgt zwischen einzelnen Anwendungsdatenbanken, und die Route des verknüpften Servers kann möglicherweise andere Datenbanken auf denselben Servern gefährden, da sich die Verbindung auf Serverebene und nicht auf DB-Ebene befindet (natürlich können Sie dieses Risiko möglicherweise durch sorgfältige Kontrolle des Benutzerzugriffs verringern Rechte, aber Sie müssen sich zumindest in Ihrer Planung dessen bewusst sein). Als Randnotiz zur Sicherheit: Wenn sich die Server nicht auf derselben Site befinden, stellen Sie sicher, dass Sie eine Art VPN verwenden, um sie zu verknüpfen, anstatt SQL Server auf einer öffentlichen Schnittstelle verfügbar zu machen.
Bandbreite: Wenn sich alle Server im selben DC befinden und eine gute, schnelle und nicht gemessene Konnektivität untereinander besteht, müssen Sie sich möglicherweise nicht um diese kümmern. Seien Sie jedoch bei weiter entfernten Verbindungen vorsichtiger, insbesondere wenn Ihre Benutzer in der Lage sind, Anzeigen zu schalten. Hoc-Anfragen verschiedener Art. Die Komprimierung auf VPN-Verbindungsebene ist hier für die meisten Datensätze sehr hilfreich. Beachten Sie jedoch, dass dies zu Lasten einer höheren Latenz geht, die das Effizienzproblem verschlimmern kann (siehe unten).
Effizienz: Wenn Sie einfach Datenblöcke auf der ganzen Linie ziehen, ist dies kein großes Problem (aber denken Sie an das Sperren: siehe meinen nächsten Punkt), aber sobald Sie etwas über Verknüpfungen usw. tun, gibt es Grenzen für was Der Abfrageplaner kann Ihre Anforderungen optimieren. Wenn viele Indexsuchen durchgeführt werden müssen, die zu sehr langsam laufenden Abfragen führen, wenn die Server aufgrund der Netzwerklatenz nicht lokal zueinander sind (das gleiche Problem tritt definitiv auch bei lokalen Servern auf, aber in geringerem Maße natürlich). und es kann stattdessen einen Index-Scan verwenden (Kompromiss zwischen Bandbreitennutzung, um Latenzvorteile zu erzielen), der Bandbreite verbraucht, und wenn es Sperren hält (um Probleme mit schmutzigem Lesen usw. zu vermeiden), wirkt sich dies auch auf andere Teile der Anwendung aus.
Sperren / Parallelität: Wenn Sie den Server verlassen, wird die Laufzeit von Abfragen erhöht, was die Sperrprobleme verschlimmert, von denen Sie möglicherweise noch nicht wissen, dass Sie sie haben, und dadurch die Parallelität und Skalierbarkeit Ihrer Anwendung erheblich verringert. Sie müssen sehr vorsichtig sein, wenn Sie reguläre und / oder lang laufende serverübergreifende Abfragen verwenden, bei denen Sie das Sperrproblem im Auge behalten und gegebenenfalls Planerhinweise geben.
Solange Sie über ausreichende Vorkehrungen zur Verwaltung der Sicherheits- und Leistungsprobleme verfügen, würde ich kein Problem mit der Verwendung von Verbindungsservern sehen, obwohl es möglicherweise bessere / sicherere / zuverlässigere / einfacher zu sichernde Möglichkeiten gibt, dies zu erreichen Ergebnis.
quelle
Ich habe das gleiche negative "Buzz" erlebt, aber das einzige Problem, mit dem ich bei Verbindungsservern konfrontiert bin, ist die Leichtigkeit, mit der Sie große Datenmengen über das Netzwerk abrufen können. Aus DBA-Sicht ist dies beängstigend, wenn Sie Nicht-DBAs haben, die dies tun können, auch wenn sie versprechen, es nicht zu missbrauchen.
In Ihrem Fall scheint es keinen Vorteil zu haben, eine eigene Anwendung zu schreiben, da die Daten dennoch verschoben werden müssen. Es hört sich so an, als hätten Sie ein sehr einfaches Berechtigungsmodell. Je nach Umgebung kann es sich daher lohnen, einige spezielle Berechtigungen einzurichten, damit der Link nicht dort verwendet wird, wo er nicht benötigt wird.
quelle
Verbundene Server erzeugen für Entwickler einen fast "magischen" Zustand. Es kann jedoch sehr einfach werden, das Netzwerk mit einer Abfrage zu überfordern, die Hunderttausende von Datensätzen von 5 Servern in einer Anforderung zurückgeben kann, und Sie können Datensätze auch auf allen 5 Servern sperren. Ich würde niemanden außer den erfahrenen Datenbankadministratoren die Abfragen schreiben lassen, bis Sie 1 oder 2 Top-Entwickler über die Gefahren des Sperren aller Datenbanken mit einer Abfrage geschult haben.
Verbundene Server sind wie eine Droge. Wenn Sie sie einmal verwendet haben, werden Sie nie mehr zurückkehren und sich fragen, warum Sie sie nie zuvor verwendet haben. Ich hatte noch nie ein Problem, aber ich war immer vorsichtig.
quelle