Strona Główna / Blog

Azure Cosmos DB – Przewrót Kopernikański w Bazach Danych

Michał Furmankiewicz

Michał Furmankiewicz

Ponad 14 lat w branży IT. Konsultant i architekt projektów związanych z Azure i Azure Stack. Entuzjasta rozwiązań PaaS i Serverless. Autor bloga http://architektwchmurze.pl.

Mój gościnny wpis na blogu Chmurowiska miał wyróżnić tylko jedną usługę Microsoft Azure – a jest ich przecież całe mnóstwo. Wiele z nich jest bardzo ciekawych, sporo – niezwykle innowacyjnych. Jeśli jednak musiałbym wybrać jedną, która jest dla mnie technicznym majstersztykiem, postawiłbym na Azure Cosmos DB.

Nazwa jest równie kosmiczna jak i sama usługa, która w tym momencie pozostaje bezkonkurencyjna. Pomimo tego, w dalszym ciągu wiele osób zastanawia się, czym tak naprawdę Azure Cosmos DB jest oraz jak i kiedy z niej korzystać.

Azure Cosmos DB – Globalnie Dystrybuowana Baza Danych Microsoft

Azure Cosmos DB to globalnie rozproszona, wielomodelowa baza danych dla aplikacji, które potrzebują niskich opóźnień i wysokiej skalowalności.

  • Przede wszystkim, jest to baza typu NoSQL. Bazy tego typu nie oferują relacji, nie wymuszają schematu składowania danych, a ich język zapytań nie jest tak rozbudowany jak w przypadku baz relacyjnych.
  • Cosmos oferuje wiele interfejsów API dostępu do danych (między innymi Cassandra, MongoDB, czy Azure Table).
  • Baza dostępna jest z wielu regionów Azure na całym świecie.
  • Usługa oferuje pięć różnych poziomów spójności danych oraz SLA oparte o pięć parametrów.
  • Dodatkowo, od wersji 2018, Cosmos DB daje nam możliwość tworzenia bazy typu multi-master, czyli zapisu do wielu regionów równocześnie.
  • Model kosztowy? Bardzo elastyczny. Płacisz wyłącznie za oczekiwaną wydajność, którą może kontrolować i zmieniać w trakcie.

Jeśli chcesz wiedzieć więcej, zachęcam do lektury tego artykułu. Zwróć szczególną uwagę na linki do wykładów video w sekcji References, gdzie twórcy rozproszonych systemów rozmawiają o naukowych koncepcjach wykorzystanych w bazie (jeden z nich za pracę przy bazie Microsoftu otrzymał nagrodę Turinga). Mega ciekawe!

Kosmiczne Zabawki – Korzystać? TAK! Ale Ostrożnie

Do tej pory wszystko to brzmi jak bajka:) Albo przynajmniej jak sielankowy wstęp.

Żeby jednak nasza kosmiczna podróż nie zakończyła się katastrofą, warto zrozumieć, do jakich scenariuszy nadaje się nasza usługa. Inaczej czeka Cię poważne rozczarowanie.

Poniżej specjalnie dla Ciebie przygotowałem kilka scenariuszy, w których Azure Cosmos DB sprawdza się znakomicie i pomoże Ci stworzyć innowacyjne rozwiązania.

3, 2, 1, GO!

Telemetria / IoT / OT i duże Strumienie Danych

Nasz pierwszy scenariusz przedstawia bardzo typowe zastosowanie baz typu NoSQL. Z reguły mierzymy się z dużą skalą danych pochodzących z różnych urządzeń, a schemat danych często się zmienia.  

Głównym zadaniem dla Cosmos DB w tym scenariuszu jest przyjęcie całego strumienia, wykonanie na nim jakiejś transformacji i zapisanie zmian.

Kosmiczna baza danych nie zajmuje się agregacjami. Tego typu bazy architektonicznie nie są na to przygotowane. Natomiast jeśli dotychczas Lambda kojarzyła Ci się wyłącznie z serverless, to rzuć okiem na (niedoskonały) opis na Wikipedii: https://en.wikipedia.org/wiki/Lambda_architecture.

Dlaczego jeszcze Cosmos DB tak dobrze pasuje do tego scenariusza?

Oto kilka powodów:

  • Projekty tej klasy cechują się dużą zmiennością ruchu i oczekiwanej skali rozwiązania – pomoże tu skalowanie Cosmos DB i wykorzystanie wielu regionów.
  • Przy tej charakterystyce danych dość łatwo wykonać database sharding.
  • Dane z reguły i tak są w postaci dokumentowej, idealnie dla tego typu bazy
  • Czasami w tego typu projektach potrzeba typowej bazy dokumentowej, a innym razem przyda się Gremlin ze swoim podejściem grafowym. W obu przypadkach CosmosDB dobrze się sprawdzi.

Branża E-commerce – Strona z Produktami lub Ofertą

Rozwiązania dla branży e-commerce cechuje bardzo duża zmienność, pokaźna skala, a także bardzo mocne profilowanie oferty z wykorzystaniem danych z różnych źródeł, w dużej mierze zewnętrznych (media społecznościowe, telemetria ze stron, logi z innych portali, ciasteczka, profile kupione w zewnętrznych serwisach, itd.).

Co więcej, bardzo często potrzebujemy tutaj wiele repozytoriów danych, ponieważ nasz biznes to nie tylko udostępnianie strony z ofertą produktów, ale również interfejsy API dla partnerów, cały proces obsługi transakcji i wiele, wiele innych.

Cosmos DB oferuje ciekawą funkcjonalność, Change Feed, która pozwala np. wywołać API innego systemu, jeśli w bazie pojawi się operacja transakcji w sklepie.

Jeśli dodamy do tego możliwość integracji Cosmos DB np. z Azure Databricks, mamy już piękny pipeline składowania, przechowywania i analizy danych potrzebny w naszym rozwiązaniu.

I jeszcze jedno, od niedawna w Cosmos DB można rozłożyć koszty po wielu kolekacjach w ramach jednego konta. Jeśli bawisz się w tę usługę na poważnie, to zdecydowanie jest opcja dla Ciebie!

Gra dla Całego Świata lub nowa Sieć Społecznościowa

Takiego projektu jeszcze nie mieliśmy ale wszystko przed nami;) Szczególnie blisko nam do sieci społecznościowych.

Dlaczego Cosmos DB się tu sprawdzi?

  • Gry i portale społecznościowe mają atrakcyjny profil użycia – obsługują wiele zapytań, o zróżnicowanych porach dnia i w różnych okresach działania. Cosmos DB jest pod tym względem świetnym wyborem, ponieważ skalowanie można ustawić bardzo dynamicznie.
  • Co więcej, w takich scenariuszach ważna jest wydajności i dostępność ale już niekoniecznie spójność danych. Facebook czy LinkedIn nie potrzebują zliczać komentarzy pod postem w każdej chwili. Dlatego naprawdę docenisz tutaj różne modele spójności usługi, szybkość czasów odpowiedzi czy kosmiczną skalę, która umożliwi Ci działanie najbliżej Twojego klienta.

Globalne Strony z Przewagą User Generated Content

Na ostatnim SQL Day 2018 stwierdziłem, że przy projektach globalnych trudno o lepszą bazę niż Cosmos DB. Zdania nie zmieniam.

Jeśli Twoja strona bazuje na danych z różnych źródeł i są to komentarze, oceny, czy wpisy użytkowników, Azure Cosmos DB będzie idealnym wyborem, min. dlatego, że różne typy danych trafią do osobnych repozytoriów na całym świecie, będą utrzymywane w różnych modelach, z oddzielnymi SLA i poziomami spójności.

I zapewne będą także inaczej odczytywane.

Event Sourcing

Cosmos DB wspiera koncepcję Event Sourcing. Jeśli o tym nie słyszałeś, rzuć okiem na ten artykuł: http://microservices.io/patterns/data/event-sourcing.html.

Warto zaznaczyć, że Cosmos DB zamiast pełnić po prostu funkcję miejsca składowania danych, naturalnie wpisuje się w rolę brokera wiadomości. Teraz dopiero otwiera się przed nami ciekawy zestaw możliwości, gdzie strumień danych wywołuje różne interfejsy API, w różnych systemach, i pozwala na bardzo ciekawe scenariusze użycia.

Właśnie nad takim projektem będziemy współpracować z jedną z globalnych firm. Stay tuned;)

Azure Cosmos DB – Inne Scenariusze

Przedstawiłem dziś 4 wybrane zastosowania Cosmos DB, ale jest ich o wiele, wiele więcej. Usługa Azure oferuje ogrom możliwości i przy odpowiednim rozwiązaniu i dobrze skrojonym scenariuszu, naprawdę działa nieziemsko.

Jednak aby uniknąć rozczarowania usługą, zalecam sprawdzenie, czy Twoje rozwiązanie może sobie pozwolić na bazę NoSQL i wpisuje się w jeden ze scenariuszy.

Jeżeli nie, to… odradzałbym jej wykorzystanie. Będziesz zawiedziony słabą wydajnością i zły, że baza jest droga, ma ograniczony język zapytań i trudna w obsłudze. Byłem, widziałem, szkoda czasu.

A jeśli Ty też masz jakieś ciekawe doświadczenia z Cosmos DB, którymi chciałbyś się podzielić w komentarzach, chętnie o nich posłucham!

Dołącz do listy mailingowej!

Dołącz do naszego newslettera

Staramy się wysyłać tylko wartościowe informacje, np. co miesiąc dostaniesz spis najważniejszych nowości z chmur Azure, AWS i GCP, z krótkimi opisami i linkami.