Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Microservices für .Net Entwickler
Tobias Meier
Lead Softwarearchitekt Microsoft
Standort Nürnberg
Königtorgraben 11
90402 Nürnberg
Standort Zug/Schweiz
Baarerstraße 14
CH-6300 Zug
Standort Mannheim
N7, 5-6
68161 Mannheim
Standort Karlsruhe
Rüppurrer Straße 4
76137 Karlsruhe
Standort Stuttgart
Marienstraße 17
70178 Stuttgart
Standort München
Riesstraße 12
80992 München
Standort Frankfurt
Solmsstraße 4
60486 Frankfurt
Standort Köln
Martinstraße 3
50667 Köln
Wir bringen Dinge zusammen
http://blog.bridging-it.de/author/Tobias.Meier [email protected] @bitTobiasMeier
„
Agenda
Status quo
Was sind Microservices
Service Fabric Cluster
Entwickeln für Service Fabric 1
Pause: Essen
Entwickeln für Service Fabric 2
Wer entwickelt bereits
Microservices ?
Monolitische Architektur
Schichten Architektur
Wächst und wächst …
Skalierung über Hardware
bzw. VMs <=> DB Locks
Microservice = SOA Done right
= SOA + DDD + Patterns
Patterns: Autonome Services, Bounded Context, Event Driven Design, Continuous Delivery, …
Microservice-Architektur
Kleine, unabhängige Services
Eigener Prozess
Leichtgewichtige Kommunikation
Unabhängige, automatisierte Installation
Verschiedene Technologien und/oder Programmiersprachen möglich
Unabhängige Datenspeicherung
Minimaler zentralisierter Managementaufwand
“In short the microservice architectural style [...] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies. “
Martin Fowler, https://martinfowler.com/articles/microservices.html
„Ok, dann teilen wir unseren Monolithen in hunderte Services auf.“
Auch verteilte Anwendungen haben Nachteile …
Komplexität von verteilten Anwendungen
Gesamtanwendung hat viele Abhängigkeiten
Komplexität der Orchestrierung
Daten-Konsistenz
Höherer Entwicklungsaufwand
Kommunikation untereinander
Netzwerklatenz
Versionierung von Schnittstellen
Abwärtskompatibilität
Welche Version ist installiert ?
Testbarkeit ist schwerer
The Art of Scalability: Scale Cube
http://theartofscalability.com/
X: Horizontale Skalierung
Y: F
un
ktio
na
le S
ka
lieru
ng
Microservices in der Microsoft-Welt
Container Services: http://aka.ms/acs
Azure Functions: https://functions.azure.com/try
Service Fabric
Aufbau Service Fabric
Microservice
WebAppOwin
Microservice
WebAppAsp.Net Core
Windows Container
Guest Executable
Reliable Actor API Reliable Service API
Service Fabric
On-Premise Azure
Windows Server LinuxWindows Server Linux
Microservice
Java
Microservice
Hosted in Container
Service Fabric: Platform as a service
Microsoft nutzt Service Fabric:
Azure Core Infrastructure
Azure Sql Database
Bing Cortana
Document Db
Event Hubs
IoT-Suite
Skype for Business
Beispielanwendung
Benutzer kann sich registrieren
Thumbnails von Fotos werden angezeigt
Fotos können hochgeladen werden.
Aktuell nur Command-Line-Interface: Benutzer wählt ein Foto aus und bewertet es.. Zusätzlich können auch Kommentare geschrieben werden.
Angedacht: Wenn ein Foto im Detail aufgerufen wird, werden alle
Kommentare angezeigt. Authentification / Authorization
Beispiel ModuleDemo der fertigen Anwendung
Service Fabric
PhotoAward.Platform
StatelessWebApi und
Fileserver
PhotoAward.MemberManagement
Statefull Service
PhotoAward.PhotoManagement
Statefull Service
PhotoAward.Thumbnail
Stateless Service
PhotoAward.PhotoActor
Actor Service
PhotoAward.MemberActor
Actor Service
Me
mb
erA
ctor.
Inte
rfaces
Ph
oto
Acto
r.
Inte
rfacesTh
um
bn
aiil.
Inte
rfaces
Me
mb
erM
anagem
ent.
Inte
rfaces
Ph
oto
Man
agemen
t.
Inte
rfaces
Ports: 8200, 8443
Co
nso
le.C
lien
tP
ho
toA
ward
Ap
p(A
ngu
lar2)
API-Gateway
Service Cluster On Azure
https://github.com/Microsoft/azure-docs/blob/master/articles/service-fabric/service-
fabric-cluster-creation-via-portal.md
Vorbereitungen
Evtl. Ressourcengruppe
erstellen
Evtl. Key Vault anlegen
Zertifikat eintragen
Durchführung
Service Fabric Wizard starten
Vorbereitungen: Key Vault
LoginPS C:\> Login-AzureRmAccount
Key Vault anlegen PS C:\> New-AzureRmKeyVault -VaultName 'westeuropeVault' -
ResourceGroupName 'servicefabricdemo' -Location 'Westeurope' –EnabledForDeployment
Vault Name : westeuropevault
Resource Group Name : servicefabricdemo
Location : Westeurope
Resource ID : /subscriptions/00000000-0000-0000-0000-
000000000000/resourceGroups/servicefabricdemo
/providers/Microsoft.KeyVault/vaults/westeuropevault
Vault URI : https://westeuropevault.vault.azure.net
Tenant ID : 11111111-1111-1111-1111-111111111111
Vorbereitungen: Testzertifikat hinzufügen
Download Hilfsskripte: https://github.com/ChackDan/Service-Fabric/tree/master/Scripts/ServiceFabricRPHelpers
ImportPS C:\> Import-Module "C:\Projekte\Service-Fabric-
master\Scripts\ServiceFabricRPHelpers\ServiceFabricRPH
Testzertifikat erzeugenPS C:\> Invoke-AddCertToKeyVault -SubscriptionId
$SubID -ResourceGroupName "servicefabricdemo" -Location "westeurope"
-VaultName "mywesteuropevault"
-CertificateName "bitdemophotoappcertificate1"
-CreateSelfSignedCertificate
-DnsName "bitdemophotoawardapp.westeurope.cloudapp.azure.com"
-OutputPath "c:\Certificates"
Vorbereitungen: Testzertifikat hinzugefügt
Name : CertificateThumbprint
Value : 885BE4B2E6F80FD32A022E5087B2EAE5311FDEB8
Name : SourceVault
Value : /subscriptions/00000000-0000-0000-0000-
000000000000/resourceGroups/servicefabricdemo/providers/Microsoft.KeyVau
lt/vaults/westeuropevault
Name : CertificateURL
Value :
https://westeuropevault.vault.azure.net:443/secrets/bitdemophotoappcertif
icate1/22223333222222221111222211112222
Service Fabric Cluster anlegen (1 / 5)
Service Fabric Cluster anlegen (2 / 5)
Service Fabric Cluster anlegen (3 / 5)
Service Fabric Cluster anlegen (4 / 5)
Service Fabric Cluster anlegen (5 / 5)
Stateless Service
Zustandsloser Service
Typisches Modell für heutige Webanwendungen
Daten können extern gehalten werdenSql Datenbank
DocumentDB
Azure Storage
Reliable Service API
Stateless oder Statefull Service
Naming Service
Zugriff auf Service Fabric APIs
Modelle zum Data-Upgrade
Zuverlässigkeit
Reliability
Verfügbarkeit
Availability
Skalierbarkeit
Scalability
Beständigkeit
Consistency
Visual Studio immer als Admin starten
Beispiel ModuleHello World
Web API ProjektRNDemo
Lokales Cluster
Statefull Service
Zustand bleibt auch nach Neustart erhalten
Synchronisation über Replicas
StateManager
Reliable Collection
Transaktionen
Beispiel ModuleStatefull Service
Reliable Collectionsusing (var tx = StateManager.CreateTransaction()){
var members = await StateManager.GetOrAddAsync<IReliableDictionary<string,Person>>("members");
await members.AddOrUpdateAsync(tx, person.Email, person, (key, p) => person);
person.Email = person.Email.ToUpper();
await tx.CommitAsync();}
ToUpper() wird NICHT übernommen
Reliable Collectionsusing (var tx = StateManager.CreateTransaction()){
var members = await StateManager.GetOrAddAsync<IReliableDictionary<string,Person>>("members");
person.Email = person.Email.ToUpper();
await members.AddOrUpdateAsync(tx, person.Email, person, (key, p) => person);
await tx.CommitAsync();}
ToUpper() wird übernommen
Tipp: Objekte sollten Immutable sein
Private Setter
System.Collections.Immutable
https://www.nuget.org/packages/System.Collections.Immutable
Immutable Collection[DataContract]public sealed class PersonData{public PersonData(string name, IEnumerable<string> emails){this.Name = name;Emails = (emails== null) ? ImmutableList<string>.Empty :emails.ToImmutableList();
}[DataMember] public readonly string Name;[DataMember] public IEnumerable<string> Emails { get; private set; }
[OnDeserialized]private void OnDeserialized(StreamingContext context){Emails = Emails.ToImmutableList();
}}
Reliable Actors
Actor: Lifecycle
Automatisch erzeugt
Können manuell explizit gelöscht werden
Akteuere können „schlafen gelegt“ werden
Knoten 1
Reliable Actors
Partition 1
Partition 2
Partition 3
Knoten 2
Partition 1
Partition 2
Partition 3
Actor Proxy
Knoten 3
Partition 1
Partition 2
Partition 3
Client (Statefull Service, weitere Actor, …)
Actor erzeugen
var data = …
var photoActorId = ActorId.CreateRandom();
var client = this._actorClientFactory.CreateClient(photoActorId);
await client.SetPhoto(data, CancellationToken.None);
Actor löschen
var svc = (IActorService) this.ActorService;
await svc.DeleteActorAsync(this.Id, cancellationToken);
Beispiel ModuleActor-Service
Actor: Timer
Wrapper um .Net Timer
RegisterTimer
Nach Beendigung des Callbacks startet das nächste Zeitfenster
Unregister Timer
„Schlafen gelegte“ Actors erhalten keinen Timeraufruf
Actor: Reminder
Reminders werden auch zu bestimmten Zeitpunkten ausgelöst
Sie werden IMMER ausgelöst
public class ToDoListActor : Actor, IPhotoAwardActor, IRemindable{
public Task ReceiveReminderAsync(string name, byte[] context, TimeSpan dueTime, TimeSpan period){
if (name("Abgabetermin")){
int amountToPay = BitConverter.ToInt32(context, 0);System.Console.WriteLine("Please pay your cell phone bill of ${0}!", amountToPay);
}return Task.FromResult(true);
}}
Beispiel ModuleDemo: Statefull Actor
Dependency Injection und Unit Tests
Asp WebApi kann Dependency Injection verwenden
In sonstigen Services nicht benötigt!
Mock-Klassen für StateManager, ReliableCollections,
Transaktionen u.ä. manuell schreiben
Beispiel ModuleDemo: Unit Testing
Update
Application Version erhöhen
Code Version erhöhen
Evtl. Data Version erhöhen
Continuous Delivery
TFS 2017 und TFS Online Eigene ServiceFabric Tasks für Build
und Release:
Versionsnummer setzen
Deployment
1. Endpunkt im TFS definieren
2. Continous Delivery erzeugen …
3. Build Template bearbeiten
3. Build Template bearbeiten: NPM install
4. Build Template bearbeiten: Angular-CLI-Output verarbeiten
5. Release Template
Backup and Restore
Ableitung vom Actor Service
Methode BackupAsync aufrufen
https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-platform
https://github.com/Microsoft/azure-docs/blob/master/articles/service-fabric/service-fabric-reliable-services-backup-restore.md
Vertrag§1. Service 1 §1.1. Schnittstelle§1.2. Daten
Microservices für .Net Entwickler
Service Fabric bietet leistungsfähige Plattform mit
Z-Scale
Alles hat seinen Preis
Continous Delivery von Anfang an
Clustererstellung skripten
Clusterplanung ist komplex
Microservices für .Net Entwickler
Out of Scope
Authentication und Authorization
Partitionierung der Daten
Backup / Restore
Docker
…
Understanding Azure –a guide vor developers
http://aka.ms/adg
Service Fabric SDK
http://aka.ms/ServiceFabricSDK
Beispiele von Microsoft
http://aka.ms/ServiceFabricSamples
Case Studies
https://blogs.msdn.microsoft.com/azureservicefabric/
tag/case-study/
Beispielanwendung
http://blog.bridging-it.de/author/Tobias.Meier
Vielen Dank
Email: [email protected] Twitter: @bITTobiasMeier
Blog: http://blog.bridging-it.de/author/Tobias.Meier
Bilder: www.dreamstime.com