530 likes | 650 Views
SQL Server Service Broker. DD2, D9. Zur Person. Dipl. Inf. Marcel Gnoth, MCSD www.gnoth.net NTeam GmbH, Berlin www.nteam.de Leiter Softwareentwicklung MS Gold Partner: Busines Intelligence, Information Worker, Advanced Infrastructur Autor dotnet pro , dotnet-magazin, ComputerWorld, MSDN
E N D
SQL Server Service Broker DD2, D9
Zur Person • Dipl. Inf. Marcel Gnoth, MCSD • www.gnoth.net • NTeam GmbH, Berlin • www.nteam.de • Leiter Softwareentwicklung • MS Gold Partner: Busines Intelligence, Information Worker, Advanced Infrastructur • Autor dotnetpro, dotnet-magazin, ComputerWorld, MSDN • Trainer (u.a. SPC Berlin, www.spc.de ) • Themen • VB6, COM, SQL Server • Verteilte nachrichtenbasierte Informationssysteme • Office System 2003 Integration • Reisen in ferne Länder: www.gnoth.net/reise.htm Marcel Gnoth, 2005, www.gnoth.net
Agenda • Überblick SSB • Verteilte Kommunikation zwischen zwei Servern • Security • Zugriff auf SSB mit ADO.Net 2.0 • Notification • Fazit Marcel Gnoth, 2005, www.gnoth.net
Service Broker in Yukon • Neu in Yukon • Ermöglicht asynchrones Messaging innerhalb des SQL-Servers • Warteschlangen sind normale DB Objekte • Können mit SQL verwendet werden CREATE QUEUE MittwochMessages Select message_body FROM MittwochMessages Marcel Gnoth, 2005, www.gnoth.net
Überblick SSB • Asynchrones Messaging in der DB • Entkoppeln von Transaktionen • Garantierte Nachrichtenzustellung • Entlastung bei Spitzenlast • Batch-Verarbeitung • Automatische Aktivierung von SP Marcel Gnoth, 2005, www.gnoth.net
Security War da was ???
SSB Security • Kommunikation zwischen Servern • Nicht im gleichem Netz • Keine Vertrauensstellung • Keine SQL-/Windows-Logins • Security basiert auf Zertifikaten • Werden ausgetauscht • Werden je einem lokalem User zugeordnet • Dessen Sicherheitskontext wird verwendet • Transport Security • Dialog Security Marcel Gnoth, 2005, www.gnoth.net
Dialog Security • Verschlüsselt Nachrichten einer Conversation • Authentifizierung • Integritätsprüfung • Nur über Zertifikate • Ohne Zertifikat -> Public Role in der Ziel DB Marcel Gnoth, 2005, www.gnoth.net
Arten der Dialog Security • No Dialog Security • Keine Verschlüsselung • Operationen in der ZielDB laufen unter Public • Anonymous Security • Nachrichten werden verschlüsselt • Operationen in der ZielDB laufen unter Public • Full Security • Nachrichten werden verschlüsselt • Operationen laufen über zugeordnete User Marcel Gnoth, 2005, www.gnoth.net
SSB Security - Transport • Sichert Netzwerkverbindung • Nur autorisierte DB‘s können Nachrichten schicken • Windows oder Zertifikate Marcel Gnoth, 2005, www.gnoth.net
Zertifikate • Zertifikate in der Datenbank erstellen • Müssen mit dem MasterKey der DB verschlüsselt werden • ACTIVE FOR BEGIN_DIALOG • By default • Kann deaktiviert werden CREATE master KEY encryption BY password = 'TokyoMaster' Marcel Gnoth, 2005, www.gnoth.net
Wie viel Zertifikate? • Kommunikation zwischen zwei Servern • Transport Security (Master DB) • Ein eigenes Zertifikat (mit PK) • Ein Remote Zertifikat • Dialog Security (DB, die die Queue enthält) • Ein eigenes Zertifikat (mit PK) • Ein Remote Zertifikat • Den remote Zertifikaten werden lokale Logins zugeordnet • = 4 Stück auf jedem SQL Server Marcel Gnoth, 2005, www.gnoth.net
Zertifikate erstellen - MakeCert • MakeCert aus dem SDK • Zertifikatsdatei mit Public Key • Separate Datei mit Private Key (nur Lokal) makecert -n "CN=Tokyo" -sv Tokyo.pvk Tokyo.cer CREATE certificate ctfTokyoMasterFROM FILE ='C:\DB-Tokyo\Tokyo.cer‚WITH private_keyFILE='C:\DB-Tokyo\Tokyo.pvk',decryption_password='Hallo')active FOR begin_dialog ON Marcel Gnoth, 2005, www.gnoth.net
Zertifikate erstellen - TSQL • Lokal in der DB • Public Key in Datei schreiben • Für Austausch mit remote Server create certificate TrpCertServ1with subject ='TrpCertServer1',start_date ='06/01/2005'; BACKUP CERTIFICATE TrpCertServ1 TO FILE ='C:\Tokyo.cer'; Marcel Gnoth, 2005, www.gnoth.net
Login und User anlegen • Neuen Login und User anlegen • Dem User die remote Zertifikate zuordnen • Aktionen der Remote DB werden im Kontext dieses Users ausgeführt CREATE LOGIN remcert WITH password = ''CREATE user remcertFOR LOGIN remcert CREATE certificate ctfKyotoMasterAUTHORIZATION remcertFROM FILE = 'C:\Marcel\DB-Tokyo\Kyoto.cer'ACTIVE FOR BEGIN_DIALOG = ON Marcel Gnoth, 2005, www.gnoth.net
EndPoint anlegen • Dienen der physischen Kommunikation • Verschiedene Typen u.a. für SSB • User Rechte für den Endpoint geben CREATE ENDPOINT epTokyoSTATE = startedAS TCP(LISTENER_PORT = 4022)FOR SERVICE_BROKER ( AUTHENTICATION = CERTIFICATEctfTokyoMaster,ENCRYPTION = REQUIRED) grant connect on endpoint::epTokyoto remcert Marcel Gnoth, 2005, www.gnoth.net
Die Kommunikation • Nicht zwischen zwei Datenbanken oder Servern • Zwischen Diensten (Services) • SOA Marcel Gnoth, 2005, www.gnoth.net
Remote Service Binding • Verknüpfung zwischen • Benutzernamen • Und Namen des entfernten Dienstes • Verschlüsselung CREATE REMOTE SERVICE BINDING [Japan_Binding] TO SERVICE 'svcKyotoTanukiRequest'WITH USER =remcert,ANONYMOUS=Off Tanuki-Reihe Tanuki-Oho.jpg Marcel Gnoth, 2005, www.gnoth.net
Demo User und Zertifikate
Message Type • Alle Nachrichten müssen einen definierten Typ haben • Typ ist ein Label für den Empfänger • Kann mit XML Schema verknüpft werden • Nachrichten, die nicht dem Schema entsprechen werden beim Empfang abgewiesen create message type [mtAskKyoto] validation = well_formed_xml create message type [mtResponseTokyo] validation = well_formed_xml Marcel Gnoth, 2005, www.gnoth.net
Contract • Menge von Message Types • Definieren wer welche Nachrichten senden darf create contract [ctrOrderTanuki]([mtAskKyoto] sentby initiator,[mtResponseTokyo] sentby target) Marcel Gnoth, 2005, www.gnoth.net
Queue • Queue erstellen • Status • Aktiv / Inaktiv • Rentention • Entfernt aus der Queue • Oder aktualisiert den Status der Nachricht • Activation • Stored Procedure die Nachrichten verarbeitet create queue [quKyoto] with status = on Marcel Gnoth, 2005, www.gnoth.net
Lokalen Service anlegen • Ordnet mehrere Contract‘s einer Queue zu. • Dialoge verwenden Serivces als Endpunkte • Beim Deployment können den Services physische Queues zugeordnet werden create service [svcKyotoTanukiRequest] on queue [quKyoto]( [ctrOrderTanuki] ) grant send on service::[svcKyotoTanukiRequest]to remcert Marcel Gnoth, 2005, www.gnoth.net
Route anlegen • In der jeweiligen DB • Eine standardroute nach Lokal • SSB versucht einen Service über die Routen zu finden create route [RouteToTokyo] withservice_name ='svcTokyoTanukiResponse',address ='TCP://192.168.178.21:4022‚ Select * from sys.routes Marcel Gnoth, 2005, www.gnoth.net
Demo Nachrichteninfrastruktur anlegen
Conversations • Kommunikation zwischen zwei Services erfolgt in Conversations • Beliebig viele Nachrichten können zu einer Conversation gehören • Feste Reihenfolge • Mehrere Conversations können zu logischen Gruppen zusammengefasst werden • Aktuell nur ein Typ: Dialog Marcel Gnoth, 2005, www.gnoth.net
Begin Conversation • FromService muss lokal existieren • ToService wird als Text übergeben • Wird über eine Route lokalisiert • Lifetime in sekunden • Encryption steuert Dialog Security begin dialog conversation @hfrom service [svcTokyoTanukiResponse]to service 'svcKyotoTanukiRequest‚on contract [ctrOrderTanuki]WITH LIFETIME=1, ENCRYPTION=On; Marcel Gnoth, 2005, www.gnoth.net
Dialog Security: Remote Service Binding, Begin Dialog Marcel Gnoth, 2005, www.gnoth.net
Senden • Conversation Handle, Nachrichtentyp, Nachricht • Nachrichten landen erst in Transmission Queue • Interne Ack-Messages send on conversation @hmessage type [mtAskKyoto](@msg) select * from sys.transmission_queue Marcel Gnoth, 2005, www.gnoth.net
Empfangen • Select • Receive • Body ist varbinary -> casten select cast(message_body as XML), * From quKyoto Receive cast(message_body as nvarchar(MAX)),* From quKyoto Marcel Gnoth, 2005, www.gnoth.net
End Conversation • Eine Seite möchte Kommunikation beenden • WITH CleanUp • Löscht alle Überreste der Conversation • WITH ERROR = failure_code (>0) • DESCRIPTION = failure_text • Liste der Conversation Endpoints end conversation '019F856F-F525-DA11-B373-505054503030‚WITHCLEANUP select * from sys.conversation_endpoints Marcel Gnoth, 2005, www.gnoth.net
Demo Nachrichten senden und empfangen
System Queues / Abfragen • select * from sys.transmission_queue • Ausgehende Nachrichten bleiben so lange in der Queue bis Ack vom Ziel eintrifft • Interne Nachrichten, tauchen nicht in der Queue auf • Fehler sind hier zu finden • GET_TRANSMISSION_STATUS (conversation_handle) • Letzter Fehler einer Conversation Marcel Gnoth, 2005, www.gnoth.net
Demoprogramm Mit ADO.Net auf SSB zugreifen
Profiler • SQL Server Profiler • Template: Blank • Event Selection Marcel Gnoth, 2005, www.gnoth.net
Queue Aktivierung • Beim Eintreffen einer Nachricht kann eine Aktion ausgelöst werden • Stored Proc (Internal Activation) ALTER QUEUE quKyoto WITH ACTIVATION( STATUS = On,PROCEDURE_NAME = [QueueActivation], MAX_QUEUE_READERS = 1,EXECUTE AS SELF) ALTER QUEUE quKyoto WITH ACTIVATION( STATUS = Off) Marcel Gnoth, 2005, www.gnoth.net
Queue Aktivierung - SP • Normale Stored Procedure • Mehrere Instanzen möglich CREATE PROCEDURE [dbo].[QueueActivation]WITH EXECUTE AS CALLER AS DECLARE @dh uniqueidentifierDECLARE @msg XML WAITFOR(RECEIVE TOP(1) @dh = conversation_handle, @msg = message_body FROM [quKyoto] ), TIMEOUT 15000 INSERT INTO XML_MESSAGES (Nachricht) VALUES (cast(@msg as XML)) Marcel Gnoth, 2005, www.gnoth.net
Demo Queue Aktivierung
Query Notifications • Ergebnismenge einer SELECT-Abfrage wird überwacht • Yukon verwaltet Notification Subscription • Ändern sich die Daten, dann werden alle Subscriber informiert • Mechanismus für Indexierte Views • Änderungen werden über Service Broker publiziert Marcel Gnoth, 2005, www.gnoth.net
ADO 2.0: SQLDependency und SQLNotificationRequest • Verknüpft SQLCommand mit Notification Subscription • SQLDependency • Call Back der DB-Engine in die Applikation • High Level Class • Sehr komfortabel für Entwickler • SQLNotificationRequest • Low Level, kein Call Back der DB Marcel Gnoth, 2005, www.gnoth.net
Demo Query Notifications
Ressourcen • Blogs • Rushi Desai: http://blogs.msdn.com/rushidesai/ • Niels: http://www.sqljunkies.com/WebLog/nielsb/ • Newsgroup • SQL Server 2005 Beta News Groups: http://msdn.microsoft.com/SQL/2005/ • SSB Devolopers Spot • www.sqlservicebroker.com • dotnetpro Marcel Gnoth, 6+7 2005 • www.gnoth.net Marcel Gnoth, 2005, www.gnoth.net
Uff... Alles wird gut Marcel Gnoth, 2005, www.gnoth.net
Einsatzszenarien - Trigger • Asynchrone Trigger • OLTP-Systeme, sehr schnelle Ausführung des Triggers • Nachricht wird unabhängig, aber zuverlässig zugestellt • Arbeit kann auf einem anderen Server je, nach Last ausgeführt werden Marcel Gnoth, 2005, www.gnoth.net
Einsatzszenarien – Abfragen • Garantierte Abfragen • Werden in Queue gestellt • Anderer Prozess: • Entnimmt Abfrage • Führt Abfrage aus • Speichert Ergebnis der Abfrage • Alles in einer Transaktion!! Marcel Gnoth, 2005, www.gnoth.net