create account

streems



advanced mode

🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса by vik

View this thread on golos.io
View on official site
@vik · (edited)
$1,725.99
🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса

Суть решаемой проблемы:


https://s17.postimg.org/byltwz7rh/image.png

Решение:

В конце поста будет приведен простой код для node.js который позволит оптимизировать работу множества скриптов на одной ноде.

https://s2.postimg.org/qf2uq63pz/image.png


Активным пользователям моих ботов:
Просьба протестировать нового бота https://t.me/autoupvotebot - если ошибок найдено не будет, на эту версию будут переведены все боты , что обеспечит стабильную и комфортную для вас работу.

Update:
Уже обновлены:
https://t.me/golosrobot
https://t.me/hottabot

https://t.me/mapvotebot (бот в числе прочего голосующий за посты размещенные с клиента мапалы)

Для обновления введите в ботах команду /menu - вы увидите переименованную кнопку Запуск - нажимайте ее, это возобновит работу.

Некоторые боты будут переведены на новую версию уже сейчас.


В последнее время моими телеграм ботами для голосования пользуются все больше людей и естественно нагрузка возрасла в 10-ки раз по сравнению даже с прошлым месяцем. Я поднял дополнительные ноды, распределил нагрузки, добавил мощности серверам, но узкое место оказалось в самой пропускной способности нод.

Обратите внимание на скрин, там изредка мелькают строки белого цвета. Это череда новых блоков. Желтые же строки - это обращение к ноде.

https://s21.postimg.org/5qtwcvmmt/blocks.gif

Сейчас на сервере работают примерно 10 ботов, в каждом примерно 20 пользователей, это 200 практически одновременных запросов каждые 3 секунды 24/7. Такую нагрузку нода очень часто не выдерживает и боты пропускают транзакции или становятся на вынужденную паузу, а пользователи сердятся на несовершенство скриптов :)

Так как каждый пользователь бота опрашивает новые блоки с интервалом в 3 секунды, то сделать работу комфортной можно либо устанавливая по ноде на каждых 20-30 человек, что экономически абсурдно, либо пересмотреть принципы работы с опрашиванием блоков.

Решение я выбрал такое:

Вместо сотен отдельных сессий пользователей работает только один ОТДЕЛЬНЫЙ скрипт который опрашивает блоки. И сохраняет данные блока в базу данных Redis, все это происходит за доли миллисикунд, так как redis при правильной настройке не просто база, а мощный кеширующий инструмент.
Далее, каждый из пользователей бота обращается не к ноде, а уже к redis, что бы получить данные блока с операциями блокчейна. Таким образом, нагрузка должна упасть в 10-ки, а то и больше раз.

Разработчикам и владельцам нод

Суть метода простая, на сервере работает javascript который с интервалом в 3 секунды обновляет в базе данных содержимое свежего блока на golos.io
Далее вместо того, что бы подключаться всеми своими скриптами одновременно к одной ноде, вы берете данные о блоках из базы данных, а нода работает с минимальной нагрузкой, словно ее использует лишь один скрипт.

Вы можете использовать любую базу данных, как-то mongo, mysql, rethink и другие, для себя же я выбрал именно redis, для меня она проверенный инструмент способный держать нагрузку во время кэширования большого объема данных.

https://redislabs.com/wp-content/uploads/2014/04/redis_proven_performance_2.png

Весь код для постоянного сохранения текущего блока в redis уместился в несколько десятков строк

https://s13.postimg.org/tii4r8vad/code.jpg

require('events').EventEmitter.prototype._maxListeners = 100000
const Promise = require("bluebird")
const _ = require('lodash')
const golos = require("golos-js")
const redis = require("redis")
const client = redis.createClient()
golos.config.set('websocket','ws://localhost:9090')
let trig = {existBlock:true}
const dynamicSnap = new Promise((resolve, reject) => {
    golos.api.getDynamicGlobalProperties((err, res) => {
        if (err) {console.log(err)}
        else {
            resolve(res)
        }
    })
})
const FIRSTBLOCK = n => n.head_block_number
const SENDBLOCK = currentblock => {
    golos.api.getBlock(currentblock, (err, result) => {
        if (err) {
            console.log(err) 
            }   else if (result === null){
                trig.existBlock = false
                }else {
        let JSONblock = JSON.stringify(result)
        client.hmset("GolosLastBlock", "data",JSONblock);
        console.log(JSONblock)
        trig.existBlock = true
            }
    })
}
const NEXTBLOCKS = firstblock => {
    let currentblock = firstblock
    setInterval(() => {
if(trig.existBlock){
currentblock++
}else{
console.warn(`Проблема блока ${currentblock}`)}
SENDBLOCK(currentblock)
}, 3000)
}
dynamicSnap
    .then(FIRSTBLOCK)
    .then(NEXTBLOCKS)
    .catch(e => console.log(e));


Далее вам достаточно брать данные блока из базы redis

client.hgetall("GolosLastBlock", function(err, LB) {
let LastBlockRedis = JSON.parse(LB.data)
            filterOperations(LastBlockRedis)
}

Где предполагается, что функция filterOperations обрабатывается вашим скриптом.


👍  , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
json_metadata{"tags":["ru--golos","ru--boty","api","telegram"],"image":["https://s17.postimg.org/byltwz7rh/image.png","https://s2.postimg.org/qf2uq63pz/image.png","https://s21.postimg.org/5qtwcvmmt/blocks.gif","https://redislabs.com/wp-content/uploads/2014/04/redis_proven_performance_2.png","https://s13.postimg.org/tii4r8vad/code.jpg"],"links":["https://t.me/autoupvotebot","https://golos.io/ru--boty/@vik/vozobnovlenie-raboty-kuratorskikh-botov-dlya-telegram","https://t.me/golosrobot","https://t.me/hottabot","https://t.me/mapvotebot","https://golos.io/ru--golos/@vik/etika-botovodstva-na-golose-i-ekonomiya-resursa-pablik-nod-robot-delegat-za-kotorogo-ne-nuzhno-golosovat"],"app":"golos.io/0.1","format":"markdown"}
last_update2017-08-25 21:00:42
created2017-08-15 16:25:45
active2017-08-25 21:00:42
last_payout2017-09-15 17:38:48
depth0
children15
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value1,674.037 GBG
curator_payout_value51.956 GBG
author_rewards525,154
net_votes299
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation156,973,576,181,968
promoted0.000 GBG
body_length0
reblogged_by[]
author_curate_reward""
vote details (301)

vote your-acct "vik" "zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa" 100 true
post_comment your-acct "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220834z" "vik" "zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa" "" "your reply.." "{}" true

View on official site
@natalia ·

Подключила.
Сколько времени требуется на тест?

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 16:38:45
active2017-08-15 20:54:36
last_payout2017-09-15 17:38:48
depth1
children5
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation7,362,890,968,311
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "natalia" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t163845926z" 100 true
post_comment your-acct "re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220838z" "natalia" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t163845926z" "" "your reply.." "{}" true

View on official site
@vik ·

Требуется максимальное число пользователей, что бы сравнить степень нагрузки.


https://t.me/hottabot так же получил новую версию.

Постепенно будут обновляться и другие.

json_metadata{"tags":["ru--golos"],"links":["https://t.me/hottabot"],"app":"golos.io/0.1"}
created2017-08-15 16:44:24
active2017-08-15 20:54:36
last_payout2017-09-15 17:38:48
depth2
children4
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation156,973,576,181,968
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "vik" "re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164424415z" 100 true
post_comment your-acct "re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220841z" "vik" "re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164424415z" "" "your reply.." "{}" true

View on official site
@natalia ·

хорошо, поняла.
надеюсь, все будет отлично )
спасибо!

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 16:48:51
active2017-08-15 16:48:51
last_payout2017-09-15 17:38:48
depth3
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation7,362,890,968,311
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "natalia" "re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164849499z" 100 true
post_comment your-acct "re-natalia-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220844z" "natalia" "re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164849499z" "" "your reply.." "{}" true

View on official site
@ladyzarulem ·

хотабычна надо обновлять, Вик? привет)

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 18:47:21
active2017-08-15 20:54:36
last_payout2017-09-15 17:38:48
depth3
children2
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation121,478,631,202,697
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "ladyzarulem" "re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t184720050z" 100 true
post_comment your-acct "re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220848z" "ladyzarulem" "re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t184720050z" "" "your reply.." "{}" true

View on official site
@v0id ·

Просто снимите с паузы запуском :)
Так же как и @golosrobot

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 18:48:18
active2017-08-15 20:54:36
last_payout2017-09-15 17:38:48
depth4
children1
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation463,657,351,778
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "v0id" "re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t184819452z" 100 true
post_comment your-acct "re-v0id-re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220851z" "v0id" "re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t184819452z" "" "your reply.." "{}" true

View on official site
@ladyzarulem ·

ок, понятно, спасибо )

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 20:54:36
active2017-08-15 20:54:36
last_payout2017-09-15 17:38:48
depth5
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation121,478,631,202,697
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "ladyzarulem" "re-v0id-re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t205437368z" 100 true
post_comment your-acct "re-ladyzarulem-re-v0id-re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220854z" "ladyzarulem" "re-v0id-re-ladyzarulem-re-vik-re-natalia-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t205437368z" "" "your reply.." "{}" true

View on official site
@primus ·
$0.21

@vik спасибо за мануал, однозначно пригодится.

Нет ли подобного [готового] решения не для чтения блоков, а для записи?

Т.е. обслуживать 200+ клиентов одновременно пишущих в блокчейн?

👍  
json_metadata{"tags":["ru--golos"],"users":["vik"],"app":"golos.io/0.1"}
created2017-08-15 16:50:45
active2017-08-16 10:43:09
last_payout2017-09-15 17:38:48
depth1
children4
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.154 GBG
curator_payout_value0.051 GBG
author_rewards48
net_votes1
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation139,021,021,711,730
promoted0.000 GBG
body_length0
reblogged_by[]
author_curate_reward""
vote details (1)

vote your-acct "primus" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164915421z" 100 true
post_comment your-acct "re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220858z" "primus" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t164915421z" "" "your reply.." "{}" true

View on official site
@muhazokotuha ·

А чем обычный load balancer не устраивает? 200+ клиентов просто раскидываются по разным нодам, как это сейчас делается на golos.io

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-16 05:56:15
active2017-08-16 10:43:09
last_payout2017-09-15 17:38:48
depth2
children3
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation312,399,141,667
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "muhazokotuha" "re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t055622564z" 100 true
post_comment your-acct "re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220861z" "muhazokotuha" "re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t055622564z" "" "your reply.." "{}" true

View on official site
@vik ·

Подразумевается собственная нода/ноды. И прожорливые клиенты, где один за десятерых :) Баланс нагрузки распределенный между несколькими собственными нодами будет отличным решением, но для этого все равно нужно ставить несколько нод.

Т.е. обслуживать 200+ клиентов одновременно пишущих в блокчейн?

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

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-16 06:40:27
active2017-08-16 10:43:09
last_payout2017-09-15 17:38:48
depth3
children2
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation156,973,576,181,968
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "vik" "re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t064026982z" 100 true
post_comment your-acct "re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220864z" "vik" "re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t064026982z" "" "your reply.." "{}" true

View on official site
@muhazokotuha · (edited)

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

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

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
last_update2017-08-16 12:08:24
created2017-08-16 08:55:09
active2017-08-16 12:08:24
last_payout2017-09-15 17:38:48
depth4
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation312,399,141,667
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "muhazokotuha" "re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t085515312z" 100 true
post_comment your-acct "re-muhazokotuha-re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220868z" "muhazokotuha" "re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t085515312z" "" "your reply.." "{}" true

View on official site
@primus ·

Согласен, тоже склоняюсь к варианту складывать подписанные запросы в буфер, формировать из них одну общую транзакцию и её уже транслировать в сеть.

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-16 10:43:09
active2017-08-16 10:43:09
last_payout2017-09-15 17:38:48
depth4
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation139,021,021,711,730
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "primus" "re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t104139455z" 100 true
post_comment your-acct "re-primus-re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220871z" "primus" "re-vik-re-muhazokotuha-re-primus-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t104139455z" "" "your reply.." "{}" true

View on official site
@semasping ·

Да, на мой взгляд, это отличное решение.
а еще у тебя блоки потом удаляются ?
так как redis хранит все в оперативке все блоки бесконечно туда не затолкнуть.
Но в redis есть возможность установить время жизни сохраненной информации при добавлении этой информации. И хранить блок например сутки или двое. может неделю :) затем он сам удалится.

Готовлю пост с таким же примером, но на php + laravel

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-15 22:53:09
active2017-08-16 03:44:30
last_payout2017-09-15 17:38:48
depth1
children1
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation23,011,606,362,832
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "semasping" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t225307614z" 100 true
post_comment your-acct "re-semasping-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220876z" "semasping" "re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t225307614z" "" "your reply.." "{}" true

View on official site
@vik ·

так как redis хранит все в оперативке все блоки бесконечно туда не затолкнуть.

Блок хранится 3 секунды только, далее заменяется новым, принцип буффера :)

json_metadata{"tags":["ru--golos"],"app":"golos.io/0.1"}
created2017-08-16 03:44:30
active2017-08-16 03:44:30
last_payout2017-09-15 17:38:48
depth2
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation156,973,576,181,968
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "vik" "re-semasping-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t034424459z" 100 true
post_comment your-acct "re-vik-re-semasping-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220879z" "vik" "re-semasping-re-vik-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170816t034424459z" "" "your reply.." "{}" true

View on official site
@dobryj.kit ·

Ваш пост поддержали следующие Инвесторы Сообщества Добрый кит:
litrbooh, t3ran13, boddhisattva, strecoza, ukrainian, neo, chiliec, natalia, fetta, andrvik, oleg257, dreamer, dimarss, vik, shuler, genyakuc, brovaryleaks, vadbars, elviento, volv, vasilisapor2, nefer, tom123, renat242, nikalaich, semasping, ladyzarulem, svinsent, gryph0n, voltash, tnam0rken, arystarch, zivchakh, francesco, asuleymanov, bystree, exan, stranniksenya, boltyn, on1x, oksana0407, igor66, sva-lana, borisss, anomalywolf, del137, bammbuss, dmitrijv, talia, chin, graff0x, mixtura, m1m2, kertar, dimas102, nerengot, bag, dim447, vealis, astrofilosof, dignityinside, foxycat, wedge, karmoputnik, ineon73, gbot, bounty-compaing, etnospace, verdon
Поэтому я тоже проголосовал за него!
Если Вы проголосуете за этот комментарий, то поможете сделать Доброго Кита сильнее!

created2017-08-16 12:26:18
active2017-08-16 12:26:18
last_payout2017-09-15 17:38:48
depth1
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation71,865,350,375,424
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "dobryj.kit" "re-dobryj-kit-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa20170816t080895179z" 100 true
post_comment your-acct "re-dobryj.kit-re-dobryj-kit-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa20170816t080895179z-20170925t120220889z" "dobryj.kit" "re-dobryj-kit-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa20170816t080895179z" "" "your reply.." "{}" true

View on official site
@arcange ·

@vik, Поздравляю!
Ваш пост был упомянут в моем хит-параде в следующих категориях:

  • Голосов - 2 позицию - 271 Голосов
  • Выплаты - 8 позицию - 1583,5750 GBG
created2017-08-17 06:39:36
active2017-08-17 06:39:36
last_payout2017-09-15 17:38:48
depth1
children0
children_rshares20
net_rshares0
vote_rshares0
children_abs_rshares0
cashout_time1969-12-31 23:59:59
max_cashout_time1969-12-31 23:59:59
total_vote_weight0
reward_weight10,000
total_payout_value0.000 GBG
curator_payout_value0.000 GBG
author_rewards0
net_votes0
root_comment1,316,927
modearchived
max_accepted_payout1,000,000.000 GBG
percent_steem_dollars10,000
allow_repliestrue
allow_votestrue
allow_curation_rewardstrue
root_title"🚀 [Кеширование API golos] Запуск множества многопоточных живых скриптов на одной ноде - решение для маштабируемости ботов голоса"
total_pending_payout_value0.000 GBG
author_reputation914,673,255,790,071
promoted0.000 GBG
body_length0
reblogged_by[]

vote your-acct "arcange" "re-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t084051000z" 100 true
post_comment your-acct "re-arcange-re-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170925t120220895z" "arcange" "re-zapusk-mnozhestva-mnogopotochnykh-zhivykh-skriptov-na-odnoi-node-reshenie-dlya-mashtabiruemosti-botov-golosa-20170815t084051000z" "" "your reply.." "{}" true