Apache Cassandra: історія, екосистема, можливості та альтернативи 

Apache Cassandra увійшла до списку найкращих рішень для баз даних у світі, згідно з підрахунками DB-Engines. Ця СУБД посідає 11 місце у рейтингу станом на початок жовтня 2022 року. Варто зазначити, що Cassandra займає першу позицію серед сховищ з широким стовпчиком вже понад рік поспіль. Що особливого в цій БД? Нумо розбиратися. 

Що таке база даних Apache Cassandra?

Apache Cassandra — розподілена система управління базами даних, що належить до класу NoSQL-систем. Розрахована на створення високомасштабованих і надійних сховищ великих масивів даних, представлених у вигляді хеша. Має активну спільноту, де користувачі обговорюють використання та останні розробки.

Промислові рішення на базі Cassandra використовують компанії: Cisco, IBM, Cloudkick, Reddit, Digg, Rackspace і Twitter.

Історія бази даних Cassandra

Над розробкою Cassandra працювали Авінаш Лакшман, один з розробників Dynamo, та Прашант Малік. Створили її через потребу в масивній, глобально розподіленій базі даних з високою доступністю. Важливо, щоб нова СУБД могла масштабуватися до розміру сучасних вебдодатків та соціальних мереж. 

Цікаво знати. Розробники СУБД назвали свій проєкт на честь міфологічної троянської пророчиці Кассандри. Це була алюзія на прокляття оракула. Нагадаємо, що Oracle Corporation спеціалізується на випуску систем керування БД. 

Cassandra розробили для розв’язання проблеми Inbox Search для Facebook. Зрештою, корпорація Meta замінила Cassandra на HBase — іншу базу даних NoSQL для цього проєкту. Проте, вони продовжують використовувати Cassandra у своєму іншому проєкті — Instagram, який підтримує понад 1 мільярд активних користувачів на місяць.

У той час як документація Bigtable і Dynamo була оприлюднена, самі бази даних залишалися за зачиненими дверима Google та Amazon. Meta пішла іншим шляхом. Вона не лише опублікувала технічний документ Cassandra, але й зробила його вихідний код загальнодоступним на Google Code. Сталося це у липні 2008 року. Вже у 2009 році проєкт передали під егіду Apache Software Foundation. 

Відтоді, такі ентузіасти як Джонатан Елліс з Rackspace почали робити свій внесок у проєкт. Це призвело до того, що Cassandra стала опенсорсним ПЗ під керівництвом спільноти. Пізніше Елліс став головою Apache Cassandra і співзасновником DataStax.

Коли проєкт Apache Cassandra досяг версії 1.0, його вже почали використовувати інші імениті компанії, такі як Cisco, Digg, Rackspace, Reddit, Twitter та інші. До 2012 року базу даних Cassandra розгорнули більш ніж 1000 разів, у тому числі такі компанії, як eBay, Disney та Netflix. З того часу проєкт Apache Cassandra регулярно оновлюється. 

Станом на 2022 рік Cassandra увійшла до топ 15 найпоширеніших рішень для баз даних у світі.

Феномен Apache Cassandra

Принципи проєктування бази даних Cassandra

СУБД Cassandra розробили для підтримки високої пропускної спроможності та можливості горизонтального масштабування. «Cassandra націлена на роботу поверх інфраструктури із сотень вузлів… призначена для роботи на дешевому масовому обладнанні та підтримує високу пропускну спроможність запису, не жертвуючи при цьому ефективністю читання», — йдеться у технічному документі. Також, в ньому зазначена необхідність глобального розповсюдження даних: «Оскільки користувачі обслуговуються з центрів обробки даних, які географічно розподілені, можливість реплікації даних між центрами їх обробки була ключем до скорочення затримок пошуку».

Частина проєктних завдань включала і відмову від обробки. Збої були не просто ймовірністю, а постійною проблемою, пов’язаною з безперервним зростанням: «Робота зі збоями в інфраструктурі, що складається з тисяч компонентів, є нашим стандартним режимом роботи… Таким чином, програмні системи мають бути побудовані таким чином, щоб розглядати невдачі як норму, а не як виняток».

Ще одним ключовим принципом розробки Cassandra стала можливість автоматичного поділу даних для поступового масштабування. Систему розробили так, щоб вона могла додавати нові вузли та перебалансовувати дані по всьому кластеру. На відміну від іншої поширеної на той час практики ручного поділу або сегментування даних.

Щоб забезпечити високу доступність системи та забезпечити надійність даних, в Cassandra запровадили автоматичну однорангову реплікацію. За наявності дублювання даних, втрата кількох вузлів означатиме, що дані все одно збережуться. Ще однорангова мережа означала, що жоден вузол не можна було відключити, щоб зробити систему недоступною. Кожна транзакція використовувала окремий вузол-координатор, тому єдиної точки відмови не було.

Формат зберігання даних Cassandra

Ключова особливість Cassandra також пов’язана з тим, як БД зберігає дані. Замість того, щоб постійно змінювати великі монолітні файли даних, система покладається на запис файлів на диск в незмінному стані

Якщо дані змінилися для певного запису в БД, зміни записуватимуться в новий незмінний файл. Автоматичні системні процеси, що запускаються періодичністю, розміром або швидкістю зміни файлів, будуть ущільнюватися. Тобто кілька цих незмінних файлів будуть збиратися разом і записувати новий єдиний складовий табличний файл з останніми даними. Формат цих незмінних файлів даних відомий як Sorted Strings Tables або SSTables.

Оскільки Cassandra розподіляє дані по кількох вузлах і кількох файлах SSTable на вузол, системі необхідно розуміти, де можна знайти конкретний запис. Для цього використовується кільцева архітектура для розподілу діапазонів даних вузлів. І всередині вузла вона використовує фільтри Блума, щоб визначити, яка SSTable містить конкретні дані, що запитуються.

Мова запитів Cassandra (CQL)

Для доступу до даних Cassandra також був потрібний API. Оригінальний API складався всього з трьох методів: вставка, отримання та видалення. Згодом ці основні запити розширили. API, який врешті вийшов, з часом отримав назву Cassandra Query Language (CQL). CQL багато в чому схожий на мову структурованих запитів ANSI (SQL), що використовується для систем управління реляційними базами даних (RDBMS). Проте, в CQL відсутні деякі специфічні функції SQL, такі як можливість виконувати JOIN для декількох таблиць. Є деякі команди, які однаково допустимі для CQL та SQL. З іншого боку, ці дві мови запитів мають різні можливості. Таким чином, попри велику подібність CQL та SQL, Cassandra формально класифікується як база даних NoSQL.

Існує також старіший інтерфейс запитів для Cassandra, відомий як Apache Thrift, який застарів із випуском Cassandra 4.0.

Екосистема Apache Cassandra

Cassandra є однією з найпопулярніших баз даних у світі. Відповідно, існує безліч інтеграцій, що дозволяють їй взаємодіяти з іншими опенсорсними та комерційними проєктами.

Деякі з них включають інтеграції для адаптації Cassandra, щоб підтримувати нові моделі даних та варіанти використання, такі як KairosDB або JanusGraph. Інші призначені для інтеграції з рішеннями потокової передачі даних, такими як Apache Kafka або набір інструментів Lightbend Akka.

Існують також інтеграції Cassandra із системами аналітики великих даних. Деякі хороші приклади цього включають об’єднання Cassandra з Apache Spark, Hadoop (Pig/Hive), пошуковими системами (такими як Solr або Elasticsearch) та рішеннями для швидкого розгортання пам’яті Apache Ignite.

Крім того, існують різні інструменти та технології для віртуалізації, розгортання та управління Cassandra, у тому числі для Docker, Kubernetes та Mesosphere DC/OS.

Опенсорсна Apache Cassandra також реалізована у багатьох продуктах та службах як базова СУБД. Наприклад, vCloud Director від VMWare. K8ssandra — це один з численних проєктів з відкритим вихідним кодом. Він дозволяє розгортати Cassandra на будь-якому движку Kubernetes: від постачальників загальнодоступних хмар до VMWare та OpenStack. 

Навколо Cassandra виникло безліч додаткових технологій з відкритим вихідним кодом, щоб спростити розробникам створення програм з її допомогою. 

Варто відзначити проєкт Stargate. Це опенсорсний шлюз даних, який надає рівень API, що підключається. Він значно спрощує взаємодію розробників з будь-якою базою даних Cassandra. API-інтерфейси REST, GraphQL, Document та gRPC дозволяють легко розпочати кодування за допомогою Cassandra без необхідності вивчати складності моделювання даних CQL та Cassandra.

Серед розробників додатків широка популярність Cassandra забезпечена клієнтами, написаними для підключення до неї з різних мов програмування. Серед них: Clojure, C++, C#/.NET, Dart, Elixir, Erlang, Go, Java, NodeJS/Javascript, Perl, PHP, Python, Ruby, Rust, Scala.

Можливості Apache Cassandra: сильні та слабкі сторони

Apache Cassandra зазвичай використовують, коли потрібно швидко створити прототип і розгорнути БД сховища ключів і значень. Які, своєю чергою, масштабуються до кількох гігабайтів або терабайтів інформації. Cassandra також використовується для «завжди включених» проєктів із транзакційними запитами великого обсягу (читання та запис).

Cassandra найбільше підходить для сховищ з широким стовпчиком, моделей даних «ключ-значення» та тимчасових рядів. Її також можна використовувати як базовий рівень зберігання графової бази даних, але тільки за допомогою додаткових пакетів, таких як JanusGraph.

З іншого боку, Apache Cassandra не підходить для невеликих наборів даних, скажімо, менше десятків гігабайт. Тобто, коли масштабованість чи доступність БД не є життєво важливими питаннями або коли кількість транзакцій відносно невелика.

Також важливо пам’ятати, що Apache Cassandra — це СУБД NoSQL з відкритим вихідним кодом, яка використовує власну мову запитів CQL. Відповідно, її слід використовувати, коли моделі даних не вимагають нормалізованих даних зі з’єднаннями JOIN між таблицями, які найбільше підходять для систем SQL RDBMS.

Порівняння властивостей систем Cassandra та HBase

CassandraHBase
Загальні відомостіСховище з широким стовпчиком на основі концепцій BigTable і DynamoDBСховище з широким стовпчиком на основі Apache Hadoop і концепцій BigTable
Рейтинг DB-Engines11 місце у загальному списку. 1 місце серед сховищ з широким стовпчиком26 місце у загальному списку. 2 місце серед сховищ з широким стовпчиком
РозробникApache Software Foundation. Проєкт верхнього рівня Apache, спочатку розроблений FacebookApache Software Foundation. Проєкт верхнього рівня Apache, спочатку розроблений Powerset
Поточний реліз4.0.6, серпень 2022 року2.3.4, січень 2021 року
ЛіцензіяОпенсорсОпенсорс
Мова реалізаціїJavaJava
Серверні ОСBSD, Linux, OS X, WindowsLinux, Unix, Windows (за допомогою Cygwin)
Вторинні індексиЛише запити рівності
Підтримка SQLSQL-подібні оператори SELECT, DML і DDL (CQL)
API та інші методи доступуВласний протокол Thrift — CQL (Cassandra Query Language, SQL-подібна мова)Java API, RESTful HTTP API, Thrift
Мови програмування, що підтримуютьсяC#, C++, Clojure, Erlang, Go, Haskell, Java, JavaScript, Perl, PHP, Python, Ruby, ScalaC, C#, C++, Groovy, Java, PHP, Python, Scala
Серверні скриптиСпівпроцесори в Java
Методи зберігання даних на вузлахШардинг (немає єдиної точки відмови)Шардинг 
Методи резервного зберігання даних на кількох вузлахВибіркова реплікація. Можливий географічний розподіл серверівРеплікація з кількох джерел
Підтримка одночасної обробки данихТакТак
Можливості в пам’ятіНемає можливості зберігати структури лише в пам’ятіДеякі або всі структури можна зберігати лише в пам’яті
Управління доступомДля кожного об’єкта можна визначити права доступу для користувачівСписки контролю доступу (ACL) для RBAC, інтеграція з Apache Ranger для RBAC і ABAC
Технічна документаціяcassandra.apache.org/doc/latest hbase.apache.org 

Проєкти, побудовані на Cassandra

Декілька організацій створили служби на основі Cassandra, щоб зробити її більш доступною і розв’язати деякі проблеми. 

Наприклад, при використанні сервісів хмарних обчислень (приміром, AWS Lambda), масштабування, планування місткості та керування витратами — автоматизоване. Внаслідок цього виходить просте в обслуговуванні та економічне ПЗ. Але оскільки сучасні БД зберігають дані, розбиваючи їх у вузлах кластера бази, їх виявилося складно зробити безсерверними. Через це підприємства мали вгадувати, яким буде їхнє пікове використання, і платити за цей рівень, навіть якщо вони не використовують всю потужність. 

Світ змінився, коли DataStax оголосила, що її хмарна база даних Astra DB тепер доступна як безсерверна послуга з оплатою в міру використання. Чи варто казати, що вона побудована на Cassandra? Згідно з недавнім дослідженням аналітичної компанії GigaOm, безсерверна база даних Astra DB може зекономити значні кошти компаніям. Розробники платитимуть лише за те, що вони використовують, незалежно від того, скільки кластерів баз даних вони створюють та розгортають. І це лише один з яскравих прикладів. 

Варіанти та альтернативи Apache Cassandra

Cassandra породила низку баз даних, які розширюють її можливості або працюють із використанням її API.

  • ScyllaDB — альтернатива Cassandra, повністю переписана на C++ з додатковими функціями. Має як відкритий вихідний код, так і комерційний варіант. Також має комерційну хмарну версію.
  • Datastax Enterprise — комерційний варіант Cassandra з додатковими функціями. Також підтримує комерційну хмарну версію.
  • Microsoft Cosmos DB — комерційна хмарна база даних, що підтримує Cassandra CQL-сумісний API.
  • Amazon Keyspaces (for Apache Cassandra) — гібрид Apache Cassandra для інтерфейсу CQL та DynamoDB для масштабованості. Раніше відомий як Amazon Managed Cassandra Service. 
  • Yugabyte — опенсорсна база даних, що підтримує Cassandra CQL-сумісний API. Також має комерційну хмарну версію.

Висновок

У той час як багато баз даних з революції NoSQL і контрреволюції NewSQL пішли в історію, Cassandra витримала випробування часом. Вона перетворилась на надійну СУБД, яка масштабується з продуктивністю і надійністю краще, ніж будь-яка інша.

Через чотирнадцять із лишком років після винаходу Cassandra, проєкт та її похідні використовуються приблизно 90% компаній зі списку Fortune 100. Привабливість проєкту тільки зростає, адже він прагне використовувати сьогоднішній «потік даних» з додатками, які поширюються по всьому світу і завжди доступні. Додайте до цього розуміння, що складності використання Cassandra та різні бар’єри — йдуть у минуле. Цьому свідчать досягнення в екосистемі Cassandra, такі як Stargate, K8ssandra та хмарні сервіси, такі як Astra DB. Таким чином, справедливо буде сказати, що хоча Cassandra випередила свій час у 2007 році, вона цілком підготовлена до вимог сучасності.

Хочете навчитися адмініструвати та налаштовувати бази даних на Linux? Тоді записуйтесь на курс від IT Education Center. Тут ви дізнаєтеся про тонке налаштування, реплікацію, безпеку популярних СУБД та багато іншого. До слова, курс передбачає окремий розділ про Apache Cassandra 😉

Залишити відповідь

Дякуємо, що поділились