Donnerstag, 18. Februar 2010

Web Services Standards Verbreitung (ohne Security) 2010

Nach etwas über einem Jahr ist es Zeit mein Portfolio zu den Web Services Standards anzupassen. Seit Dezember 2008 haben sich die Web Services Stacks und Ihre Unterstützung für die WS-Standards stark weiterentwickelt.
Auch Entwickler und Architekten setzen vermehrt WS-Standards in Ihren Projekten ein. In diesem Post beschreibe ich, was sich seit dem letzen Portfolio geändert hat.



Die größte Veränderung in den nicht Security Standards ist der Neuling WS-Discovery, der auch in .NET 4.0 enthalten sein wird. Der Einsatz von UDDI ist meinem Eindruck nach etwas zurückgegangen. Einige, die UDDI hauptsächlich für das Auflösen von Endpunkt Adressen im Rahmen der SOA Rutine Governance einsetzen, werden vielleicht auf WS-Discovery umsteigen.

Da WS-Adressing in vielen anderen Standards wie z. B. Web Services Security oder WS-Reliable Messaging verwendet wird hat mit deren Verbreitung auch die von WS-Adressing zugenommen. Genauso wird WS-Policy für die Beschreibung des Contracts von gesicherten Web Services verwendet. Daher nahm auch die Verbreitung von WS-Policy mit der von Web Services Security zu.

Die Verbreitung von BPEL in produktiven Systemen hat etwas zugenommen. Wobei die Prozesse oft recht simpel waren (BPEL ist ja auch für simple Integrationsprozesse gedacht).
Die Verbreitung von BPEL in der Entwicklung hat dagegen stärker zugenommen.
Tag: SOA, WS-Standards

Web Services Security Standards Verbreitung 2010

Die WS-Standards zur Sicherheit haben sich rasanter entwickelt als die nicht Security Standards. Dies mag verschiedene Gründe haben. Zum Beispiel, dass Sicherheit für vieles eine Voraussetzung ist. Das Portfolio unten spiegelt meine eigenen Erfahrungen aus Projekten und Schulungen wieder.



Besonders die Verbreitung des OASIS Standards Web Services Security hat zugenommen. Ich schätze, dass 10-15% aller neu in 2009 gestarteten Wen Services Projekte diesen Standard einsetzen, Der Einsatz von Web Services Security geht von unverschlüsselten Username Token bis hin zum Web Services SSO mit SAML und WS-Trust.

Der Maßstab im Portfolio ist wieder auf beiden Achsen logarithmisch. D. h. WSS ist wesentlich stärker verbreitet im Verhältnis zu z. B. WS-Trust als diese aus dem Diagramm hervorgeht. Absicherung von Nachrichten mit WSS bietet viele Optionen und Einstellungsmöglichkeiten. Daher ist das Konfigurieren von WSS nicht einfach. Sender und Empfänger einer Nachricht müssen gleich konfiguriert sein, damit eine erfolgreiche Kommunikation zu Stande kommt. Die Beschreibung der WSS Konfiguration mit dem maschinenlesbaren WS-Policy und WS-Security Policy die in WSDL eingebettet werden können, erleichtert die Konfiguration der Gegenseite erheblich. Daher wird auch WS-Security Policy von Axis2, Metro, NetBeans und .NET unterstützt. Web Services, die mit Metro bzw. NetBeans oder .NET bzw. Visual Studio abgesichert wurden enthalten in der WSDL bereits die entsprechenden Policies.

Axis2 unterstützt WS-Policy, da aber die Richtlinien von Hand erstellt werden müssen, sind viele gesicherte Services noch nicht WS-Policy beschrieben.

Der Einsatz von SSL bzw. TLS für die Absicherung von Web Services ist durch die zunehmende Verbreitung von WSS kaum zurückgegangen. Dies liegt an der bis zu 30-mal langsameren Roundtriptime von WSS gegenüber SSL und an der niedrigeren Komplexität von SSL. Der Einsatz von WS-Secure Conversation, eine Art SSL auf der XML Basis, bringt derzeit nur wenig Performancegewinn (ca. 20%). Die mit bekannten WS-Secure Conversation Implementierungen nutzen auch nicht alle Optimierungsmöglichkeiten, sodass es hier noch Potential gibt.
In 2010 wird sich der Trend von 2009 meiner Meinung nach fortsetzen und der Anteil der mit WSS abgesicherten Dienste wird sich erhöhen.

Dienstag, 5. Januar 2010

Vortrag WS-Standards mit Metro

Ich war enttäuscht als ich meinen Vortrag zum Web Service Stack Metro auf der letzten OIO Hauskonferenz begann. Nur 8 Teilnehmer, so wenig hatte ich noch nie. Der Track im anderen Raum hatte diesmal einen Großteil der Teilnehmer abbekommen. Okay „Effektives Testen für agile Teams“ ist ein gutes Thema und Steffen Schluff und Björn Feustel sind zwei hervorragende Referenten. Aber so wenige Teilnehmer ist echt bitter. Bevor ich mit dem Vortrag anfing wollte ich erst wie im letzten Jahr wissen, welche Web Services Stacks die Teilnehmer einsetzen.
Das Ergebnis war:

Axis1 1
Axis2 4
CXF 1
JAX-WS RI bzw. Metro 0

Schon wieder eine Enttäuschung. Ich weiß, dass Axis2 den größten Marktanteil an den SOAP Toolkits besitzt. Aber dass so wenige Metro einsetzen hätte ich nicht gedacht. Wenigstens sind einige von Axis1 auf Axis2 umgestiegen. Vielleicht liegt es ja an der geringen Verbreitung von Metro, dass mein Vortrag so wenige Teilnehmer anzog. Mit dieser Erklärung kann wenigstens mein Ego leben.
Die zweite Hälfte meines Vortrages bestand aus einer Lifedemo. In der Demo wollte ich erst einen Web Service und einen Client mit Netbeans erstellen. Anschließend sollte der Service mit WS-Reliable Messaging gesichert werden. Dabei wollte ich die Konfiguration über WS-Policy vorstellen und zeigen, wie komfortabel dies mit Netbeans 6.8 geht und die darin enthaltene Metro 2.0 Version kurz vorgestellen. Normalerweise überziehe ich jeden Vortrag, aber dieses Mal war ich mit der Demo fertig und hatte noch 15 Minuten übrig. In der Zeit konnte ich den Service noch zusätzlich mit WS-Security absichern und zeigen wie Nachrichten mit UsernameToken, Verschlüsselung und Signatur gesichert werden. Netbeans bietet eine gute Unterstützung für Metro, nur so ließ sich in 30 Minuten so viel vorführen. Nach dem Vortrag bekam ich Feedback von einigen Teilnehmern, dass Sie beeindruckt davon sind, wie einfach selbst so komplexe Dinge wie Web Services Security mit Netbeans und Metro zu realisieren sind und dass Sie überlegen auf Metro umzusteigen.
Es bleibt also noch Hoffnung, dass Metro die Verbreitung findet, die es verdient.

Freitag, 18. Dezember 2009

.NET 4 – Neues in WCF

Obwohl ich überzeugter Java Jünger bin blicke ich von Zeit zu Zeit zu Microsofts .NET. Ganz sicher werde ich in meinem Alter nicht zu C# oder Visual Basic wechseln. Mein Blick gilt vielmehr den Innovationen rund um das frühzeitige Erkennen von Trends, die in die Java und Web Services Welt überschwappen könnten. Mit .NET 4 kommen auch zahlreiche Neuerungen im WCF. In diesem Post werde ich nur Neuerungen beschreiben, die auch für nicht .NET Entwickler interessant sind.
Zur Familie der WS-*Standards kommt in .NET Version 4 WS-Discovery hinzu. Über WS-Discovery können Services Endpoints bekannt machen und Clients können gezielt nach Services Adressen suchen. In lokalen Netzen kann für Suche und Bekanntmachungen die Multicast Funktionalität von UDP verwendet werden. Zwischen verschiedenen Netzwerken kann mittels SOAP ein Discovery Proxy befragt werden.
WS-Discovery enthält einiges was ich mir vor fast einem Jahrzehnt von UDDI versprochen habe. Beispielsweise eine einfache API für die Suche nach Adressen über Kriterien. Hoffentlich zieht Sun bzw. Oracle bald nach und bietet .NET Kompatibilität im Metro Stack an. Damit wäre dann WS-Discovery auch für Java verfügbar.
Neu in WCF ist auch der Routing Service. Über eine Basisklasse lassen sich mit nur wenigen Zeilen Code und etwas Konfiguration verschiedenste Routing Aufgaben lösen, für die wir in der Java Welt oft komplexeste ESB Produkte einsetzen. So unterstützt der Routing Service alle von WCF unterstützten Protokolle und Message Exchange Patterns. Werden mehrere Protokolle verwendet, so arbeitet der Router als Protocol Bridge z. B. zwischen SOAP und UDP. Über Filter können die Enterprise Integration Patterns Recipient List und Content Based Router realisiert werden. Selbst Load Balancing ist mittels alternativer Endpunkte leicht zu realisieren.
Einige Features für REST Services wurden in .NET 4 aus dem WCF REST Starter Kit übernommen. Praktisch finde ich die Automatic Help Page, die für installierte REST Services erzeugt wird. Über Sie bekommt man Informationen über die unterstützten HTTP Methoden oder Nachrichtenformate wie z.B. XML, JSON usw.. Aufgerufen wird die Help Page durch das Anhängen von help an eine REST Endpoint URL. Für XML Nachrichten wird ein XML Template sowie ein XML Schema erzeugt, aus dem der Aufbau über Nachricht ersichtlich wird. Um Caching in Verbindung mit REST zu erleichtern, erzeugt .NET aus der Angabe eines Profils automatisch die passenden HTTP Header.
Der „BPEL Killer“ Workflow Services, der bereits in .NET 3.5 enthalten war, wurde in .NET 4 um weitere Features ergänzt. Die Workflows sind für langlaufende Prozesse gedacht, bei denen auf externe Ereignisse gewartet werden muss. Mit den Visual Studio 2010 Designer können Workflows grafisch erstellt und als XAML Dateien abgespeichert werden. Ein Workflow wird wie ein BPEL Prozess aus Aktivitäten zusammengebaut. Die Namen der Aktivitäten wie zum Beispiel Receive, SendReply und Sequence ähneln denen von BPEL. Auch der von BPEL bekannte Correlation Mechanismus steht dem Entwickler zur Verfügung. Die in der BPEL Entwicklung lästigen Partnerlinks und PartnerLinkTypes fehlen allerdings. Dafür arbeitet man direkt mit Endpoints. Die Entwicklung mit Microsofts Workflow Services sieht so einfach aus, wie man das vergeblich von BPEL erwartet hatte. Eine Persistierung der wartenden Prozesse in eine Datenbank ist selbstverständlich möglich. Besonders die Verbindung von Web Services, Workflows und XAML Oberflächen für die Human Interactions lassen mich in Microsoft Workflow einen BPEL Killer sehen. Ich hoffe, dass die Workflow Services eine Vereinfachung bei der nächsten BPEL Version bewirken.
Mit .NET bleibt Microsoft weiterhin der Schrittmacher in der Web Services Welt. Der Java Welt bleibt nichts anderes übrig als zu folgen.

Freitag, 13. November 2009

Open Source SOA Monitoring/Governance

Unsere beiden open source Werkzeuge Membrane SOA Monitor und Membrane SOA Registry haben unter http://www.membrane-soa.org/ ein neues Zuhause gefunden.

Donnerstag, 30. Juli 2009

X-Forwarded-For oder Woher kommst Du?

Das Forwarding von HTTP Anfragen aus dem Internet über die DMZ erledigt der Membrane Monitor jetzt problemlos. Das letzte Problem war, dass unsere logfiles alle so aussahen:

127.0.0.1 - - [30/Jul/2009:09:47:27 +0000] "GET /open-source/soap-monitor-howto.htm HTTP/1.1" 200 3178
127.0.0.1 - - [30/Jul/2009:09:47:31 +0000] "GET /open-source/jaxws-client-monitor-howto.htm HTTP/1.1" 200 3968
127.0.0.1 - - [30/Jul/2009:09:47:32 +0000] "GET /membrane-add-rule.png HTTP/1.1" 200 27561
127.0.0.1 - - [30/Jul/2009:09:47:34 +0000] "GET /open-source/ HTTP/1.1" 200 2822
127.0.0.1 - - [30/Jul/2009:09:47:36 +0000] "GET /open-source/soa-registry-repository/ HTTP/1.1" 200 4981

Anstatt der IP Adresse des Rechners auf dem der Browser läuft wird die IP Adresse des reverse Proxy abgespeichert. Für das Durchschleusen der IP Adresse des ursprünglichen Clients haben die Entwickler des Squid caching Proxy Servers das HTTP Header Feld X-Forwarded-For eingeführt. Dabei handelt es sich nicht um einen richtigen Standard sondern nur um einen Defacto Standard, der aber ganz gut akzeptiert ist. Ab der Version 0.9.3 ergänzt Membrane Monitor jetzt weitergeleitete HTTP Anfragen um dieses Feld. Damit Tomcat das Feld in eine Accesslog Datei schreibt mussten wir noch die Konfiguration für das AccessLogValve ändern. Damit die IP Adresse des Clients mit dem Wert von X-Forwarded-For ausgetauscht wird haben wir das Log Pattern combinded mit einzelnen Werten nachgebaut.

<Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="praxis-godesberg.de." suffix=".txt"
pattern='%{x-forwarded-for}i %l %u %t "%r" %s %b "%{referer}i" "%{user-agent}i"'/>
</Context>


Jetzt steht dem Betrieb mehrerer Web Server an einer festen IP nichts mehr im Weg. Zeit einen neuen Server zu bestellen :-) .

Mittwoch, 29. Juli 2009

Java Reverse Proxy

Der Prototyp des Java reverse Proxy für den Betrieb mehrere Server an einer festen IP-Adresse hatte zunächst noch ein wenig Performance Probleme. Nach einer Umstellung auf ein lazy on demand Lesen der Nachrichten gibt es durch den Proxy keine messbaren Verzögerungen mehr. Es kommt was über die Leitung geht. Lokal sind sogar ca. 5 MByte pro Sekunde möglich. Schade wir wollten eigentlich mal das Java NIO API ausprobieren. Nachdem die Performance absolut ok ist haben wir festgestellt, dass in den Logfiles jetzt immer 127.0.0.1 steht. Wir würden aber gerne wissen von wo unsere Seiten abgerufen werden. Für die Weitergabe der Requestor Adresse gibt es das X-Forwarded-For http Header Feld. Mal sehen. Ob das Feld von unserem Tomcat aus gelesen wird.