SlideShare a Scribd company logo
1 of 21
MICROSOFT AZURE EVENT
HUBS
wprowadzenie
Mirosław Piątkowski
CZYM JEST CHMURA?
• KOLOKACJA/HOTELING – tylko miejsce w serwerowni
• INFRASTRUCTURE AS A SERVICE (IAAS) – sprzęt, oprogramowanie i
serwisowanie
• PLATFORM AS A SERVICE (PAAS) – komplet aplikacji ze spójnym
interfejsem użytkownika
• SOFTWARE AS A SERVICE (SAAS) – dostarcza funkcjonalności i
oprogramowanie
• COMMUNICATIONS AS A SERVICE (CAAS) – platforma
telekomunikacyjna
• INTEGRATION PLATFORM AS A SERVICE (IPAAS) – platforma
integracyjna pomiędzy różnymi usługami w chmurze
MICROSOFT AZURE
• Publiczna premiera nastąpiła 1 lutego 2010 r.
• Świadczy głównie usługi PaaS i SaaS
MICROSOFT AZURE
• Compute – Virtual Machines, App Services, Functions, Service Fabric
• Sieć – Virtual Network, Load Balancer, Azure DNS, CDN
• Magazyn - Storage, Blobl storage, Queue Storage, Data Lake Store, StorSimple
• Web + Mobile –Web Apps, Mobile Apps, Media Services, Azure Search
• Bazy danych – SQL Database, SQL Data Warehouse, DocumentDB, Redis Cache
• Analiza – HDInsight, Machine Learning, Azure Bot Services, Data Lake Analytics
• IoT – IoT Hub, Event Hubs, Stream Analytics, Notification Hubs
• Integracja dla przedsiębiorstw – Logic Apps, Service Bus, API Management, BizTalk Services
• Zabezpieczenia i tożsamość – Security Center, Key Vault, Azure Active Directory, Multi-Factor
• Authentication
• Developer Tools – VS Team Services, Azure DevTest Labs, Application Insights, HockeyApp, Xamarin
• Monitoring + zarządzanie – MS Azure portal, Azure Resource Manager, Automation, Backup, Scheduler
• Microsoft Azure Stack
MICROSOFT AZURE
EVENT HUBS
• Platforma do strumieniowego przesyłania danych
• Jest w stanie zbierać miliony zdarzeń na sekundę
• Publikowanie i subskrypcja z niskim opóźnieniem
• Użyteczne do:
• Instrumentacji aplikacji
• Przetwarzania czynności użytkownika lub workflows
• Scenariuszy Internet of Thing (IoT)
• Trackingu w aplikacjiach mobilnych i webowych
• Przechwytywania zdarzeń w grach
• Zbierania danych telemetrycznych
CECHY AZURE EVENT HUB
• Huby tworzy się w ramach przestrzeni nazw (namespace)
• Wykorzystuje protokoły Advanced Message Queuing Protocol
(AMQP) 1.0 lub HTTPS
• Do autentykacji użytkowników używane są tokeny Shared Access
Signature (SAS) zarówno na poziomie przestrzeni nazw jak i
Hub’ów z uprawnieniami Send, Listen oraz Manage
• Event’y przechowywane są w strumieniach na partycjach
• Za kontrolę przepustowości odpowiadają Throughput Units (TU –
jednostki przepływności)
• Grupy odbiorców (Consumer Groups) pozwalają wielu aplikacjom
odczytującym dane na niezależne przechowywanie stanu i pozycji
lub przesunięcia w ramach Event Hub’a
PARTYCJE
• Jeden Event Hub może mieć od 2 do 32 partycji. Liczby partycji nie
da się zmienić po utworzeniu Hub’a
• Dostęp do partycji w danym czasie ma tylko jeden reader per
consumer group
• Podczas publikowania zdarzenia Event Hub używa algorytmu
round-robin do „równomiernego” rozdystrybuowania event’ów na
partycjach
• Można publikować zdarzenia używając klucza partycji (Partition
Key), dzięki czemu event’y z tym samym kluczem trafią na tą samą
partycję
• Klucz partycji nie jest jednoznaczny z jej identyfikatorem – jest
przetwarzany przez statyczną funkcję hash’ującą w celu
utworzenia połączenia z partycją
• Można korzystać z większej ilości PK niż partycji
• Istnieje możliwość dostępu do partycji za pomocą ID
• Korzystanie z PK lub PID zapewnia przetwarzania zdarzeń w tej
samej sekwencji w jakiej zostały opublikowane
OFFSETY I CHECKPOINTY
• Offset reprezentuje pozycję zdarzenia w partycji. Może być w
postaci timestamp’u lub wartości przesunięcia
• Konsumenci zdarzeń zobowiązani są do przechowywania informacji
informacji o offsecie
• Punkty kontrolne tworzone dla każdej partycji w ramach grupy
odbiorców i przechowywane są po stronie Event Hub’a
• Konsumenci zobowiązani są do tworzenia checkpoint’ów
THROUGHPUT UNITS
• Przepustowość 1 TU wynosi odpowiednio:
• Ingress – 1 MB/s lub 1000 eventów/s (w zależności od tego co
nastąpi wcześniej)
• Egress – 2 MB/s
• Przy przekroczeniu limitów rzucany jest wyjątek
ServerBusyException
• Ilość TU można zmieniać w czasie działania Event Hub’a zarówno z
poziomu platformy Azure jak i API
• Jedna partycja ma maksymalną skalę jednej TU
• Ilość TU powinna być mniejsza lub równa ilości partycji
OGRANICZENIA
• Maksymalny rozmiar wiadomości to 256 KB (1 MB w przypadku
usługi dedykowanej, tylko dla klientów z umowani Enterprise
Agreement)
• Do 20 grup konsumentów (1 w przypadku Basic)
• Maksymalnie można mieć 20 TU (w przypadku pakietu Standard
możliwe jest zwiększenie limitu po kontakcie z obsługą techniczną,
dla Dedicated 1CU≈200 TU)
• Ilość połączeń obsługiwanych przez brokera to 100 dla Basic, 1000
dla Standard i do 100000 dla Dedicated. Jedynie dla pakietu Basic
nie ma możliwości uzyskania dodatkowych połączeń
• Retencja danych do 1 dnia dla pakietów Basic i Standard oraz do 7
dni dla Dedicated (w przypadku Standard retencja powyżej 1 dnia
wiąże się z dodatkowymi kosztami)
• Archiwum nie jest dostępne w pakiecie Basic
MICROSOFT VS AMAZON
Amazon SQS Standard Queue Amazon SQS FIFO Queue Microsoft Azure Event Hub Basic Microsoft Azure Event Hub Standard
Przepustowość Prawie nieograniczona ilość transakcji
na sekundę.
300 transakcji na sekundę. Throughput Unit (ingress - 1 MB/s lub 1000 wiadomości na sekundę, egress – 2
MB/s) – do 20 jednostek.
Dostarczanie wiadomości Wiadomość zostanie dostarczona
przynajmniej raz (może być
dostarczona więcej razy).
Kolejka FIFO. Wiadomość zostanie
dostarczona tylko raz.
Do 32 partycji. Kolejka FIFO w przypadku i zapisu odczytu wiadomości z
pojedynczej partycji za pomocą Partition ID lub Partition Key, w przeciwnym
wypadku kolejność odczytu wiadomości jest niedeterministyczna. Wiadomość
zostanie dostarczona tylko raz w ramach danej grupy konsumentów.
Dead Letter Queues (DLQ) Wbudowany mechanizm wymagający skorzystania z kolejki tego samego typu. Brak wbudowanych mechanizmów.
Odtwarzanie wiadomości Przetworzone wiadomości muszą być usunięte z kolejki manualnie albo w
przypadku błędów przesłane do DQL.
Mechanizm checkpoint’ów i offset’ów pozwalający developerom na
zresetowanie pozycji w strumieniu.
Retencja danych Do 14 dni. Do 1 dnia. Do 1 dnia. Z dodatkową usługą Azure
Blob Storage do 7 dni.
Rozmiar wiadomości/żądania Najmniejszą ilością danych za które pobierana jest opłata jest 64 kB (1 żądanie). Maksymalny rozmiar wiadomości to 256 kB (4 żądania). Wiadomości mogą być
wysyłane i odbierane w paczkach.
Opłaty pobierane są za ruch wyjściowy. Każda operacja API liczy się jako 1
żądanie.
Opłaty pobierane są za ruch wejściowy.
Grupy konsumentów Nie. Do 20 niezależnych grup mogących odczytywać kolejkę z wykorzystaniem
własnych checkpoint’ów.
PROGRAMOWANIE
• Microsoft Azure Service Bus API:
• PM> Install-Package WindowsAzure.ServiceBus
• Paczka służy do wykonywania operacji na Microsoft Azure
Service Bus Queues, Topics, EventHub oraz Relay
TWORZENIE KLIENTA
// manager przestrzeni nazw
var manager = new
Microsoft.ServiceBus.NamespaceManager("mynamespace.servicebus.windows.net");
// EventHubDescription
var description = manager.CreateEventHub("MyEventHub");
var description = manager.CreateEventHubIfNotExists("MyEventHub");
// tworzenie klienta
var client = EventHubClient.Create(description.Path);
var client = EventHubClient.CreateFromConnectionString("your_connection_string");
// tworzenie klienta za pomocą fabryki
var factory = MessagingFactory.CreateFromConnectionString("your_connection_string");
var client = factory.CreateEventHubClient("MyEventHub");
WYSYŁANIE EVENTÓW
// wysyłanie pojedynczych event'ów
public void Send (EventData data);
public Task SendAsync (EventData data);
// wysyłanie paczek event'ów
public void SendBatch (IEnumerable<EventData> eventDataList);
public Task SendBatchAsync (IEnumerable<EventData> eventDataList);
// sender do określonej partycji
var partitionedSender = client.CreatePartitionedSender(description.PartitionIds[0]);
• Connection string:
Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootMana
geSharedAccessKey;SharedAccessKey=[key]
• Microsoft.ServiceBus.Messaging.EventData – obiekt reprezentujący pojedynczą
wiadomość/zdarzenie
• EventHubClient – wysyłanie:
ODBIERANIE EVENTÓW
// odbiorca dla domyślnej grupy z pierwszej partycji
EventHubConsumerGroup group = client.GetDefaultConsumerGroup();
var receiver = group.CreateReceiver(client.GetRuntimeInformation().PartitionIds[0]);
// odczyt
bool receive = true;
string myOffset;
while(receive)
{
var message = receiver.Receive();
myOffset = message.Offset;
string body = Encoding.UTF8.GetString(message.GetBytes());
Console.WriteLine(String.Format("Received message offset: {0} nbody: {1}",
myOffset, body));
}
EVENTPROCESSORHOST
• Zalecany mechanizm do budowania konsumentów event’ów
• Zapewnia:
• Bezpieczeństwo wątków (thread-safe)
• Wieloprocesowość
• Środowisko pracy dla klas implementujących interface
IEventProcessor
• Łatwy dostęp do zarządzania checkpoint’ami oraz dzierżawą
(lease) partycji
EVENTPROCESSORHOST
static void Main(string[] args)
{
string eventHubConnectionString = "{Event Hubs namespace connection string}";
string eventHubName = "{Event Hub name}";
string storageAccountName = "{storage account name}";
string storageAccountKey = "{storage account key}";
string storageConnectionString =
$"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={storageAccountKey}";
string eventProcessorHostName = Guid.NewGuid().ToString();
EventProcessorHost eventProcessorHost = new EventProcessorHost(eventProcessorHostName,
eventHubName,
EventHubConsumerGroup.DefaultGroupName, eventHubConnectionString,
storageConnectionString);
Console.WriteLine("Registering EventProcessor...");
var options = new EventProcessorOptions();
options.ExceptionReceived += (sender, e) => { Console.WriteLine(e.Exception); };
eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>(options).Wait();
Console.WriteLine("Receiving. Press enter key to stop worker.");
Console.ReadLine();
eventProcessorHost.UnregisterEventProcessorAsync().Wait();
}
IMPLEMENTACJA
IEVENTPROCESSOR
ODBIERANIE EVENT’ÓW
class SimpleEventProcessor : IEventProcessor
{
async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason)
{
// logowanie powodu zamknięcia procesora oraz tworzenie checkpointu
// if (reason == CloseReason.Shutdown) await context.CheckpointAsync();
}
Task IEventProcessor.OpenAsync(PartitionContext context)
{
// logowanie np.: context.Lease.PartitionId, context.Lease.Offset
// wystartowanie licznika lub Stopwatch do tworzenie checkpointów
}
async Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable<EventData>
messages)
{
foreach (EventData eventData in messages)
{
string data = Encoding.UTF8.GetString(eventData.GetBytes());
// przetwarzanie event'ów
}
// dodatkowy kod obsługi, np.: tworzenie checkpoint'ów po upływie zadanego czasu
// lub przepełnienia wartości licznika
}
}
DZIĘKUJĘ ZA UWAGĘ
Mirosław Piątkowski
miroslaw.piatkowski@vimanet.com
REFERENCJE
https://docs.microsoft.com/pl-pl/azure/event-hubs/

More Related Content

Similar to Azure Event Hubs - wprowadzenie

[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
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaJakub Hajek
 
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
 
Nowości Windows Azure
Nowości Windows AzureNowości Windows Azure
Nowości Windows Azurepbubacz
 
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury PROIDEA
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPROIDEA
 
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...PROIDEA
 
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów ITPiotr Pietrzak
 
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Konrad Sagala
 
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
 
infraxstructure: Paweł Serwan i Jarosław Sobel "Wirtualizacja aplikacji czy ...
infraxstructure: Paweł Serwan i Jarosław Sobel  "Wirtualizacja aplikacji czy ...infraxstructure: Paweł Serwan i Jarosław Sobel  "Wirtualizacja aplikacji czy ...
infraxstructure: Paweł Serwan i Jarosław Sobel "Wirtualizacja aplikacji czy ...PROIDEA
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe MicroservicesKonrad Król
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PROIDEA
 
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)Jaroslaw Sobel
 
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...GOG.com dev team
 
Citrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFACitrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFAPawel Serwan
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychAnalyticsConf
 
Windows Communication Foundation
Windows Communication FoundationWindows Communication Foundation
Windows Communication FoundationBartlomiej Zass
 

Similar to Azure Event Hubs - wprowadzenie (20)

[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)
 
Cometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólnaCometari Dedicated Solutions Oferta ogólna
Cometari Dedicated Solutions Oferta ogólna
 
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
 
Nowości Windows Azure
Nowości Windows AzureNowości Windows Azure
Nowości Windows Azure
 
Wirtualizacja
WirtualizacjaWirtualizacja
Wirtualizacja
 
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury
PLNOG 8: Tomaz Kozar - UCaaS jako usługa z chmury
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
 
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...
PLNOG19 - Emil Gągała - Przewodnik nowoczesnego sieciowca po pasjonującym, No...
 
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT
[PL] Chmura hybrydowa - w poszukiwaniu zewnętrznych zasobów IT
 
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
Publikacja usług Exchange 2013 w internecie. Co dalej bez TMG?
 
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...
 
infraxstructure: Paweł Serwan i Jarosław Sobel "Wirtualizacja aplikacji czy ...
infraxstructure: Paweł Serwan i Jarosław Sobel  "Wirtualizacja aplikacji czy ...infraxstructure: Paweł Serwan i Jarosław Sobel  "Wirtualizacja aplikacji czy ...
infraxstructure: Paweł Serwan i Jarosław Sobel "Wirtualizacja aplikacji czy ...
 
Tech cafe Microservices
Tech cafe MicroservicesTech cafe Microservices
Tech cafe Microservices
 
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
PLNOG 4: Krzysztof Góźdź - Od ssh do batuty - czyli jak z administratora stać...
 
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)
[infraXstructure] Wirtualizacja aplikacji czy desktopów (PL)
 
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
Przetwarzanie rozproszone z wykorzystaniem komunikacji asynchronicznej w grze...
 
Citrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFACitrix NetScaler Gateway i Azure MFA
Citrix NetScaler Gateway i Azure MFA
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonych
 
Windows Communication Foundation
Windows Communication FoundationWindows Communication Foundation
Windows Communication Foundation
 
Migracje danych serverless
Migracje danych serverlessMigracje danych serverless
Migracje danych serverless
 

Azure Event Hubs - wprowadzenie

  • 2. CZYM JEST CHMURA? • KOLOKACJA/HOTELING – tylko miejsce w serwerowni • INFRASTRUCTURE AS A SERVICE (IAAS) – sprzęt, oprogramowanie i serwisowanie • PLATFORM AS A SERVICE (PAAS) – komplet aplikacji ze spójnym interfejsem użytkownika • SOFTWARE AS A SERVICE (SAAS) – dostarcza funkcjonalności i oprogramowanie • COMMUNICATIONS AS A SERVICE (CAAS) – platforma telekomunikacyjna • INTEGRATION PLATFORM AS A SERVICE (IPAAS) – platforma integracyjna pomiędzy różnymi usługami w chmurze
  • 3. MICROSOFT AZURE • Publiczna premiera nastąpiła 1 lutego 2010 r. • Świadczy głównie usługi PaaS i SaaS
  • 4. MICROSOFT AZURE • Compute – Virtual Machines, App Services, Functions, Service Fabric • Sieć – Virtual Network, Load Balancer, Azure DNS, CDN • Magazyn - Storage, Blobl storage, Queue Storage, Data Lake Store, StorSimple • Web + Mobile –Web Apps, Mobile Apps, Media Services, Azure Search • Bazy danych – SQL Database, SQL Data Warehouse, DocumentDB, Redis Cache • Analiza – HDInsight, Machine Learning, Azure Bot Services, Data Lake Analytics • IoT – IoT Hub, Event Hubs, Stream Analytics, Notification Hubs • Integracja dla przedsiębiorstw – Logic Apps, Service Bus, API Management, BizTalk Services • Zabezpieczenia i tożsamość – Security Center, Key Vault, Azure Active Directory, Multi-Factor • Authentication • Developer Tools – VS Team Services, Azure DevTest Labs, Application Insights, HockeyApp, Xamarin • Monitoring + zarządzanie – MS Azure portal, Azure Resource Manager, Automation, Backup, Scheduler • Microsoft Azure Stack
  • 5. MICROSOFT AZURE EVENT HUBS • Platforma do strumieniowego przesyłania danych • Jest w stanie zbierać miliony zdarzeń na sekundę • Publikowanie i subskrypcja z niskim opóźnieniem • Użyteczne do: • Instrumentacji aplikacji • Przetwarzania czynności użytkownika lub workflows • Scenariuszy Internet of Thing (IoT) • Trackingu w aplikacjiach mobilnych i webowych • Przechwytywania zdarzeń w grach • Zbierania danych telemetrycznych
  • 6. CECHY AZURE EVENT HUB • Huby tworzy się w ramach przestrzeni nazw (namespace) • Wykorzystuje protokoły Advanced Message Queuing Protocol (AMQP) 1.0 lub HTTPS • Do autentykacji użytkowników używane są tokeny Shared Access Signature (SAS) zarówno na poziomie przestrzeni nazw jak i Hub’ów z uprawnieniami Send, Listen oraz Manage • Event’y przechowywane są w strumieniach na partycjach • Za kontrolę przepustowości odpowiadają Throughput Units (TU – jednostki przepływności) • Grupy odbiorców (Consumer Groups) pozwalają wielu aplikacjom odczytującym dane na niezależne przechowywanie stanu i pozycji lub przesunięcia w ramach Event Hub’a
  • 7. PARTYCJE • Jeden Event Hub może mieć od 2 do 32 partycji. Liczby partycji nie da się zmienić po utworzeniu Hub’a • Dostęp do partycji w danym czasie ma tylko jeden reader per consumer group
  • 8. • Podczas publikowania zdarzenia Event Hub używa algorytmu round-robin do „równomiernego” rozdystrybuowania event’ów na partycjach • Można publikować zdarzenia używając klucza partycji (Partition Key), dzięki czemu event’y z tym samym kluczem trafią na tą samą partycję • Klucz partycji nie jest jednoznaczny z jej identyfikatorem – jest przetwarzany przez statyczną funkcję hash’ującą w celu utworzenia połączenia z partycją • Można korzystać z większej ilości PK niż partycji • Istnieje możliwość dostępu do partycji za pomocą ID • Korzystanie z PK lub PID zapewnia przetwarzania zdarzeń w tej samej sekwencji w jakiej zostały opublikowane
  • 9. OFFSETY I CHECKPOINTY • Offset reprezentuje pozycję zdarzenia w partycji. Może być w postaci timestamp’u lub wartości przesunięcia • Konsumenci zdarzeń zobowiązani są do przechowywania informacji informacji o offsecie • Punkty kontrolne tworzone dla każdej partycji w ramach grupy odbiorców i przechowywane są po stronie Event Hub’a • Konsumenci zobowiązani są do tworzenia checkpoint’ów
  • 10. THROUGHPUT UNITS • Przepustowość 1 TU wynosi odpowiednio: • Ingress – 1 MB/s lub 1000 eventów/s (w zależności od tego co nastąpi wcześniej) • Egress – 2 MB/s • Przy przekroczeniu limitów rzucany jest wyjątek ServerBusyException • Ilość TU można zmieniać w czasie działania Event Hub’a zarówno z poziomu platformy Azure jak i API • Jedna partycja ma maksymalną skalę jednej TU • Ilość TU powinna być mniejsza lub równa ilości partycji
  • 11. OGRANICZENIA • Maksymalny rozmiar wiadomości to 256 KB (1 MB w przypadku usługi dedykowanej, tylko dla klientów z umowani Enterprise Agreement) • Do 20 grup konsumentów (1 w przypadku Basic) • Maksymalnie można mieć 20 TU (w przypadku pakietu Standard możliwe jest zwiększenie limitu po kontakcie z obsługą techniczną, dla Dedicated 1CU≈200 TU) • Ilość połączeń obsługiwanych przez brokera to 100 dla Basic, 1000 dla Standard i do 100000 dla Dedicated. Jedynie dla pakietu Basic nie ma możliwości uzyskania dodatkowych połączeń • Retencja danych do 1 dnia dla pakietów Basic i Standard oraz do 7 dni dla Dedicated (w przypadku Standard retencja powyżej 1 dnia wiąże się z dodatkowymi kosztami) • Archiwum nie jest dostępne w pakiecie Basic
  • 12. MICROSOFT VS AMAZON Amazon SQS Standard Queue Amazon SQS FIFO Queue Microsoft Azure Event Hub Basic Microsoft Azure Event Hub Standard Przepustowość Prawie nieograniczona ilość transakcji na sekundę. 300 transakcji na sekundę. Throughput Unit (ingress - 1 MB/s lub 1000 wiadomości na sekundę, egress – 2 MB/s) – do 20 jednostek. Dostarczanie wiadomości Wiadomość zostanie dostarczona przynajmniej raz (może być dostarczona więcej razy). Kolejka FIFO. Wiadomość zostanie dostarczona tylko raz. Do 32 partycji. Kolejka FIFO w przypadku i zapisu odczytu wiadomości z pojedynczej partycji za pomocą Partition ID lub Partition Key, w przeciwnym wypadku kolejność odczytu wiadomości jest niedeterministyczna. Wiadomość zostanie dostarczona tylko raz w ramach danej grupy konsumentów. Dead Letter Queues (DLQ) Wbudowany mechanizm wymagający skorzystania z kolejki tego samego typu. Brak wbudowanych mechanizmów. Odtwarzanie wiadomości Przetworzone wiadomości muszą być usunięte z kolejki manualnie albo w przypadku błędów przesłane do DQL. Mechanizm checkpoint’ów i offset’ów pozwalający developerom na zresetowanie pozycji w strumieniu. Retencja danych Do 14 dni. Do 1 dnia. Do 1 dnia. Z dodatkową usługą Azure Blob Storage do 7 dni. Rozmiar wiadomości/żądania Najmniejszą ilością danych za które pobierana jest opłata jest 64 kB (1 żądanie). Maksymalny rozmiar wiadomości to 256 kB (4 żądania). Wiadomości mogą być wysyłane i odbierane w paczkach. Opłaty pobierane są za ruch wyjściowy. Każda operacja API liczy się jako 1 żądanie. Opłaty pobierane są za ruch wejściowy. Grupy konsumentów Nie. Do 20 niezależnych grup mogących odczytywać kolejkę z wykorzystaniem własnych checkpoint’ów.
  • 13. PROGRAMOWANIE • Microsoft Azure Service Bus API: • PM> Install-Package WindowsAzure.ServiceBus • Paczka służy do wykonywania operacji na Microsoft Azure Service Bus Queues, Topics, EventHub oraz Relay
  • 14. TWORZENIE KLIENTA // manager przestrzeni nazw var manager = new Microsoft.ServiceBus.NamespaceManager("mynamespace.servicebus.windows.net"); // EventHubDescription var description = manager.CreateEventHub("MyEventHub"); var description = manager.CreateEventHubIfNotExists("MyEventHub"); // tworzenie klienta var client = EventHubClient.Create(description.Path); var client = EventHubClient.CreateFromConnectionString("your_connection_string"); // tworzenie klienta za pomocą fabryki var factory = MessagingFactory.CreateFromConnectionString("your_connection_string"); var client = factory.CreateEventHubClient("MyEventHub");
  • 15. WYSYŁANIE EVENTÓW // wysyłanie pojedynczych event'ów public void Send (EventData data); public Task SendAsync (EventData data); // wysyłanie paczek event'ów public void SendBatch (IEnumerable<EventData> eventDataList); public Task SendBatchAsync (IEnumerable<EventData> eventDataList); // sender do określonej partycji var partitionedSender = client.CreatePartitionedSender(description.PartitionIds[0]); • Connection string: Endpoint=sb://[namespace].servicebus.windows.net/;SharedAccessKeyName=RootMana geSharedAccessKey;SharedAccessKey=[key] • Microsoft.ServiceBus.Messaging.EventData – obiekt reprezentujący pojedynczą wiadomość/zdarzenie • EventHubClient – wysyłanie:
  • 16. ODBIERANIE EVENTÓW // odbiorca dla domyślnej grupy z pierwszej partycji EventHubConsumerGroup group = client.GetDefaultConsumerGroup(); var receiver = group.CreateReceiver(client.GetRuntimeInformation().PartitionIds[0]); // odczyt bool receive = true; string myOffset; while(receive) { var message = receiver.Receive(); myOffset = message.Offset; string body = Encoding.UTF8.GetString(message.GetBytes()); Console.WriteLine(String.Format("Received message offset: {0} nbody: {1}", myOffset, body)); }
  • 17. EVENTPROCESSORHOST • Zalecany mechanizm do budowania konsumentów event’ów • Zapewnia: • Bezpieczeństwo wątków (thread-safe) • Wieloprocesowość • Środowisko pracy dla klas implementujących interface IEventProcessor • Łatwy dostęp do zarządzania checkpoint’ami oraz dzierżawą (lease) partycji
  • 18. EVENTPROCESSORHOST static void Main(string[] args) { string eventHubConnectionString = "{Event Hubs namespace connection string}"; string eventHubName = "{Event Hub name}"; string storageAccountName = "{storage account name}"; string storageAccountKey = "{storage account key}"; string storageConnectionString = $"DefaultEndpointsProtocol=https;AccountName={storageAccountName};AccountKey={storageAccountKey}"; string eventProcessorHostName = Guid.NewGuid().ToString(); EventProcessorHost eventProcessorHost = new EventProcessorHost(eventProcessorHostName, eventHubName, EventHubConsumerGroup.DefaultGroupName, eventHubConnectionString, storageConnectionString); Console.WriteLine("Registering EventProcessor..."); var options = new EventProcessorOptions(); options.ExceptionReceived += (sender, e) => { Console.WriteLine(e.Exception); }; eventProcessorHost.RegisterEventProcessorAsync<SimpleEventProcessor>(options).Wait(); Console.WriteLine("Receiving. Press enter key to stop worker."); Console.ReadLine(); eventProcessorHost.UnregisterEventProcessorAsync().Wait(); } IMPLEMENTACJA
  • 19. IEVENTPROCESSOR ODBIERANIE EVENT’ÓW class SimpleEventProcessor : IEventProcessor { async Task IEventProcessor.CloseAsync(PartitionContext context, CloseReason reason) { // logowanie powodu zamknięcia procesora oraz tworzenie checkpointu // if (reason == CloseReason.Shutdown) await context.CheckpointAsync(); } Task IEventProcessor.OpenAsync(PartitionContext context) { // logowanie np.: context.Lease.PartitionId, context.Lease.Offset // wystartowanie licznika lub Stopwatch do tworzenie checkpointów } async Task IEventProcessor.ProcessEventsAsync(PartitionContext context, IEnumerable<EventData> messages) { foreach (EventData eventData in messages) { string data = Encoding.UTF8.GetString(eventData.GetBytes()); // przetwarzanie event'ów } // dodatkowy kod obsługi, np.: tworzenie checkpoint'ów po upływie zadanego czasu // lub przepełnienia wartości licznika } }
  • 20. DZIĘKUJĘ ZA UWAGĘ Mirosław Piątkowski miroslaw.piatkowski@vimanet.com