@proRuby

Страница 543 из 1594
v
12.05.2017
14:32:12
ну бери kv базу данных и не парься

Alex
12.05.2017
14:32:16
ну строго говоря в редисе удобно считать таблицы рейтингов например

другое дело что памяти нужно полно

v
12.05.2017
14:32:52
считай, что это API
эт вообще о количестве данных не говорит

Google
Ivan
12.05.2017
14:34:20
Да это все реализовано, у меня вопросы по производительности.. после того, как коннектов становится много (от 400) он начинает долго думать.. т.е. я понимаю, что дело в очереди т.к. он работает в один поток, но.. вообще не понимаю, как решить проблему т.к. у меня есть только список SLOWLOG

запросов на соединение примерно 20

Alex
12.05.2017
14:34:51
как тебе вариант - не отсоединяться?

Ivan
12.05.2017
14:34:54
да, и используются разные штуки, типа pipline

Да, но тут фишка в том, что основной проект на Ruby написан, а вот API - на php (он очень легким быть должен, чем и является), код быстр, генерация примерно 10мс

точнее не генерация, а ответ

Alex
12.05.2017
14:36:17
php? ?

если легким и шустрым, может Go? (не юзал)

Ivan
12.05.2017
14:36:38
Не несчастью?ъ

Да, на новую технологию переходить не было возможности..

Slava
12.05.2017
14:37:19
так у тебя на каждый реквест создается новое соединение?

Ivan
12.05.2017
14:37:29
там есть свои подводные камни, а проект должен быть стабилен постоянно;;

Google
Ivan
12.05.2017
14:38:07
в Redis говорят, что кол-во соединений около 4-5к никак не влияют на производительность

Alex
12.05.2017
14:38:36
докер юзаешь?

может в нём бутылочное горлышко?

Ivan
12.05.2017
14:39:03
Нет, не докер, отдельно выделенный инстанс под redis

Вот сегодня, допустим. Мало запросов (в 2 раза меньше среднего), но вот ответы..

Slava
12.05.2017
14:40:12
если у тебя там какой-то простой скрипт, то просто запусти его в бесконечном цикле чтобы он принимал реквесты, а перед циклом открой соединение. потом запусти как тебе удобно этот скрипт, например, в 100 потоков (я не знаю сколько надо). и не будет проблемы с коннектами.

Ivan
12.05.2017
14:40:15


Alex
12.05.2017
14:40:22
в php есть react-php

пускай он у тебя отдает ответы, чтобы соединения не городить

того же эффекта можно добиться с EM думаю.

Ivan
12.05.2017
14:41:02
в php есть react-php
его и юзаю

Alex
12.05.2017
14:41:04
(event-machine)

Ivan
12.05.2017
14:41:07
а нет

phpredis

Alex
12.05.2017
14:41:14
что значит его юзаешь?

react-php это эвентлюп

это как ноду запустить ток php

чтобы php не спавнился и не подключался каждый раз заново, городя оверхэд на соединения.

а так как ты рубист, то может вообще на EM переписать?

Google
Ivan
12.05.2017
14:44:38
Сейчас постараюсь описать то, что я понял на данный момент. Я не использую ничего, что может лочить очередь redis т.е. кол-во соединений никак повлиять не может на это.. общался с людьми, которые так же используют redis, но для более высоконагруженных сервисов в качестве cache storage (там тоже PHP, и работают так же, и проблем не наблюдается).. может быть все дело в настройках redis? сейчас скину парочку

Вот info

# Server redis_version:3.2.1 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:8ab9de078b62748e redis_mode:standalone os:Linux 4.8.0-30-generic x86_64 arch_bits:64 multiplexing_api:epoll gcc_version:5.4.0 process_id:11596 run_id:04ee680b9d067e5094a4bcb5270993d0fe6d90aa tcp_port:6379 uptime_in_seconds:50713 uptime_in_days:0 hz:10 lru_clock:1427369 executable:/usr/bin/redis-server config_file:/etc/redis/redis.conf # Clients connected_clients:407 client_longest_output_list:0 client_biggest_input_buf:0 blocked_clients:0 # Memory used_memory:106390424 used_memory_human:101.46M used_memory_rss:120041472 used_memory_rss_human:114.48M used_memory_peak:122821896 used_memory_peak_human:117.13M total_system_memory:8370909184 total_system_memory_human:7.80G used_memory_lua:37888 used_memory_lua_human:37.00K maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction mem_fragmentation_ratio:1.13 mem_allocator:jemalloc-3.6.0 # Persistence loading:0 rdb_changes_since_last_save:10699 rdb_bgsave_in_progress:0 rdb_last_save_time:1494599432 rdb_last_bgsave_status:ok rdb_last_bgsave_time_sec:2 rdb_current_bgsave_time_sec:-1 aof_enabled:0 aof_rewrite_in_progress:0 aof_rewrite_scheduled:0 aof_last_rewrite_time_sec:-1 aof_current_rewrite_time_sec:-1 aof_last_bgrewrite_status:ok aof_last_write_status:ok # Stats total_connections_received:4567315 total_commands_processed:59466535 instantaneous_ops_per_sec:1765 total_net_input_bytes:4358738262 total_net_output_bytes:12634509923 instantaneous_input_kbps:129.06 instantaneous_output_kbps:383.82 rejected_connections:0 sync_full:0 sync_partial_ok:0 sync_partial_err:0 expired_keys:2062854 evicted_keys:0 keyspace_hits:32327857 keyspace_misses:7197779 pubsub_channels:3 pubsub_patterns:0 latest_fork_usec:34394 migrate_cached_sockets:0 # Replication role:master connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0 # CPU used_cpu_sys:4685.29 used_cpu_user:2762.45 used_cpu_sys_children:21.72 used_cpu_user_children:87.38 # Cluster cluster_enabled:0 # Keyspace db0:keys=339298,expires=134566,avg_ttl=30442950 db5:keys=1203,expires=785,avg_ttl=1687703

slowlog

1) 1) (integer) 3620 2) (integer) 1494600294 3) (integer) 12061 4) 1) "HGETALL" 2) "users:token:c1a09372-da16-11e6-aa13-9fcea395a164" 2) 1) (integer) 3619 2) (integer) 1494600292 3) (integer) 19563 4) 1) "HGETALL" 2) "users:token:bab0ae4a-df42-11e6-aa14-f3029310ddd1" 3) 1) (integer) 3618 2) (integer) 1494600280 3) (integer) 13205 4) 1) "HGETALL" 2) "sessions:97559b4a-1c87-11e7-aa2d-bf49c5e1089e" 4) 1) (integer) 3617 2) (integer) 1494600273 3) (integer) 23289 4) 1) "HGETALL" 2) "sessions:6e115b12-237f-11e7-aa41-0702fa902471" 5) 1) (integer) 3616 2) (integer) 1494600256 3) (integer) 11269 4) 1) "HGETALL" 2) "sessions:110e0dc2-29c2-11e7-aa69-03edcae7d26f"

данные по токенам не приватные, так что нет разницы в том, что они будут тут)

по HGETALL всего 3 филда т.е. сложность O(N); N =3

Slava
12.05.2017
14:47:58
редис тут не причем, если я все правильно понял. что угодно (rdbms, небо, аллах) будет тупить, если ты будешь сотни коннектов ежесекундно к нему открывать (кстати, ты их закрываешь? на всякий уточняю)

Ivan
12.05.2017
14:48:17
Да, закрываю

не думал, что сотни коннектов для ПО, которое работает на VPS с RAM 8GB - проблема

и то, что в большинстве случаев это только чтение

Slava
12.05.2017
14:49:30
так ведь ты не держишь их в памяти, если я верно понял

Ivan
12.05.2017
14:49:41
Держу

VPS только для Redis и используется, и он работает только с оперативной памятью, снэпшоты делает раз в 15 мин

Slava
12.05.2017
14:50:58
Держу
немного выше ты подтвердил, что на каждый реквест открывается новое соединение. видимо мы друг друга не так поняли :)

Ivan
12.05.2017
14:51:36
Я думал, ты о данных в redis, так что да)

Вот по redis инстансу



т.е. ему там совсем свободно

инстансы общаются по локальной сети, пинг минимальный

Google
Ivan
12.05.2017
14:53:59
?

перечитал тонну доков, до сих пор в засаде остаюсь

Slava
12.05.2017
14:54:45
когда-то возился с rabbitmq, возможно в редисе что-то такое тоже есть: там надо в ОС увеличить всяческие лимиты. быть может ты напоролся на подобные ограничения. секция Controlling System Limits on Linux: https://www.rabbitmq.com/install-debian.html

Ivan
12.05.2017
14:56:15
Вот кстати, rabbitmq работает вообще идеально на соседнем

Admin
ERROR: S client not available

Slava
12.05.2017
14:56:23
еще из очевидного: зачем тебе 400 коннектов при 500 rps? сделай connection pool.

Ivan
12.05.2017
14:56:27
и у него всего 1GB RAM

Lupsick
12.05.2017
15:18:59
def channel_to_members users = bot_api.users_list["members"].map { |u| [u['id'], u] }.to_h ((bot_api.channels_list.try(:[], "channels") || []).map { |c| [c['id'], c['members'] || []] } + (bot_api.groups_list.try(:[], "groups") || []).map { |c| [c['id'], c['members'] || []] } + (bot_api.im_list.try(:[], "ims") || []).select{|im| im["user"] != "USLACKBOT"}.map{ |im| [im['id'], [im['user']]] }).map do |k, v| [k, v.select do |u| profile = users[u] !profile['deleted'] && !profile['is_bot'] end] end.to_h end что в приличном обществе делают за такой код?

Lupsick
12.05.2017
15:22:10
да варнинги это второстепенная хуйня

Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.

Ivan
12.05.2017
16:29:32
жесть, добавил опции "сохранения" соединения, отвалился PostgreSQL (\PDO::ATTR_PERSISTENT => true) с ошибкой - FATAL: sorry, too many clients already FATAL: sorry, too many clients already)

Норм)

Dmitry
13.05.2017
00:17:56
Всем привет! Подскажите, какие можно использовать джемы или отдельные утилиты, чтобы сгенерировать документацию по api, сделанному с помощью рельсов?

Vitaliy
13.05.2017
00:20:09
Apipie, swagger

Dmitry
13.05.2017
00:22:48
с ними как раз вожусь сейчас - значит на верном пути, спасибо)

Google
Danny
13.05.2017
14:29:08
Всем привет! Сделал я локализацию на рус. язык Как тепер включить ее?

Dmitry
13.05.2017
14:32:55
Привет! В конфиге приложения или среды прописать config.i18n.default_locale.

Ivan
13.05.2017
14:33:00
I18n.locale = :ru

Lupsick
13.05.2017
14:33:38
Ivan
13.05.2017
14:33:59
http://guides.rubyonrails.org/i18n.html#managing-the-locale-across-requests

Danny
13.05.2017
14:37:37
Cgfcb,j!

Спасибо!

Sergey
13.05.2017
17:03:39
 @pimpmyyoba  подключите в проект rubocop плюс плагин к атому/сублайму - такой жести не будет

Lupsick
13.05.2017
17:04:04
 @pimpmyyoba  подключите в проект rubocop плюс плагин к атому/сублайму - такой жести не будет
я это сделал уже, я даже сделал бота, который PR проверяет

Sergey
13.05.2017
17:04:54
Но рубокоп такой код бы не пропустил ?

Lupsick
13.05.2017
17:16:00
Klim
13.05.2017
19:33:36
Светик, ты нас будешь спамить или рекрутить?

v
13.05.2017
19:34:38
она, по ходу, программировать на руби будет

Страница 543 из 1594