📢 Обзор масштабируемости Steem by rusteemitblog

View this thread on steempeak.com
· @rusteemitblog · (edited)
$15.99
📢 Обзор масштабируемости Steem
![](https://steemitimages.com/DQmSFvyZ8oHUhjsLjm8ZVbpmDtAXaihmG3i4LZBdbXdVbmh/%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png)

В этой статье мы рассмотрим некоторые из проблем, возникших в связи с увеличением необходимого объема ОЗУ для нод steemd, а также наши планы на будущее в контексте масштабирования. И хотя мы никогда не воспринимали проблемы масштабирования легкомысленно, мы полагаем, что основным источником беспокойства является непонимание того, как правильно/оптимально управлять нодами steemd. Ниже мы предоставим некоторые рекомендации по этому поводу, а также поговорим о кое-каких изменениях, над которыми работаем в рамках подготовки платформы к будущему прогнозируемому росту.

## Что такое масштабируемость?

Сообщество Стим быстро растет, а вместе с ним и блокчейн Стим. Рост – это хорошо, но он приносит с собой и проблемы масштабирования. Другие проекты (такие как Bitcoin и Ethereum) в течение нескольких лет никак не могут сдвинуться с мертвой точки с их проблемами масштабирования – они попросту неспособны принять какие-либо существенные изменения для удовлетворения возросших требований, связанных с активным использованием их блокчейнов. Тем временем Стим развивается и упреждает возникновение подобных проблем, что позволяет ему обрабатывать больше транзакций, чем все другие блокчейны вместе взятые. Другими словами, большинство блокчейн-транзакций, производимых в мире, выполняются на Steem.

Мы смогли это сделать, потому что наша команда состоит ​​из постоянно растущего числа самых талантливых и продвинутых блокчейн-инженеров на планете. Но это отнюдь не делает нас высокомерными, наоборот – это заставляет нас в полной мере осознавать надвигающиеся проблемы масштабирования, и мы хотим заверить вас, что мы достаточно подготовлены к их решению. И хотя мы уверены в своей стратегии, мы также хотим услышать ваши мысли, возражения и идеи в комментариях.

## Краткая история масштабирования

Самое важное решение в плане масштабирования – это то, с чего вы начинаете. Чем более масштабируема платформа изначально, тем более масштабируемым является стек. Способность стека к масштабированию соотносится с начальной точкой, в лучшем случае, экспоненциально. Редко когда архитектура способна за один день переключиться с обслуживания 3000 человек на 3 000 000 человек. Чаще это происходит последовательно: с 3 до 6, затем до 12 и т.д. Запуск платформы на основе архитектуры, которая изначально намного опережала конкурентов с точки зрения масштабируемости ([Graphene](http://docs.bitshares.org/)), была ключевым компонентом нашей стратегии масштабирования. Те, кто не принял подобного решения, теперь оказались в сложном положении, испытывая необходимость перестроить свой фундамент, при этом не повредив всю построенную на нем экосистему.

## ChainBase и AppBase

Первым крупным обновлением для повышения масштабируемости стала замена Graphene на [ChainBase](https://steemit.com/ru/@rusteemitblog/anons-steem-0-14-4-prevyu-reliz-raspredelennoi-bazy-dannykh-perevod-stati-steemitblog). Благодаря более быстрому времени загрузки и выхода, а также повышенной устойчивости к сбоям, ChainBase стал ключевым элементом, позволяющим сети Стим обрабатывать текущий объем транзакций.

Следующее важное усовершенствование, работа над которым близится к завершению (благодаря усилиям @vandeberg и команды), является [AppBase](https://steemit.com/steem/@rusteemitblog/appbase-eshe-odin-shag-vpered-dlya-blokcheina-steem-da-nachnetsya-test-steemitblog), который дополнительно повысит общую масштабируемость Стима путем модуляризации. AppBase позволит множеству компонентов блокчейна Стим работать независимо, что даст steemd возможность эффективнее использовать многопоточность компьютеров, а также обеспечит возможность запуска различных компонентов блокчейна на разных серверах – что уменьшит необходимость запуска блокчейна Стим на отдельных высокомощных дорогостоящих серверах.    

## Оптимизация нод Steemd: журнал блоков + файл состояния

Что касается работы steemd-нод в настоящее время, важно понимать, что Стиму требуется два хранилища данных: журнал блоков и файл состояния. Журнал блоков – это сам блокчейн, записанный на диск. К нему обращаются нечасто, но он имеет решающее значение для проверки целостности новых блоков и переиндексации файла состояния в случае необходимости.

Файл состояния содержит текущее состояние объектов Steem, таких как балансы аккаунтов, посты и голоса. Он поддерживается диском, но доступен через метод, называемый отображение файлов в память (memory-mapped files). Этот метод был введен в декабре 2016 года, одновременно с релизом ChainBase.

## Всё связано с ОЗУ?

Многие операторы нод полагают, что у серверов должно быть достаточно ОЗУ для хранения файла состояния всего Стима, исходя из того факта, что производительность Стима падает, когда операционная система начинает подкачку памяти Стима, что является типичной методикой работы с памятью. Здесь мы хотим быть предельно ясными: нет никакой необходимости в организации работы steemd-нод именно таким образом. Это, безусловно, действенный метод повышения производительности переиндексации ноды и обслуживания вызовов API, однако он полезен только в ограниченном числе случаев. В большинстве же случаев (включая ноды бирж, заверителей и сид-ноды) достаточно хранить файл разделяемой памяти на быстром накопителе SSD или NVMe, а не в ОЗУ.

## Требования к ОЗУ нод заверителя и сид-нод

Для запуска ноды steemd с одним только плагином `witness` (типичная конфигурация для нод заверителей и сид-нод) Steemit рекомендует использовать 16 ГБ ОЗУ, хотя может оказаться достаточно и 8 ГБ, если вашей ноде не требуется частая переиндексация. Если файл разделяемой памяти хранится в `/dev/shm/`, то для хранения всего файла состояния потребуется дополнительная ОЗУ, но такая конфигурация не рекомендуется. Чтобы избежать необходимости в дополнительной ОЗУ, файл разделяемой памяти можно хранить непосредственно на быстром накопителе SSD или NVMe.

Сервер с 8-16 ГБ оперативной памяти будет медленным в плане переиндексации, однако он будет функционировать должным образом в качестве сид-ноды/ноды заверителя, как только он синхронизируется с последним блоком. Эксплуатация на 32Гб-сервере идеальна для оптимального времени воспроизведения, но отнюдь не обязательна для корректного функционирования ноды заверителя/сид-ноды.

## Размер файла разделяемой памяти

Конфигурация по умолчанию для ноды steemd хранит файл разделяемой памяти в директории `data/blockchain`. До тех пор пока он находится на достаточно быстром (SSD или NVMe) диске с достаточным объёмом свободной памяти, настройка по умолчанию должна работать.

Актуальная рекомендация состоит в том, чтобы иметь как минимум 150 ГБ SSD хранилища, включая `block_log` (в настоящее время около 90 ГБ) и `shared_memory.bin` (в настоящее время около 33 ГБ). Эти цифры будут увеличиваться с течением времени.

Всякий раз, когда размер файла разделяемой памяти превышал размер, заданный в файле `config.ini`, необходимо было обновить конфигурацию до большего размера и перезапустить ноду. В версию Steem 19.4 внесены изменения, которые будут автоматически увеличивать этот предел по мере необходимости, без нужды перезапускать ноду. Это можно будет настроить и полностью отключить, если вы хотите хранить файл состояния в `/dev/shm`.

## Требования к полной ноде

Ноды, на которых запущены дополнительные плагины API (особенно история аккаунта), потребуют больше ОЗУ для поддержки более крупного файла состояния. «Полная нода» (та, на которой работают все плагины) технически может быть запущена на сервере с 64 ГБ, однако она будет очень медленно переиндексироваться и обслуживать вызовы API, поскольку алгоритм подкачки операционной системы не очень хорошо подходит для обработки отображаемых в память файлов. Ноды с ОЗУ 64-256 ГБ и быстрым накопителем SSD/NVMe может быть достаточно для множества случаев использования, в зависимости от нагрузки.

## Повышение производительности нод с высокой нагрузкой

Для более активно используемых нод лучший на данный момент способ увеличить производительность – иметь объём ОЗУ, достаточный для хранения всей базы данных. Это избавляет от необходимости в подкачке как таковой, что технически упраздняет смысл наличия отображаемых в память файлов. Для ноды, на которой запущены все плагины, за исключением истории аккаунтов, на данный момент требуется 256 ГБ оперативной памяти, если она pre-AppBase 

Метод, который мы использовали для снижения требований к памяти полной ноды (поддерживающей всё, включая историю аккаунтов), состоит в том, чтобы разделить узел API на два сервера. На одном сервере работает только история аккаунтов, а на другом – всё остальное. Это позволяет обоим серверам использовать менее 256 ГБ оперативной памяти вместо того, чтобы запускать всё на сервере с 512 ГБ оперативной памяти. Мы настоятельно рекомендуем запускать историю аккаунтов на выделенном сервере, если вам нужна полная история всех аккаунтов, поскольку это устраняет необходимость иметь один сервер с 512 ГБ оперативной памяти.

Оптимизация работы полной ноды – одна из наших приоритетных задач, и мы поговорим об этом в следующем разделе. Если вам нужна только история определенных аккаунтов или поддержка лишь некоторых операций, требования к оборудованию могут быть значительно снижены.

## Планы на будущее масштабирование

В настоящее время мы работаем над несколькими проектами, которые сократят требования к памяти для полных нод, переместив большую часть логики API на неконсенсусные плагины, такие как HiveMind и SBDS. Это позволит выполнять многие функции, используя SSD, а не ОЗУ, что снизит эксплуатационные расходы. Выгружая данные в hivemind/sbds и/или RocksDB (ниже), мы должны получить возможность снизить требования для полной ноды до уровня консенсусной/сид-ноды, что очень важно для нас.

## RocksDB

В дополнение к неконсенсусным плагинам мы начали исследование по использованию альтернативных хранилищ данных и постепенному отказу от Chainbase. Одним из таких многообещающих хранилищ данных является [RocksDB](http://rocksdb.org/).

RocksDB – это быстрое хранилище данных для SDD с продвинутым уровнем кеширования, способное дополнительно минимизировать задержку при чтении с диска/записи на диск, поскольку оно оптимизировано для быстрого хранилища с низкой задержкой. Используемый в производственных системах в нескольких крупномасштабных сетях (Facebook, Yahoo, LinkedIn), RocksDB основан на LevelDB, но обладает повышенной производительностью за счет своей способности использовать несколько ядер процессора и SSD-хранилище для I/O bound рабочих нагрузок. Например, его использование в MyRocks приводит к использованию меньшего объема SSD-памяти, повышению срока службы SSD и доступной емкости IO для обработки запросов.

## Дальнейшая модуляризация

Мы также работаем над тем, чтобы и дальше модуляризировать блокчейн сверх того, что первоначально планировалось для исходного внедрения AppBase, например, путем организации отдельных сервисов, которые могут работать на разных серверах. Это позволит обеспечить дальнейшее распределение процессов на множество небольших серверов, тем самым повышая гибкость и снижая издержки.

# Заключение

Поскольку блокчейн-проекты продолжают набирать популярность, вопрос масштабируемости будет вставать всё более остро.

Быть масштабируемым блокчейном – это не только делать одноразовые исправления для разрешения текущих проблем ресурса. Это также и готовность эффективно решать будущие задачи.

Стим уже зарекомендовал себя как самый быстрый блокчейн с наибольшим количеством транзакций, и его масштабируемость по-прежнему остаётся в центре нашего внимания. Мы знаем, что эта проблема никогда не исчезнет полностью, поэтому планируем продолжить внедрять инновации, дабы гарантировать, что какой бы рост нас не ожидал – мы будем к нему готовы.

*- Команда Steemit*

---

***<div class="pull-right">Переведено @blockchained</div>***

**Оригинал поста: [ЗДЕСЬ](https://steemit.com/steem/@steemitblog/exploring-steem-scalability)**


---

## Если вам нравится то, что мы делаем - поддержите witness blockchained в сети Steem
	
	
---

## Телеграм чат: https://t.me/steemit
---

# [Вы можете торговать токенами STEEM/SBD на RuDEX](https://market.rudex.org/#/market/RUDEX.STEEM_USD)

<center>[![](https://steemitimages.com/DQme823z4u64kGCsWsP9khWeUbohnB1rUx6Dji6ydTijDMi/%D0%91%D0%90%D0%9D%D0%9D%D0%95%D0%A0.png)](https://market.rudex.org)</center>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
post_id49,479,634
authorrusteemitblog
permlinkobzor-masshtabiruemosti-steem
categorysteem
json_metadata"{"image": ["https://steemitimages.com/DQmSFvyZ8oHUhjsLjm8ZVbpmDtAXaihmG3i4LZBdbXdVbmh/%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png"], "tags": ["steem", "steemd", "steemdev", "steemitdev", "rudex"], "format": "markdown", "users": ["vandeberg", "blockchained"], "app": "steemit/0.1", "links": ["http://docs.bitshares.org/", "https://steemit.com/ru/@rusteemitblog/anons-steem-0-14-4-prevyu-reliz-raspredelennoi-bazy-dannykh-perevod-stati-steemitblog", "https://steemit.com/steem/@rusteemitblog/appbase-eshe-odin-shag-vpered-dlya-blokcheina-steem-da-nachnetsya-test-steemitblog", "http://rocksdb.org/", "https://steemit.com/steem/@steemitblog/exploring-steem-scalability", "https://t.me/steemit", "https://market.rudex.org/#/market/RUDEX.STEEM_USD", "https://market.rudex.org"]}"
created2018-05-20 18:27:09
last_update2018-05-20 18:35:15
depth0
children5
net_rshares3,624,041,412,825
last_payout2018-05-27 18:27:09
cashout_time1969-12-31 23:59:59
total_payout_value14.638 SBD
curator_payout_value1.350 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length12,424
author_reputation35,300,249,728,591
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (60)
@tts ·
To listen to the audio version of this article click on the play image.
[![](https://s18.postimg.org/51o0kpijd/play200x46.png)](http://ec2-52-72-169-104.compute-1.amazonaws.com/rusteemitblog__obzor-masshtabiruemosti-steem.mp3)
Brought to you by [@tts](https://steemit.com/tts/@tts/introduction). If you find it useful please consider upvote this reply.
properties (22)
post_id49,483,810
authortts
permlinkre-obzor-masshtabiruemosti-steem-20180520t190303
categorysteem
json_metadata{}
created2018-05-20 19:03:03
last_update2018-05-20 19:03:03
depth1
children0
net_rshares0
last_payout2018-05-27 19:03:03
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length352
author_reputation-4,535,933,372,579
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@bammbuss ·
$0.06
интересная статья по содержанию. стим реально растет...
👍  
properties (23)
post_id49,498,716
authorbammbuss
permlinkre-rusteemitblog-obzor-masshtabiruemosti-steem-20180520t212341997z
categorysteem
json_metadata"{"app": "steemit/0.1", "tags": ["steem"]}"
created2018-05-20 21:23:42
last_update2018-05-20 21:23:42
depth1
children0
net_rshares14,018,521,737
last_payout2018-05-27 21:23:42
cashout_time1969-12-31 23:59:59
total_payout_value0.045 SBD
curator_payout_value0.013 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length55
author_reputation20,574,691,560,478
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (1)
@ivanzabolotin ·
Вы провели серьезный анализ, узнал много для себя полезного
properties (22)
post_id49,509,029
authorivanzabolotin
permlinkre-rusteemitblog-obzor-masshtabiruemosti-steem-20180520t230405400z
categorysteem
json_metadata"{"app": "steemit/0.1", "tags": ["steem"]}"
created2018-05-20 23:03:57
last_update2018-05-20 23:03:57
depth1
children0
net_rshares0
last_payout2018-05-27 23:03:57
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length59
author_reputation55,377,498,415
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@bronevik ·
$1.22
Серьезно?
Декомпозиция пула данных на 256 (!) гектар памяти плюс ССД - это то на что у ваших ЛУЧШИХ блокчейн-инженеров ушло столько месяцев?

Сеть может вырасти на порядок в течение следующего года, а у вас нет даже прототипа живого масштабирования на кластер? Ну охренеть просто, я понимаю теперь почему вы НЕ регистрируете новые аккаунты.

Нормальные практики индустрии вроде кластер RDBMS + кеш на Redis это недостаточно круто для вас и надо свой велосипед?

Камон, придите в себя, блокчейн-инженеры!
👍  
properties (23)
post_id49,519,497
authorbronevik
permlinkre-rusteemitblog-obzor-masshtabiruemosti-steem-20180521t005317415z
categorysteem
json_metadata"{"tags": ["steem"], "app": "busy/2.4.0", "community": "busy"}"
created2018-05-21 00:52:51
last_update2018-05-21 00:52:51
depth1
children0
net_rshares281,470,089,814
last_payout2018-05-28 00:52:51
cashout_time1969-12-31 23:59:59
total_payout_value1.216 SBD
curator_payout_value0.005 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length503
author_reputation12,271,252,398,511
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (1)
@steemitboard ·
Congratulations @rusteemitblog! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

[![](https://steemitimages.com/70x80/http://steemitboard.com/notifications/votes.png)](http://steemitboard.com/@rusteemitblog) Award for the number of upvotes

Click on any badge to view your own Board of Honor on SteemitBoard.

To support your work, I also upvoted your post!
For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)

If you no longer want to receive notifications, reply to this comment with the word `STOP`

> Upvote this notification to help all Steemit users. Learn why [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!
properties (22)
post_id49,588,141
authorsteemitboard
permlinksteemitboard-notify-rusteemitblog-20180521t115827000z
categorysteem
json_metadata"{"image": ["https://steemitboard.com/img/notifications.png"]}"
created2018-05-21 11:58:27
last_update2018-05-21 11:58:27
depth1
children0
net_rshares0
last_payout2018-05-28 11:58:27
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length734
author_reputation38,705,954,145,809
root_title"📢 Обзор масштабируемости Steem"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000