Мой второй делегатский аккаунт - @lindsay-golos.
Транзакция самопровозглашения объявления себя делегатом:
Публикация первого прайсфида:
Если кому интересно - нода эта немного хитросделанная. Она целиком и полностью находится на рамдиске, созданном в оперативной памяти, который позволяет обрабатывать одновременно большое количество информации, и делать это максимально быстро.
Поскольку в качестве личного хобби, я увлекаюсь некромантией реанимированием и приведением в рабочее состояние очень древних компьютеров и прочитала на эту тему довольно большое количество статей, то давно узнала что во времена, когда жесткие диски были очень дорогими в перерасчете доллара на количество мега/гигабайт, а файловые системы очень меееедленными - то чтобы побороть эту проблему, айтишники, работавшие с компьютерами лет 20 назад, очень активно использовали так называемые рамдиски - это смоделированные в оперативной памяти образы дисков с настоящими файловыми системами, с той только разницей что работали они в разы быстрее настоящих физических (правда при этом безбожно жрали оперативку, которая тоже была недешевой).
И вот я решила подобный подход испробовать в 21 веке, благо, создать рамдиск в Линуксе - это до сих пор дело одной минуты.
При желании можете повторить, конечно же если у вас избыток оперативки, и установлен или развернут из образа полный серверный дистрибутив Ubuntu 16.04. Хотя можно и 18-ю поставить и другие (докер позволяет использовать практически любой 64-битный Линукс), главное чтобы установка была полной а не минимальной - это необходимо для того чтобы в ядре была поддержка tmpfs.
Далее создаём новую точку монтирования:
sudo mkdir /mnt/tmpfs/
Предоставляем необходимые права:
sudo chmod -R 777 /mnt/tmpfs/
777 - это значит что мы разрешаем и чтение и запись.
-R означает что мы дали права чтения/записи не только папке но и всем вложенным в нее подпапкам, потому что нам же нужно дописывать новые блоки.
Примонтируем к папке /mnt/tmpfs/ виртуальный раздел необходимого размера:
mount -t tmpfs -o size=xxxM/G tmpfs /mnt/tmpfs/
где xxxM/G - это размер RAMdisk в Мега/Гигабайтах.
Который в целях решения проблемы масштабируемости, потом можно будет менять на лету командой
sudo mount -o remount -o size=yyyM/G /mnt/tmpfs/
При этом содержимое диска не пропадет и даже нода не уйдет в реплей (протестировано). Но может пропустить пару блоков. Главное - не запрашивать размер диска меньший, чем размер данных, находящихся на нем.
Далее все по стандартной схеме: в новосозданный диск копируем block_log, устанавливаем докер, разворачиваем в нем контейнер, ну и все такое, в общем делаем как-то так. Ну или вот так =)
Важно: Сильно не размахивайтесь с размером виртуального диска. Если вы попросите создать ramdisk больше, чем имеете оперативной памяти - то система начнёт сгружать всё лишнее в своп и дела у вас пойдут очень медленно и грустно. К тому же, вы должны оставить резерв оперативки для работы самой ноды. Я оставила 12 гб, этого пока хватает, но если что - не проблема увеличить. В среднем, у нас около 200 Мб в оперативке занимает сама Убунта, 33 с копейками гб - block_log, около 280 Мб block_log.index и где-то 12 Гб - shared_memory.bin.
От этих цифр и отталкивайтесь, + нужен запас в несколько Гб, с учетом того что размер нашего блокчейна с каждым новым блоком, постоянно растет. Ну и конечно же на такой конфигурации, нам не нужен SSD. Достаточно HDD маленького размера для запуска оси.
Еще хочу обратить внимание тех, кто со своими экспериментами захочет пойти дальше. Не используйте виртуальные диски, загружающиеся в память при помощи опций ядра toram, copy2ram и им подобные, потому что это сжатые файловые системы, и любое чтение/запись в них сопровождается накладными расходами на распаковку, что вредит производительности, а мы же создаем этого монстра именно для того чтобы он быстро работал.
Ну и последний вопрос - нафига я это делаю? А чтоб было =)
Делаю это в порядке эксперимента. Ну и затем, что самая медленная часть компьютера/сервера - это жесткий диск. Так что на фоне всех остальных процессов, происходящих в компьютере, скорость чтения/записи на жесткий диск, очень медленная. Оперативная же память напротив, очень быстрая, особенно если это серверная DDR4, в сотни раз быстрее, чем жесткие диски и в десятки раз быстрее чем SSD. Так почему бы не попробовать использовать оперативную память вместо жестких дисков?
Теоретически, подобная нода должна потянуть делегата, API и seed на одном и том же сервере при условии хорошего канала. А на практике посмотрим как оно будет работать, я пока сама не знаю, потому как есть и обратная сторона медали: рамдиск - это энергозависимое устройство хранения. Поэтому, в случае перебоев питания, выключения или перезагрузки - все слетит и придется устанавливать и синхронизировать по новой (благо, на рамдиске синхронизируется нода очень быстро).
Вы конечно можете сказать что это все излишество и непотребство, но в конце концов, дайте мне поиграться в моей любимой песочнице в мои любимые пасочки =)
Токен копейки стоит, много на нем не заработаешь - так хоть опыт какой-то получу.
И последний момент для тех кто беспокоится, что я якобы хочу "специально сломать блокчейн", что с некоторых пор стало прямо каким-то локальным мемом:
Все вышеописанные действия для блокчейна абсолютно безопасны, технически это обычная нода, только чуть более производительная, и если она и может по чему-то ударить - то только по моему карману, если содержание такого монстра окажется нерентабельным в перерасчете на отдачу от него в токенах. В конце концов, даже если не взлетит или будет обходиться слишком дорого - то никогда не станет проблемой перезапустить ее в обычном режиме как у всех нормальных людей. По крайней мере я буду знать что так можно, что это работает, и может быть когда-нибудь подобный подход мне пригодится для каких-то моих других целей.
@lindsay Вы творите просто чудеса....
помню приценялся к первому ПК после 4-5 лет студентства... и как один из вариантов подумывал купить комп без винта, грузиться с дискеты создавая RAM - загружать в него с дискет (и это при каждом запуске ПК) нужные программы (да игры в основном) тогда и винды практически не было - 50на50
а по факту купил комп лет через 6...
@sergiy
тогда и винды практически не было - 50на50
Сейчас ковырялась в своей папке с доисторическим софтом, нашла там vdisk.sys - драйвер виртуального диска для голого ДОСа. Его вроде как надо прописывать в конфиге типа device=vdisk.sys и он после перезагрузки теоретически должен запросить ввод с клавиатуры размер создаваемого виртуального диска в килобайтах.
Но это все теоретически, у меня сейчас нигде ДОСа нет чтоб попробовать =)
@lindsay , нет не запросит - DEVICE = C:\VDISK.SYS 512 256 30 512 это размер диска в Кб!!!))))), 256 размер сектора, и максимум 30 файлов на диске
@lindsay MS-DOS 6.22 - http://old-dos.ru/index.php?page=files&mode=files&do=show&id=64
А если будет мучать совесть по поводу лицензии))) мелкомягким - https://www.freedos.org/
@sergiy не беспокойся, уж на этот счет у меня угрызений точно не будет =)
Кстати, не в курсе чем фри-дос отличается от платного? Там есть какие-то ограничения? Хотя куда уж его ограничивать? Он и так простой как 5 копеек.
@lindsay нет, не знаю. Но если поразмышлять о сложности проекта DOS, то по нынешним меркам задача для студента))) можно и 1к1 скопировать)))
из этиой темы лет 10-12 назад узнал о ReactOS - разработка аналога(функционального) Винды- сейчас все еще альфа но много софта совместимо. Конечно с тех времен линукс популяризовался чем отодвинул востребованность сего аналога))
@lindsay поздравляю) Я, конечно, ничего не понял по технической части - но играйся)
@lindsay, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях:
block_log в tmpfs засунуть это надо догадаться. Нет никакого смысла проёбывать его при перезагрузке.
И нет, tmpfs это не рамдиск т.к. по определению ramdisk это block device. Что такое ramdisk иди читай https://www.kernel.org/doc/html/latest/admin-guide/blockdev/ramdisk.html
@vvk Стоп! Кажись ты прав с блоклогом и я действительно немного тупанула с ним. При работе ноды, в блоклог только дописывается новая инфа или из него что-то и берется? Я имею в виду не реплей, а именно стандартную работу.
block_log это блоки, в него идёт только дописывание новых.
Как подписаться на комменты через telegram
@vvk тогда у меня скоро появится новая экспериментальная нода - блоклог на диске а шаредмемори в оперативке =)
Я shared_memory.bin держу в /dev/shm с самого начала
Как подписаться на комменты через telegram
@vvk Как я выше писала - это экспериментальное решение (просто играюсь в пасочки) и вряд ли я его оставлю надолго (просто потому что жор такого количества оперативки - это очень дорого). Но пока что результаты меня радуют - работа на одном сервере делегата, двух ботов и высоконагруженной апи, не приводит к пропуску блоков. Специально всю ночь насиловала ее виковским army.js и ни разу не затупило.
@lindsay что за дела... кинул ссылку знакомому в телеграмм - тама такая картинка -
а тут обновлял страницу 5 раз - нет её((
@sergiy Это я так над другом пошутила.
При публикации поста через форму Вика https://golos.cf/md/ там в расширенных опциях можно вставить изображение в поле "Ссылка на изображение обложки поста" и тогда оно будет показывать эту картинку везде кроме Голоса.
Кстати, на картинке тоже рамдиск. Только более цивилизованный, потому как имеет свою оперативку и не отжирает ее у системы.
@lindsay там ещё батарейка(вернее аккум) ставится чтоб по выключении не стиралось))))
@sergiy давно думаю купить такую и попробовать юзать, но только чтоб была под DDR2 - дома в коробке полсотни таких планок валяется разной емкости.
@lindsay полсотни?? - это же клондайк!!! а я с китая покупаю))
я бегло прочитал - то было во времена до SSD и сейчас от такого толку мало. Хотя и "преимущество" есть не сотрётся, SSD ведь как и HDD стираюся(изнашиваются) хоть и теоретически
@sergiy Да, SSD изнашиваются. Но DDR тоже не вечная, конденсаторы пересыхают, в микросхемах дифузные процессы происходят, так что старые планки тоже постепенно выходят из строя, хоть живут дольше чем SSD. У меня дохлых тоже несколько валятеся.
@sergiy была, и я видел )