Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю akka / 25 сообщений из 45, страница 1 из 2
02.04.2018, 19:11
    #39624335
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
Решил расширить кругозор и поизучать akka.

Как я понял суть в том, что на akka писать многопоточный код проще, он легко масштабируется.

Правда как именно он лучше масштабируется я не понял.

Я слизал в интернетах код, который смог запустить у себя. Он выглядит примерно так:

main:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
//Как-то хитро конфигурим систему акторов
ActorSystem actorSystem = ...
//делаем ActorRef
ActorRef greeter1 = actorSystem.actorOf(springExt.props("actorBeanName"));
//В ссылку вставляем что хотим отправить и кому.
greeter1.tell(new GreetingActor.Greet("Ololo"), greeter1);
//тоже самое только есть возможность дождаться ответа.
 Future<Object> futureResult1 = Patterns.ask(greeter1, new GreetingActor.Greet("John"), timeout);




ну и сам актор:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@Override
    public void onReceive(Object message) throws Throwable {
        logger.info("instance {} Got message {}", index, message);
        if (message instanceof Greet) {
            String name = ((Greet) message).getName();
            String greet = greetingService.greet(name);
            logger.info("instance {} Respond message {}", index, greet);
            // Зачем этот getSelf() и где его можно получить?
            getSender().tell(greet, getSelf());
        } else {
            unhandled(message);
        }
    }



На данный момент есть несколько вопросов.

1. Как это всё можно отмасштабировать в рамках одной jvm?
2. Как это всё можно отмасштабировать в рамках нескольких приложений запущенных на одном компутере? какой механизм передачи сообщений будет работать?
3. Что полезно почитать по теме вообще?
4. Какую задачу посоветуете решить, чтобы пощупать технологию?
...
Рейтинг: 0 / 0
02.04.2018, 21:36
    #39624357
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90,

1. Выполнение onReceive происходит на пуле потоков.
2. Для этого нужен Akka Cluster .
3. Если с английским норм, то лучше всего начинать с диссертации Joe Armstrong.
4. Любая конкурентная задача, чат, аналог твитера, инстраграма.
...
Рейтинг: 0 / 0
02.04.2018, 22:42
    #39624373
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
я так понимаю акка это такая хрень типа ивентов и очередей. не?
...
Рейтинг: 0 / 0
02.04.2018, 22:59
    #39624378
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
andreykaTя так понимаю акка это такая хрень типа ивентов и очередей. не?
Нет, akka это про Модель Акторов .
...
Рейтинг: 0 / 0
03.04.2018, 11:39
    #39624617
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxer,


fixxer1. Выполнение onReceive происходит на пуле потоков.

То есть если я просто начну делать tell очень интенсивно, и сделаю onReceive медленным, то акка магически создаст ещё одного актора? я чего-то сомневаюсь
fixxer2. Для этого нужен Akka Cluster.

Надо почитать про это видимо. Но механизм передачи то какой? какая-то очередь?
fixxer3. Если с английским норм, то лучше всего начинать с диссертации Joe Armstrong.

Ну 260 страниц это уж слишком)
fixxer4.Любая конкурентная задача, чат, аналог твитера, инстраграма.

Не очень понятно. В голову сразу приходят веб сокеты. "Сервлеты" и так работают параллельно. Хотелось бы какую-то очень техническую задачу.
...
Рейтинг: 0 / 0
03.04.2018, 12:18
    #39624660
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90fixxer1. Выполнение onReceive происходит на пуле потоков.

То есть если я просто начну делать tell очень интенсивно, и сделаю onReceive медленным, то акка магически создаст ещё одного актора? я чего-то сомневаюсь


А как связаны количество потоков и количество экземпляров актора? Никак.

redwhite90fixxer2. Для этого нужен Akka Cluster.

Надо почитать про это видимо. Но механизм передачи то какой? какая-то очередь?


По дефолту какой-то свой протокол на основе netty. Но по идее должно быть можно свое прикрутить, но это не точно.

redwhite90fixxer3. Если с английским норм, то лучше всего начинать с диссертации Joe Armstrong.

Ну 260 страниц это уж слишком)


На нет и суда нет. Читайте википедию тогда.

redwhite90fixxer4.Любая конкурентная задача, чат, аналог твитера, инстраграма.

Не очень понятно. В голову сразу приходят веб сокеты. "Сервлеты" и так работают параллельно. Хотелось бы какую-то очень техническую задачу.

А вы отличаете понятие конкурентности и параллельности? Они связаны, конечно, но не идентичны. Грубо говоря, конкурентность это понятие сферы решаемой задачи, когда у нас натурально несколько независимых источников данных и событий. Параллельность это понятие сферы решения, типа, мы тут видим несколько одинаковых по структуре объектов и считаем, что поимеем профит, если будем их обрабатывать параллельно.
...
Рейтинг: 0 / 0
03.04.2018, 13:03
    #39624706
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxer,

авторА как связаны количество потоков и количество экземпляров актора? Никак.
напомню, что эта дискуссия начиналась с моего вопроса:

автор1. Как это всё можно отмасштабировать в рамках одной jvm?


Чтобы отмасштабировать нужно уметь подключать 2 и более актора. 1 актор == 1 поток
...
Рейтинг: 0 / 0
03.04.2018, 13:06
    #39624711
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90fixxer,

авторА как связаны количество потоков и количество экземпляров актора? Никак.
напомню, что эта дискуссия начиналась с моего вопроса:

автор1. Как это всё можно отмасштабировать в рамках одной jvm?


Чтобы отмасштабировать нужно уметь подключать 2 и более актора. 1 актор == 1 поток

Так я вам и отвечаю, что у вас путаница в голове. Актор один (или сколько надо, не зависит от потоков, зависит от состояния, которое в актор инкапсулировано), а потоков столько сколько в пуле. Масштабируется настройкой пула.
...
Рейтинг: 0 / 0
03.04.2018, 13:09
    #39624719
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
Еще раз, акторы они не про параллельность, а про конкурентность.
...
Рейтинг: 0 / 0
03.04.2018, 13:12
    #39624726
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxerredwhite90fixxer,

пропущено...

напомню, что эта дискуссия начиналась с моего вопроса:

пропущено...


Чтобы отмасштабировать нужно уметь подключать 2 и более актора. 1 актор == 1 поток

Так я вам и отвечаю, что у вас путаница в голове. Актор один (или сколько надо, не зависит от потоков, зависит от состояния, которое в актор инкапсулировано), а потоков столько сколько в пуле. Масштабируется настройкой пула.

Какой смысл масштабировать пул если разгребать будет только один актор?
...
Рейтинг: 0 / 0
03.04.2018, 13:12
    #39624727
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxerТо есть если я просто начну делать tell очень интенсивно, и сделаю onReceive медленным, то акка магически создаст ещё одного актора? я чего-то сомневаюсь


Если вам нужно блокирующее ожидание, то акторы идут мимо вас. Это совершенно другая Concurrency model, глупо на нее смотреть с позиции sharing&Locking.
Нет такой задачи, которую обязательно нужно(и только на акторах решать) это просто еще один инструмент, где-то он подойдет лучше, где-то хуже.
...
Рейтинг: 0 / 0
03.04.2018, 13:14
    #39624729
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
забыл никfixxerТо есть если я просто начну делать tell очень интенсивно, и сделаю onReceive медленным, то акка магически создаст ещё одного актора? я чего-то сомневаюсь


Если вам нужно блокирующее ожидание, то акторы идут мимо вас. Это совершенно другая Concurrency model, глупо на нее смотреть с позиции sharing&Locking.
Нет такой задачи, которую обязательно нужно(и только на акторах решать) это просто еще один инструмент, где-то он подойдет лучше, где-то хуже.

Мне ничего не нужно в плане задачи. Я просто пытаюсь врубиться зачем это нужно
...
Рейтинг: 0 / 0
03.04.2018, 13:17
    #39624735
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90
Какой смысл масштабировать пул если разгребать будет только один актор?

На эндпоинте может висеть актор, принимая сообщение из mailbox, может запустить дочерний актор, который самоуничтожится после выполнения. Для физического выполнения задачи нужно ядро процессора, акторов может быть миллион, а ядер 8, значит 8 выполняются - остальные ждут, но никакого состояния между нами не шарится, вот и весь benefit. И да, обработаться могут в различном порядке, акторная модель не про строгую последовательность, а про eventual выполнение и вызов коллбека. так понятнее?
...
Рейтинг: 0 / 0
03.04.2018, 13:20
    #39624739
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90
Мне ничего не нужно в плане задачи. Я просто пытаюсь врубиться зачем это нужно

Зачем нужна Java если есть C# и C++?
Акторы это просто модель конкурентных вычислений, одна из. Это другой подход к написанию многопоточного кода.
...
Рейтинг: 0 / 0
03.04.2018, 13:22
    #39624746
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
забыл никredwhite90Мне ничего не нужно в плане задачи. Я просто пытаюсь врубиться зачем это нужно

Зачем нужна Java если есть C# и C++?
Акторы это просто модель конкурентных вычислений, одна из. Это другой подход к написанию многопоточного кода.

Вот поэтому и решил разобраться
...
Рейтинг: 0 / 0
03.04.2018, 13:29
    #39624760
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxerЕще раз, акторы они не про параллельность, а про конкурентность.

Можете объяснить на примере?
...
Рейтинг: 0 / 0
03.04.2018, 14:09
    #39624822
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90fixxerЕще раз, акторы они не про параллельность, а про конкурентность.

Можете объяснить на примере?

Лучше чем Jamie Allen тяжело объяснить: The 7 Ways to Wash Dishes and the Case for Message-driven Reactive Systems .
...
Рейтинг: 0 / 0
03.04.2018, 15:06
    #39624920
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxerredwhite90пропущено...


Можете объяснить на примере?

Лучше чем Jamie Allen тяжело объяснить: The 7 Ways to Wash Dishes and the Case for Message-driven Reactive Systems .

Ну если будет один актор, то есть один тред, то как тут масштабироваться то?
...
Рейтинг: 0 / 0
03.04.2018, 15:09
    #39624923
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
забыл никredwhite90Какой смысл масштабировать пул если разгребать будет только один актор?

На эндпоинте может висеть актор, принимая сообщение из mailbox, может запустить дочерний актор, который самоуничтожится после выполнения. Для физического выполнения задачи нужно ядро процессора, акторов может быть миллион, а ядер 8, значит 8 выполняются - остальные ждут, но никакого состояния между нами не шарится, вот и весь benefit. И да, обработаться могут в различном порядке, акторная модель не про строгую последовательность, а про eventual выполнение и вызов коллбека. так понятнее?

Ну то есть самому надо как-то дочерних акторов запускать?
...
Рейтинг: 0 / 0
03.04.2018, 15:36
    #39624969
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90
Ну если будет один актор, то есть один тред, то как тут масштабироваться то?

Так не делают системы с одним актором. Актор это единица декомпозиции, вся система строится из акторов. Акторы инкапсулируют бизнес логику и локальное состояние.

redwhite90Ну то есть самому надо как-то дочерних акторов запускать?


В этом весь поинт, образуется дерево акторов, причем порождающие акторы задают стратегию обработки ошибок, так что исключение в одном поддереве не влияет на соседнее.
...
Рейтинг: 0 / 0
03.04.2018, 16:01
    #39625006
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
fixxer,

Сможете какую-нибудь задачу разобрать на примере акторов?
То есть с объяснением кто есть актор и в каких случаях он должен порождать других акторов, в каких случаях он должен слать сообщения другим акторам?
Как вообще один актор должен узнавать о других акторах?
...
Рейтинг: 0 / 0
03.04.2018, 16:45
    #39625063
fixxer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90,

Вот тут подробно описан полный пример. Разберите его и приходите с _конкретными_ вопросами.
...
Рейтинг: 0 / 0
05.04.2018, 07:07
    #39625828
Cheblin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
Прелесть AKKA в унификации взаимодействия отдельных частей, которые, при необходимости, можно разнести на разные машины.

Стандартные, общепринятые подходы - вызовы функций, создание экземпляров класса и управление ими хорошо работают в пределах одной машины.
Но с масштабируемостью (разнесение на разные машины) беда.

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

Но попытки масштабироваться за счёт построения распределенных приложений является д движением в правильном направлении.

Теоретическая база AKKA, как один из способов распределения задач, существовала давно.
Нужна была только грамотная реализация.

В отличии от CORBA, AKKA не пытается ничего скрывать от своего пользователя и даже на локальном компьютере ведет себя как распределенное приложение, слегка проигрывая в производительности и эффективности обычным приложениям с прямым вызовом.

Но в момент когда потребуется распределить нагрузку на несколько компов, в AKKA достаточно при старте просто подсунуть информацию о новой сетевой конфигурации...

Один из фундаментальных компонентов распределенных систем - протокол обмена. По умолчанию AKKA использует стандартную JAVA сериализацию, которая мягко говоря не эффективна.

И разработчики AKKA предоставляют API, написать использовать свой сериализатор путем расширения базового класса.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public class MyOwnSerializer extends JSerializer {

  // This is whether "fromBinary" requires a "clazz" or not
  @Override public boolean includeManifest() {
    return false;
  }

  // Pick a unique identifier for your Serializer,
  // you've got a couple of billions to choose from,
  // 0 - 40 is reserved by Akka itself
  @Override public int identifier() {
    return 1234567;
  }

  // "toBinary" serializes the given object to an Array of Bytes
  @Override public byte[] toBinary(Object obj) {
    // Put the code that serializes the object here
    //#...
    return new byte[0];
    //#...
  }

  // "fromBinary" deserializes the given array,
  // using the type hint (if any, see "includeManifest" above)
  @Override public Object fromBinaryJava(byte[] bytes,
                                         Class<?> clazz) {
    // Put your code that deserializes here
    //#...
    return null;
    //#...
  }
}



и при старте AKKA указав каким сериалайзером в каких случаях пользоваться

одним из наиболее популярных является Kryo-based serializers

Но если захочется реально высокой производительности и минимального трафика, то https://github.com/cheblin/BlackBox] BlackBox будет покруче.
...
Рейтинг: 0 / 0
05.04.2018, 08:38
    #39625857
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
redwhite90забыл никпропущено...


Зачем нужна Java если есть C# и C++?
Акторы это просто модель конкурентных вычислений, одна из. Это другой подход к написанию многопоточного кода.

Вот поэтому и решил разобраться
Вот чел. из Яндекса неплохо так вводную дает.
YouTube Video
...
Рейтинг: 0 / 0
05.04.2018, 10:05
    #39625914
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изучаю akka
Cheblinсделать так чтобы вызов функции, либо создание объекта выглядело одинаково вне зависимости от того локально это происходит либо удаленноэтого ни у кого не вышло и никому пока не надо
Эффективность страдает.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Изучаю akka / 25 сообщений из 45, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]