Praktyczne aspekty realizacji systemów rozproszonych 1000-2M21PRS
Obsługa wielu zapytań na sekundę w krótkim limicie czasu jest prawdziwym wyzwaniem. W warunkach rozproszonego systemu, kiedy konieczne jest gromadzenie dużych ilości danych, trzeba się zmierzyć z wieloma problemami natury architektonicznej oraz implementacyjnej.
Przedmiot porusza tematykę problemów i zagadnień występujących przy realizacji systemów rozproszonych o bardzo dużej skali i jest oparty na doświadczeniach z rzeczywistej implementacji takiego systemu (5M+ zapytań na sekundę, 200TB+ danych dziennie, 2K+ serwerów, 4 centrów danych na różnych kontynentach). Omówimy praktyczne aspekty budowy systemów o wysokiej przepustowości, procesujących petabajty danych dziennie w rozproszonych geograficznie centrach danych. Poruszymy typowe problemy oraz rozważymy decyzje związane z utrzymaniem i rozwojem takich systemów. Przyjrzymy się technikom efektywnej wymiany danych pomiędzy komponentami systemu, zagadnieniom związanym z przechowywaniem oraz procesowaniem dużej ilości danych. Zajmiemy się także praktycznymi aspektami organizacji infrastruktury wspomagającej uczenie maszynowe w realiach systemów o dużej skali.
Ćwiczenia będą polegały na stworzeniu w trakcie semestru działającego rozproszonego systemu, którego zadaniem będzie obsłużenie dużej ilości ruchu. System będzie tworzony przyrostowo. Na pierwszych zajęciach zostanie stworzony jego zalążek na podstawie minimalnych wymagań. W toku kolejnych zajęć będą przedstawiane kolejne wymagania, które spowodują konieczność rozbudowy systemu przez studentów.
1. Wprowadzenie: wymagania i kompromisy związane z systemami dużej skali, przykłady architektury.
2. Skalowalność systemów, podział na data centers, wysoka dostępność, load-balancing, infrastruktura sieciowa.
3. Wdrażanie aplikacji w środowisku rozproszonym (Docker, Kubernetes), zarządzanie infrastrukturą sprzętową (Puppet, Ansible).
4. Monitoring stanu zdrowia systemów o dużej skali (Graphite, Grafana, Icinga).
5. Efektywna komunikacja pomiędzy komponentami systemów rozproszonych (Kafka).
6. Metody procesowania strumieni danych (Kafka Streams, Kafka Workers).
7. Przechowywanie i synchronizacja danych (polyglot persistence, bazy danych NoSQL typu Aerospike, FoundationDB, Cassandra, Memcached).
8. Zarządzanie strukturami i schematami danych w systemach rozproszonych (Avro, Schema Registry).
9. Organizacja i implementacja infrastruktury wspomagającej uczenie maszynowe i
analizę danych w środowisku systemów rozproszonych (MapReduce, Spark, rozproszone systemy plików typu HDFS).
10. Rozwiązania chmurowe - podejścia Infrastructure as a Service (IaaS), Platform as a Service (PaaS) i Serverless, zalety i wady, model hybrydowy, analiza kosztów, przykładowe przypadki użycia (Google Compute Engine, BigQuery, Cloud Storage).
Rodzaj przedmiotu
Tryb prowadzenia
Koordynatorzy przedmiotu
Efekty kształcenia
Wiedza:
1. Zna zagadnienia związane z inżynierią niezawodności w realiach dużych systemów.
2. Zna metody i narzędzia wspomagające wdrażanie aplikacji w środowisku rozproszonym.
3. Zna zagadnienia związane z konteneryzacja aplikacji.
4. Zna metody i narzędzia do monitorowania stanu zdrowia infrastruktury i aplikacji.
5. Zna przypadki użycia oraz architekturę systemów typu pub/sub (Kafka).
6. Zna biblioteki do przetwarzania strumieni danych z ekosystemu Kafka.
7. Zna rodzaje popularnych nierelacyjnych baz danych i ich zastosowania w systemach rozproszonych o dużej skali.
8. Zna zagadnienia związane z wersjonowaniem i kompatybilnością struktur danych wykorzystywanych w systemach rozproszonych.
9. Zna podstawowe aspekty związane ze składowaniem i optymalizacją przetwarzania dużych danych.
10. Ma wiedzę na temat analizy złożoności algorytmów rozproszonych i algorytmów przetwarzających duże dane.
11. Zna zasady projektowania algorytmów zgodnych z paradygmatem MapReduce.
12. Rozumie korzyści i wady wykorzystania usług chmurowych w architekturze systemu rozproszonego.
Umiejętności:
1. Potrafi zaprojektować architekturę systemu rozproszonego o dużej skali.
2. Potrafi podjąć właściwe decyzje uwzględniające konieczne kompromisy przy projektowaniu systemów rozproszonych.
3. Potrafi skonfigurować podstawowe elementy systemu odpowiedzialne za utrzymanie wysokiej niezawodności.
4. Potrafi stworzyć kontener z aplikacją i wdrożyć go w środowisku rozproszonym.
5. Potrafi skonfigurować wypełnianie centralnego dziennika zdarzeń w środowisku rozproszonym.
6. Potrafi skonfigurować zbieranie podstawowych metryk użycia zasobów na serwerach.
7. Potrafi skonfigurować klaster Kafka i przy jego użyciu zaimplementować komunikację.
8. Potrafi zaimplementować aplikację przetwarzającą strumienie danych, którą można wygodnie i dynamicznie skalować.
9. Potrafi adekwatnie dobrać nierelacyjne źródło danych dla klasy problemu w rozproszonym systemie o dużej skali.
10. Potrafi wyrazić problemy w modelach obliczeń rozproszonych takich jak MapReduce.
11. Potrafi diagnozować wąskie gardła w algorytmach rozproszonych służących do przetwarzania danych.
Przedmiot będzie prowadzony przez inżynierów z firmy RTB House pracujących na co dzień przy rozwoju i utrzymaniu systemu odpowiedzialnego za inteligentne wyświetlanie reklam w Internecie z wykorzystaniem algorytmów deep learning i działającego w oparciu o model Real Time Bidding.
Kryteria oceniania
Ocena końcowa na podstawie projektu stworzonego w trakcie semestru.
Literatura
1. Site Reliability Engineering - Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy
2. Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems - Martin Kleppmann
3. Fundamentals of Software Architecture: An Engineering Approach - Mark Richards
4. Making Sense of Stream Processing - Martin Kleppmann
5. Kafka: The Definitive Guide - Neha Narkhede, Gwen Shapira, Todd Palino
6. Microservices: Up and Running: A Step-By-Step Guide to Building a Microservices Architecture - Ronnie Mitra, Irakli Nadareishvili
Więcej informacji
Więcej informacji o poziomie przedmiotu, roku studiów (i/lub semestrze) w którym się odbywa, o rodzaju i liczbie godzin zajęć - szukaj w planach studiów odpowiednich programów. Ten przedmiot jest związany z programami:
Dodatkowe informacje (np. o kalendarzu rejestracji, prowadzących zajęcia, lokalizacji i terminach zajęć) mogą być dostępne w serwisie USOSweb: