Тест несоответствия импеданса: ваш уровень данных – сложный беспорядок?

Тестнесоответствияимпедансавашуровеньданных8211сложныйбеспорядок

Раджа Рао

Раджа был инженером, защитником разработчиков и техническим писателем с почти двадцатилетним опытом работы в индустрии программного обеспечения. Сейчас он перешел на маркетинг роста и пишет в основном о базах данных и больших данных.

«Простота – это высшая изощренность». – Леонардо да Винчи

« Большая часть информации не имеет отношения к делу, и большая часть усилий тратится впустую, но только эксперт знает, что игнорировать. »- Джеймс Клир, Atomic Habits

У вас есть причудливый конвейер данных с множеством разных систем. На первый взгляд это выглядит очень изощренно, но на самом деле под капотом – сложный беспорядок. Для соединения разных частей может потребоваться много сантехнических работ; может потребоваться постоянный контроль; для его запуска, отладки и управления может потребоваться большая команда с уникальными знаниями. Чем больше систем вы используете, тем больше мест вы дублируете свои данные и тем больше шансов, что они не синхронизируются или устареют. Более того, поскольку каждая из этих подсистем разрабатывается независимо разными компаниями, их обновления или исправления ошибок могут нарушить ваш конвейер и уровень данных.

Если вы не будете осторожны, вы можете в конечном итоге получится следующая ситуация, изображенная в трехминутном видео ниже. Я настоятельно рекомендую вам посмотреть его, прежде чем продолжить.

Сложность возникает из-за того, что даже если каждая система может показаться простой на первый взгляд, на самом деле они вносят следующие переменные в ваш конвейер и могут добавить тонну сложности:

  1. Протокол – как система передает данные? (HTTP, TCP, REST, GraphQL, FTP, JDBC).
  2. Данные формат – какой формат поддерживает система? (Двоичный, CSV, JSON, Avro).
  3. Схема данных и эволюция – Как хранятся данные? (таблицы, потоки, графики, документы).
  4. SDK и API – Есть ли система предоставляет необходимые SDK и API?
  5. ACID и BASE – Это обеспечить согласованность ACID или BASE?
  6. Миграция – предоставляет ли система простой способ перенести все данные в систему или из системы?
  7. Долговечность – Что гарантии долговечности системы?
  8. Доступность – Какие гарантии дает система?
  9. есть в наличии? (390. 9%, 288. 1214%).

  10. Масштабируемость – Как это масштабируется?
  11. Безопасность – Насколько надежно система?
  12. Производительность – насколько быстро система обрабатывает данные?
  13. Варианты хостинга – хостинг, только локально, или их сочетание?
  14. Облака – работает ли это в моем облаке, регионе и т. Д.?
  15. Дополнительные системы – Нужна ли дополнительная система? (например, Zookeeper для Kafka).

такие переменные, как формат данных, схема и протокол, добавляют к так называемым накладным расходам на преобразование. Другие переменные, такие как производительность, надежность и масштабируемость, увеличивают так называемые накладные расходы конвейера. В совокупности эти классификации способствуют так называемому «рассогласованию импеданса». Если мы сможем это измерить, мы сможем вычислить сложность и использовать ее для упрощения нашей системы. Мы вернемся к этому чуть позже.

Теперь вы можете возразить, что ваша система, хотя и может показаться сложной, на самом деле является самой простой системой для ваших нужд. Но как вы можете это доказать?

Другими словами, как вы на самом деле измеряете и определяете, действительно ли ваш уровень данных является простым или сложным? И во-вторых, как вы можете оценить, останется ли ваша система простой по мере добавления дополнительных функций? То есть, если вы добавите больше функций в свою дорожную карту, нужно ли вам также добавить больше систем?

Вот где вступает в действие «тест на несоответствие импеданса». Но давайте сначала посмотрим в том, что такое рассогласование импеданса, тогда мы перейдем к самому тесту.

Что такое рассогласование импеданса?

Термин возник в электротехнике для объяснения несоответствия электрического импеданса, приводящего к потере энергии при передаче энергии. переносится из точки А в точку Б.

Проще говоря, это означает, что то, что у вас есть, не соответствует тому, что вам нужно. Чтобы использовать это, вы берете то, что имеете, превращаете в то, что вам нужно. Следовательно, существует несоответствие и накладные расходы, связанные с исправлением несоответствия.

В нашем случае у вас есть данные в некоторой форме или количестве, и вам необходимо преобразовать их, прежде чем мы можно использовать. Преобразование может происходить несколько раз и может даже использоваться несколько промежуточных систем.

В мире баз данных несоответствие импеданса происходит по двум причинам:

  1. Накладные расходы на преобразование: способ, которым система обрабатывает или хранит данные, отличается от того, что данные на самом деле как выглядит или как вы об этом думаете. Например: на вашем сервере вы можете гибко хранить данные в многочисленных структурах данных, таких как коллекции, потоки, списки, наборы, массивы и так далее. Это помогает вам естественным образом моделировать ваши данные. Однако вам необходимо затем отобразить эти данные в таблицы в хранилищах документов RDBMS или JSON, чтобы сохранить их. Затем сделайте обратное для чтения данных. Обратите внимание, что конкретное несоответствие между объектно-ориентированными языковыми моделями и моделями реляционных таблиц известно как « Несоответствие объектно-реляционного импеданса. »
  2. Накладные расходы конвейера: объем данных и тип данных, которые вы обрабатываете на сервере, отличается от объема данных, которые может обработать ваша база данных. Например: если вы обрабатываете миллионы событий, поступающих с мобильных устройств, ваша типичная СУБД или хранилище документов может не иметь возможности хранить их или предоставлять API-интерфейсы для простой агрегации или расчета этих событий. Поэтому вам нужны специальные системы обработки потоков, такие как Kafka или Redis Streams , чтобы обработать его; а также, возможно, хранилище данных для его хранения.

Тест несоответствия импеданса

Цель теста состоит в том, чтобы измерить сложность платформы в целом и определить, будет ли сложность расти или уменьшаться по мере добавления дополнительных функций в будущем.

Тест работает простым вычислением «накладные расходы на преобразование» и «накладные расходы на конвейер» с использованием «показателя несоответствия импеданса» (IMS). Это покажет вам, является ли ваша система уже сложной по сравнению с другими системами, а также будет ли эта сложность расти со временем по мере добавления дополнительных функций.

Вот формула для расчета IMS:

Формула просто складывает оба типа накладных расходов. а затем делит их по количеству функций. Таким образом, вы получите общие накладные расходы / функцию (т.е. оценку сложности).

Чтобы лучше понять это, давайте сравним четыре разных простых конвейера данных и вычислим их оценки. А во-вторых, давайте также представим, что мы создаем простое приложение в два этапа, чтобы мы могли видеть, как меняется оценка IMS по мере того, как мы добавляем новые функции с течением времени.

Этап 1. Создание информационной панели в реальном времени

Допустим, вы получаете миллионы событий нажатия кнопок с мобильных устройств, и вам нужно уведомление, если есть какое-либо падение или всплеск. Кроме того, вы рассматриваете все это как функцию вашего более крупного приложения.

Случай 1: Допустим, вы только что использовали СУБД для хранения этих событий, хотя таблицы могут не соответствовать.

  1. Накладные расходы на преобразование = 1
    1. Вам необходимо преобразовать потоки событий в таблицы.
  2. Накладные расходы трубопровода = 1
    1. У вас есть одна база данных в вашем конвейере.
  3. Количество функций = 1

IMS

Случай 2: Допустим, вы использовали Kafka для обработки этих событий, а затем сохранили их в СУБД.

  1. Накладные расходы на преобразование = 1
    1. Kafka может легко обрабатывать потоки кликов; однако использование Kafka в РСУБД – это накладные расходы.
  2. Накладные расходы трубопровода = 2
  3. У вас есть две системы (RDBMS и Kafka). Обратите внимание, что мы игнорируем Zookeeper.
  • Количество функций = 1
  • IMS

    Случай 3: Скажите, что вы использовал Kafka для обработки этих событий, а затем сохранил их в KsqlDB

    1. Накладные расходы на преобразование = 0
      1. Кафка может легко обрабатывать потоки кликов.
    2. Накладные расходы трубопровода = 1
      1. У вас всего одна система (Kafka + KSqlDB). Обратите внимание, что мы игнорируем Zookeeper.
    3. Количество функций = 1

    IMS

    Случай 4. Допустим, вы использовали Redis Streams для обработки этих событий, а затем сохранил их в RedisTimeseries. (Оба являются частью Redis и изначально работают с Redis).

    1. Накладные расходы на преобразование = 0
      1. Redis Streams может легко обрабатывать потоки кликов.
    2. Накладные расходы трубопровода = 1
      1. У вас всего одна система (Redis Streams + RedisTimeSeries).
    3. Количество функций = 1

    IMS

    Заключение после Фазы 1:

    Мы сравнили четыре системы в этом примере и обнаружили, что Случай 3 или Case 4 – это си mplest с IMS, равным 1. На данный момент они оба одинаковы, но останутся ли они такими же, когда мы добавим больше функций?

    Давайте добавим больше функций в нашу систему и посмотреть, как работает IMS.

    Этап 2: Создание панели мониторинга в реальном времени с помощью.

    Белый список IP-адресов

    Допустим, вы создаете такое же приложение, но хотите, чтобы они только с IP-адресов из белого списка. Теперь вы добавляете новую функцию.

    Случай 1: Допустим, вы только что использовали СУБД для хранения этих событий, хотя таблицы могут не подходить, и они использовали Redis или MemCached для IP- белый список.

    1. Накладные расходы на преобразование = 1
      1. Для Внесение IP в белый список, вам не нужно никаких преобразований. Однако вам необходимо преобразовать потоки событий в таблицы.
    2. Накладные расходы трубопровода = 2
      1. У вас есть Redis + RDBMS.
    3. Количество функций = 2

    Итак, IMS

    Случай 2: Допустим, вы используете Redis + Kafka + RDBMS.

    1. Накладные расходы на преобразование = 1
      1. Для внесения IP в белый список преобразование не требуется. Кроме того, Kafka может легко обрабатывать потоки.
    2. Накладные расходы трубопровода = 3
      1. У вас есть Redis + Kafka + RDBMS. Примечание. Мы игнорируем тот факт, что Kafka также нужен Zookeeper. Если вы добавите это, число будет уменьшаться дальше.
    3. Количество функций = 2

    Итак, IMS – это

    Случай 3: Допустим, вы используете Redis + Kafka + KsqlDB.

    1. Накладные расходы на преобразование = 0
      1. Для внесения IP в белый список преобразование не требуется. Кроме того, Kafka и KsqlDB могут легко обрабатывать потоки.
    2. Накладные расходы трубопровода = 2
      1. У вас установлен Redis + (Kafka + KsqlDB). Примечание: в данном случае мы рассматриваем Kafka + KsqlDB как часть той же системы.
    3. Количество функций = 2

    Итак, IMS

    Случай 4: Допустим, вы используете Redis + Redis Streams + RedisTimeSeries.

    1. Накладные расходы на преобразование = 0
      1. Для внесения IP-адресов в белый список преобразование не требуется. Кроме того, Redis Streams и RedisTimeseries могут легко обрабатывать потоки и предупреждения.
      2. Накладные расходы трубопровода = 1
        1. У вас есть Redis + Redis Streams + Redis TimeSeries. Примечание: в этом случае все три являются частью одной системы.
      3. Количество функций = 2

      Итак, IMS

      Заключение после фазы 2:

      Когда мы добавили дополнительную функцию,

      • Дело 1 был на 2 в фазе 1 и упал до 1,5.
      • Случай 2 был на уровне 3 в фазе 1 и снизился до 2.
      • Случай 3 был на 1 в фазе 1 и остался на 1.
      • Случай 4 был на 1 в Фазе 1 и снизился до 0,5 (Лучшее)

      Итак, в нашем примере Случай 4, который имел один из самых низких баллов IMS, равный 1, фактически улучшился, когда мы добавили новую функцию, и в итоге он составил 0,5.

      Обратите внимание: если вы добавите дополнительные или другие функции, вариант 4 может оказаться не самым простым. Но в этом суть оценки IMS. Просто перечислите все функции, сравните разные архитектуры и посмотрите, какая из них лучше всего подходит для вашего варианта использования.

      Чтобы упростить использование, мы предоставляем вам калькулятор, который вы можно реализовать в простой электронной таблице для расчета оценки IMS.

      Калькулятор IMS:

      Вот как вы это используете:

      1. Для каждого уровня данных или конвейера данных просто перечислите:
        1. Текущие характеристики.
        2. Функции, которые есть в дорожной карте. Это важно, потому что вы хотите убедиться, что ваш уровень данных может продолжать поддерживать будущие функции без каких-либо дополнительных затрат.
      2. Затем сопоставьте трансформационные издержки и издержки конвейера для каждой функции.
      3. И, наконец, разделите сумма всех накладных расходов по количеству функций.
      4. Повторите шаги 2 и 3 для трубопроводов с разными системами, чтобы сравнить и сопоставить их.

      Конвейер данных 1

      Имя системы

      Накладные расходы на преобразование (Вам нужно преобразовать, как вы храните? Вам нужна лямбда-функция для преобразования?)

      Накладные расходы трубопровода (Сколько новых систем у вас нужно? Введите 0, если нет новой системы)

      Общие накладные расходы

      Функция 1

      1 1

      2

      Функция 2

      MySQL

      1
      Особенность

      Redis

      0

      1
      Функция 3

      Кафка

      2

      3

      Функция 4

      Лямбда

      0

      0

      0
      1

      Оценка IMS = (2 + 1 + 3) / 4 = 1,5

      Конвейер данных 2

        Особенность Накладные расходы на трансформацию (Вам нужно изменить способ хранения? Вам нужна лямбда-функция для преобразования?)

        Накладные расходы трубопровода (Сколько новых систем у вас нужно? Введите 0, если нет новой системы)

        Общие накладные расходы

        Функция 1

        Postgres

        1 1

        2

        Функция 2

        RabbitMQ

        0

        0

        Имя системы

        0

        Функция 3

        Redis

        0

        Функция 4

        Потоки Redis

        0

        0

        0

        Оценка IMS = 3/4 = 0. 79

        1

        1

        Резюме

        Очень легко увлечься и построить сложный слой данных, не задумываясь о последствиях. Оценка IMS была создана, чтобы помочь вам осознать свое решение.

        Вы можете использовать оценку IMS, чтобы легко сравнивать и сравнивать несколько систем для вашего варианта использования и видеть, какая из них действительно лучший для вашего набора функций. Вы также можете проверить, может ли ваша система поддерживать расширение функций и продолжать оставаться максимально простой.

        Всегда помните:

        «Простота – это высшая изощренность». – Леонардо да Винчи

        « Большая часть информации не имеет отношения к делу, и большая часть усилий тратится впустую, но только эксперт знает, что игнорировать. »- Джеймс Клир, Atomic Habits

        Изображение лидера через КРАЗАМ .

        Leave a comment

        Your email address will not be published. Required fields are marked *

        fifteen + 19 =