Verteilte Software Systeme Hochschule für Technik Rapperswil Lukas Martinelli 25.08.2014, basierend auf Zusammenfassung Marc Juchli
Grundlagen Definitionen Programm ● ● ● ●
Hat einen Anfang und ein Ende Akzeptiert Input und produziert Output Läuft deterministisch Ist clockdriven
System Besteht aus Programmen und Subsystemen ● Hört evtl. nie auf ● Akzeptiert immer Input ● Oft dynamisch konfiguriert ● Kann sich nichtdeterministisch verhalten ● Ist eventdriven
Distributed System A distributed system is a collection of independent computers that appears to its users as a single coherent system. What is the opposite of distribution? Non distributed systems: Presentation tier and middle tier of the application run in the same server. So the business components can be accessed locally without remote calls; this will improve significant performance of the overall application. However it is vital that presentation tier and middle tier are kept logically distinct. The main risk in the web application is that blurred responsibilities between presentation and business logic components.
Dimensionen Verteilte Software Systeme besitzen drei unabhängige Merkmale: ● Nebenläufigkeit ● Verteilung ● Persistenz
Transparency Transparency
Description
Access
Hide differences in data representation and how a resource is accessed 1
Location
Hide where the resource is located
Migration
Hide that the resource may move to another location
Relocation
Hide that the resource may be moved to another location while in use
Replication
Hide that resources is replicated
Concurrency
Hide that resource may be shared
Failure
Hide failure and recovery
Message Passing Interface (MPI) Eine Alternative zu Sockets speziell für die Kommunikation im High Performance Computing (HPC) Bereich.
Message Exchange Pattern (MEP) Ein Template das die Verbindungsart für den Austausch von Nachrichten festlegt. Beispiele sind: ● Datagram ● RequestResponse ● Duplex Diese können auch alle noch connectionoriented sein in dem man eine Session hält.
2
Abstraktionsebene Datenaustausch ● ● ●
Sockets (UDP/TCP über IP) File Transfer Shared Database
Nachrichtenaustauch ● ●
MessageOriented Middleware HTTP GET, POST
Remote Procedure Call (RPC) ● ● ●
DCE RPC Java RMI, CORBA Web Services, RESTful HTTP
Middleware Middleware ist InfrastrukturSoftware zur Kommunikation zwischen SoftwareKomponenten und Anwendungen auf verschiedenen Computern Die Middleware erfüllt folgende Funktionen: ● Dient als Verteilungsplattform die viele Protokolle unterstützt ● Bietet höheres Abstraktionsniveau als einfacher Datenaustausch ● Verbirgt Komplexität darunter Gründe für eine Einführung: ● Interoperabilität (Überwindung von Heterogenität) ● vereinfachte Erstellung verteilter Anwendungen (Produktivität)
3
Kommunikationsorientierte Middleware Stellt ein von der Applikation unabhängiges Protokoll zur Verfügung. ● Lowlevel protocols and API (infrastructure) ● Sockets
Anwendungsorientierte Middleware Benutzt ein spezifisches Protokoll ● Highlevel protocols and API (programming models) ● CORBA IDL, RMI interfaces ● WSDL/SOAP Webservices
Architekturstile Client-Server Der Client sendet einen Request auf den Server und bekommt die Antwort.
2-Tier Architecture Die Applikationschichten lassen sich beliebig auf den Server oder Client auslagern. Sowohl Persistenz und die eigentliche Business Logik wird vom Server bereitgestellt, der Client ist lediglich ein Thin Client. Das lässt sich in der Praxis nicht immer so leicht trennen, deshalb gibt es verschiedenste Variationen.
4
3-Tier Architecture Tier 1: Clients mit Browser oder Desktop Applikation (Rich Client) Tier 2: Web Server, Presentation Logic (z.B. HTML Templates), Application Server und Business Logic Tier 3: Database
N-Layers Jedes Layer kennt nur das tieferliegende Layer. Ein Request geht durch alle Layers hindurch (Request flow) und wieder zurück (Response flow).
Distributed Objects Jedes Objekt ist unabhängig vom Ort und antwortet auf einen Method Call.
Event Driven Architecture Reagiert auf Ereignisse. Peer-to-Peer Systeme
Eight Fallacies of Distributed Systems The network is reliable Oft ist mit Netzwerk das Internet gemeint. Wenn ein Zugriff auf eine 3rd Party API gemacht wird, ist die Chance gross, dass dieser Service auch offline gehen kann.
Latency is zero Server näher zu den Kunden bringen (mit Cloud Availability Zones und CDNs).
Bandwidth is infinite Die meisten Mobilgeräte haben keine unlimitierte Bandbreite.
The network is secure Nutzer surfen im offenen WLAN. TLS wird oft implizit voraussgesetzt.
5
Topology doesn’t change Topology ist oft nicht statisch, IPs können ändern.
There is one administrator Even with applications hosted in your own private datacenter, your applications are likely interacting with systems outside your administrative control.
Transport cost is zero Not only is transport cost not zero, it’s priced (see AWS).
Sockets Socket Programmierung ist im Grunde LowLevel Messaging und ist der Basis Mechanismus für verteilte Aufrufe. Es wird kein Programmierkomfort geboten, es werden lediglich Byteströme auf Programmierebene ausgetauscht.
Mechanismus Ein Socket ist eine eindeutige Verbindung zwischen einem Client (IP + Port) und einem Server (IP + Port).
Client Client kennt Hostname und Port für den CONNECT mit dem Server: 1. stellt eine Verbindung her 2. erhält Socket Objekt 3. kommuniziert mit Methoden des Socket Objekts
Server Server kennt eigenen Port und ist im LISTEN Modus: 1. Wartet bis Client über den Connect Port verbindet 2. akzeptiert Request 3. erzeugt für jeden Request einen neuen Socket (neuer Port) um auf den Request zu antworten 4. Ursprünglicher Connect Sockets ist bereit für weitere Requests
Typische Fehler ● ● ●
Mit einem Port zu verbinden, für den kein BIND und LISTEN ausgeführt wurde BIND auf Port machen, der bereits belegt ist Protocol Mismatches (Format stimmt nicht überein, Buffer überläuft)
Nachteile ● ● ●
Byteströme müssen erstellt und geparst werden Messaging Format muss selbst spezifiziert und implementiert werden Viele fehlende Features die heute Middleware übernimmt (z.B. Synchronization)
6
Message Exchange Pattern (MEP) nicht garantiert Weder die Socket API noch MPI legen das Message Exchange Pattern fest. Dies muss in der Applikation festgelegt werden und muss behandeln können: ● Wer schreibt wann? ● Wie geht man mit Buffer Overflows um? ● Wie wird zwischen Client und Server synchronisiert?
7
Berkeley Sockets Funktioniert plattformübergreifend für alle Sprachen gleich.
Primitive
Meaning
SOCKET
Create new communication end point
BIND
Attach a local address to a socket
LISTEN
Announce willingness to accept connections
ACCEPT
Block caller until connection request arrives
CONNECT
Actively attempt to establish connection
SEND
Send data over connection
RECEIVE
Receive data over connection
CLOSE
Release the connection
8
Java Socket API Die Klasse Socket in Java benutzt standardmässig einen TCP/IP Socket.
Server Beispiel für einen SingleThreaded Server, welcher die aktuelle Zeit liefert
public static void main(String args[]) throws Exception { int port = 2342; ServerSocket server = new ServerSocket(port); while(true) { Socket client = server.accept(); try(PrintWriter out = new PrintWriter(client.getOutputStream(), true)) { Date date = new Date(); out.println(date); } } } }
Der Konstruktor des ServerSockets macht implizit einen BIND und LISTEN wenn ihm ein Port übergeben wurde. Mit dem server.accept Call warten wir bis ein Client eine Verbindung eröffnet, um dann einen neuen Socket client zu eröffnen auf dem wir ihm Daten zurücksenden können.
Client Beispiel für den Client der die Zeit vom Server holt
public class TimeClient { public static void main(String args[]) throws IOException { String host = "localhost"; int port = 2342; Socket server = new Socket(host, port); try(BufferedReader in = new BufferedReader( new InputStreamReader(server.getInputStream))) { String date = in.readLine(); } }
Der Client macht lediglich einen CONNECT und schreibt auf den Socket.
Unterschied von Socket und ServerSocket java.net.ServerSocket: This class implements server sockets. A server socket waits for requests to come in over the network. It performs some operation based on that request, and then possibly returns a result to the requester. java.net.Socket: This class implements client sockets (also called just "sockets"). A socket is an endpoint for communication between two machines 9
Unterschied zu Berkeley Sockets Der Konstruktor in der Java Socket API macht vieles implizit (zum Beispiel den CONNECT oder BIND). Es wäre besser die Berkeley Sockets nicht zu abstrahieren sondern direkt explizit connect() und listen() Methoden zu verwenden.
Listen and accept on multiple ports For each port that you want to listen to: 1. Create a separate socket with socket. 2. Bind it to the appropriate port with bind. 3. Call listen on the socket so that it's set up with a listen queue.
Multiple connections to server without blocking the port Da ein Socket ein Quadrupel von Client (IP + Port) und Server (IP + Port) ist, erstellt accept für jede TCP Connection einen neuen Socket. Da das unterschiedliche Sockets sind, blockieren sie sich auch nicht. netstat für zwei verbundene Clients zeigt Folgendes an: ● two inbound connections, belonging to the server (local port:1234). Each has its own Socket in the server application. ● two outbound connections, belonging to the client (remote port:1234). Each has its own Socket in the client application. ● one listening connection, belonging to the server. This corresponds to the single ServerSocketthat accepts connections.
UDP und Multicast ● ●
DatagramSocket für UDP (Adresse muss bei jedem Paket angegeben werden) MulticastSocket für Multicasts mit UDP
10
Multithreaded Server Hier wird für das obige Beispiel für jeden neuen Socket, ein eigener Thread eröffnet. public static void main(String args[]) throws Exception { ServerSocket server = new ServerSocket(1234); while(true) { Socket client; = server.accept(); ServerThread t = new ServerThread(s); t.start(); } } public class ServerThread extends Thread { private Socket client; public ServerThread(Socket client) { this.client = client; } public void run() { try(PrintWriter out = new PrintWriter(client.getOutputStream(), true)) { Date date = new Date(); out.println(date); } } }
TCP/IP vs UDP/IP ● ● ●
●
Connectionoriented vs. connectionless protocol (and communication) IPlevel addressing and routing via DNS, ARP etc. Quality of Service (QoS) differences: ○ Sequencing (Packet order preserved?) ○ Dealing with packet loss (retransmission in case of temporary failure) Broadcast and multicast possible
Blocking vs. Non Blocking Socket Blockiert ein Programm (z.B. der accept Call beim Java Socket API) so muss dies unbedingt dokumentiert werden. Blockierende Methoden bringen ausserdem viele Fehlermöglichkeiten mit sich, deshalb sollte man immer ein Timeout setzen. Blocking means that if data is not available for reading or if the device is not ready for writing then the operating system will wait on a request to read from or write to a socket until it either gets or sends the data or times out. In other words the program may halt at that point for quite some time if it can't proceed. Non blocking means that the request to read or write on a socket returns immediately whether or not it was successful, in other words, asynchronously. It is the task of the programmer then to decide what to do next: to try again or consider the read/write operation complete. Non blocking is usually much faster but is a bit more complex to set up and manage. 11
Synchron
Asynchron
Blocking API Call
Ja
Situationsbedingt
Nonblocking API Call
Selten
Ja
Synchronous vs. Asynchronous
Remote Procedure Call (RPC) Remote procedure call (RPC) is an inter process communication (a set of methods for the exchange of data among multiple threads in one or more processes. Processes may be running on one or more computers connected by a network.) that allows a computer program to cause a subroutine or procedure to execute in another address space (commonly on another computer on a shared network) without the programmer explicitly coding the details for this remote interaction.
Connection An RPC is initiated by the client, which sends a request message to a known remote server to execute a specified procedure with supplied parameters. The remote server sends a response to the client, and the application continues its process. While the server is processing the call, the client is blocked (it waits until the server has finished processing before resuming execution), unless the client sends an asynchronous request to the server, such as an XHTTP call. 12
Steps
1. Client procedure calls the client stub in the normal way. 2. Client stup builds a message and calls the local operating system. 3. Client’s OS sends the message to the remote OS. 4. Remote OS gives the message to the server stub. 5. Server stub unpacks the parameters and calls the server. 6. Server does the work and returns the result to the stub. 7. Server stub packs it in a message and calls its local OS. 8. Server’s OS sends the message tot the client’s OS. 9. Client’s OS gives the message to the client stub. 10. Client stub unpacks the result and returns to the client Zwei Designdimensionen: ● lokaler Aufruf (Kommunikation mit nächst tieferer lokaler Schicht) ● Remote Protokoll (Kommunikation mit derselben Schicht auf entferntem Rechner)
13
Messaging Queuebasiertes Messaging gestattet die flexible und lose Kopplung unterschiedlichster Systeme: ● Auf unterschiedlichen Plattformen ● In unterschiedlichen Programmiersprachen ● Mit völlig unterschiedlichen MessageFormaten (Text, Byte, Objekt). Messaging wird heute vielfach als einfacherer Ansatz für die Integration unterschiedlicher Systeme eingesetzt mit den Merkmalen: ● Einfachheit ● Lose Kopplung ● Erweiterbarkeit ● Skalierbarkeit ● Fehlertoleranz Die APIs sind einfach zu benutzen, es müssen aber viele Designentscheidungen getroffen werden: ● Message intent (command vs. data) ● Returning a response (requestreply) ● Huge amounts of data (sequencing) ● Slow messages (message expiration) ● QoS (guaranteed delivery, transactionality, idempotency)
Message Oriented Middleware (MOM) Message oriented middleware (MOM) is software or hardware infrastructure supporting sending and receiving messages between distributed systems. MOM allows application modules to be distributed over heterogeneous platforms and reduces the complexity of developing applications that span multiple operating systems and network protocols. The middleware creates a distributed communications layer that insulates the application developer from the details of the various operating systems and network interfaces. APIs that extend across diverse platforms and networks are typically provided by MOM. MOM provides software elements that reside in all communicating components of a client/server architecture and typically support asynchronous calls between the client and server applications. MOM reduces the involvement of application developers with the complexity of the master slave nature of the client/server mechanism.
14
Where is the Middleware? Middleware ist sowohl beim Client als auch beim Server im Queuing Layer. Does the sender side also need a queue? Sender und Empfänger brauchen eine Queue um zeitlich entkoppelt zu sein.
API Primitives Primitive
Meaning
Put
Append message to specified queue
Get
Block until the specified queue is nonempty and remove first message
Poll
Check queue for messages and remove first. Never block
Notify
Install handler to be called when a message is put into specified queue
Message Queing Model Mit dem MessageQueuing Model enkoppelt man den Empfänger von der Zeitdimension. Er kann selbst wählen, wie er die Nachricht empfangen will. Der Sender kann auch eine lokale Queue verwenden um beispielsweise momentane Übertragungsprobleme auszugleichen oder inkommende Nachrichten zu puffern.
15
Zeitlich gekoppelt
Zeitlich entkoppelt
Räumlich gekoppelt
Abbildung a: Kommunikation findet gerichtet zwischen Sender und Empfänger(n) statt. Empfänger müssen zum Zeitpunkt des Sendens aktiv sein Beispiel: Message Passing, Remote Invocation
Abbildung b und d: Kommunikation findet gerichtet zwischen Sender und Empfänger(n) statt. Empfänger müssen zum Zeitpunkt des Sendens nicht aktiv sein.
Räumlich entkoppelt
Abbildung c: Sender und Empfänger brauchen sich nicht zu kennen. Empfänger müssen zum Zeitpunkt der Kommunikation aktiv sein. Beispiel: IP Multicast
Abbildung d: Sender und Empfänger brauchen sich nicht zu kennen. Sender und Empfänger haben eigene Zeitsysteme.
Architekturen
16
Pipes-and-Filter Chaining
Hub-and-Spoke Architecture
JMS JMS ist ein Interface zu einer Message Oriented Middleware (MOM) um Nachrichten auszutauschen. Java EE bring von Haus aus eine JMS Implementation mit. Externe JMS Provider implementieren lediglich das JMS Interface. Einige Provider Implementationen: ● Apache ActiveMQ ● JBoss ● WebSphere MQ 17
Terminologie
Client An application or process that produces and/or receives messages.
Producer/Publisher A JMS client that creates and sends messages. Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(mp.transacted, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("testQueue"); MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.PERSISTENT); TextMessage message = session.createTextMessage("hello"); producer.send(message); producer.close(); session.close(); .connection.close();
Consumer/Subscriber A JMS client that receives messages. Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(mc.transacted, Session.AUTO_ACKNOWLEDGE); Destination destination = session.createQueue("testQueue"); MessageConsumer consumer = session.createConsumer(destination); TextMessage text=(TextMessage) consumer.receive(); consumer.close(); session.close(); connection.close();
Message An object that contains the data being transferred between JMS clients.
Queue A staging area that contains messages that have been sent and are waiting to be read (by only one consumer). Note that, contrary to what the name queue suggests, messages don’t have to be delivered in the order sent. A JMS queue only guarantees that each message is processed only once.
Topic A distribution mechanism for publishing messages that are delivered to multiple subscribers.
18
Struktur Header Ein Header wird immer gesendet. Er enthält Informationen für das Routing und die Identifikation. Ein MOMProvider normiert seine Message Header.
Properties Properties sind optional – sie enthalten zum Beispiel Informationen, mit deren Hilfe ein Consumer Nachrichten filtern oder weiterrouten kann (Erweiterungen des StandardHeaders).
Body Der Body ist auch zwingend erforderlich – er enthält die auszutauschenden Nutzdaten (Text, Objekte, Binärdaten).
QoS Settings JMS unterstützt gewisse Headers, allerdings ist die Implementation provider spezifisch! Es sollte also immer die MOM Provider Dokumentation angeschaut werden und sich nicht auf die JMS Beschreibung verlassen. Attribute
Description
Transport Type
Transport Protokoll für die Übertragung
FIFO delivery
Messages werden in der Reihenfolge zugestellt, in der sie gesendet wurden
Message length
Maximale Länge einer Nachricht
Setup retry count
Maximale Anzahl Versuche um die Remote Queue zu erreichen
Delivery retries
Maximale Anzahl Versuche um eine Nachricht in die Queue zu speichern
19
Ablauf
● ● ●
Create – the sender creates the message and populates it with data. Send – the sender adds the message to a channel. Deliver – the messaging system moves the message from the sender’s computer to the receiver’s computer, making it available to the receiver. ● Receive – the receiver reads the message from the channel. ● Process – the receiver extracts the data from the message.
Persistenz
Nicht-Persistent ● ● ●
Vorteil dieses Modus ist der geringe Overhead. Die Nachrichten werden nicht gelogged oder gespeichert. Falls ein JMS Provider ausfällt, kann eine solche Meldung verloren gehen.
Persistent ●
Instruiert den JMS Provider, dass dieser sich darum kümmern muss, dass die Nachrichten nicht verloren gehen. ● Der JMS Provider muss solche Nachrichten auch garantiert maximal einmal abliefern. ● Eine Nachricht kann also verloren gehen, darf dann aber garantiert nur einmal abgeliefert werden. ● Ein JMS Provider muss eine PERSISTENT Message einmalundnureinmal abliefern. Dadurch wird die Performance verschlechtert.
20
Channel Types
Point-to-Point Channel Messages werden zu einem spezifischen Consumer gerouted, der eine Queue für die Messages verwaltet. Jede Message geht an eine spezifische Queue. PTP characteristics: ● Each message has only one consumer. ● A sender and a receiver of a message have no timing dependencies. The receiver can fetch the message whether or not it was running when the client sent the message. ● The receiver acknowledges the successful processing of a message.
21
Publish-Subscribe Channel Messages werden an ein spezielles Topic gesendet. Subscriber können alle Messages zu einem Topic abonnieren. Der Publisher muss die Consumer nicht kennen. Publish/Subscribe model characteristics, ● Each message can have multiple consumers. ● Publishers and subscribers have a timing dependency. A client that subscribes to a topic can consume only messages published after the client has created a subscription, and the subscriber must continue to be active in order for it to consume messages.
Message Reception Styles
Polling Consumer Blocking ReceiveCall (optionaler Timeout)
22
Event-driven Consumer Request Handler Pattern
AMPQ ●
Messages are published to exchanges, which are often compared to post offices or mailboxes. ● Exchanges then distribute message copies to queues using rules called bindings. ● Then AMQP brokers either deliver messages to consumers subscribed to queues, or consumers fetch/pull messages from queues on demand.
Enterprise Integration Patterns siehe andere Zusammenfassung
23
Remote Method Invocation (RMI) Recurring Design Issues in Remoting: ● Wire protocol ● Naming/addressing of endpoints ● Message Exchange Pattern (MEP) on application level ○ RequestReply ○ OneWay ○ Long Polling ● Data formatting (requests, replies) a.k.a. parameter syntax ● QoS policies Um diese Probleme in den Griff zu kriegen, wird ein Vertrag/Interface benötigt, der diese Aspekte definiert. Dieser Vertrag löst folgende NFRs: ● Interoperability (multi platform connectivity) ● Robustness (e.g. timeout management) ● Openness (portability of application code)
Interface Description Languages (IDLs) IDLs describe an interface in a language independent way, enabling communication between software components that do not share a language – for example, between components written in C++ and components written in Java
RMI Möglichkeiten ●
●
●
Kommunikation mit entfernten Objekten (Remote Objects) ○ Synchroner Auftruf entfernter Methoden (Client Server) ○ Details der Kommunikation dem Entwickler verborgen (Remote Proxy Pattern und Skeletons) Referenzieren entfernter Objekte ○ über Namensdienst (RMI Registry) ○ über Austausch entfernter Referenzen Laden von verteilten Objekten ○ entfernte Objekte als Methoden Parameter ○ RMI beinhaltet einen Mechanismus zum dynamischen Laden von ○ Objektcode
Die entfernte Schnittstelle spezifiziert, welche Methoden entfernt aufgerufen werden können. In Java ist es nicht möglich, dass ein Objekt lokale und entfernte Methoden enthält, es ist nur entweder lokal oder entfernt erlaubt.
Higher-Level RPC Architecture
24
RMI-Architektur Wird eine Methode auf einem Objekt aufgerufen, wird ein synchroner Aufruf vom Client an den Server gemacht. Der Anwendungsentwickler auf der ClientSeite bleibt der Remote Aufruf verborgen (Proxy Pattern).
25
RMI-Registry Remote Objekte können auch referenziert werden, dies muss speziell über einen Namensdienst (RMIRegistry) gehandhabt werden. Diese RMIRegistry wird von der RMIReferenzschicht zur Verfügung gestellt. RMI stellt ebenfalls einen Mechanismus bereit um ein Remote Object, dass als Parameter an ein anderes Remote Object übergeben wurde, dynamisch nachzuladen.
RMI-Compiler All die Stubs und Skeletons von Hand anzulegen wäre eine zu grosse Handarbeit. Deshalb wird RMIIDL (als Interface Sprache) benutzt. Mithilfe des RMICompiler kann man dann vom RMIIDL automatisch Proxies und Stubs erzeugen. In neuen Java Versionen kann dies auch dynamisch zur Laufzeit mithilfe von Introspection passieren.
Stub Ein Stub ist ein Stellvertreterobjekt (Remote Proxy), das Clientaufruf an Server weiterreicht. Die StubKlasse baut SocketVerbindung zu Server auf (CONNECT). Sie schickt Namen der Methode und Parameter und holt das Ergebnis ab.
26
Skeleton Ein Skeleton nimmt Aufrufe des Stubs entgegen und leitet sie an Serverobjekt weiter. Erzeugt Socket auf demselben Port wie Stub (BIND/LISTEN/ACCEPT), wartet auf den Methodenaufruf vom client und delegiert diesen an das Objekt. Der Rückgabewert wird dann über die Socketverbindung an Client zurück gesendet.
Deployment Die RMIRegistry wurde sowohl vom Client, als auch vom Server verwendet. Um diese bereitzustellen, wird ein Infrastruktur Server benötigt.
Wer started die RMI-Registry? Die RMIRegistry muss separat auf dem Infrastruktur Server gestartet und verwaltet werden.
Kritik ● ● ● ● ●
Es ist nicht immer klar, dass es sich um Remote Zugriffe handelt (Timeout Management) Client und Server sind stark gekoppelt (Objekt Serialisierung ist starker Vertrag) Binäres Protokoll (Kompabilität benötigt, gleiche Java Version auf Client und Server) Referenzen müssen gemanagt werden (Remote Garbage collection) Wird oft von der Firewall geblocket, da es sich um ein eigenes Protokoll handelt.
27
RMI Beispiel
Es muss ein Interface für die RemoteMethoden erstellt werden, dass sowohl dem Client, als auch dem Server bekannt ist import java.rmi.Remote; import java.rmi.RemoteException; public interface Hello extends Remote { String sayHello() throws RemoteException; }
Der Server implementiert nun dieses Interface import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl() throws RemoteException { super(); } public String sayHello() throws RemoteException { return "Hello World!"; } }
Nun muss ein Remote Object der Implementierung erzeugt und bei der RMIRegistry angemeldet werden. import java.rmi.Naming; public class HelloServer { public static void main(String args[]) { try { HelloImpl obj = new HelloImpl(); Naming.rebind("rmi://[hn]/remoteHello", obj); } catch (Exception e) { ... } } }
28
Zuerst muss das Remote Object von der RMIRegistry abgeholt werden. Danach können wir auf dem Interface alle definierten Methoden aufrufen import java.rmi.*; public class RmiClient { public static void main(String[] args) { try { Hello obj =(Hello)Naming.lookup("rmi://[hn]/remoteHello"); String message = obj.sayHello(); System.out.println(message); } catch (Exception e) { ... } } }
Call-by-Value Es werden Kopien der Objekte zwischen Client und Server verschickt, dazu müssen die ParameterKlassen serialisierbar sein. ● Vorteil: sie Anzahl der remote Zugriffe ist reduziert ● Nachteil: Änderungen von entfernten Objekten sind so nicht möglich
Call-by-Reference Referenz auf das ParameterObjekt wird an den Server übertragen, dazu muss die ParameterKlasse ebenfalls ein RMIObject sein (sie muss also ein RemoteInterface haben und von UnicastRemoteObject ableiten). ● Vorteil: Server kann übergebene ClientObjekte auf Client ändern ● Nachteil: RemoteZugriffe sind teuer
29
Objekt Serialisierung Um die Java Objekte zu übertragen, müssen sie zuerst serialisiert werden. Bei der Serialisierung werden die Objekte in einen flachen, geordneten Bytestream geschrieben.
Um in Java ein Klasse serialisierbar zu machen, muss das Objekt mit dem Marker Interface java.io.Serializable ausgezeichnet werden public class Person implements Serializable { private static final long serialVersionUID = 1L; private String name; private String place; private int year; Person(String aName, String aPlace, int aYear) { name = aName; place = aPlace; year = aYear; } }
Die serialVersionUID ist die Versionsnummer einer Klasse. Wird ein Objekt deserialisiert, werden die serialVersionUID des Codes und des Objekts verglichen. Stimmen diese nicht überein wird eine InvalidClassException auftreten.
30
Webservices Basiert auf den Grundsätzen von RPC.
Web Services Description Language (WSDL) WSDL ist ein XML Format mit dem RPC beschrieben werden können. Es handelt sich also eigentlich um eine IDL in XML. WSDL schreibt man heutzutage nicht mehr von Hand, sondern wird mit Contract Generation automatisch generiert (wsimport für Java oder svcutilfür .NET). Diese Tools können auch direkt Proxies, Skeletons und Stubs für ein Schema generieren.
Terminologie ● ● ● ● ● ●
Service Endpoint Binding Interface Operation Types
31
Serialization Interoperabilität ist nicht gewährleistet. Ein .NET Client kann zum Beispiel keine Java HashMap deserialisieren. Es können verschiedene Implementation für die Serialiserung in Java benutzt werden: ● JAXB Implementation: In der JDK integriert ● 3rd Party JavatoXML Mapper ○ Castor ○ OX
Kritik ● XML ist sehr verbose und deshalb nicht so gut lesbar ● WSDL ist eine komplexe Sprache mit einer hohen Lernkurve ● XML und XSD komplex Tools können viele dieser Pain Points abnehmen.
SOAP Envelope 234 Apples
33
Non-Functional Requirements (NFRs) ● ● ● ● ● ● ● ● ● ● ● ●
Availability Compliance Maintainability Performance Response time, latency; throughput A.k.a. completion time, service time, ... Privacy Recovery Resilience, Fault Tolerance, Robustness Scalability Throughput Usability, UserFriendliness
Quality Attributes (QAs) QAs are samples of NFRs: ● QA Accuracy: orders must not be lost, resource reservations must be undone ● QA Efficiency (performance): subsecond response times specified ● QA Interoperability: multiple platforms to be supported ● QA Modifiability: skills for selected technologies must be available locally The challenges are: ● Many attributes, many conflicts between them; many attributes hard to quantify ● Often under specified (unknown) or over specified (overly ambitious) ● Often stated on inadequate level of abstraction Performance QAs ● Latency ○ Client perception: how long does a request/response interaction take? ● Throughput ○ Server concern: how many concurrent requests can be processed? ● Code quality (e.g. object lifecycles) ● Algorithms and data structures ● Logical component architecture ● Physical infrastructure architecture ● Capabilities of products and open source middleware
Performance and Scalability Tactics Desired Quality The ability of the system to predictably execute within its mandated performance profile and to handle increased processing volumes in the future if required Applicability
Any system with complex, unclear, or ambitious performance requirements; systems whose architecture includes elements whose performance is unknown; and systems where future expansion is likely to be significant 34
Concerns
● ● ● ● ● ●
response time throughput scalability predictability hardware resource requirements peak load behavior
Activities
● ● ● ● ● ● ●
capture the performance requirements create the performance models analyze the performance models conduct practical testing assess against the requirements rework the architecture
Tactics
● ● ● ● ● ● ● ● ● ● ● ● ●
optimize repeated processing reduce contention via replication prioritize processing consolidate related workload distribute processing over time minimize the use of shared resources reuse resources and results partition and parallelize scale up or scale out degrade gracefully use asynchronous processing relax transactional consistency make design compromises
Pitfalls
● ● ● ● ● ● ● ● ● ● ●
imprecise performance and scalability goals unrealistic models use of simple measures for complex cases inappropriate partitioning invalid environment and platform assumptions too much indirection concurrencyrelated contention database contention transaction overhead careless allocation of resources disregard for network and inprocess invocation differences
Deployment Diagramme UML Deployment Diagramm
35
Hardware, Prozessoren und Runtimes (z.B. JVM) werden als Nodes dargestellt. Als Artefakte werden Software Komponenten (Web Applikation, Datenbank) und deren Verbindungen (JDBC, REST, RMI) bezeichnet. Artefakte werden Nodes zugewiesen um den Deployment Status des Systems zu modellieren.
36
$ 37
IBM Unified Method Framework (UMF) UMF verwendet für Artifact den Begriff Work Product und ein Deployment Diagram wird als Operational Model bezeichnet. Deployment Units sind die Verbindung zwischen der logischen Sicht (Komponenten) und der Infrastruktur (Operational Model). UMF ist eine eigene Methode Software in folgenden Schritten zu entwickeln: 1. Component Model und Operational Model beinflussen sich gegenseitig, so brauche ich beispielsweise für persistente Sessions eine weitere Datenbank (z.B. Redis) 2. Conceptual OM, Logical OM, Physical OM: Es wird zwischen den verschiedenen Levels immer mehr ins Detail gegangen (Datenbank => RDBMS => MySQL)
38
MSDN Deployment Patterns Deployment Strategy
Non-Distributed Deployment Aller Layer sind auf demselben Server, dies macht das Deployment und die Entwicklung einfacher und die benötigten Ressourcen sind klein. Ausserdem ist der Performance Einfluss von Kommunikation verringert (da die Layers lokal kommunizieren können). Aber weil alle Layers diesselben Ressourcen verwenden, kann beispielsweise das Business Layer zum Flaschenhals für das Presentation Layer werden. Es ist sehr schwierig, ein solches Deployment gut zu skalieren und zu warten.
Distributed Deployment Durch das die Layers auf verschiedenen physikalischen Server sind, kann ein Server verwendet werden, der am besten auf die Anforderungen des Layers passt (z.B. RAM für Webserver, CPU für Business Layer). Durch die separierten Komponenten sind wir viel flexibler und können einfacher skalieren und anpassen (z.B. eine Firewall zwischen Web Server und Application Server).
39
Performance Patterns
Web Farms Mehrere Server welche die gleiche Applikation betreiben, werden Web Farms genannt. Requests werden gleichmässig auf alle Server verteilt. Einfaches Routing ist zum Beispiel mit Round Robin DNS (Die A Records werden alterniert).
Application Farms Auch für das Business und Data Layer können mehrere Server zu einer Farm zusammengefasst werden. Dazu müssen die Requests aus dem Presentation Layer gleichmässig auf die Server des Business Layers verteilt werden.
Separate User Sessions Web Applikationen sind nicht immer stateless. Ein gutes Beispiel sind User Sessions (welcher User gehört zu welchem Cookie), diese sollten in einem separaten Session State Store gehalten werden und nicht auf den Web Application Server selbst.
Affinity Die Webserver müssen alle den selben Encryption Key verwenden. Auch für SSL Verschlüsselung sollten entweder all denselben Key benutzen oder ein separater Cluster ist für die Verschlüsselung zuständig.
40
Load-balancing Cluster Load Balancer verteilen Requests auf verschiedene Webserver (besseres Verfahren als DNS Load Balancing). Ein Load Balancer kann zum Beispiel für eine Webseite die Bilder von verschiedenen Servern beziehen und so die Reaktionszeit verbessern.
Reliability Patterns
Failover Cluster Bei einem Failover Cluster springen Server für einander ein und übernehmen die Arbeit falls jemand ausfällt. Jeder Server im Cluster hat einen anderen Server als Standby konfiguriert.
Security Patterns
Impersonation/Delegation Bei Impersonation emuliert der Server als wäre er der User des Clients. Er führt das Programm also im Security Kontext eines anderen aus. So können die Security Regeln für Windows User oder Datenbank Benutzer angewandt werden. 41
Trusted Subsystem User bekommen Rollen zugewiesen welche die gleichen Privilegien haben. Der Application Server wendet nun die Sicherheitsregeln auf diese Rollen an und deshalb haben dann auch nur Benutzer die berechtigt sind, Zugriff auf die Datenbank. Die Datenbank muss aber dem Application Server vertrauen, dass er die Sicherheitsregeln korrekt umsetzt
Multiple Trusted Service Identities Wenn mehr als eine Trusted Entity (wie der Application Server zuvor) benötigt werden, kann der Server zum Beispiel einfach verschiedene Benutzer für die Datenbank verwenden. Das Prinzip des Trusted Subsystem giltet immer noch und es hat keinen Einfluss auf die Scalability.
42
Performance Testing Gatling Gatling ist eine Load Testing Software mit der man Benutzungsszenarien spezifizieren und deren Ausführungszeit messen kann. Um Szenarien zu modellieren eignen sich UML Aktivitätsdiagramme gut. In einer realen Testumgebung kann es gut sein, dass von einem einzelnen Load Generator nicht genügend Usersessions simuliert werden können, um den zu testenden Server voll auszulasten.
UML Aktivitätsdiagramm Es ist wichtig, dass die Bedenkzeiten zwischen den Interaktionen zufällig gestreut werden. Einerseits würde einekonstante Verzögerung kein realistisches Benutzerverhalten modellieren. Zudem würden dadurch in einer Simulation mit mehreren Benutzern, dieselben Requests immer zusammen ausgeführt.
Akzeptanzkriterien Es empfiehlt sich in jedem Fall für eine Applikation Akzeptanzkriterien zu definieren. Die dabei gewählten Metriken müssen spezifisch, messbar und realistisch sein. Beispiele für Akzeptanzkriterien: Nr
Kriterium
Metrik
K1
Die Webseite soll flüssig bedienbar sein. 95% aller Requests sollen in weniger als 500ms beantwortet werden.
Response Time in ms
K2
Das erstellen eines Tweets darf in 95% der Fälle nicht länger als 2s dauern
Response Time in ms
K3
99.9% der Requests müssen ohne Fehler durch den Server beantwortet werden können.
no_errors / no_total
43
Kapazitätstest Performance sollten an der Kapazitätsgrenze durchgeführt werden. Deshalb muss zuerst evaluiert werden, wieviele Benutzer ein System zur gleichen Zeit benutzen können. Die Kapazitätsgrenze findet man heraus, indem man die Anzahl User hochschraubt, ohne das man die Akzeptanzkriterien verletzt. Diese Kapazitätsgrenze kann nun als Baseline für Performance Tests genommen werden.
Performancetest Man kann nun versuchen Performancesteigerung durchzuführen und dann nochmals den Performancetest laufen lässt. Diesen kann man nun mit der Baseline vergleichen.
Scalability Scalability ist die Fähigkeit: ● mit steigender Belastung umzugehen ● ohne die SLAs zu verletzen ● indem die Anzahl Ressourcen erhöht wird Grundsätzlich gibt es drei verschiedene Ansätze: ● Work harder: Mehr Power um die Arbeit zu erledigen ● Work smarter: Besser Algorithmen verwenden ● Get help: Parallelismus einführen Scalability kann durch verschiedene Arten herbeigeführt werden: ● Size scalability: Lineare Skalierung mit mehr Ressourcen (Mehr CPU, RAM, Bandwidth) ● Generation scalability: Bessere Hardware durch Innovation (Hyperthreading, SSD) ● Problems scalability: Gewisse Probleme lassen sich schwer oder gar nicht skalieren
Scale Up vs. Scale Out Scale Up Underlying resources that are increased are mainly the resources (CPUs, storage, bandwidth,...) of an individual server.
Scale Out Underlying resources that are increased are mainly additionally complete servers.
44
Edge Server Ein Edge Server (Load Balancer) hat eine einzige IP Adresse und verteilt Requests an mehrere andere IP Adressen. Typische Verteilungsmechanismen: ● Round robin (Abwechslungsweise die Last verteilen) ● Lastrecentlyused ● Workloadbased Verteilung basierend auf Workload braucht konstantes Monitoring der Server und bedingt gutes Testen und Abschätzen der Auslastung, die Applikation darf aslo keine Black Box sein.
Caching Ein Cache ist ein schneller Assoziativspeicher (Hardware, Operating System, Middleware), typischerweise als Zwischenspeicher genutzt. Caching sollte vorsichtig verwendet werden und erst, wenn es wirklich benötigt wird, denn es führt zu vielen neuen Problemen.
Vorteile ● ● ● ●
Schnellerer Zugriff auf gecachte Ressourcen Es kann Bandbreite gespart werden Server wird geschont (weniger Rechenzeit) Cache funktioniert auch noch, wenn der Server down ist
Nachteile ● ●
Langsamere Performance bei einem Cache Miss Eine veraltete Version des Cache Eintrags wird verwendet (funktioniert schlecht für dynamische Inhalte) ● Ressourcen gehen im Cache verloren ● Komplizierte Konfiguration There are only two hard things in Computer Science: cache invalidation and naming things. Phil Karlton
In-Memory Caching Die Resultate rechenintensiver Operationen werden durch die Applikationen im lokalen Hauptspeicher abgelegt.
Distributed Caching Innerhalb einer Applikation werden Resultate rechenintensiver Methodenaufrufe auf einem RemoteServer gecached. Dadurch können z.B. mehrere Instanzen eines Services die Informationen im Cache teilen.
45
HTTP HTTP bringt von Haus aus gute Cachingmöglichkeiten mit. Einfaches HTTP Caching kann schon mit einem Web Proxy / Reverse Proxy durchgeführt werden.
Performance Bottlenecks Ressource
Zeitfaktor
Platzfaktor
CPU
CPU muss möglichst schnell agieren.
Memory
Platz ist der limitierende Faktor bei Memory
Hard Disk
Datenmenge spielt heute keine grosse Rolle mehr, die Zeit um die Daten zu speichern jedoch schon.
Netzwerk
Latency und Throughput sind limitierend.
Availability
Definition Ein System gilt als verfügbar wenn es läuft und korrekte Resultate produziert. Hohe Verfügbarkeit ist, wenn die Verfügbarkeit nahe bei 100% ist. Wir können also folgende Schlussfolgerungen ziehen: ● Je mehr Fehler ein System hat, desto weniger ist es verfübar ● Je länger es dauert um eine System zu reparieren, desto weniger ist es verfügbar Verfügbarkeit = MTBF / (MTBF + MTTR)
Mean Time Between Failure (MTBF) Die Durchschnittszeit bevor ein System fehlschlägt. MTBF misst also die Zuverlässigkeit.
Mean Time To Repair (MTTR) Die Durchschnittszeit um ein System zu reparieren. Entspricht der Downtime.
46
Hohe Verfügbarkeit 24x7 Verfügbarkeit ist unmöglich und eine Annäherung sehr teuer. Hohe Verfügbarkeit muss also genau mit den Kosten abgewogen werden. Der Vorteil von hoher Verfübarkeit ist eine kleineres Downtime Risiko. Falls Risiko > Kosten der hohen Verfügbarkeit, lohnt sich eine spezielle Lösung.
47
Availability %
Downtime per year
90%
36.5 days
95%
18.25 days
98%
7.3 days
99%
3.65 days
99.5
1.83 days
99.9
8.76 hours
99.99
52.56 minutes
99.999
5.26 minutes
Verfügbarkeit verteilter System Wenn mehrere Systeme voneinander abhängen, ist die gesamte Verfügbarkeit das Produkt der Verfübarkeit der Systeme. Bei der Verfügbarkeit ist also das schwächste Glied der Kette wichtig.
48
Incident Lifecycle
49
Availability Tactics Redundanz ist der Schlüssel für eine gute Verfügbarkeit. Dazu sollte Software möglichst schnell fehlschlagen, so das der FailOver übernehmen kann. Weiter Methoden sind: ● Select faulttolerant hardware ● Use highavailability clustering and load balancing ● Log transactions ● Apply software availability solutions ● Select or create faulttolerant software ● Design for failure ● Allow for component replication ● Relax transactional consistency ● Identify backup and disaster recovery solutions Bewährte Designentscheidungen für HA Software: ● Client/Server Kommunikation auf Queues basieren (wiederherstellbar) ● Server Transaktionen für Client Calls verwenden ● Message Integrity gewährleisten ● Server müssen so weit wie möglich stateless sein ● Server Hot Pools (Redundanz) ● Messaging verwenden
Watchdog Ein Watchdog überprüft periodisch ob ein Programm noch am Leben ist. Folgende Methoden werden verwendet: ● Heartbeat: Prozess schicht “I’m alive” Nachrichten an den Watchdog. Hören diese Heartbeats auf ist der Prozess wahrscheinlich fehlgeschlagen ● Pulse: Monitor fragt aktiv den Status des Prozess ab (Polling) Ein Watchdog kann Prozesse aufgrund dieser Informationen neustarten (ähnliche Funktionsweise wie Windows Services und dem Unix init system).
Deadman Switch Falls kein Puls oder Heartbeat da ist, begeht das ganze System Selbstmord (kompletter System Shutdown).
50
Redundanz Cold Standby A cold server is a backup server whose purpose is solely to be there in case the main server is lost. The cold server is basically turned on once to have software installed and configured, and then is turned off until needed.
Warm Standby A warm server is a backup server that is turned on periodically to receive updates from the server being backed up. Warm servers are often used for replication and mirroring.
Hot Standby A hot server is a backup server that receives regular updates and is standing by ready (on hot standby) to take over immediately in the event of a failover.
Single Point of Failure (SPOF) Potentielle SPOFs: ● Active Directory Server: Schlägt die Authentisierung / Autorisierung fehl läuft meistens gar nichts mehr ● Externe Komponenten: Zum Beispiel der Shipping Scheduler der nicht so oft gebraucht wird und deshalb nicht redundant ausgelegt ist ● Garbage Collector: Läuft der GC nicht mehr, wird das Programm irgendwann abstürzen.
51
API Design und Management
Maintainability Wartbarkeit ist die Eigenschaft leicht verändert werden zu können. Man will zum Beispiel etwas korrigieren oder verbessern, an eine neue Komponente oder an ein System anpassen. Remote APIs unterscheiden sich von lokalen APIs in der Wartbarkeit.
API Requirements ● ● ● ● ● ● ● ●
Low latency High throughput Robustness Error handling Multi tenancy (dt. Mandantenfähigkeit) and API security User session stickiness and data privacy Extensibility and flexibility (a.k.a. evolvability) Backward compatibility
Service Developer Questions ● ●
● ● ● ● ● ● ●
How do you create a service API, what are the common API styles, and when should a particular style be used? How can clients and services communicate, and what are the foundations for creating complex conversations in which multiple parties exchange data over extended periods of time? What are the options for implementing service logic, and when should a particular approach be used? How can clients become less coupled to the underlying systems used by a service? How can information about a service be discovered? How can generic functions like authentication, validation, caching, and logging be supported on the client or service? What changes to a service cause clients to break? What are the common ways to version a service? How can services be designed to support the continuing evolution of business logic without forcing clients to constantly upgrade?
52
Service Design Patterns Service Layer Pattern Die Komplexität eines Systems muss nach aussenhin verborgen sein. Man möchte keine primitiven Operationen und komplexe Modelle bereitstellen, stattdessen sollte eine ausgewählte Menge Operationen alle wichtigen Handlungen umfassen. Das Service Layer eignet sich ausserdem für: ● Zugriff auf Rollen beschränken (RBAC) ● Transaktionen kontrollieren ● Logging und Monitoring ● Exception Handling
Remote Facade Viele kleine Calls eignen sich schlecht für Remoting, sie sollten deshalb in ein gröberes Interface umstrukturiert werden, dass mehrere Calls bündelt. Anstatt drei Remote Calls für setStreet, setCity und setZip zu machen, wird eine grössere Aktion durchgeführt, welche die Aktionen bündelt und auch gute Transaktionsgrenzen setzt.
53
Data Transfer Object (DTO) Ein DTO entkoppelt das Service Layer von der Applikation. Anstatt einen konkreten Typ Album zu übertragen, wird ein Objekt, dass alle benötigten Eigenschaften für den Client enthällt übertragen.
Service Granularity Patterns Dot Pattern Einen einzigen skalaren Parameter.
Bar Pattern Ein einziger Parameter, der jedoch einen komplexen Typ hat mit mehr Informationen.
Dotted Line Pattern Mehrere skalare Parameter.
Combined Pattern Mehrere komplexe Parameter.
54
REST Anti Patterns ● ● ● ● ● ● ● ●
Tunneling everything through GET Tunneling everything through POST Ignoring caching Ignoring response codes Misusing cookies Forgetting hypermedia Ignoring MIME types Breaking self descriptiveness
Further more: ● Using inappropriate REST maturity level (HATEOAS justified?) ● Under specifying service contract and request/response payloads
POINT-Test An API should get (and stick) to its POINT. Purpose: an API must be purposeful (e.g., driven by client demand/use cases) Orientation: an API should expose domain objects (e.g., resources or services) and adhere to OO principles such as high cohesion/low coupling Isolation: each API call should be as isolated as possible (i.e., free of side unexpected, undesired effects) Neutrality: an API should be neutral, i.e. not optimized for any particular client channel TShaped: an API should be “tshaped” (i.e., offer broad and deep calls), e.g., provide a masterdetail interface and/or search functionality
55
Checkliste
Mandatory ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
Semantics, inklusive gewünschte (Seiten)effekte und ParameterBedeutung (Spezifischer Datentyp oder generisch?) Idempotenz des Aufrufs (wiederholte Aufrufe mit den gleichen Daten führen zu demselben Ergebnis) Pre und Postconditions dokumentiert State Management/Transitions of Resources Blocking Behaviour (if any), Timeout Management Multithreading considerations (bei local API: ist es threadsafe, startet es eigene Threads, gibt es libraryinterne Concurrency)? Treatment of NULL, Optional Values, Value Ranges, Grenzwerte (z.B. beim übergeben von Zahlen) Error Handling Versionsangaben (ganzes API, einzelne Methoden) Bei RESTful HTTP: HTTP Method Definition: http://www.w3.org/Protocols/rfc2616/rfc2616sec9.html Response examples for all the supported response types URI Structure is described Parameters are documented and their encoding/format is specified (e.g. DateTime uses ISO 8601) Documentation for all service methods that is up to date All possible response codes or errors are specified SLO und SLA (vgl. Lektion 9): ServiceVerfügbarkeit, Preis pro Aufruf
Wishlist ● ● ●
● ● ● ● ● ●
● ●
OOAD Domain Model der Schnittstelle und der dahinterliegenden Anwendung wird erklärt und visualisiert (soweit relevant für API User, vgl. Remote Facade und DTO Patterns) Naming Conventions vorhanden und durchgängig eingehalten (Resourcen, Operationen, Parameter, Datentypen) Sandbox in Dokumentation eingebaut (mit verschiedenem Body und Request Format Einstellungsmöglichkeiten), Bsp:https://github.com/nelmio/NelmioApiDocBundle/blob/master/Resources/doc/index.md Gute Beispiele Call Choreography (Sequencing, FSM or Workflow) API Usage Best Practices (performance tuning tips, patterns) Links to Developer Community (own wiki, stack overflow) Change Log If I request a collection of objects, I want to specify which attributes the objects should be included (e.g. I'm not interested in published photos of every user, I only want the name and prename) Examples how to access the API for popular languages API is versioned (e.g. /v1/users/12 ) and gets obsolete as soon as a new version (e.g. /v2/persons/12) is released but stays usable for a transition time 56
●
Overview which services are online (Uptime information)
Andere Kriterien ● ● ● ● ● ● ● ● ●
Klare Begriffe (Methoden, Parameter) Präzise, nachvollziehbar, implementierbar Abgestuft, konsistent, sofort ablauffähig Parameter – so viel wie nötig, so wenig wie möglich Keine exotischen Datentypen Abgrenzung Funktionen untereinander und nach aussen Offenheit – Spezifikation ist lesbar, Feedback, Einfluss der User, öffentlich zugänglich Active Developer and User Community Weiteres Beispiel : http://developers.flattr.net/api/
Distributed Control Systems Definition Realtime System A realtime system is one that must process information and produce a response within a specified time, else risk severe consequences, including failure. That is, in a system with a realtime constraint it is no good to have the correct action or the correct answer after a certain deadline: it is either by the deadline or it is useless! System must react to stimulus within given deadlines ● Determinism vs. performance ● Worstcase vs. averagecase execution time (Car airbag (6080 milliseconds) Control Loop DCS Architektur
Future Automation System Architecture (FASA)
● ● ● ● ●
Is a realtime middleware Is based on components Provides platform abstraction Is a deterministic, linear execution framework Supports any number of CPU and cores 57
More Details
● ● ● ● ●
Separates components in memory Spans across cores and systems Provides distributed execution Enables softwarebased fault tolerance Allows for dynamic software updates
Distributed Scheduling Accommodating concurrent tasks on the available resources.
● ● ●
Static schedule Based on WorstCase Execution Time (WCET) Tasks are scheduled in a fixed order
Fault Tolerance in Real Time Domain Redundanz Redundante Controller mit einem Heartbeat Monitor. Parameter für Redundanz: ● Zeit benötigt um Controller zu wechseln ● Anzahl Fehler (Wie häufig steigt z.B. Sensor aus?) ● Kosten (Hardware und Energie)
58
Dynamic Fault Tolerance Hypervisor verteilt kritische Applikationen automatisch redundant.
System Management FCAPS
Fault Fehler erkennen, isolieren und korrigieren.
Configuration Konfiguration von Software und Hardware im Netzwerk (Versioning, Change Management).
Accounting Kosten identifizierenund analysieren (Billing für Kunde).
Performance Performance evaluieren und Effektivität des Netzwerks messen.
Security Sicherheitsaspekte beachten (Confidentiality, Availablility, Integrity).
59
60
IT Infrastructure Library (ITIL) ITIL ist eine Sammlung von Best Practices zur Umsetzung eines ITServiceManagements. Gilt als Defacto Standard für ITGeschäftsprozesse. Die ITIL orientiert sich an dem durch den ITBetrieb zu erbringenden wirtschaftlichen Mehrwert für den Kunden. Dabei werden die Planung, Erbringung, Unterstützung und EffizienzOptimierung von ITServiceleistungen im Hinblick auf ihren Nutzen als relevante Faktoren zur Erreichung der Geschäftsziele eines Unternehmens betrachtet.
61
Systems Management Patterns System Management dreht sich um drei Punkte: ● Monitoring and Controlling ● Observing and Analyzing ● Testing and Debugging Middleware kann nicht nur für das Umsetzen von Remoting gebraucht werden, sie ermöglichen auch System Management Patterns.
Wire Tap
Der WireTap ermöglicht es Messages eines PointtoPoint Channel zu untersuchen und beispielsweise zu archivieren. Dazu konsumiert der Wire Tap die Message vom Input Channel und publiziert sie sowohl an die ursprüngliche Destination als auch einen neuen Channel. Auf dem zweiten Channel können wir nun ohne die Funktionalität des Messaging zu beinträchtigen die Messages analysieren..
Detour Manchmal müssen Messages auch verändert werden(im Gegensatz zum Wire Tap), um beispielsweise Kompabilität zu gewährleisten oder ein Messaging System zu testen. Eine Detour besteht aus einem Router, der bestimmte Messages (Control Bus) herauspickt und auf eine Detour (Umweg) schickt.
… 62
Message History Die loose Kopplung zwischen Sender und Empfänger hat neben vielen Vorteilen auch zur Folge, dass wir beispielsweise nicht wissen wer eine Nachricht publiziert hat. Das Message History Pattern hilft den Nachrichtenfluss zu analysieren. Dazu wird an jede Message eine zusätzliche Information an den Header angehängt, wo die Nachricht durchgegangen ist (wie ein Poststempel oder SMTP). Jede Komponente im Nachrichtenfluss schreibt ihre Debugging Informationen in den Heade. Der Body bleibt dabei unberührt.
Message Store Der Message Store ist ein Archiv, dass Informationen zu jeder Nachricht an einem zentralen Ort (dem Message Store) speichert. Beim Senden einer Nachricht wird immer zusätzlich noch ein Duplikat der Nachricht an den Message Store gesendet.
63
Java Management Extensions (JMX) JMX ist eine Erweiterung für Java SE und EE welche für das Ressourcen Management gedacht ist. Mit JMX ist es möglich: ● Status von Hardware zu messen (mit einem Java Wrapper) ● Ressourcen zu konfigurieren und Statistiken zu sammeln ● Debugging Optionen festzulegen ● Performance einer Applikation zu messen ● Management einer Java Applikation (einfache Anbindung an Management Interface)
Manageable Resource Ist eine Applikation oder Gerät, dass gemanagt werden soll. Ist in der Regel eine Java Instanz oder Wrapper um ein anderes Objekt.
MBean Eine Resource welche man mit JMX managen und monitoren kann.
64
MBean Server Eine Java Klasse welche mehrere MBeans verwaltet. Ist eine Registry um MBeans zu finden und zu registrieren. JMX Agent Ein Java Prozess mit denen man MBeans managen kann. Der MBean Server kann beispielsweise verschiedene Protokolle und JMX Clients unterstützen.
Management Objekt implementieren Ein Objekt in JMX wird als MBean bezeichnet. Um beispielsweise einen Cache als MBean darzustellen, müssen wir: 1. Interface mit MBean als Suffix erstellen 2. Ressourcen implementieren Interface 3. Ressourcen werden bei einem MBean Server registriert
65
Logging Logging ist essenziell für Entwickler und das Operation Team: ● Ursache für Fehler analysieren ● Spezielle Last (Event Storm during Peak) zu untersuchen ● Events zu beobachten Logging in einem verteilten System hat viele Schwierigkeiten: ● Es braucht eine einfache Logging Solution die in verschieden Applikationen verwendet und erweitert werden kann ● Logging muss an einem zentralen Ort stattfinden (Administrator braucht nur Zugriff auf einen zentralen Ort) ● Logging darf die Performance nicht negativ beeinflussen ● Logging Solution muss Nachrichten filtern und Aktionen auf speielle Events erlauben (Persistieren einer Nachricht, Alerts auslösen) ● Es muss auch möglich sein lokal zu loggen, denn bei Netzwerkproblemen dürfen keine Nachrichten verloren gehen Folgendes sollte beim Loggen von Events beachtet werden: ● ExistierendeLogging Frameworks verwenden (Log4J) ● Log Levels definieren und verwenden (DEBUG, INFO, WARNING, ERROR, SEVERE) ● Interface für Logger verwenden um Logging Framework wechseln zu können ● Notruf Analogie: ○ Wer meldet sich und warum ○ Wann und wo passierte das Ereignis
Log Levels TRACE: Sehr detaillierte und spezifische Informationen, die für das Entwickeln und Debuggen eines Features benötigt werden, beispielsweise In und Out Parameter von Methodenaufrufen , Snapshots von Datenstrukturen oder Zwischenschritte in komplexen Algorithmen. Werden u.U. nach dem Fertigstellen des Features auch wieder entfernt. DEBUG: Detaillierte Informationen, die nützlich sein können, um Fehler in der produktiven Umgebung nachvollziehen zu können (Bsp, einzelne Schritte in komplexen Abläufen, Schicht und Tierübergänge). INFO: Welche fachlichen Prozesse im System durchgeführt werden. Z.B. „Benutzer X hat Item Y bestellt“ (Ebene Use Case/User Story). WARNING: Vorgänge, die unter Umstände näher beachtet werden sollten. Das Abweichen von empfohlenen Standardeinstellungen in einem Konfigurationsfile oder das Nichtvorhandensein von bestimmten SystemRessourcen sind zwei Beispiele. Sollte sparsam verwendet werden, damit die Warnungen auch beachtet werden. ERROR: Fehler, die zum Abbruch eines Vorgangs oder zum Herunterfahren eines Systems führen 66
Oft kann es nützlich sein, die Log Levels einzelner Logger im laufenden Betrieb ändern zu können. So kann zum Beispiel nach dem Ausliefern neuer Feature ein tieferes Log Level gewählt werden (d.h. mehr geloggt werden), um Probleme rasch erkennen und beheben zu können. Später kann dann der Log Level erhöht werden (also weniger geloggt werden), um Ressourcen zu schonen.
Verschiedene Anforderungen ●
Als Entwickler möchte ich nachvollziehen können, wie oft ressourcenintensive Methoden aufgerufen werden, um Performanceengpässe zu erkennen. ● Als Systemadministrator möchte ich über Netzwerkprobleme informiert werden, um geeignete Gegenmassnahmen durchführen zu können. ● Als Systemadministrator möchte ich wissen ob das Starten und Stoppen der Applikation erfolgreich durchgeführt wurde, damit ich den Fortschritt von Deploymentprozessen überwachen kann. ● Als Supporter möchte ich die Aktionen eines Benutzers nachvollziehen können, um ihm bei Problemen schnell helfen zu können.
67