SlideShare a Scribd company logo
1 of 56
Download to read offline
Jak Service Fabric rozwiąże twoje
problemy z microservicami?
Krzysztof „Jakub” Sikora
Monolit Mikroserwisy
JEDNO
NARZĘDZIE,
KTÓRE ROZWIĄŻE
TWOJE PROBLEMY
Z
MIKROSERWISAMI
ZOBACZ MEMY >>
źródło obrazka: https://thenounproject.com/term/poop/43299/
Jakub Sikora
▪ Programuje w chmurze
▪ Prelegent / szkoleniowiec
▪ dostarczajwartosc.pl / gruba.it
Dlaczego mikroserwisy mogą boleć?
źródło: https://pl.pinterest.com/pin/169940585924496451/
Komunikacja
źródło: pixabay.com
Diagnostyka
źródło: pixabay.com
Zdalny stan
źródło: https://www.imperva.com/blog/2017/12/database-security-at-cloud-scale/
Żeby tak mieć narzędzie, które pasuje do
mikroserwisów
Źródło: pixabay.com
Service Fabric – “Microservices SDK”
Komunikacja
źródło: pixabay.com
Model komunikacyjny od zera
źródło: pixabay.com
Problemy w komunikacji
Performance
źródło: https://tenor.com/view/lag-gif-8587515
Problemy w komunikacji
Fault tolerance
Gotowy model komunikacji w Service Fabric
▪ Fault Handling
▪ Konfigurowalne
▪ Wygodne, gotowe i optymalne rozwiązanie dla wielu protokołów
źródło: buildazure.com
var myServicePartitionClient = new ServicePartitionClient<MyCommunicationClient>(
_myCommunicationClientFactory,
"fabric:/MyApp/MyService",
myPartitionKey);
var result = await myServicePartitionClient.InvokeWithRetryAsync(async (client) => {
// Communicate!
}, CancellationToken.None);
Service Partition Client
IMyService myService =
ServiceProxy.Create<IMyService>(
new Uri("fabric:/MyApp/MyService")
);
await myService.HelloWorldAsync();
Service Remoting
Co trzeba zrobić, żeby zacząć korzystać z komunikacji w SF?
▪ Dodanie listenera do klasy Service’u
▪ Dodanie endpointa w konfiguracji
źródło: pixabay.com
internal sealed class MyService : StatelessService, IMyService
{
public MyService(StatelessServiceContext context)
: base(context)
{}
public async Task HelloWorldAsync()
{
//do something
}
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) };
}
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
}
internal sealed class MyService : StatelessService, IMyService
{
public MyService(StatelessServiceContext context)
: base(context)
{}
public async Task HelloWorldAsync()
{
//do something
}
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) };
}
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
}
internal sealed class MyService : StatelessService, IMyService
{
public MyService(StatelessServiceContext context)
: base(context)
{}
public async Task HelloWorldAsync()
{
//do something
}
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) };
}
protected override async Task RunAsync(CancellationToken cancellationToken)
{
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="MyService"
Version="1.0"
xmlns="http://schemas.microsoft.com/2011/01/fabric"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServiceTypes>
<StatelessServiceType ServiceTypeName="MyServiceType" />
</ServiceTypes>
<CodePackage Name="Code" Version="1.0">
<EntryPoint>
<ExeHost>
<Program>MyService.exe</Program>
</ExeHost>
</EntryPoint>
</CodePackage>
<ConfigPackage Name="Config" Version="1.0" />
<Resources>
<Endpoints>
<Endpoint Name="WebServiceEndpoint" Protocol="http" Port="80" />
<Endpoint Name="OtherServiceEndpoint" Protocol="tcp" Port="8505" />
</Endpoints>
</Resources>
</ServiceManifest>
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="MyService"
Version="1.0"
xmlns="http://schemas.microsoft.com/2011/01/fabric"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServiceTypes>
<StatelessServiceType ServiceTypeName="MyServiceType" />
</ServiceTypes>
<CodePackage Name="Code" Version="1.0">
<EntryPoint>
<ExeHost>
<Program>MyService.exe</Program>
</ExeHost>
</EntryPoint>
</CodePackage>
<ConfigPackage Name="Config" Version="1.0" />
<Resources>
<Endpoints>
<Endpoint Name="WebServiceEndpoint" Protocol="http" Port="80" />
<Endpoint Name="OtherServiceEndpoint" Protocol="tcp" Port="8505" />
</Endpoints>
</Resources>
</ServiceManifest>
IMyService myService =
ServiceProxy.Create<IMyService>(new
Uri("fabric:/MyApp/MyService"));
await myService.HelloWorldAsync();
ABSTRAKCJA, DI I MOŻNA UŻYWAĆ
Diagnostyka
źródło: pixabay.com
Diagnostyka jest ważna
Tu była przyczyna
błędu
Tu był błąd
ffffasfasfas
Jacob, do you
know what is the cause of
this error?
Diagnostyka jest ważna
Diagnostyka jest ważna
Diagnostyka jest ważna
Diagnostyka jest ważna
Jak Service Fabric chroni nas przed łzami?
źródło: buildazure.com
Service Fabric Explorer
Szybkie logowanie z ETW
Azure Storage Account
Application
Insights
Install-Package Microsoft.Diagnostics.EventFlow.Output.ApplicationInsights
eventFlowConfig.json
"outputs": [
{
"type": "ApplicationInsights",
"instrumentationKey": "***ADD INSTRUMENTATION
KEY HERE***„
}
]
źródło: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-diagnostics-event-analysis-appinsights
Zdalny stan
źródło: https://www.imperva.com/blog/2017/12/database-security-at-cloud-scale/
JAK ZROBIĆ CACHE W SKALOWALNYCH, BEZSTANOWYCH
SERWISACH?
Może Redis?
Może Redis?
▪ Dodatkowe koszty
▪ Dodatkowa zależność
▪ Dodatkowy czas na
integrację
Inne rozwiązanie? STANOWE serwisy w Service
Fabric
źródło: buildazure.com
Co dają stanowe serwisy w Service Fabric?
▪ Bardzo szybkie
▪ Brak dodatkowych zależności
▪ Zintegrowane z ekosystemem
źródło: pixabay.com
internal sealed class TestService : StatefulService, IMyService
{
private IReliableDictionary<string, string> _someCache;
private const string CacheName = "SomeCache";
public TestService(StatefulServiceContext context, IReliableDictionary<string, string>
someCache)
: base(context)
{
_someCache = someCache;
}
public async Task<string> GetValue(string key) {...}
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
=> new ServiceReplicaListener[0];
protected override async Task RunAsync(CancellationToken cancellationToken)
{
_someCache = await StateManager.GetOrAddAsync<IReliableDictionary<string,
string>>(CacheName);
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
}
internal sealed class TestService : StatefulService, IMyService
{
private IReliableDictionary<string, string> _someCache;
private const string CacheName = "SomeCache";
public TestService(StatefulServiceContext context, IReliableDictionary<string, string>
someCache)
: base(context)
{
_someCache = someCache;
}
public async Task<string> GetValueAsync(string key) {...}
protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners()
=> new ServiceReplicaListener[0];
protected override async Task RunAsync(CancellationToken cancellationToken)
{
_someCache = await StateManager.GetOrAddAsync<IReliableDictionary<string,
string>>(CacheName);
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken);
}
}
}
public async Task<string> GetValueAsync(string key)
{
using (ITransaction transaction = StateManager.CreateTransaction())
{
bool valueCached = await _someCache.ContainsKeyAsync(transaction, key);
if (!valueCached)
{
return GetFromOldDb(key);
}
ConditionalValue<string> cachedValue = await _someCache.TryGetValueAsync(transaction,
key);
return cachedValue.HasValue
? GetFromOldDb(key)
: cachedValue.Value;
}
}
JAK UŻYĆ TEGO SERWISU W INNEJ CZĘŚCI SYSTEMU?
var myServicePartitionClient = new ServicePartitionClient<MyCommunicationClient>(
_myCommunicationClientFactory,
"fabric:/MyApp/TestService",
myPartitionKey);
var result = await myServicePartitionClient.InvokeWithRetryAsync(async (client) => {
await client.GetValueAsync("key");
}, CancellationToken.None);
Używając metod komunikacji w Service Fabric
IMyService myService =
ServiceProxy.Create<IMyService>(new Uri("fabric:/MyApp/Testervice"));
string value = await myService.GetValueAsync("key");
Architektura mikroserwisów sprawiała nam sporo
problemów
źródło: pixabay.com
Service Fabric eliminuje wiele problemów i
odpowiedzialności
źródło: buildazure.com
Jak zacząć nastepny projekt w Service Fabric?
▪ Service Fabric SDK i rozszerzenie Azure do VS
▪ Wybierz template, który Cię interesuje
▪ Zacznij pisać – gotowy przykład u mnie na blogu (link do
materiałów zaraz)
źródło: buildazure.com
Krzysztof „Jakub” Sikora
Jak Service Fabric rozwiąże twoje problemy z
microservicami?
ksikora@future-processing.com
fdd.gruba.it

More Related Content

Similar to [FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mikroserwisami?

PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDNPLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDNPROIDEA
 
[CareerCon] as-a-Service czy Software Defined (PL)
[CareerCon] as-a-Service czy Software Defined (PL)[CareerCon] as-a-Service czy Software Defined (PL)
[CareerCon] as-a-Service czy Software Defined (PL)Jaroslaw Sobel
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wojciech Barczyński
 
Certyfikacja_a_kariera_w_IT_SelfCaseStudy
Certyfikacja_a_kariera_w_IT_SelfCaseStudyCertyfikacja_a_kariera_w_IT_SelfCaseStudy
Certyfikacja_a_kariera_w_IT_SelfCaseStudyTobias Koprowski
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychWydawnictwo Helion
 
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...cieszak
 
Certyfikacja_a_Kariera_IT_SelfCaseStudy
Certyfikacja_a_Kariera_IT_SelfCaseStudyCertyfikacja_a_Kariera_IT_SelfCaseStudy
Certyfikacja_a_Kariera_IT_SelfCaseStudyTobias Koprowski
 
Piotr maczuga sztuka wspolpracy na odleglosc
Piotr maczuga   sztuka wspolpracy na odlegloscPiotr maczuga   sztuka wspolpracy na odleglosc
Piotr maczuga sztuka wspolpracy na odlegloscMamStartup
 
Delphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweDelphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweWydawnictwo Helion
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Lukasz Kaluzny
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaWydawnictwo Helion
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieWydawnictwo Helion
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraWydawnictwo Helion
 
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDG
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDGAplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDG
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDGJarek Sokolnicki
 
Serverless w Azure, czyli Azure Functions
Serverless w Azure, czyli Azure FunctionsServerless w Azure, czyli Azure Functions
Serverless w Azure, czyli Azure FunctionsLukasz Kaluzny
 
Sieci VPN. Zdalna praca i bezpieczeństwo danych
Sieci VPN. Zdalna praca i bezpieczeństwo danychSieci VPN. Zdalna praca i bezpieczeństwo danych
Sieci VPN. Zdalna praca i bezpieczeństwo danychWydawnictwo Helion
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaWydawnictwo Helion
 

Similar to [FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mikroserwisami? (20)

PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDNPLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
PLNOG19 - Krzysztof Banel - Nowe modele bezpieczeństwa w sieciach SDN
 
Azuredevops
AzuredevopsAzuredevops
Azuredevops
 
[CareerCon] as-a-Service czy Software Defined (PL)
[CareerCon] as-a-Service czy Software Defined (PL)[CareerCon] as-a-Service czy Software Defined (PL)
[CareerCon] as-a-Service czy Software Defined (PL)
 
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
Wprowadzenie do Kubernetesa. K8S jako nowy Linux.
 
Certyfikacja_a_kariera_w_IT_SelfCaseStudy
Certyfikacja_a_kariera_w_IT_SelfCaseStudyCertyfikacja_a_kariera_w_IT_SelfCaseStudy
Certyfikacja_a_kariera_w_IT_SelfCaseStudy
 
Spring. Zapiski programisty
Spring. Zapiski programistySpring. Zapiski programisty
Spring. Zapiski programisty
 
ASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowychASP.NET 2.0. Projektowanie aplikacji internetowych
ASP.NET 2.0. Projektowanie aplikacji internetowych
 
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...
Olsztyński Dzień Informatyki - Chmura Azure dla specjalistów IT. Mamy się jej...
 
Certyfikacja_a_Kariera_IT_SelfCaseStudy
Certyfikacja_a_Kariera_IT_SelfCaseStudyCertyfikacja_a_Kariera_IT_SelfCaseStudy
Certyfikacja_a_Kariera_IT_SelfCaseStudy
 
Piotr maczuga sztuka wspolpracy na odleglosc
Piotr maczuga   sztuka wspolpracy na odlegloscPiotr maczuga   sztuka wspolpracy na odleglosc
Piotr maczuga sztuka wspolpracy na odleglosc
 
Wirtualizacja
WirtualizacjaWirtualizacja
Wirtualizacja
 
Delphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetoweDelphi. Techniki bazodanowe i internetowe
Delphi. Techniki bazodanowe i internetowe
 
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
Jak zbudować aplikacje z wykorzystaniem funkcjonalności windows server 2016...
 
Microsoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga ekspertaMicrosoft Visual Basic .NET 2003. Księga eksperta
Microsoft Visual Basic .NET 2003. Księga eksperta
 
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w JavieSpring Framework. Profesjonalne tworzenie oprogramowania w Javie
Spring Framework. Profesjonalne tworzenie oprogramowania w Javie
 
Microsoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratoraMicrosoft Access. Podręcznik administratora
Microsoft Access. Podręcznik administratora
 
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDG
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDGAplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDG
Aplikacje i serwisy intranetowe w chmurze publicznej - transkrypt webinarium IDG
 
Serverless w Azure, czyli Azure Functions
Serverless w Azure, czyli Azure FunctionsServerless w Azure, czyli Azure Functions
Serverless w Azure, czyli Azure Functions
 
Sieci VPN. Zdalna praca i bezpieczeństwo danych
Sieci VPN. Zdalna praca i bezpieczeństwo danychSieci VPN. Zdalna praca i bezpieczeństwo danych
Sieci VPN. Zdalna praca i bezpieczeństwo danych
 
Visual Basic .NET. Encyklopedia
Visual Basic .NET. EncyklopediaVisual Basic .NET. Encyklopedia
Visual Basic .NET. Encyklopedia
 

More from Future Processing

DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfDPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfFuture Processing
 
DPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfDPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfFuture Processing
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfFuture Processing
 
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurzeFuture Processing
 
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shakeFuture Processing
 
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myśleniaFuture Processing
 
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletkaFuture Processing
 
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...Future Processing
 
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny BlockchainFuture Processing
 
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈XFuture Processing
 
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...Future Processing
 
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NETFuture Processing
 
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...Future Processing
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...Future Processing
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark ApplicationsFuture Processing
 
[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test AutomationFuture Processing
 
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software TesterFuture Processing
 
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOpsFuture Processing
 
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)Future Processing
 
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minutFuture Processing
 

More from Future Processing (20)

DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdfDPTO_Inżynieria oprogramowania to proces uczenia się.pdf
DPTO_Inżynieria oprogramowania to proces uczenia się.pdf
 
DPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdfDPTO_QA w świecie wartości biznesowych.pdf
DPTO_QA w świecie wartości biznesowych.pdf
 
DPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdfDPTO_Hello_Clean_Architekture.pdf
DPTO_Hello_Clean_Architekture.pdf
 
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
[Quality Meetup #20] Michał Górski - Continuous Deployment w chmurze
 
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
[Quality Meetup #20] Dorota Tadych - Hyperion - wystarczy jeden shake
 
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
[Quality Meetup #19] Magdalena Drechsler-Nowak - Tester w pułapce myślenia
 
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
[Quality Meetup #19] Adrian Gonciarz - Testerska ruletka
 
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
[FDD 2018] Ł. Turchan, A. Hulist, M. Duchnowski - CUDA - results over coffee ...
 
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain[FDD 2018] Lech Kalinowski - Prywatny Blockchain
[FDD 2018] Lech Kalinowski - Prywatny Blockchain
 
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
[FDD 2018] W. Malara, K. Kotowski - Autoenkodery – czyli zalety funkcji F(X)≈X
 
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
[FDD 2018] Jarosław Ogiegło - Ludzie, zabezpieczajcie się! Wprowadzenie do OA...
 
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
[JuraSIC! Meetup] Mateusz Stasch - Monady w .NET
 
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
[QE 2018] Aleksandra Kornecka – Kognitywne podejście do testowania aplikacji ...
 
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
[QE 2018] Adam Stasiak – Nadchodzi React Native – czyli o testowaniu mobilnyc...
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
 
[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation[QE 2018] Marek Puchalski – Web Application Security Test Automation
[QE 2018] Marek Puchalski – Web Application Security Test Automation
 
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester[QE 2018] Rob Lambert – How to Thrive as a Software Tester
[QE 2018] Rob Lambert – How to Thrive as a Software Tester
 
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
[QE 2018] Paul Gerrard – Automating Assurance: Tools, Collaboration and DevOps
 
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)
[QE 2018] Arnika Hryszko – Testy, które tworzą się same (prawie)
 
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut
[QE 2018] Przemysław Sech – Software Quality Assistance w 40 minut
 

[FDD 2018] Krzysztof Sikora - Jak Service Fabric rozwiąże twoje problemy z mikroserwisami?

  • 1. Jak Service Fabric rozwiąże twoje problemy z microservicami? Krzysztof „Jakub” Sikora
  • 2. Monolit Mikroserwisy JEDNO NARZĘDZIE, KTÓRE ROZWIĄŻE TWOJE PROBLEMY Z MIKROSERWISAMI ZOBACZ MEMY >> źródło obrazka: https://thenounproject.com/term/poop/43299/
  • 3. Jakub Sikora ▪ Programuje w chmurze ▪ Prelegent / szkoleniowiec ▪ dostarczajwartosc.pl / gruba.it
  • 4. Dlaczego mikroserwisy mogą boleć? źródło: https://pl.pinterest.com/pin/169940585924496451/
  • 8. Żeby tak mieć narzędzie, które pasuje do mikroserwisów Źródło: pixabay.com
  • 9. Service Fabric – “Microservices SDK”
  • 11. Model komunikacyjny od zera źródło: pixabay.com
  • 12. Problemy w komunikacji Performance źródło: https://tenor.com/view/lag-gif-8587515
  • 14. Gotowy model komunikacji w Service Fabric ▪ Fault Handling ▪ Konfigurowalne ▪ Wygodne, gotowe i optymalne rozwiązanie dla wielu protokołów źródło: buildazure.com
  • 15. var myServicePartitionClient = new ServicePartitionClient<MyCommunicationClient>( _myCommunicationClientFactory, "fabric:/MyApp/MyService", myPartitionKey); var result = await myServicePartitionClient.InvokeWithRetryAsync(async (client) => { // Communicate! }, CancellationToken.None); Service Partition Client
  • 16. IMyService myService = ServiceProxy.Create<IMyService>( new Uri("fabric:/MyApp/MyService") ); await myService.HelloWorldAsync(); Service Remoting
  • 17. Co trzeba zrobić, żeby zacząć korzystać z komunikacji w SF? ▪ Dodanie listenera do klasy Service’u ▪ Dodanie endpointa w konfiguracji źródło: pixabay.com
  • 18. internal sealed class MyService : StatelessService, IMyService { public MyService(StatelessServiceContext context) : base(context) {} public async Task HelloWorldAsync() { //do something } protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) }; } protected override async Task RunAsync(CancellationToken cancellationToken) { while (true) { cancellationToken.ThrowIfCancellationRequested(); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } }
  • 19. internal sealed class MyService : StatelessService, IMyService { public MyService(StatelessServiceContext context) : base(context) {} public async Task HelloWorldAsync() { //do something } protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) }; } protected override async Task RunAsync(CancellationToken cancellationToken) { while (true) { cancellationToken.ThrowIfCancellationRequested(); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } }
  • 20. internal sealed class MyService : StatelessService, IMyService { public MyService(StatelessServiceContext context) : base(context) {} public async Task HelloWorldAsync() { //do something } protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners() { return new[] { new ServiceInstanceListener(CreateServiceRemotingListener) }; } protected override async Task RunAsync(CancellationToken cancellationToken) { while (true) { cancellationToken.ThrowIfCancellationRequested(); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } }
  • 21. <?xml version="1.0" encoding="utf-8"?> <ServiceManifest Name="MyService" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceTypes> <StatelessServiceType ServiceTypeName="MyServiceType" /> </ServiceTypes> <CodePackage Name="Code" Version="1.0"> <EntryPoint> <ExeHost> <Program>MyService.exe</Program> </ExeHost> </EntryPoint> </CodePackage> <ConfigPackage Name="Config" Version="1.0" /> <Resources> <Endpoints> <Endpoint Name="WebServiceEndpoint" Protocol="http" Port="80" /> <Endpoint Name="OtherServiceEndpoint" Protocol="tcp" Port="8505" /> </Endpoints> </Resources> </ServiceManifest>
  • 22. <?xml version="1.0" encoding="utf-8"?> <ServiceManifest Name="MyService" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceTypes> <StatelessServiceType ServiceTypeName="MyServiceType" /> </ServiceTypes> <CodePackage Name="Code" Version="1.0"> <EntryPoint> <ExeHost> <Program>MyService.exe</Program> </ExeHost> </EntryPoint> </CodePackage> <ConfigPackage Name="Config" Version="1.0" /> <Resources> <Endpoints> <Endpoint Name="WebServiceEndpoint" Protocol="http" Port="80" /> <Endpoint Name="OtherServiceEndpoint" Protocol="tcp" Port="8505" /> </Endpoints> </Resources> </ServiceManifest>
  • 23. IMyService myService = ServiceProxy.Create<IMyService>(new Uri("fabric:/MyApp/MyService")); await myService.HelloWorldAsync(); ABSTRAKCJA, DI I MOŻNA UŻYWAĆ
  • 25. Diagnostyka jest ważna Tu była przyczyna błędu Tu był błąd
  • 26. ffffasfasfas Jacob, do you know what is the cause of this error? Diagnostyka jest ważna
  • 30. Jak Service Fabric chroni nas przed łzami? źródło: buildazure.com
  • 32.
  • 33.
  • 34.
  • 38. Install-Package Microsoft.Diagnostics.EventFlow.Output.ApplicationInsights eventFlowConfig.json "outputs": [ { "type": "ApplicationInsights", "instrumentationKey": "***ADD INSTRUMENTATION KEY HERE***„ } ]
  • 41. JAK ZROBIĆ CACHE W SKALOWALNYCH, BEZSTANOWYCH SERWISACH?
  • 43. Może Redis? ▪ Dodatkowe koszty ▪ Dodatkowa zależność ▪ Dodatkowy czas na integrację
  • 44. Inne rozwiązanie? STANOWE serwisy w Service Fabric źródło: buildazure.com
  • 45.
  • 46. Co dają stanowe serwisy w Service Fabric? ▪ Bardzo szybkie ▪ Brak dodatkowych zależności ▪ Zintegrowane z ekosystemem źródło: pixabay.com
  • 47.
  • 48. internal sealed class TestService : StatefulService, IMyService { private IReliableDictionary<string, string> _someCache; private const string CacheName = "SomeCache"; public TestService(StatefulServiceContext context, IReliableDictionary<string, string> someCache) : base(context) { _someCache = someCache; } public async Task<string> GetValue(string key) {...} protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() => new ServiceReplicaListener[0]; protected override async Task RunAsync(CancellationToken cancellationToken) { _someCache = await StateManager.GetOrAddAsync<IReliableDictionary<string, string>>(CacheName); while (true) { cancellationToken.ThrowIfCancellationRequested(); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } }
  • 49. internal sealed class TestService : StatefulService, IMyService { private IReliableDictionary<string, string> _someCache; private const string CacheName = "SomeCache"; public TestService(StatefulServiceContext context, IReliableDictionary<string, string> someCache) : base(context) { _someCache = someCache; } public async Task<string> GetValueAsync(string key) {...} protected override IEnumerable<ServiceReplicaListener> CreateServiceReplicaListeners() => new ServiceReplicaListener[0]; protected override async Task RunAsync(CancellationToken cancellationToken) { _someCache = await StateManager.GetOrAddAsync<IReliableDictionary<string, string>>(CacheName); while (true) { cancellationToken.ThrowIfCancellationRequested(); await Task.Delay(TimeSpan.FromSeconds(1), cancellationToken); } } }
  • 50. public async Task<string> GetValueAsync(string key) { using (ITransaction transaction = StateManager.CreateTransaction()) { bool valueCached = await _someCache.ContainsKeyAsync(transaction, key); if (!valueCached) { return GetFromOldDb(key); } ConditionalValue<string> cachedValue = await _someCache.TryGetValueAsync(transaction, key); return cachedValue.HasValue ? GetFromOldDb(key) : cachedValue.Value; } }
  • 51. JAK UŻYĆ TEGO SERWISU W INNEJ CZĘŚCI SYSTEMU?
  • 52. var myServicePartitionClient = new ServicePartitionClient<MyCommunicationClient>( _myCommunicationClientFactory, "fabric:/MyApp/TestService", myPartitionKey); var result = await myServicePartitionClient.InvokeWithRetryAsync(async (client) => { await client.GetValueAsync("key"); }, CancellationToken.None); Używając metod komunikacji w Service Fabric IMyService myService = ServiceProxy.Create<IMyService>(new Uri("fabric:/MyApp/Testervice")); string value = await myService.GetValueAsync("key");
  • 53. Architektura mikroserwisów sprawiała nam sporo problemów źródło: pixabay.com
  • 54. Service Fabric eliminuje wiele problemów i odpowiedzialności źródło: buildazure.com
  • 55. Jak zacząć nastepny projekt w Service Fabric? ▪ Service Fabric SDK i rozszerzenie Azure do VS ▪ Wybierz template, który Cię interesuje ▪ Zacznij pisać – gotowy przykład u mnie na blogu (link do materiałów zaraz) źródło: buildazure.com
  • 56. Krzysztof „Jakub” Sikora Jak Service Fabric rozwiąże twoje problemy z microservicami? ksikora@future-processing.com fdd.gruba.it