Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: akka да. снова.  [new]
andreykaT
Member

Откуда:
Сообщений: 2794
mayton
Баг Шредингера...

было бы смешно если бы я смог его репродакшн сделать стабильно :)
27 апр 20, 11:08    [22123436]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
Есть у меня своя слабая теория. О том что логгирование слегка
замедляет race conditions. Вот как-то так.. Включил логгирование - все нормас.
Выключил - херак... стрельнул баг.
27 апр 20, 11:12    [22123439]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5298
mayton
Есть у меня своя слабая теория. О том что логгирование слегка
замедляет race conditions. Вот как-то так.. Включил логгирование - все нормас.
Выключил - херак... стрельнул баг.


У вас Kafka?
Помниться у меня был прикол с Kafka.
Работал на домашнем ноутбуке с HDD. У меня постоянно в приложение вылетало с ошибкой.
У других был SSD - все было нормально.
В конце концов выяснилось, что нужно было увеличит в настройках тайминги записи.
Грубо говоря hdd не успевал записать, а клиент Kafka уже проверял запись.
Возможно у вас подобная ситуация.
27 апр 20, 12:07    [22123481]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
Нет. Я юзал только Apache-MQ. И гонки за состояниями я наблюдал вобщем не в мессенжинговых системах.
А вообще. В любых. Очень похоже на мистику, когда ты смотришь на проблему с измерительным прибором
- проблема прячется.
27 апр 20, 12:12    [22123490]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
mad_nazgul

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

А это очень похоже на некорректную работу с файлами. Грубо говоря с файлом
пытались работать как с базой данных. А он - не таков.
27 апр 20, 12:14    [22123493]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
С точки зрения файловой системы даже close() файла еще не гарантирует
полной конситентности. Нужно форсировать fsync.

http://man7.org/linux/man-pages/man2/fsync.2.html

А это накладные расходы для все файловой системы в целом.
Вобщем Роберт Лав в своей книжке по Linux Kernel пишет про это.

А если мы работаем с файлом который постоянно открыт и просто
что-то дописывает в хвост то здесь работает как минимум несколько
логических буферов. И очень сложно формально доказать что
то что один процесс записал - второй уже может видеть.
27 апр 20, 12:48    [22123518]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10177
mayton
С точки зрения файловой системы даже close() файла еще не гарантирует полной конситентности.
Если требуется только возможность прочитать записанное, то нужна не консистентность, а доступность изменений. И тут начинаются разные ньюансы.
Нужно форсировать fsync.
Чтобы уронить производительность ниже плинтуса? Да, нужно. Во всех остальных случаях надо смотреть разные ньюансы.
27 апр 20, 13:07    [22123533]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
andreykaT
а может такое быть что мессадж просто пропал и всё тут.?

Попробую глянуть на этот смотрящий актор.

Вот здесь даже красивая форма для печенек есть https://developer.lightbend.com/start/?group=akka&project=akka-quickstart-java
27 апр 20, 13:30    [22123549]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
В туториале этот момент не акцентирован.

Вот в документации есть упоминание о двух стратегиях. Это где-то инкапсулируется в конфиг всей системы.

К сообщению приложен файл. Размер - 72Kb
27 апр 20, 13:59    [22123565]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
Почему меня это заинтересовало. В смежом топик я ковырял протокол DHT/KAD (на сетевом уровне - это UDP).
Вот. И работа с ним очень похожа на акторную модель. Клиент DHT слушает эфир. Принимает пакеты. Ретранслирует.
И отдает контент файлами если его попросят. Файлы там уже передаются по другому протоколу но это не суть важно.

Основная логика поиска нодов и хешей которые они хранят реализована буквально в 4 командах протокола.
И у меня как-то была рассеянная идея о том что эту штуку переписать под Akka. Сценарии когда пакет битый
и его невозможно обработать - можно спокойно игнорировать. Тоесть как-бы есть налицо такая-себе отказоустойчива
парадигма.
27 апр 20, 14:25    [22123587]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5298
mayton
mad_nazgul

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

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


Да в старых версиях клиента Kafka, он посылал на запись, а потом проверял записано или нет.
В общем какая-то корявая эмуляция синхронной/транзакционной записи.
В настройках стоял таймаут, когда проверить записано или нет.
Неделю потратил, чтобы догадаться что и где поменять.
Причем ошибка ни разу не понятная.
27 апр 20, 14:47    [22123597]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
А Dead-Letter-Queue все таки есть в Akka.
27 апр 20, 23:45    [22123871]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
забыл ник
Member

Откуда:
Сообщений: 3292
mayton,

Само собой есть, иначе бы я не просил его проверять)
Касаемо топика то проблема на 99 процентов в прикладном коде, но за неимением оного трудно телепатировать
28 апр 20, 00:05    [22123885]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
API SQS предполагает двухфазную работу с месседжами. Сначала вычитал. Потом обработал
и потом дал команду delete для тех ID msg которые обработал.

На время вычитки месседжи скрыты и другие потоки их не могут видеть. Если в течение
таймаута (задается) ты не дал delete, то они возвращаются обратно в очередь и становятся
видны для других lambda-функций или просто логики AWS API.

Преимущество этой схемы таково что неправильно обработанное сообщение будет бесконечно
кувыркатся в исходной очереди пока вы не обратите на это внимание.
28 апр 20, 10:11    [22124004]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5298
-

Сообщение было отредактировано: 28 апр 20, 11:46
28 апр 20, 11:46    [22124080]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10177
mayton
Если в течение таймаута (задается) ты не дал delete, то они возвращаются обратно в очередь и становятся
видны для других lambda-функций или просто логики AWS API.
Гонка между "закончил обработку" и "удалил сообщение".
Поймать сложно, но уж если поймаете - будет весело избавляться от повторной обработки одного и того же сообщения.
28 апр 20, 11:56    [22124091]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
Basil A. Sidorov
mayton
Если в течение таймаута (задается) ты не дал delete, то они возвращаются обратно в очередь и становятся
видны для других lambda-функций или просто логики AWS API.
Гонка между "закончил обработку" и "удалил сообщение".
Поймать сложно, но уж если поймаете - будет весело избавляться от повторной обработки одного и того же сообщения.

Там нет гонок. Там есть аномалия - сообщение повторно зашло в цикл обработки.
28 апр 20, 12:05    [22124103]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10177
mayton
Там нет гонок. Там есть аномалия - сообщение повторно зашло в цикл обработки.
Аномалия и есть следствие гонок.
28 апр 20, 12:07    [22124106]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
andreykaT
Member

Откуда:
Сообщений: 2794
короче плюнул на эту дичь и просто прикрутил еще одно событие на которое отсылается мессадж. если не заработает - примотаю ретрайпаттерн. приложение на ваадине. оно переживет
28 апр 20, 12:15    [22124115]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
andreykaT, это говнокод.
28 апр 20, 12:40    [22124140]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
andreykaT
Member

Откуда:
Сообщений: 2794
mayton
andreykaT, это говнокод.

а юзать общение между слоями через методы которые не гарантируют ответа норм? пихать асинхронку там где нужна синхронка но так как асинхронка не подходит превращать ее в синхронку это норм? )

Сообщение было отредактировано: 28 апр 20, 12:51
28 апр 20, 12:51    [22124148]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
mayton
Member

Откуда: loopback
Сообщений: 46599
Подожди-подожди... Ты решил реформировать государство - но начал с парикмахерской.

Мы-же не видели твой код. Я согласен что там может быть треш-угар и содом. Тогда его
просто надо переписать.

Но ретрай-паттерн предназначен для неустойчивого сетевого соединения в основном или
когда логика написана так что даёт отлуп по загрузке или по таймауту.

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

P.S. Вот повесишь на 1 человека 2 одинаковых кредита...
28 апр 20, 13:20    [22124157]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
andreykaT
Member

Откуда:
Сообщений: 2794
если вкратце там тупо комбобокс со списком доступных опций юзеру который щас залогинен.

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

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

решение номер один - найти где затык и устранить его.
решение номер два (проще) - слать дозапрос если список пуст.

если мы предполагаем в голове что акка не гарантирует доставку то оба варианта дерьмо. первый все же красивее.
второй ну - на него точно так же ответ может и не приходить :)

решение номер три - пилим ретрай и долбим мессаджами до тех пор пока не придет или пока долбилка не устанет.
28 апр 20, 20:11    [22124464]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
andreykaT
Member

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

зы. согласен - решение не очень.
28 апр 20, 20:13    [22124467]     Ответить | Цитировать Сообщить модератору
 Re: akka да. снова.  [new]
andreykaT
Member

Откуда:
Сообщений: 2794
mayton
Есть у меня своя слабая теория. О том что логгирование слегка
замедляет race conditions. Вот как-то так.. Включил логгирование - все нормас.
Выключил - херак... стрельнул баг.

да блин да. тоже такое чувство что эта теория вовсе не теория. до логирования оно хоть как то повторялось. после - перестало.
28 апр 20, 20:15    [22124471]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Java Ответить