|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Нужна реализация некой системы буферизации бизнес сущностей в очередь с возможностью хранения этой очереди на диске. Оперативы не хватает когда заходит дата-провайдер из китая и миллиардами сущностей. Интерфейс: Код: java 1. 2. 3. 4. 5.
Не рассматривал базы данных т.к. это оверхед и сортировки по дате всегда тормознутые. И Амазон слишком дорого берет за поднятие базячных иснтасов а мне их надо будет поднять для девов штук 4 и для нужд тестинга еще штук 16. Рассматривал : - BerkeleyDb (там вроде очередь поддерживается) - Redis (не Java-native) - KahaDb (из репозитария Apache ActiveMQ). Ничего из этого я еще не тестил и не смотрел. Поэтому можете писать свои мысли. Крутится всё это будет пока на Amazon EC2 instances с блинами типа SSD на 30 Гиг (я надеюсь). Тоеть под каждую очередь у меня будет где-то 30 минус операционка с барахлом софта и логами. Планирую также предусмотреть метод purge() для аварийной очистки очереди. Это в том случае когда например из 2х узлов кластера 1 выпал навсегда - то надо рестаровать все бизнес процессы на оставшихся нодах с чистого листа. События все равно зайдут повторно и не нарушат процессинг (у нас поддерживается idempotency на всех уровнях). Почему мне не подошли MQ системы? Ну по той причине что от MQ мне нужен был только персистенс. Почему нам не подошла обычная файловая система типа ext4? Ну.... у нас были потоки entities мелкого размера и мы переполняли файловую систему ext4 не по размеру файла а по inodes. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 17:32 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Задача совершенно не понятна. Любой класс можно сериализовать. Ну и я так понимаю, проблема то не с Queue, а с "буферизации бизнес сущностей" т.е. нужно или нормальное хранилище (база данных?) или какая нибудь система кэша с возможностью non-heap и хренанения на диске mayton Крутится всё это будет пока на Amazon EC2 instances с блинами типа SSD на 30 Гиг (я надеюсь). AFAIK кроме размера, Amazon еще и за IOPS деньги хочет т.ч. не факт, что Amazon SSD на 30 Гиг это будет ровно то, что Вы думаете ))) по стандартной опции, IOPS должно быть кот наплакал ext4 не по размеру файла а по inodes. AFAIK кол-во inodes в момент форматирование задается на Amazon'е плодил несколько миллионов файлов по 500-800 байт, все нормально работало потом перешел на SQLLite Не рассматривал базы данных т.к. это оверхед и сортировки по дате всегда тормознутые. IMHO и зря Что такое база данных? Это B-tree + максимум лог (redo log). Если целостность не нужна, отключите синхронизацию при записи, оверхеда вообще будет не видно. Использовал SQLLite. Оверхид вообще не заметен. Что такое "сортировки по дате всегда тормознутые" мне вообще не понятно. Постройте индекс, будут "мгновенные" Использовал SQLLite для миллионов строк, все летало. С миллиардами не пробывал ))) Достоинство по сравнению с файловой системой, все же добавить файл в файловую системая значительно больший оверхид, чем строчку в таблицу. И Амазон слишком дорого берет за поднятие базячных иснтасов а мне их надо будет поднять для девов штук 4 и для нужд тестинга еще штук 16. Зачем вообще базячные инстансы от Амазона? Только если своих рук нет, базу поставить. А в случае с SQLite и ставить ничего не нужно. JAR в проект воткнул и все. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 17:59 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev AFAIK кроме размера, Amazon еще и за IOPS деньги хочет т.ч. не факт, что Amazon SSD на 30 Гиг это будет ровно то, что Вы думаете ))) по стандартной опции, IOPS должно быть кот наплакал Мы регулируем S3 но не можем выйти на те паспортные параметры которые были анонсированы. Пока есть ощущение что S3 требуется некий прогрев бакета. И все рекомендации по разделению бакета на префиксы мы выполнили. Но пока по записи S3 плох. Я предполагаю что он больше по чтению оптимизирован. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:13 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev кол-во inodes в момент форматирование задается на Amazon'е плодил несколько миллионов файлов по 500-800 байт, все нормально работало Да. Это щас - самый рабочий вариант на проверку. Но характер и род доступа к хранилищу будет именно таким как я описал в абстрактном протколе "Q". И сущности могут быть мелкими. меньше от нескольких байт до 4К. Выгодно их хранить или нет в ext4 ? Я не знаю. Но мой опыт баз данных подсказывает что группировать их в более крупные сущности - выгоднее. При этом не нарушая удобство "Q". ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:22 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Но пока по записи S3 плох. Что под этим подразумевается? Как проверяете запись? И главное - чего ожидаете? Он вообще eventual consistent ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:23 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
IMHO и зря Что такое база данных? Это B-tree + максимум лог (redo log). Если целостность не нужна, отключите синхронизацию при записи, оверхеда вообще будет не видно. Использовал SQLLite. Оверхид вообще не заметен. Что такое "сортировки по дате всегда тормознутые" мне вообще не понятно. Постройте индекс, будут "мгновенные" Использовал SQLLite для миллионов строк, все летало. С миллиардами не пробывал ))) Достоинство по сравнению с файловой системой, все же добавить файл в файловую системая значительно больший оверхид, чем строчку в таблицу. Вот как раз я и говорю что мне не нужна БД как таковая. Просто подойдет дисковая структура данных которая сохраняет вид FIFO. А поскольку я ищу эконом-решение то база данных вроде как отпадает. Можно подключить AmazonElastiCache (Redis) но это уже сетевая интеракция. Можно SQS. Но мой последний опыт работы с SQS был резко негативным. Более неудобного API программирования я нигде не видел. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:29 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
забыл ник mayton Но пока по записи S3 плох. Что под этим подразумевается? Как проверяете запись? И главное - чего ожидаете? Он вообще eventual consistent Это - тема отдельного топика. И я сейчас не хочу на ней зацикливать основную тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:29 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Зачем вообще базячные инстансы от Амазона? Только если своих рук нет, базу поставить. А в случае с SQLite и ставить ничего не нужно. JAR в проект воткнул и все. Я думаю что здесь кроется самая главная маркетинговая подстава. Действительно - зачем? И я думаю что в амазоне сидят не дураки и они знают где так тонкая грань что продать и в каких условиях. А база ставится через apt install postgres ... да. Это так. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:33 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
С S3 работал только как пользователь, т.ч. не специалист Все же S3 это не файловая система. Даже по логике, ожидать от нее быстрой работы я бы не стал. Да и доступ по сети (между нодами-машинками) вещь не быстрая. Плюс, подозреваю, если трафик пойдет между дата-центрами, то еще и на оплату трафика можно нарваться. --- Не очень понятен требуемый функционал. Если бизнес-сущности поддерживают сериализацию. то написать свой Queue с буфферизацией - в общем-то несколько сотен строк кода. Проблема производительности, как мне видится: 1) Скорость сериализации бизнес-сущности. Сам по себе стандартный механизм сериализации в Java тормозной до чертиков, как Java так умудряется, мне не понятно. Я переписывал на Externalizable. 2) Скорость сохранения на диске. Если бизнес-сущности можно сохранить в fixed size записи, то самое быстрое был бы просто Circle Ring Buffer на диске (сервер то выделеннй, сразу и нарезать буффер на все 30 Gb). Если нет (что скорее всего), то SQL Lite, что бы не изобретать буфферизацию записи/чтения на диск. 3) Входные объемы данных. Как я понимаю, если данные помещаются в ОП, то Вы можете работать в ОП (персистентность и защита от сбоев не требуется). Если не помещаются, то на диск. Но тут проблема, что тогда может быть сильный разнобой по скорости в зависимости от нагрузки, допустимо ли это или нужно всегда медленно, но зато стабильная скорость. 4) Требование от сбоев. Если требуется атомарность и гарантированное хранение информации, то быстрее IOPS'ов Amazon'а не прыгнуть. А их, насколько я помню, десятки, максимум сотни (или платите деньги). А 100-200 записей в секунду - как-то не много. Если при сбое все 30 Гб накрываются "медным тазом" и это нормально, то наверное на пару десятков мегабайт в секунду от локальных дисков расчитывать вполне можно. Можно конечно в своем формате хранить или смотреть на какие нибудь продукты кэширования, но если что-то сложнее Circle Ring Buffer'а, то SQL Lite будет и проще и, скорее всего, быстрее. p.s. с точки зрения "велосипедостроения". Но без полноценной постановки, что же требуется, скорее всего разговариваем о разном. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:40 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Leonid Kudryavtsev Зачем вообще базячные инстансы от Амазона? Только если своих рук нет, базу поставить. А в случае с SQLite и ставить ничего не нужно. JAR в проект воткнул и все. Я думаю что здесь кроется самая главная маркетинговая подстава. Действительно - зачем? И я думаю что в амазоне сидят не дураки и они знают где так тонкая грань что продать и в каких условиях. А база ставится через apt install postgres ... да. Это так. По опыту, SQLite минимум на порядок ( 7-8 раз и больше ) быстрее postgresql на точечных select'ах / insert'ах. Как минимум, отстутвует проблема меж-процессорного взаимодействия (задержки на localhost + переключение потоков/процессов). Для проектов, где не требуется полноценная, отдельно стоящая база, а бы первым делом сейчас смотрел на SQL Lite. А с учетом родовой травмы PostgreSQL (vacuum), для задачь типа subj, на PostgreSQL смотрел бы вообще в последнию очередь. IMHO & AFAIK Если "не рассматривал базы данных т.к. это оверхед" ориентируясь на PostgreSQL, я бы порекомендовал пересмотреть свое мнение и попытаться сделать тесты производительности, что нужно, что получилось/не получилось с SQL Lite. Какие характеристики не достигнуты. IMHO & AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 18:48 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
>Почему нам не подошла обычная файловая система типа ext4? Ну.... у нас были потоки entities мелкого размера и мы переполняли файловую систему ext4 не по размеру файла а по inodes. В свое время была задача, где нужно было хранить несколько миллионов (но не миллиардов) коротких файлов в одной директории. Прекрасно справлялся RaiserFS. Единственный недостаток - история с ее создателем. Про миллиарды надо тестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:00 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
kolchanov >Почему нам не подошла обычная файловая система типа ext4? Ну.... у нас были потоки entities мелкого размера и мы переполняли файловую систему ext4 не по размеру файла а по inodes. В свое время была задача, где нужно было хранить несколько миллионов (но не миллиардов) коротких файлов в одной директории. Прекрасно справлялся RaiserFS. Единственный недостаток - история с ее создателем. Про миллиарды надо тестировать. Мы попробуем средствами ext4. Или я запилю Berkeley или KahaDb. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:07 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton запилю Berkeley Она же вроде денег стоит? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:11 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Вот только што скачал отсюдова https://www.oracle.com/database/technologies/related/berkeleydb-downloads.html не заплатив ни шекеля. Я помню что какое-то время у Оракла можно было взять либо легаси версию бесплатно либо последнюю с какими-то ограничениями. Но щас вроде как либерально. Наверно эта беркли просто никому нахер не нужна. Ни в native ни в Java варианте. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:14 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
А вспомнил. Точно. Вот здесь этот боян был бесплатным https://mvnrepository.com/artifact/berkeleydb/je/3.2.76 От 2008 года. А у Оракла - будет какое-то заподлецо типа ограниченных возможностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:17 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
The our open source license permits you to use Berkeley DB, Berkeley DB Java Edition or Berkeley DB XML at no charge under the condition that if you use the software in an application you redistribute, the complete source code for your application must be available and freely redistributable under reasonable conditions. If you do not want to release the source code for your application, you may purchase a license from Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:21 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Ну... можно и так. Главное что они поддерживают 3 сериализируемые структуры. B+Tree, HashTable, Queue. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:34 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Ну с этой Беркли я уже когда-то давно работал. А с KahaDb? Не знаю. Потрачу пол-дня времени чтобы просто осознать что оно может и не сильно надо. Вот репка тут https://github.com/apache/activemq/tree/master/activemq-kahadb-store ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:44 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Ну... можно и так. Главное что они поддерживают 3 сериализируемые структуры. B+Tree, HashTable, Queue. BerkeleyDbSince the Queue access method always uses fixed-length records , the user must always set the record length prior to creating the database. сущности могут быть мелкими.меньше от нескольких байт до 4К ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 19:54 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Выж понимаете что у нас нет проблем с диском пока. У нас просто была проблема с нехваткой inodes. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 20:02 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
mayton Нужна реализация некой системы буферизации бизнес сущностей в очередь с возможностью хранения этой очереди на диске. Оперативы не хватает когда заходит дата-провайдер из китая и миллиардами сущностей. Интерфейс: Код: java 1. 2. 3. 4. 5.
Не рассматривал базы данных т.к. это оверхед и сортировки по дате всегда тормознутые. И Амазон слишком дорого берет за поднятие базячных иснтасов а мне их надо будет поднять для девов штук 4 и для нужд тестинга еще штук 16. Рассматривал : - BerkeleyDb (там вроде очередь поддерживается) - Redis (не Java-native) - KahaDb (из репозитария Apache ActiveMQ). Ничего из этого я еще не тестил и не смотрел. Поэтому можете писать свои мысли. Крутится всё это будет пока на Amazon EC2 instances с блинами типа SSD на 30 Гиг (я надеюсь). Тоеть под каждую очередь у меня будет где-то 30 минус операционка с барахлом софта и логами. Планирую также предусмотреть метод purge() для аварийной очистки очереди. Это в том случае когда например из 2х узлов кластера 1 выпал навсегда - то надо рестаровать все бизнес процессы на оставшихся нодах с чистого листа. События все равно зайдут повторно и не нарушат процессинг (у нас поддерживается idempotency на всех уровнях). Почему мне не подошли MQ системы? Ну по той причине что от MQ мне нужен был только персистенс. Почему нам не подошла обычная файловая система типа ext4? Ну.... у нас были потоки entities мелкого размера и мы переполняли файловую систему ext4 не по размеру файла а по inodes. http://swaydb.io/?language=java/ До 100 млн записей поддерживает. Хорошего вам дня! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 20:23 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Valentin Kolesnikov, пардон но в ней не видно интерфейса очереди http://swaydb.io/api/write/put/?language=java/ Возможно это обычная key-value хранилка? Но для меня это тоже избыточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2019, 20:45 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
kolchanov >Почему нам не подошла обычная файловая система типа ext4? Ну.... у нас были потоки entities мелкого размера и мы переполняли файловую систему ext4 не по размеру файла а по inodes - вроде это решается простым раскидыванием файлов по папкам. Или я что то путаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 00:35 |
|
Queue с поддержкой сериализации на диск.
|
|||
---|---|---|---|
#18+
Kachalov - вроде это решается простым раскидыванием файлов по папкам. Или я что то путаю? не решается но при форматировании диска можно задать любое кол-во inodes AFAIK ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2019, 01:20 |
|
|
start [/forum/topic.php?fid=59&tid=2120961]: |
0ms |
get settings: |
14ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
50ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
498ms |
get tp. blocked users: |
0ms |
others: | 7ms |
total: | 580ms |
0 / 0 |