|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
ох какой длинный пост. Начнем с того, что When a message is sent to an Actor that is terminated before receiving the message, it will be sent as a DeadLetter to the ActorSystem's EventStream Далее почитаем про персистентные акторы, которые фиксируют свой стейт, и после перезапуска нету никаких проблем перечитать все недоставленное Ну и 300-500 тысяч это на одной ноде? Ну как бы неудивительно, акторы еще и скалить можно. Вообще есть подозрение что вы их просто так и научились готовить ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 14:33 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Хотя конечно нельзя не согласится что дебажить трудно, и рефакторить. Не согласен с выводом что это невозможно, тесты + типизированные акторы + правильно приготовить. Но опятьже, на мой взгляд сырая Akka это на любителя, akka streams или lagom гораздо более приятные, и даже полезные ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 14:39 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 14:44 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
забыл никВообще есть подозрение что вы их просто так и научились готовить честно говоря, я и не пытался. Я там вообще месяца 3-4 проработал, из них больше месяца разбирался с peformance проблемой с NIO на продакшин сервере. Т.ч. больше занимался или системным (NIO) или performance (NIO, PostgreSQL и прочее) Меня больше удивляло, что люди которе на проекте > 3 лет + контора до этого работала с ErLang'ом как-то не сильно умели их готовить. Акторы работы с базой, у меня вообще вызывали жуткое ощущение ((( забыл никНу и 300-500 тысяч это на одной ноде? Ну как бы неудивительно, акторы еще и скалить можно. Честно говоря, у меня вообще полное непонимание желания заменить СУБД на что-то в памяти. (будь это или акторы или экземпляры классов). Да занафига скалить, если они все одновременно не нужны. Просто впилил LRU Cache (из Apache Commons) и гасил неиспользуемые акторы. Но вот про "When a message is sent to an Actor that is terminated before receiving the message, it will be sent as a DeadLetter to the ActorSystem's EventStream" не знал ((( Чувство, что делаем велосипеды возникало. Но опять таки, сам до этого с AKKA не сталкивался, а народ который до этого вроде работал аж с ErLang'ом тоже ничего предложить/сказать не мог. забыл никХотя конечно нельзя не согласится что дебажить трудно, причина по которой контора ушла от ErLang'а. Но там вообще был полный зоопарк. Когда я там был, у них был новый любимец - Go Erlgang - сложно дебажить Java - тормозная Go это наше будущее ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 15:08 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Ну ваша позиция ясна, хотя точно такую же историю можно было бы услышать про Jav+Spring от людей перешедших с php. Технологию надо знать, и соглашусь akka не самая прозрачная вещь на свете) Leonid KudryavtsevЧестно говоря, у меня вообще полное непонимание желания заменить СУБД на что-то в памяти. (будь это или акторы или экземпляры классов). Ну тут интересно на самом деле.. а что и как они пытались заменить? Если правильно приготовить EventSourcing то это может иметь бенефиты, если это просто эмуляция реляционной БД но на акторах то хммм... мда.. В классических приложениях, когда мы юзаем БД, у нас есть лишь snapshot данных, состояние системы на ДАННЫЙ момент(не говоря о сложности понятие ДАНЫЫЙ момент в распределенных системах в принципе), без истории изменений(можно конечно вести аудит, но.. ) И если вдруг в софте обнаружена ошибка или юзер намеренно или случайно испортил данные - то тут свистопляска с бэкапами, откатами и т.п сложные вещи. При event sourcing вы имеете неизменяемый, упорядоченный по времени поток событий, благодаря которому все ивенты для данного энтити можно проиграть заново, что очень удобно. Конечно в этом случае все равно надо хранить где-то данные на ТЕКУЩИЙ момент для перфоманса, но вот тут и можно юзать ДБ. Та что одно второму не мешает в принципе. Но опять же, такой подход не для каждой задачи, на то мы и инженеры чтобы выбрать нужный инструмент для задачи ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 15:19 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
забыл никНу тут интересно на самом деле.. а что и как они пытались заменить? Блокировки в БД (select for update) это плохо (для производительности) А мы распилили БД по символам, символы в акторы - блокировок нет (явные блокировки в БД не нужны) ))) забыл никevent sourcing Там сама система целиком (я работал в команде над только одним микросервисом, "всю" задачу целиком не видел), скорее была как event sourcing. Например перенос данных с одного кластера на другой, вполнялся примерно похожим образом. Подняли пустой кластер, натравили на него обходчик который пройдет по всем символам, за пару дней данные перетащились. === Еще одна проблема, которую пытались решить "велосипедом". Performance и необходимость сооружения "бутылочного горлышка" Поток данных в отдельные моменты может быть настолько велик, что их нельзя принимать в обработку и нужно тупо отрубать клиента. В том числе, например, чисто из-за партнеров (сервер биржи не выдерживает). Т.ч. нужно знать кол-во необработанных месседжей очереди актора(ов) и если их большей некоего числа, не ставить новые в очередь, а просто возврашать ошибку клиенту Если в AKKA какое нибудь средство ограничить длину очереди для актора? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 16:44 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Если в AKKA какое нибудь средство ограничить длину очереди для актора? Да, даже из коробки - https://doc.akka.io/docs/akka/2.5.4/scala/mailboxes.html#builtin-mailbox-implementations Хотя можно достаточно легко написать свой мейлбокс. BoundedMailbox Backed by a java.util.concurrent.LinkedBlockingQueue Blocking: Yes if used with non-zero mailbox-push-timeout-time, otherwise No Bounded: Yes Configuration name: “bounded” or “akka.dispatch.BoundedMailbox” ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 17:02 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
чот мне кажется, что когда акку пытаются заюзать как кафку то получается жпоа. не? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 20:22 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
andreykaTчот мне кажется, что когда акку пытаются заюзать как кафку то получается жпоа. не? What are the similarities and differences between Akka and Kafka? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 21:06 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevПоток данных в отдельные моменты может быть настолько велик, что их нельзя принимать в обработку и нужно тупо отрубать клиента. В том числе, например, чисто из-за партнеров (сервер биржи не выдерживает). Т.ч. нужно знать кол-во необработанных месседжей очереди актора(ов) и если их большей некоего числа, не ставить новые в очередь, а просто возврашать ошибку клиенту Если в AKKA какое нибудь средство ограничить длину очереди для актора? Там кажется было решения для маршрутизации сообщений на множество акторов. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.10.2018, 22:39 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevНо там вообще был полный зоопарк. Когда я там был, у них был новый любимец - Go Erlgang - сложно дебажить Java - тормозная Go это наше будущее ))) Вот один забавный синтетический тест показывает что в рендеринге трехмерной графики GO в пару раз тормознее чем Java. Есть замеры на разном железе. Есть сорцы. Это я не ради флейма сказал а просто так. К сведению. Чтоб окружающие не были введены в заблуждение эмоциональной фразой. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.10.2018, 22:43 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
По сабжу. В продолжение шахматных 20858804 чтений. Собственно ферзевая задача меня не особо интересовала. Я участвовал в ней постольку-поскольку. На тот момент (2017 год) я изучал фреймворк Apache Camel (JMS) и (сегодня) Akka. Но мне нужна была какая-то вычислительная задача которой можно было-бы загрузить 1 физический хост полностью. Потом разбить flow на 2 актора и сделать из задачи распределенную чтобы просто посмотреть как эти фреймворки ведут себя под нагрузкой. Понаблюдать. Я очень не люблю придумывать синтетические постановки а тут под руку подвернулась задача (достаточно долгоиграющая) чтобы заполнить ей долгие часы дни и даже недели. Сейчас думаю о том что существует некий актор генератор пермутаций (QueenPermutationGenerator) и актор-классификатор который принимает решение о том что расстановка удовлетворяет условию. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.10.2018, 17:22 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, С вашими вопросами всё понятно. Вы просто не разобрались как работают акторы. Потому вам и непонятно ничего и вы делаете неверные выводы из ложных предположений. 1. Корректная обработка актора это обычное сообщение. Т.е. оно ничему не делает KILL. Актор продолжает обрабатывать очередь сообщений и когда доходит очередь сообщения остановки, завершает свой жизненный цикл обработав все сообщения которые были в очереди. А если вы пытаетесь "корректно" остановить актор который активно обрабатывает сообщения, то по степени глупости это примерно как разбирать работающий двигатель в машине, проблемы гарантированы)). Решение тут лежит не области двигателестроения, а в подходах к работе. В обычном спринг приложении вы тоже будете убивать активно используемый бин и кричать что спринг говно потому что не корректно бин гасится? ) В общем стройте корректно логику работы приложения и такой проблемы не будет. 2. Все эти странные кейсы с "потрей сообщений". Общий подход такой, что акторы выполняющие потенциально проблемный код не должны получать данные через сообщения. Данные для обработки актором должны приходить в констукторе этого актора. А сообщением актор только запускается в работу. Тогда начинает правильно работать супервизор и в случае падения актор перезапускается без потери своего состояния с полным контролем происходящего. Это правильный подход в построении систем на акторах в целом. Если почитаете теорию про акторы и примеры для акки, то всё это наёдете. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 22:27 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevНо были отдельные случае бирж (специфику я уже не помню), где коль-во символов было за сотни тысячь.... УПС.... а память то не резиновая... до 300-500 000 акторов система ЖУТКО тормозила, но стоически пыталась работать, но после 500 000 акторов - просто падала Это случайно не из тех бирж которые "Молодой, динамично развивающийся стартап возьмет в аренду степлер" ? )) Раз на нормальный сервер денег нет. Потому, что один актор занимает 300байт памяти, следовательно 500к займет очень грубо меньше 200мб памяти. Т.е. дело точно не в количестве акторов. А в том, что эти неучи напихали в память всякого говна помимо акторов. С таким подходом на любой платформе будут проблемы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2018, 22:35 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
Ищущий ЗнанияВ общем стройте корректно логику работы приложения и такой проблемы не будет. Прекрасный совет! Но он никак не относится к сабжу. Никак. Вы бы лучше отошли от подхода "прекрасно лишь то, на чём работаю Я". Ищущий ЗнанияПотому, что один актор занимает 300байт памяти, следовательно 500к займет очень грубо меньше 200мб памяти. А куда же девается состояние приложения? Видимо ваша тулза обеспечивает бесконечную виртуальную память? Выше уже были вменяемые мнения про распараллеливание и "один из множества подходов", но вот "Нашедший знания" уверен, что это всё фигня, главное - стройте корректно логику работы! И в этом он прав. Только корректная логика работы подразумевает выделение сабжу очень узенькой ниши, а возможно и вообще отправку сабжа на свалку истории. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 13:37 |
|
Akka - что можно на ней написать?
|
|||
---|---|---|---|
#18+
alex55555, Вы явный наркоман, при чём с тяжйлой формой дислексии. alex55555Прекрасный совет! Но он никак не относится к сабжу. Никак. Он абсолютно точно относится к проблеме. Потому что проблему тут не в акторах, а в неверной логике приложения. alex55555Вы бы лучше отошли от подхода "прекрасно лишь то, на чём работаю Я". Вы под веществами? При чём тут вообще то на чём я работаю? Я где-то агатировал писать на том на чём сам работаю??? Кстати, я сейчас работаю с жутким легаси на очень старом спринге)) alex55555А куда же девается состояние приложения? Видимо ваша тулза обеспечивает бесконечную виртуальную память? Да у вас еще и тяжелая форма дислексии к тому же. Я явно и прямо написал, что это память только на акторы. А проблема связана не с количеством акторов, а с тем что содержится помиомо них. И это проблема не акторов. alex55555Выше уже были вменяемые мнения про распараллеливание и "один из множества подходов", но вот "Нашедший знания" уверен, что это всё фигня, главное - стройте корректно логику работы! И в этом он прав. Только корректная логика работы подразумевает выделение сабжу очень узенькой ниши, а возможно и вообще отправку сабжа на свалку истории. Ну тут уже явное детсадовское позёрство. Потому что я отвечал на конкретные проблемы автора сообщений. Конкретно в них проблема не в акторах вовсе. Ну и да, я нигде не говорил, что акторы решают все проблемы человечества. Только то, что они подходят для большинства типичных задача, которые мы делаем. Т.к. судя по всему вы еще не учились в институте, поясню. Есть такая наука, называется ЛОГИКА. Она подчиняется определенным законам. Погуглите, это очень интересная наука. Так вот, согласно ей, фраза "Технология Х хорошо подходит для решения задач" не означает автоматически, что все остальные технологии не подходят для решения этих же задач. Всего хорошего. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2018, 18:38 |
|
|
start [/forum/topic.php?fid=59&msg=39716168&tid=2121710]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
96ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 199ms |
0 / 0 |