microservices für .net entwickler - bridgingit...

Post on 27-May-2020

22 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Microservices für .Net Entwickler

01.06.2017 .Net Developer Group Ulm Bilder: www.dreamstime.com

Tobias Meier, BridgingIT GmbH, Lead Softwarearchitekt Microsoft

Wir bringen Dinge zusammen

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

Copyright © BridgingIT GmbH | Autor: Tobias Meier | Juni 2017 | www.bridging-it.de

Lead Softwarearchitekt Microsoft

http://blog.bridging-it.de/author/Tobias.Meier Tobias.Meier@bridging-it.de @bitTobiasMeier

Tobias Meier

Agenda

Status quo

Was sind Microservices ?

Hello World

Pause

Service Fabric Cluster

Entwickeln für Service Fabric 1

Entwickeln für Service Fabric 2

Wer entwickelt bereits

Microservices ?

Monolitische Architektur

Skalierung über Hardware

bzw. VMs <=> DB Locks

Schichten Architektur

Wächst und wächst …

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 ihre

Fallstricke …

Komplexität von verteilten Anwendungen

Gesamtanwendung hat viele Abhängigkeiten

Komplexität der Orchestrierung

Daten-Konsistenz

Ermittlung des Bounded Context

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

unktionale

Skalie

rung

Microservices mit C#

Azure Functions: https://functions.azure.com/try

AWS Lambda https://aws.amazon.com/de/visualstudio/

Container Services: http://aka.ms/acs

Service Fabric

Function as a Service (FaaS)

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

Naming Service

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

Naming Service

Build 2017: Roadmap

Reliable Actor und Reliable Services in Container verwendbar.

State-Management für Container

Service Fabric: Platform as a service

Microsoft nutzt Service Fabric:

Azure Sql DatabaseCortanaCosmos DbEvent Hubs IoT-SuiteSkype for BusinessDynamicsPower BI Intune

Service Fabric: Platform as a service

Microsoft nutzt Service Fabric:

Azure Sql DatabaseCortanaCosmos DbEvent Hubs IoT-SuiteSkype for BusinessDynamicsPower BI Intune

Build 2017

30 % of Azure cores run Service Fabric

Designed for mission critical tier 1 workloads

Visual Studio immer als Admin starten

Beispiel ModuleHello World

Web API ProjektRNDemo

Lokales Cluster

Beispiel ModuleDemo der fertigen Anwendung

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.

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

rfaces

Ph

oto

Db

.

Inte

rfaces

Me

mb

erM

anagem

ent.

Inte

rfaces

Ph

oto

Man

agemen

t.

Inte

rfaces

Ports: 8443

Co

nso

le.C

lien

tP

ho

toA

ward

Ap

p(A

ngu

lar2)

API-Gateway

Azu

re C

ogn

itive Service

s

PhotoAward.PhotoDb

Stateless Service

Thu

mb

naiil.

Inte

rfaces

Asynchrone Aufrufe Asynchrone Aufrufe aus einem Reminder,

werden im Fehlerfall wiederholt.

Co

smo

sDb

Service Cluster Lokal

Entwicklungs-Cluster

http://localhost:19080/

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

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 = ActorProxy.Create<IPhotoActor>(photoActorId,

"fabric:/PhotoAward/PhotoActorService" );

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

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: Tobias.Meier@bridging-it.de Twitter: @bITTobiasMeier

Blog: http://blog.bridging-it.de/author/Tobias.Meier

Bilder: www.dreamstime.com

top related