Quality in Clouds. Michał Dec



Podobne dokumenty
Technologie dla aplikacji klasy enterprise. Wprowadzenie. Marek Wojciechowski

OD MONOLITU DO MIKROUSŁUGI MICROSERVICES

Digitize Your Business

Testowanie aplikacji Java Servlets

Test-Driven Development

Program szkolenia: REST i Microservices w PHP

Java Enterprise Edition spotkanie nr 1. Sprawy organizacyjne, wprowadzenie

Architektura mikroserwisów na platformie Spring IO

PureSystems zautomatyzowane środowisko aplikacyjne. Emilia Smółko Software IT Architect

Michał Sierzputowski. Zautomatyzuj swoje testy automatyczne oparte o Selenium

JAX-RS czyli REST w Javie. Adam Kędziora

Migracja do PostgreSQL za pomocą narzędzi Enterprise DB

LANDINGI.COM. Case Study. Klient Landingi.com. Branża IT, marketing i PR. Okres realizacji od grudnia 2013 do chwili obecnej.

BADANIE SZYBKOŚCI ŁADOWANIA

GTS Shared Infrastructure (GSI)

Prestige MJM Case Study

Szczegółowy opis przedmiotu umowy. 1. Środowisko SharePoint UWMD (wewnętrzne) składa się z następujących grup serwerów:

Zarządzanie farmami serwerów Linux

Bazy i Systemy Bankowe Sp. z o.o. ul. Kasprzaka 3, Bydgoszcz

Wstęp do testowania : Szymon Ramczykowski

ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED

Automatyczne testowanie aplikacji Android

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

OWASP i Top 10 Sposób tworzenia Top 10 Czym jest a czym NIE jest Top 10? Zmiany w wersji 2013 Omówienie nowych podatności na liście Podsumowanie

Leonard G. Lobel Eric D. Boyd. Azure SQL Database Krok po kroku. Microsoft. Przekład: Marek Włodarz. APN Promise, Warszawa 2014

Ruby i Ruby on Rails. Mateusz Drożdżyński

Techniki efektywnego testowania kodu dla programistów Java (Spock

e-off f i f ce: :Sekr k e r tari r at t w chm h urz r e Marcin Pytel

Zabbix -Monitoring IT bez taśmy klejącej. Paweł Tomala Barcamp 15 czerwca 2015

Usługi IBM czyli nie taki diabeł straszny

Letnia Akademia SUSE. Implementacja nowych rozwiązań open source wszystko, co musisz wiedzieć!

Architektura systemów webowych wysokiej przepustowości. na przykładzie Wikia

Maciej Oleksy Zenon Matuszyk

Wybrane działy Informatyki Stosowanej

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Asseco dla Zdrowia r.

Programowanie w języku Java. Wykład 13: Java Platform, Enterprise Edition (Java EE)

Dni Użytkowników Aplikacji QAD Interoperacyjność z QXtend

Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5

Projektowanie i implementacja wysokowydajnych aplikacji w języku

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 2).

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Przetwarzanie danych z wykorzystaniem technologii NoSQL na przykładzie serwisu Serp24

Szkolenia i warsztaty. cloud computing TWOJE NARZĘDZIA DO ZBUDOWANIA NOWEJ PRZYSZŁOŚCI TWOJEJ FIRMY CHMUROWISKO.PL

Ogłoszenie o przetargu z Kodeksu Cywilnego

Parametry wydajnościowe systemów internetowych. Tomasz Rak, KIA

Zasady współpracy programu Doradca Handlowy z Symfonią

SIP: Session Initiation Protocol. Krzysztof Kryniecki 16 marca 2010

Przegląd narzędzi do automatycznego testowania aplikacji internetowych. Jan Płoszczyca SKISR 2006

KURS SPRING APLIKACJE WEBOWE

The Micro Way. czyli architektura mikroserwisów. Konrad Król

Cloud Transcoding Nowe Paradygmaty, Wysoka Dostępność i Wskaźniki ROI. Maj 2017

Zapewnienie wysokiej dostępności baz danych. Marcin Szeliga MVP SQL Server MCT

Dostęp do komponentów EJB przez usługi Web Services

Dlaczego my? HARMONOGRAM SZKOLEŃ kwiecień - czerwiec ACTION Centrum Edukacyjne. Autoryzowane szkolenia. Promocje RODO / GDPR

BADANIE SZYBKOŚCI ŁADOWANIA

INŻYNIERIA OPROGRAMOWANIA TESTOWANIE SYSTEMOWE

Narzędzia OWASP dla developerów OWASP ESAPI & AppSensor OWASP The OWASP Foundation

Wydajność i redundancja BPS. Paweł Jawień, WEBCON

Klient SmartMedia Sp. z o.o., Dziennikus Sp. z o.o. Branża. IT, software. Okres realizacji. Lipiec nadal. Rodzaj usługi:

Forum Client - Spring in Swing

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Najlepsze praktyki w podejściu do rozbudowy infrastruktury Michał Stryga

JBoss: MetaMatrix, Mobicents, Seam, Rools, ESB

Automatyzacja aktualizacji CMDB i procesu zarządzania zasobami w Remedy ITSM 7.6

Program szkolenia: Zaawansowana architektura systemów PHP - projektowanie i implementacja skalowalnych aplikacji webowych

Część I Tworzenie baz danych SQL Server na potrzeby przechowywania danych

MONITOROWANIE DOSTĘPNOŚCI USŁUG IT

SAM-Insights ADVANCED CENTRAL DATA COLLECTOR (ACDC) Dane licencyjne nie mierzone przez skanowanie. Nowy moduł ACDC o unikalnej funkcjonalności

1 Wprowadzenie do J2EE

Funkcje backendu konfiguratora. Warszawa,

Ełk, dn r. DOMSET Marcin Brochacki. ul. Wojska Polskiego 43 lok. 3, Ełk. Nip ZAPYTANIE OFERTOWE

Java JMX. Marcin Werla. Monitorowanie i zarządzanie usługami sieciowymi w Javie. mwerla@man.poznan.pl PCSS/Poznań JUG

Testowanie oprogramowania. Testowanie oprogramowania 1/34

Bezpieczeństwo aplikacji WWW. Klasyfikacja zgodna ze standardem OWASP. Zarządzanie podatnościami

Studium przypadku budowania skalowalnych stron www. Tomasz Paszkowski

Paweł Rajba

Hurtownie danych i business intelligence - wykład II. Zagadnienia do omówienia. Miejsce i rola HD w firmie

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

ZAŁĄCZNIK NR 3 OPIS PRZEDMIOTU ZAMÓWIENIA DOTYCZĄCY WDROŻENIA PLATFORMY ZAKUPOWEJ

Pico. Wstęp do kontenerów IoC.

Plan testów do Internetowego Serwisu Oferowania i Wyszukiwania Usług Transportowych

Dobre praktyki w doborze technologii rozwiązań informatycznych realizujących usługi publiczne

Program szkolenia: JavaScript Craftsmanship

OpenContrail jako wtyczka do OpenStacka. Bartosz Górski, Paweł Banaszewski CodiLime

Testowanie oprogramowania w środowisku IBM Rational Software Architect

Cleeng Case Study. Klient Cleeng. Branża. Okres realizacji. Zakres usługi: Consulting. Projekt i wdrożenie Chmury AWS. Zarządzanie chmurą

Konferencja I3 internet infrastruktury - innowacje. SMOA Devices. Infrastruktura do monitorowania i kontroli zuŝycia energii

MetaPack IT Academy Programista, Technologie, ecommerce. Dariusz Cebernik CTO, MetaPack Poland

Analiza mikroserwisów. Warszawa,

Droga do SharePoint/Project Server 2013 czyli czy jesteśmy gotowi na upgrade. Bartłomiej Graczyk

Rozwiązania internetowe iplanet

Inteligentna analiza danych operacyjnych

Application Layer Functionality and Protocols

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Instalacja SQL Server Express. Logowanie na stronie Microsoftu

Spis treści 1. Założenia ogólne 2. Wymagania 3. Typy SMSów 4. Statusy SMSów 5. Wysyłanie SMSów - Web API 6. Wysyłanie SMSów - 7.

Transkrypt:

Quality in Clouds Michał Dec

Czym jest Voluum Tracker? 1. dedykowany system dla marketingu afiliacyjnego (cloud hosted), 2. prawie 250mln 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ły kokurentó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 (..pisze kod, który pozwala developerom testować swój kod... ) bugfixing 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 + Fluent Interface @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>") DSL.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 //When LanderModel lander = createlander( //Given newlander() DSL.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...), 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