SlideShare a Scribd company logo
1 of 17
Download to read offline
Quality in Clouds
Michał Dec
Czym jest Voluum Tracker?
1. dedykowany system dla marketingu afiliacyjnego (cloud hosted),
2. prawie 250 mln transakcji obsługiwanych każdego dnia,
3. w szczycie blisko 3500 transakcji na sekundę,
4. serwery w każdym regionie AWS (9 regionów): łącznie ok. 50-55 serwerów,
5. 85GB danych produkcyjnych każdego dnia,
6. 80GB logów z poziomu LB,
7. 8GB logów systemowych,
8. własne rozwiązanie DB
Amazon Webservices
“Amazon Web Services offers a broad set of global compute, storage, database, analytics, application,
and deployment services that help organizations move faster, lower IT costs, and scale applications.”
● Obrazy instancji (AMI)
● Serwery (Elastic Cloud Computing)
● Load Balancing + AutoScaling + Launch Config
● Routing
● S3, SQS, SNS
● DynamoDB
● ….
AWS - 5 razy większy niż 14 pozostałych konkurentów...razem wziętych.
Architektura mikroserwisów
źródło: http://martinfowler.com/articles/microservices.html
Architektura mikroserwisów
Architektura monolityczna:
- wprowadzenie małej zmiany wymaga przebudowy
całego systemu,
- bardzo trudno utrzymać przejrzystą, modularną
strukturę,
- skalowanie - cały system
Architektura mikroserwisów:
- funkcjonalnie wydzielone komponenty,
- izolowany process deploymentu,
- przystosowane do skalowania,
- “Fat JAR”: np. Spring Boot,
- zdecentralizowane zarządzanie
“Rambo Architecture”
1. każdy serwis powinien funkcjonować mimo degradacji serwisów, od których zależy
(przynajmniej przez jakiś czas...),
2. każdy serwis powinien być odporny na degradację jakości odpowiedzi serwisów, od
których zależy,
3. automatyczne analiza w czasie rzeczywistym stanu serwisów - odłączanie
niestabilnych elementów systemu,
4. testy serwisu w sytuacji degradacji zależnych systemów.
cache, failover policy, retry policy, data replication
Serwis zależy od 30 innych serwisów - każdy ma 99,99% uptime -> sam serwis ma
99,7% uptime - 2h downtime każdego miesiąca!
Testowalny system (?)
Problem: niskie pokrycie testami, które są fatalnej jakości a może… system, którego nie
można efektywnie testować!
● powszechny dostęp do kodu źródłowego + kod testów jest kodem produkcyjnym,
● łatwy i przejrzysty proces deploymentu (“Fat JAR”, Spring Boot, AWS deployment),
● reużywalne komponent (commons) + “bill of materials” (BOM) DM,
● przejrzysty proces migracji DB (Flyway),
● przejrzyste i ujednolicone API
Developer + STE
● deployment kilkanaście razy w tygodniu -> nie ma testów manualnych,
● developer odpowiada za swój kod (również o 4 nad ranem:),
● developerzy piszą kod testowy,
● STE odpowiada za architekturę testów (“..tworzy kod, który pozwala developerom
testować swój kod...”)
● bug fixing ma priorytet,
● review + pair programming
Testowanie
1. Testy unitowe (poznajemy funkcjonalność),
2. Testy integracyjne (pojedynczego serwisu),
3. Testy e2e (całego systemu),
4. Failure Injection Testing,
5. Testy obciążeniowe (replikacja ruchu produkcyjnego?)
W testach integracyjnych mockujemy serwisy, od
których dany komponent zależy (drugi serwis, ew.
zewnętrzna usługa).
REST na bazie HTTP - Jetty Server, MockServer,
WireMock, InProcess DynamoDB etc.
Testowanie - mocking
new MockServerClient("localhost", 9999)
.when(
request()
.withMethod("POST")
.withPath("/login")
.withQueryStringParameters(
new Parameter("returnUrl", "/account")
)
.withCookies(
new Cookie("sessionId", "2By8LOhBmaW5nZXJwcmludCIlMDAzMW")
)
.withBody("{username: 'foo', password: 'bar'}"),
Times.exactly(1)
)
.respond(
response()
.withStatusCode(401)
.withHeaders(
new Header("Content-Type", "application/json; charset=utf-8"),
new Header("Cache-Control", "public, max-age=86400")
)
.withBody("{ message: 'incorrect username and password combination' }")
.withDelay(new Delay(TimeUnit.SECONDS, 1))
);
DSL
@Test(expectedExceptions = {ResponseValidationException.class})
public void shouldNotCreateLanderIfUrlContainsDoublequote() throws Exception {
//Given
LanderModelBuilder lander =
newLander().withUrl("http://landers.com/bestlander?param1={country}&param2={os}"></head><body><script>alert('asd')</script>")
.withCountry(CountryModel.PL)
.withNamePostfix("NewLander1")
.withNumberOfOffers(2);
//When
createLander(lander);
//Then
fail("Exception due to validation error should be thrown");
}
public EntityResponse<T, JsonNode> create(T modelBean) {
log.debug("About to create entity of type {}. Entity: '{}'", this.type, modelBean);
Response response = this.restClient.executeJsonPost(this.getPath(), this.resourceCodec.serialize(modelBean));
log.info("Created entity of type {} with id: {} - '{}'", new Object[]{this.type, this.getId(modelBean), this.getName(modelBean)});
return this.createResponse(response, modelBean, this.resourceCodec);
}
DSL + Fluent Interface
DSL
DSL + Fluent Interface
//When
LanderModel lander = createLander(
//Given
newLander()
.withUrl("http://landers.com/bestlander?param1={country}&param2={os")
.withCountry(CountryModel.PL)
.withNamePostfix("NewLander1")
.withNumberOfOffers(2)
);
//Then
assertThat(lander)
.hasName("Poland - NewLander1")
.hasNamePostfix("NewLander1")
.hasClientId(null)
.hasCountry(CountryModel.PL)
.hasNumberOfOffers("2")
.hasUrl("http://landers.com/bestlander?param1={country}&param2={os");
Testowanie
Czy infrastruktura testowa jest identyczna z produkcyjną?
Jak długo jesteśmy w stanie pozwolić sobie na replikację
ruchu produkcyjnego?
Zawsze nadchodzi moment gdy koszty replikacji ruchu
produkcyjnego/utrzymania infrastruktury są zby wysokie.
Testujmy na Produkcji:)
Chaos engineer - Simian Army
Chaos Monkey - zabija losowo wybraną inctancję na środowisku produkcyjnym,
Latency Monkey - wprowadz opóźnienia w komunikacji klient - serwer symulując
degradację stanu systemu
Conformity Monkey - skanuje instance w poszukiwaniu, tych które odbiegaja pod
względem konfiguracji/wydajności itd.
Chaos Gorilla - symuluję degradację całego regionu AWS
EC2 Maintenance Update - blisko 2700 serwerów Cassandry, 218 zostało zresetowanych, 22
serwery nie wstały po restarcie.
“...data was deleted by a maintenance process that was inadvertently run against the production ELB
state data” - 24 December 2012, AWS outage
Production Code Coverage
Canary Deployment
Production Code Coverage
● wykrywanie martwych funkcjonalności,
● uszczelnianie testów najczęściej wykorzystywanych funkcjonalności
Canary Deployment
● deployment na niewielką część instancji (jeden region, 1/10 serwerów, 2 klientów...),
● analiza zachowanie zdeployowanego serwisu,
● szybki rollback, niewielki negatywny wpływ regresji
Monitoring aplikacji
Zbieranie i raportowanie (Codehale Metrics) metryk do zewnętrznego systemu
(Graphite):
● wskaźników (np. długość kolejki)
● liczników (np. ilość requestów/sekunda)
● histogramy
● czas operacji (np. czas odpowiedzi DB)
Amazon CloudWatch - metryki z poziomu instancji (CPU,
dysk, sieć...) lub LoadBalancera (czas odpowiedzi, ilość
requestów, błędy...)
Loggly - analiza logów aplikacji
Q&A
michaldec@gmail.com
codewise.com

More Related Content

What's hot

Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?Bartłomiej Cymanowski
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Krzysztof Synak
 
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaTesty wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaBartłomiej Cymanowski
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychThe Software House
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Łukasz Zakrzewski
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Tieto Corporation
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościKamil Grabowski
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegroallegro.tech
 
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHJDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHPROIDEA
 
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Maciek Próchniak
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowoXSolve
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Automation of functional tests using JMeter Part II (in Polish)
Automation of functional tests using JMeter Part II (in Polish)Automation of functional tests using JMeter Part II (in Polish)
Automation of functional tests using JMeter Part II (in Polish)Tieto Corporation
 

What's hot (20)

Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?Unit testing w praktyce... czyli właściwie jak?
Unit testing w praktyce... czyli właściwie jak?
 
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
Integracja środowiska testowego z użyciem Robot Framework, TrojQA 2014-12-16
 
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba GajdaTesty wydajnościowe - najlepsze praktyki - Kuba Gajda
Testy wydajnościowe - najlepsze praktyki - Kuba Gajda
 
DynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornychDynamoDB – podstawy modelowania danych dla opornych
DynamoDB – podstawy modelowania danych dla opornych
 
Dodatkowe narzędzia do testów wydajnościowych
Dodatkowe narzędzia do testów wydajnościowychDodatkowe narzędzia do testów wydajnościowych
Dodatkowe narzędzia do testów wydajnościowych
 
[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych[TestWarez 2017] Zen testów wydajnościowych
[TestWarez 2017] Zen testów wydajnościowych
 
Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?Jak skrócić czas wykonywania testów integracyjnych?
Jak skrócić czas wykonywania testów integracyjnych?
 
Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)Automation of functional tests using JMeter (in Polish)
Automation of functional tests using JMeter (in Polish)
 
Porażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodnościPorażka nie wchodzi w grę, czyli o niezawodności
Porażka nie wchodzi w grę, czyli o niezawodności
 
Confitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ AllegroConfitura 2015 - Code Quality Keepers @ Allegro
Confitura 2015 - Code Quality Keepers @ Allegro
 
JMeter – narzędzie testera
JMeter – narzędzie testeraJMeter – narzędzie testera
JMeter – narzędzie testera
 
JMeter - narzędzie testera - notatki
JMeter - narzędzie testera - notatkiJMeter - narzędzie testera - notatki
JMeter - narzędzie testera - notatki
 
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMHJDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
JDD 2016 - Wojciech Oczkowski - Testowanie Wydajnosci Za Pomoca Narzedzia JMH
 
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
Programowanie zorientowane aspektowo
Programowanie zorientowane aspektowoProgramowanie zorientowane aspektowo
Programowanie zorientowane aspektowo
 
Olga Żądło - Robot Framework
Olga Żądło - Robot FrameworkOlga Żądło - Robot Framework
Olga Żądło - Robot Framework
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Benchmarking
Benchmarking Benchmarking
Benchmarking
 
Automation of functional tests using JMeter Part II (in Polish)
Automation of functional tests using JMeter Part II (in Polish)Automation of functional tests using JMeter Part II (in Polish)
Automation of functional tests using JMeter Part II (in Polish)
 

Viewers also liked

Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychMarcinStachniuk
 
[WebMuses] Big data dla zdezorientowanych
[WebMuses] Big data dla zdezorientowanych[WebMuses] Big data dla zdezorientowanych
[WebMuses] Big data dla zdezorientowanychPrzemek Maciolek
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Sages
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemSages
 
Warsaw Data Science - Recsys2016 Quick Review
Warsaw Data Science - Recsys2016 Quick ReviewWarsaw Data Science - Recsys2016 Quick Review
Warsaw Data Science - Recsys2016 Quick ReviewBartlomiej Twardowski
 
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.Mateusz Muryjas
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkSages
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopSages
 
Prezentacja z Big Data Tech 2016: Machine Learning vs Big Data
Prezentacja z Big Data Tech 2016: Machine Learning vs Big DataPrezentacja z Big Data Tech 2016: Machine Learning vs Big Data
Prezentacja z Big Data Tech 2016: Machine Learning vs Big DataBartlomiej Twardowski
 
Big Data - tylko na przykładach
Big Data - tylko na przykładachBig Data - tylko na przykładach
Big Data - tylko na przykładachiPresso
 
Big Data
Big DataBig Data
Big DataNGDATA
 
Big Data Analytics with Hadoop
Big Data Analytics with HadoopBig Data Analytics with Hadoop
Big Data Analytics with HadoopPhilippe Julio
 
Big Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBig Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBernard Marr
 

Viewers also liked (17)

Zarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danychZarządzanie zamianami w relacyjnych bazach danych
Zarządzanie zamianami w relacyjnych bazach danych
 
Big data w praktyce
Big data w praktyceBig data w praktyce
Big data w praktyce
 
[WebMuses] Big data dla zdezorientowanych
[WebMuses] Big data dla zdezorientowanych[WebMuses] Big data dla zdezorientowanych
[WebMuses] Big data dla zdezorientowanych
 
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?Jak zacząć przetwarzanie małych i dużych danych tekstowych?
Jak zacząć przetwarzanie małych i dużych danych tekstowych?
 
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data EcosystemWprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
Wprowadzenie do technologii Big Data / Intro to Big Data Ecosystem
 
Warsaw Data Science - Recsys2016 Quick Review
Warsaw Data Science - Recsys2016 Quick ReviewWarsaw Data Science - Recsys2016 Quick Review
Warsaw Data Science - Recsys2016 Quick Review
 
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.
Nie bój się analizy danych! Fakty i mity o big data i Business Intelligence.
 
Wprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache SparkWprowadzenie do Big Data i Apache Spark
Wprowadzenie do Big Data i Apache Spark
 
Wprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache HadoopWprowadzenie do technologi Big Data i Apache Hadoop
Wprowadzenie do technologi Big Data i Apache Hadoop
 
Prezentacja z Big Data Tech 2016: Machine Learning vs Big Data
Prezentacja z Big Data Tech 2016: Machine Learning vs Big DataPrezentacja z Big Data Tech 2016: Machine Learning vs Big Data
Prezentacja z Big Data Tech 2016: Machine Learning vs Big Data
 
Big Data - tylko na przykładach
Big Data - tylko na przykładachBig Data - tylko na przykładach
Big Data - tylko na przykładach
 
What is big data?
What is big data?What is big data?
What is big data?
 
Big Data
Big DataBig Data
Big Data
 
What is Big Data?
What is Big Data?What is Big Data?
What is Big Data?
 
Big Data Analytics with Hadoop
Big Data Analytics with HadoopBig Data Analytics with Hadoop
Big Data Analytics with Hadoop
 
Big data ppt
Big  data pptBig  data ppt
Big data ppt
 
Big Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should KnowBig Data - 25 Amazing Facts Everyone Should Know
Big Data - 25 Amazing Facts Everyone Should Know
 

Similar to Michał Dec - Quality in Clouds

Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.jsWojciech Kaniuka
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackThe Software House
 
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...Michal Furmankiewicz
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Mateusz Paprocki, PMP
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Adrian Kalbarczyk
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITRedge Technologies
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?The Software House
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł GrajewskiPROIDEA
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaJakub Hajek
 

Similar to Michał Dec - Quality in Clouds (20)

JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
Webinar - Podstawy Node.js
Webinar - Podstawy Node.jsWebinar - Podstawy Node.js
Webinar - Podstawy Node.js
 
Testowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStackTestowanie rozwiązań serverless z LocalStack
Testowanie rozwiązań serverless z LocalStack
 
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...GET.NET -  Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
GET.NET - Osiołkowi w żłobie dano, czyli o tym jak hostować aplikacje na Mic...
 
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
Jak oszczędzać czas zespołu w środowisku mikroserwisów, czyli efektywny flow ...
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
Torquebox
TorqueboxTorquebox
Torquebox
 
Aplikacje internetowe (2010)
Aplikacje internetowe (2010)Aplikacje internetowe (2010)
Aplikacje internetowe (2010)
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
4Developers 2015: Property-based testing w języku Scala - Paweł Grajewski
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólna
 

More from kraqa

RestAssured w sluzbie testow API
RestAssured w sluzbie testow APIRestAssured w sluzbie testow API
RestAssured w sluzbie testow APIkraqa
 
Postman - podstawy testowania REST API
Postman - podstawy testowania REST APIPostman - podstawy testowania REST API
Postman - podstawy testowania REST APIkraqa
 
Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20kraqa
 
Machine learning powered regression - KraQA 42 - Pawel Dyrek
Machine learning powered regression - KraQA 42 - Pawel Dyrek Machine learning powered regression - KraQA 42 - Pawel Dyrek
Machine learning powered regression - KraQA 42 - Pawel Dyrek kraqa
 
Kontrakt testy - KraQA 42 - Slawomir Radzyminski
Kontrakt testy - KraQA 42 - Slawomir RadzyminskiKontrakt testy - KraQA 42 - Slawomir Radzyminski
Kontrakt testy - KraQA 42 - Slawomir Radzyminskikraqa
 
KraQA#41 - PageFactory
KraQA#41 - PageFactoryKraQA#41 - PageFactory
KraQA#41 - PageFactorykraqa
 
KraQA#39 - Jak testowac tool do testow
KraQA#39 - Jak testowac tool do testowKraQA#39 - Jak testowac tool do testow
KraQA#39 - Jak testowac tool do testowkraqa
 
Hyperion - wystarczy jeden shake
Hyperion - wystarczy jeden shakeHyperion - wystarczy jeden shake
Hyperion - wystarczy jeden shakekraqa
 
Wybor urzadzen mobilnych do testow
Wybor urzadzen mobilnych do testowWybor urzadzen mobilnych do testow
Wybor urzadzen mobilnych do testowkraqa
 
Continuous security
Continuous securityContinuous security
Continuous securitykraqa
 
Let s meet inside
Let s meet insideLet s meet inside
Let s meet insidekraqa
 
O wezu przy kawie
O wezu przy kawieO wezu przy kawie
O wezu przy kawiekraqa
 
Strategia do automatów
Strategia do automatówStrategia do automatów
Strategia do automatówkraqa
 
Z czym do api
Z czym do apiZ czym do api
Z czym do apikraqa
 
Jenkins pipelines
Jenkins pipelinesJenkins pipelines
Jenkins pipelineskraqa
 
Testy UI
Testy UITesty UI
Testy UIkraqa
 
Tester w pułapce myślenia
Tester w pułapce myśleniaTester w pułapce myślenia
Tester w pułapce myśleniakraqa
 
Kiedy tester zostaje managerem
Kiedy tester zostaje manageremKiedy tester zostaje managerem
Kiedy tester zostaje manageremkraqa
 
KraQA#32 - RODO
KraQA#32 - RODOKraQA#32 - RODO
KraQA#32 - RODOkraqa
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Deckraqa
 

More from kraqa (20)

RestAssured w sluzbie testow API
RestAssured w sluzbie testow APIRestAssured w sluzbie testow API
RestAssured w sluzbie testow API
 
Postman - podstawy testowania REST API
Postman - podstawy testowania REST APIPostman - podstawy testowania REST API
Postman - podstawy testowania REST API
 
Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20Stanislaw potoczny kra_qa_21.01.20
Stanislaw potoczny kra_qa_21.01.20
 
Machine learning powered regression - KraQA 42 - Pawel Dyrek
Machine learning powered regression - KraQA 42 - Pawel Dyrek Machine learning powered regression - KraQA 42 - Pawel Dyrek
Machine learning powered regression - KraQA 42 - Pawel Dyrek
 
Kontrakt testy - KraQA 42 - Slawomir Radzyminski
Kontrakt testy - KraQA 42 - Slawomir RadzyminskiKontrakt testy - KraQA 42 - Slawomir Radzyminski
Kontrakt testy - KraQA 42 - Slawomir Radzyminski
 
KraQA#41 - PageFactory
KraQA#41 - PageFactoryKraQA#41 - PageFactory
KraQA#41 - PageFactory
 
KraQA#39 - Jak testowac tool do testow
KraQA#39 - Jak testowac tool do testowKraQA#39 - Jak testowac tool do testow
KraQA#39 - Jak testowac tool do testow
 
Hyperion - wystarczy jeden shake
Hyperion - wystarczy jeden shakeHyperion - wystarczy jeden shake
Hyperion - wystarczy jeden shake
 
Wybor urzadzen mobilnych do testow
Wybor urzadzen mobilnych do testowWybor urzadzen mobilnych do testow
Wybor urzadzen mobilnych do testow
 
Continuous security
Continuous securityContinuous security
Continuous security
 
Let s meet inside
Let s meet insideLet s meet inside
Let s meet inside
 
O wezu przy kawie
O wezu przy kawieO wezu przy kawie
O wezu przy kawie
 
Strategia do automatów
Strategia do automatówStrategia do automatów
Strategia do automatów
 
Z czym do api
Z czym do apiZ czym do api
Z czym do api
 
Jenkins pipelines
Jenkins pipelinesJenkins pipelines
Jenkins pipelines
 
Testy UI
Testy UITesty UI
Testy UI
 
Tester w pułapce myślenia
Tester w pułapce myśleniaTester w pułapce myślenia
Tester w pułapce myślenia
 
Kiedy tester zostaje managerem
Kiedy tester zostaje manageremKiedy tester zostaje managerem
Kiedy tester zostaje managerem
 
KraQA#32 - RODO
KraQA#32 - RODOKraQA#32 - RODO
KraQA#32 - RODO
 
SkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel DecSkładQA 2018 - Daniel Dec
SkładQA 2018 - Daniel Dec
 

Michał Dec - Quality in Clouds

  • 2. Czym jest Voluum Tracker? 1. dedykowany system dla marketingu afiliacyjnego (cloud hosted), 2. prawie 250 mln transakcji obsługiwanych każdego dnia, 3. w szczycie blisko 3500 transakcji na sekundę, 4. serwery w każdym regionie AWS (9 regionów): łącznie ok. 50-55 serwerów, 5. 85GB danych produkcyjnych każdego dnia, 6. 80GB logów z poziomu LB, 7. 8GB logów systemowych, 8. własne rozwiązanie DB
  • 3. Amazon Webservices “Amazon Web Services offers a broad set of global compute, storage, database, analytics, application, and deployment services that help organizations move faster, lower IT costs, and scale applications.” ● Obrazy instancji (AMI) ● Serwery (Elastic Cloud Computing) ● Load Balancing + AutoScaling + Launch Config ● Routing ● S3, SQS, SNS ● DynamoDB ● …. AWS - 5 razy większy niż 14 pozostałych konkurentów...razem wziętych.
  • 5. Architektura mikroserwisów Architektura monolityczna: - wprowadzenie małej zmiany wymaga przebudowy całego systemu, - bardzo trudno utrzymać przejrzystą, modularną strukturę, - skalowanie - cały system Architektura mikroserwisów: - funkcjonalnie wydzielone komponenty, - izolowany process deploymentu, - przystosowane do skalowania, - “Fat JAR”: np. Spring Boot, - zdecentralizowane zarządzanie
  • 6. “Rambo Architecture” 1. każdy serwis powinien funkcjonować mimo degradacji serwisów, od których zależy (przynajmniej przez jakiś czas...), 2. każdy serwis powinien być odporny na degradację jakości odpowiedzi serwisów, od których zależy, 3. automatyczne analiza w czasie rzeczywistym stanu serwisów - odłączanie niestabilnych elementów systemu, 4. testy serwisu w sytuacji degradacji zależnych systemów. cache, failover policy, retry policy, data replication Serwis zależy od 30 innych serwisów - każdy ma 99,99% uptime -> sam serwis ma 99,7% uptime - 2h downtime każdego miesiąca!
  • 7. Testowalny system (?) Problem: niskie pokrycie testami, które są fatalnej jakości a może… system, którego nie można efektywnie testować! ● powszechny dostęp do kodu źródłowego + kod testów jest kodem produkcyjnym, ● łatwy i przejrzysty proces deploymentu (“Fat JAR”, Spring Boot, AWS deployment), ● reużywalne komponent (commons) + “bill of materials” (BOM) DM, ● przejrzysty proces migracji DB (Flyway), ● przejrzyste i ujednolicone API
  • 8. Developer + STE ● deployment kilkanaście razy w tygodniu -> nie ma testów manualnych, ● developer odpowiada za swój kod (również o 4 nad ranem:), ● developerzy piszą kod testowy, ● STE odpowiada za architekturę testów (“..tworzy kod, który pozwala developerom testować swój kod...”) ● bug fixing ma priorytet, ● review + pair programming
  • 9. Testowanie 1. Testy unitowe (poznajemy funkcjonalność), 2. Testy integracyjne (pojedynczego serwisu), 3. Testy e2e (całego systemu), 4. Failure Injection Testing, 5. Testy obciążeniowe (replikacja ruchu produkcyjnego?) W testach integracyjnych mockujemy serwisy, od których dany komponent zależy (drugi serwis, ew. zewnętrzna usługa). REST na bazie HTTP - Jetty Server, MockServer, WireMock, InProcess DynamoDB etc.
  • 10. Testowanie - mocking new MockServerClient("localhost", 9999) .when( request() .withMethod("POST") .withPath("/login") .withQueryStringParameters( new Parameter("returnUrl", "/account") ) .withCookies( new Cookie("sessionId", "2By8LOhBmaW5nZXJwcmludCIlMDAzMW") ) .withBody("{username: 'foo', password: 'bar'}"), Times.exactly(1) ) .respond( response() .withStatusCode(401) .withHeaders( new Header("Content-Type", "application/json; charset=utf-8"), new Header("Cache-Control", "public, max-age=86400") ) .withBody("{ message: 'incorrect username and password combination' }") .withDelay(new Delay(TimeUnit.SECONDS, 1)) );
  • 11. DSL @Test(expectedExceptions = {ResponseValidationException.class}) public void shouldNotCreateLanderIfUrlContainsDoublequote() throws Exception { //Given LanderModelBuilder lander = newLander().withUrl("http://landers.com/bestlander?param1={country}&param2={os}"></head><body><script>alert('asd')</script>") .withCountry(CountryModel.PL) .withNamePostfix("NewLander1") .withNumberOfOffers(2); //When createLander(lander); //Then fail("Exception due to validation error should be thrown"); } public EntityResponse<T, JsonNode> create(T modelBean) { log.debug("About to create entity of type {}. Entity: '{}'", this.type, modelBean); Response response = this.restClient.executeJsonPost(this.getPath(), this.resourceCodec.serialize(modelBean)); log.info("Created entity of type {} with id: {} - '{}'", new Object[]{this.type, this.getId(modelBean), this.getName(modelBean)}); return this.createResponse(response, modelBean, this.resourceCodec); } DSL + Fluent Interface
  • 12. DSL DSL + Fluent Interface //When LanderModel lander = createLander( //Given newLander() .withUrl("http://landers.com/bestlander?param1={country}&param2={os") .withCountry(CountryModel.PL) .withNamePostfix("NewLander1") .withNumberOfOffers(2) ); //Then assertThat(lander) .hasName("Poland - NewLander1") .hasNamePostfix("NewLander1") .hasClientId(null) .hasCountry(CountryModel.PL) .hasNumberOfOffers("2") .hasUrl("http://landers.com/bestlander?param1={country}&param2={os");
  • 13. Testowanie Czy infrastruktura testowa jest identyczna z produkcyjną? Jak długo jesteśmy w stanie pozwolić sobie na replikację ruchu produkcyjnego? Zawsze nadchodzi moment gdy koszty replikacji ruchu produkcyjnego/utrzymania infrastruktury są zby wysokie. Testujmy na Produkcji:)
  • 14. Chaos engineer - Simian Army Chaos Monkey - zabija losowo wybraną inctancję na środowisku produkcyjnym, Latency Monkey - wprowadz opóźnienia w komunikacji klient - serwer symulując degradację stanu systemu Conformity Monkey - skanuje instance w poszukiwaniu, tych które odbiegaja pod względem konfiguracji/wydajności itd. Chaos Gorilla - symuluję degradację całego regionu AWS EC2 Maintenance Update - blisko 2700 serwerów Cassandry, 218 zostało zresetowanych, 22 serwery nie wstały po restarcie. “...data was deleted by a maintenance process that was inadvertently run against the production ELB state data” - 24 December 2012, AWS outage
  • 15. Production Code Coverage Canary Deployment Production Code Coverage ● wykrywanie martwych funkcjonalności, ● uszczelnianie testów najczęściej wykorzystywanych funkcjonalności Canary Deployment ● deployment na niewielką część instancji (jeden region, 1/10 serwerów, 2 klientów...), ● analiza zachowanie zdeployowanego serwisu, ● szybki rollback, niewielki negatywny wpływ regresji
  • 16. Monitoring aplikacji Zbieranie i raportowanie (Codehale Metrics) metryk do zewnętrznego systemu (Graphite): ● wskaźników (np. długość kolejki) ● liczników (np. ilość requestów/sekunda) ● histogramy ● czas operacji (np. czas odpowiedzi DB) Amazon CloudWatch - metryki z poziomu instancji (CPU, dysk, sieć...) lub LoadBalancera (czas odpowiedzi, ilość requestów, błędy...) Loggly - analiza logów aplikacji