Распределенные структуры данных [часть 1, обзорная]

Комментарии (7)

  • 24 мая 2017 в 14:54

    0

    А что если нужно, в реальном времени, обрабатывать информацию о 100 миллионах клиентов,
    когда датасет занимает 100Тб, а каждую секунду нужно совершить 100+ тысяч операций?
    Вряд ли это возможно, даже на самом крутом современном железе, а если и возможно — только представьте себе его стоимость!

    А не лучше ли использовать Hadoop Map Reduce, Spark или Hive/Pig для таких задач?

    • 24 мая 2017 в 15:15

      +1

      Все перечисленные системы накладывают ряд ограничений связанных с парадигмой Map Reduce.
      В случае же с набором, описанным в статье, таких ограничений нет.
      Я бы, даже, сказал что это совершенно разные подходы к решению совершенно разных задач :)

      Например, у вас есть сервер и 1000 бакноматов, вам нужно чтобы все они дождались инициализации сервера.
      Очень простое, с точки зрения дизайна, решение (в одну строку!):
      Вы можете на каждом из них ждать latch.await (), а на сервере сделать latch.countDown ().

      • 24 мая 2017 в 15:20

        0

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

        • 24 мая 2017 в 15:31 (комментарий был изменён)

          +1

          Я говорю не про вычисления, а именно про операции над данными.
          А операции бывают разные,
          Например, возьмем, все те же, 1000 банкоматов и раз в час нужно разыграть приз — первый кто оплатит на сумму больше тысячи — победитель.
          Подвох в том, что человек должен узнать что он победитель сразу после завершения операции,
          Возможны ли подобные гарантии/способы синхронизации на описанных технологиях?
          • 24 мая 2017 в 15:40

            +1

            Тогда не понятно, зачем это должно обрабатываться одним кодом на сервере и банкоматах? Чем клиент-серверная архитектура не устраивает? Тем более что тысяча банкоматов для одного сервера — вообще не проблема. Может приведете более актуальный пример?

            • 24 мая 2017 в 15:47 (комментарий был изменён)

              +1

              Да, продолжим с 1000 банкоматов.
              С каждого из них может поступить запрос на перевод денег, но заранее известно что можно совершать не более 20 переводов одновременно (ограничение в договоре с платежной системой).
              Представим также, что сервер у нас не один, а 10 и к каждому из них приписано по 100 банкоматов.

              вариант

              semaphore.acquire ();
              doPayment (acc1, acc2, amount);
              semaphore.release ();

              позволит ограничить нагрузку на платежную систему в соответствии с условиями договора в рамках всей системы.

              • 24 мая 2017 в 15:49

                +2

                Вот теперь стало понятнее, спасибо

© Habrahabr.ru