PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

Podobne dokumenty
ROZSZERZAJĄC FUNKCJONALNOŚCI MEMCACHED

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

SZKOŁA RST ŁUKASZ WRÓBEL

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Dokumentacja interfejsu HTTPD. Platforma BSMS.PL Instrukcja podłączenia po przez http

CouchDB. Michał Nowikowski

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Ćwiczenia 2 IBM DB2 Data Studio

Przykładowa implementacja

Projektowanie i implementacja wysokowydajnych aplikacji w języku

Quiz Aplikacja internetowa

Zaawansowany kurs języka Python

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

TYPO3 eid : AJAX i nie tylko. Artur Cichosz Quintinity Interactive

Testowanie aplikacji Java Servlets

Bazy danych dla producenta mebli tapicerowanych. Bartosz Janiak Marcin Sikora Wrocław r.

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Aplikacje webowe z wykorzystaniem Node.js oraz Express

MVC w praktyce tworzymy system artykułów. cz. 1

Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:

Programowanie w Internecie

Remote Method Invocation 17 listopada 2010

OPT Open Power Template. System szablonów OPT. Przykładowy skrypt oraz szablon OPT OPT API

HttpRequest Aplikacja Czat

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Programowanie zorientowane obiektowo. Mateusz Kołecki

Podejście obiektowe do budowy systemów rozproszonych

Wywoływanie metod zdalnych

Walidacja danych w ASP.NET MVC

Jak okiełznać frontend w Django? Piotr Maliński

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

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Podejście obiektowe do budowy systemów rozproszonych

Specyfikacja techniczna. mprofi Interfejs API

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Programowanie i projektowanie obiektowe

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

SMS Kod Automatyczny

Zaawansowany kurs języka Python

Wywoływanie metod zdalnych

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Java programowanie w sieci. java.net RMI

Zaawansowany kurs języka Python

Zaawansowane bazy danych i hurtownie danych

Aplikacje webowe w obliczu ataków internetowych na przykładzie CodeIgniter Framework

Tworzenie aplikacji w języku Java

Programowanie rozproszone w języku Java

Dokumentacja techniczna API systemu SimPay.pl

Wstęp. Ale po co? Implementacja

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Zagadnienia. Konstrukcja bibliotek mysql i mysqli w PHP. Dynamiczne generowanie stron. Połączenie, zapytanie i sesja

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Programowanie w Ruby

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Aplikacje WWW. Krzysztof Ciebiera. 3 kwietnia 2014

Dokumentacja smsapi wersja 1.4

Systemy Rozproszone - Ćwiczenie 6

Kurs programowania. Wykład 9. Wojciech Macyna

Comarch e-sklep Sync. wersja

Java. Programowanie Obiektowe Mateusz Cicheński

Serwer współbieżny połączeniowy

Dokumentacja REST API v 3.0. Kraków, 7 marca FreshMail, ul. Fabryczna 20a, Kraków tel , freshmail.

Zaawansowane aplikacje internetowe laboratorium REST

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

SAS Access to Hadoop, SAS Data Loader for Hadoop Integracja środowisk SAS i Hadoop. Piotr Borowik

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Zaawansowany kurs języka Python

SQL 4 Structured Query Lenguage

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

akademia androida Składowanie danych część VI

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Programowanie w Ruby

OpenLaszlo. OpenLaszlo

BAZA DANYCH SIECI HOTELI

Indeksowanie full text search w chmurze

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

JavaScript funkcyjność

Pracownia internetowa w każdej szkole (edycja jesień 2005)

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

Laboratorium Programowania Kart Elektronicznych

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

n+1 sposobów na automatyczne testy aplikacji mobilnych WrotQA, webinar Łukasz Siudakiewicz Damian Szczurek Automation Test Engineer

Optymalizacja pracy z instancjami local / staging / production. Krystian Szymukowicz (k.szymukowicz@sourcebroket.net)

Java Server Faces narzędzie do implementacji w wy prezentacji

PHP: bloki kodu, tablice, obiekty i formularze

TelCOMM Wymagania. Opracował: Piotr Owsianko Zatwierdził: IMIĘ I NAZWISKO

SOAP i alternatywy. 1. WSDL. 2. Protokoły tekstowe XML-RPC. JSON-RPC. SOAPjr. 3. Protokoły binarne Google Protocol Bufers. Apache Thrift.

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

TOPIT Załącznik nr 3 Programowanie aplikacji internetowych

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Qt in Education. Sieć I drukowanie

Transkrypt:

PRZETWARZANIE ROZPROSZONE ZADAN` Mariusz Gil 4Developers 2012, Poznań

W DWÓCH SŁOWACH http://tiny.cc/4dev_djp

AGENDA http://tiny.cc/4dev_djp

DLACZEGO WARTO O TYM POROZMAWIAC? ` http://tiny.cc/4dev_djp

KLIK REQUEST PRZETWARZANIE DANYCH W PHP RENDEROWANIE TEMPLATE ODPOWIEDZ`

JEDNA ISTOTNA SPRAWA http://tiny.cc/4dev_djp

IM SZYBCIEJ, TYM LEPIEJ

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 5.6s RENDEROWANIE TEMPLATE 98ms ODPOWIEDZ `

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 5.6s RENDEROWANIE TEMPLATE 98ms ODPOWIEDZ `

REFRESH http://tiny.cc/4dev_djp

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 7.2s RENDEROWANIE TEMPLATE 98ms ODPOWIEDZ `

REFRESH http://tiny.cc/4dev_djp

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 9.8s RENDEROWANIE TEMPLATE 98ms ODPOWIEDZ `

REFRESH http://tiny.cc/4dev_djp

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 13.3s RENDEROWANIE TEMPLATE 98ms ODPOWIEDZ `

REFRESH http://tiny.cc/4dev_djp

REFRESH http://tiny.cc/4dev_djp

REFRESH http://tiny.cc/4dev_djp

ROZWIAZANIE?, http://tiny.cc/4dev_djp

KLIK REQUEST 10ms PRZETWARZANIE DANYCH W PHP 254ms RENDEROWANIE TEMPLATE 98ms DELEGACJA ZADANIA DO ZEWNETRZNEGO WORKERA, ODPOWIEDZ `

REQUEST 10ms 1. REQUEST 2. TOKEN ZADANIA PRZETWARZANIE DANYCH W PHP 254ms RENDEROWANIE TEMPLATE 98ms PRZETWARZANIE DANYCH ODPOWIEDZ ` 3. TOKEN ZADANIA 4. WYNIK ZADANIA PREZENTACJA DANYCH Z WORKERA (np. z wykorzystaniem wywołania ajax)

FRONTEND BACKEND TASK SYSTEM TASK SYSTEM WORKER WORKER WORKER

USUWANIE DANYCH PRZETWARZANIE OBRAZÓW WYSZUKIWANIE DANYCH PRZYKŁADY? GENEROWANIE PDF WYSYŁKA E-MAILI http://tiny.cc/4dev_djp

WSZYSTKO WYGLADA PROSTO ALE ISTOTNE SA SZCZEGÓŁY,,

PROSTA IMPLEMENTACJA WPISUJE SIE W PEWIEN SCHEMAT,

3 WIELKA AUTORSKI FRAMEWORK PHP AUTORSKI SYSTEM TEMPLATES AUTORSKI CMS

PROSTY WORKER CRON&PHP ROZWIAZANIE 1,

PRZYKŁADOWA TABELA ID TASK_NAME CREATED_AT DATA STATUS 1 CONTACT_EMAIL 2012-01-01 00:00:00 {"email":"john@doe.com"} PROCESSING 2 INVITATION_EMAIL 2012-01-01 00:00:01 {"email":"john@doe.com"} PROCESSING 3 CONTACT_EMAIL 2012-01-01 00:00:01 {"email":"john@doe.com"} WAITING 4 ACCOUNT_DELETE 2012-01-01 00:00:02 {"id": 34532, "with_opts ": true} WAITING 5 INVITATION_EMAIL 2012-01-01 00:00:03 {"email":"john@doe.com"} WAITING 6 IMAGE_RESIZE 2012-01-01 00:00:04 {"id": 322, "thumbs": true} WAITING DEFINICJA W CRON-TAB * * * * * php -f /var/www/project/workers/simple_worker.php

OZNACZ ZADANIE DO PRZETWORZENIA CZY SA DANE W TABELI? WYKONAJ ZADANIE USUN ZADANIE Z TABELI FLOW ZAKONCZ PRACE

PROBLEM OBSŁUGA SYTUACJI KRYTYCZNYCH WZNAWIANIE BŁEDNYCH ZADAN CZESTOTLIWOSC WYWOŁAN

MEMCACHEQ PONAD MEMCACHEDB ROZWIAZANIE 2,

worker pobiera zadania z poczatku kolejki, m1 m2 m3 m4 m5 m5 klienci dodaja nowe zadania na koniec kolejki,

KLIENT DODANIE WPISU DO KOLEJKI <?php /* connect to memcached server */ $memcache = memcache_connect('memcacheq_host', 21201); /* append a message to queue */ memcache_set($memcache, 'queue_1', 'message 1', 0, 0); /* append a message to queue */ memcache_set($memcache, 'queue_1', 'message 2', 0, 0); /* append a message to queue */ memcache_set($memcache, 'queue_2', 'message 1', 0, 0); memcache_close($memcache);?> WORKER PRZETWORZENIE WPISU Z KOLEJKI <?php /* connect to memcached server */ $memcache = memcache_connect('memcacheq_host', 21201); /* consume a message from queue */ memcache_get($memcache, 'queue_1'); /* consume a message from queue */ memcache_get($memcache, 'queue_1'); /* consume a message from queue */ memcache_get($memcache, 'queue_2'); memcache_close($memcache_obj);?>

BEANSTALKD WORK QUEUE ROZWIAZANIE 3,

HISTORIA BEANSTALKD POWSTAŁ NA POTRZEBY APLIKACJI FACEBOOK CAUSES, GDZIE MIAŁ SKRÓCIC CZAS ODPOWIEDZI SERWERA http://tiny.cc/4dev_djp

WORKER PRZETWORZENIE ZADANIA <?php // register Pheanstalk class loader require_once('pheanstalk_init.php'); $pheanstalk = new Pheanstalk('127.0.0.1'); $job = $pheanstalk ->watch('testtube') ->ignore('default') ->reserve(); echo $job->getdata(); $pheanstalk->delete($job); KLIENT REJESTRACJA ZADANIA <?php // register Pheanstalk class loader require_once('pheanstalk_init.php'); $pheanstalk = new Pheanstalk('127.0.0.1'); $pheanstalk ->usetube('testtube') ->put("job payload goes here\n");

GEARMAND TASK MANAGEMENT FRAMEWORK ROZWIAZANIE 4,

Klient Gearman Client API aplikacja PHP Gearman Job Server GEARMAN Gearman Worker API Worker

gearman.so Klient Gearman Client API Memory SQLite Postgre SQL MySQL HTTP TCP socket aplikacja PHP Gearman Job Server GEARMAN TCP socket Gearman Worker API Worker Ruby Python PHP

WORKER PRZETWORZENIE ZADANIA <?php $worker= new GearmanWorker(); $worker->addserver(); $worker->addfunction("reverse", "my_reverse_function"); while ($worker->work()); function my_reverse_function($job) { return strrev($job->workload()); }?> KLIENT REJESTRACJA ZADANIA <?php $client= new GearmanClient(); $client->addserver(); print $client->do("reverse", "Hello World!");?>

200 WORKERÓW INSTAGRAM CASE STUDY http://tiny.cc/4dev_djp

AMAZON SQS KOLEJKA ZADAN W CHMURZE ` ROZWIAZANIE 5,

TANIE BEZPIECZNE SKALOWALNE PROSTE NIEZAWODNE * $0.01 za 10,000 requestów do Amazon SQS

5 PROSTYCH API CreateQueue SendMessage ReceiveMessage ChangeMessageVisibility DeleteMessage

WORKER PRZETWORZENIE ZADANIA <?php require_once ('Amazon/SQS/Model/ReceiveMessageRequest.php'); $request = new Amazon_SQS_Model_ReceiveMessageRequest(); $request->setqueueurl('queue URL from CreateQueue call'); invokereceivemessage($service, $request); KLIENT REJESTRACJA ZADANIA <?php require_once ('Amazon/SQS/Model/SendMessageRequest.php'); $request = new Amazon_SQS_Model_SendMessageRequest(); $request->setqueueurl('queue URL from CreateQueue call'); $request->setmessagebody('this is my message text.'); invokesendmessage($service, $request);

RESQUE PHP PORT ROZWIAZANIE 6,

WORKERS SYSTEM BUDOWANIE TARBALLI BUDOWANIE RUBYGEMS URUCHAMIANIE. WEB-HOOKS USUWANIE UZYTKOWNIKÓW AKTUALIZACJA INDEXÓW...i WIELE INNYCH http://tiny.cc/4dev_djp

DEFINICJA KLASY ZADANIA <?php class My_Job { public function setup() { //... Set up environment for this job } public function perform() { //.. Run job } } public function teardown() { //... Remove environment for this job } KLIENT REJESTRACJA ZADANIA <?php require_once 'lib/resque.php'; // Required if redis is located elsewhere Resque::setBackend('localhost:6379'); $args = array( 'name' => 'Chris' ); Resque::enqueue('default', 'My_Job', $args);

STANY ZADAN SLEDZENIE PRZETWARZANIA ` ` <?php $token = Resque::enqueue('default', 'My_Job', $args, true); echo $token; $status = new Resque_Job_Status($token); echo $status->get(); switch ($status->get()) { case Resque_Job_Status::STATUS_WAITING: //... break; case Resque_Job_Status::STATUS_RUNNING: //... break; case Resque_Job_Status::STATUS_FAILED: //... break; case Resque_Job_Status::STATUS_COMPLETE: //... break; default: //... }

HOOKS REJESTRACJA OBSŁUGI EVENTÓW <?php Resque_Event::listen( 'onfailure', function($exception, $resquejob) { echo sprintf( "\n Join has failed with exception %s \n\n", $exception->getmessage() ); } ); Resque_Event::listen( 'beforefork', function($resqueworker) { //... } ); Resque_Event::listen( 'beforeperform', function($resquejob) { //... } ); Resque_Event::listen( 'afterenqueue', function($class, $arguments) { //... } );

FRONT-END WWW OUT OF THE BOX

` memcachedb.org/memcacheq gearman.info gearman.org gearmanhq.com kr.github.com/beanstalkd github.com/pda/pheanstalk aws.amazon.com/sqs github.com/chrisboulton/php-resque q4m.github.com www.rabbitmq.com www.amqp.org activemq.apache.org LINKI NA PÓZNIEJ http://tiny.cc/4dev_djp

DEMO http://tiny.cc/4dev_djp

PYTANIA? e: mariusz.gil@scaleup.pl t: @mariuszgil