W ramach VicodeIn - Mirosław Piątkowski opowiada o Azure Events Hubs m.in. jak przechowywane są strumienie, co to jest "offset" i jakie ograniczenia nakłada na nas Azure.
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
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