@gogolang

Страница 1477 из 1630
Marlik
29.09.2018
09:42:01
Марлик вернулся
Ага, тишину нарушать буду теперь.

Ilya
29.09.2018
10:10:13
Гайс, а какие есть бест праксис для кеширования данных из бд, если это не орм?

То есть грубо говоря, считал я пару таблиц, и логично их закешировать по ключу и брать из кеша, пока ключ совпадает и кеш не устарел. Как это лучше реализовать?

Marlik
29.09.2018
10:13:34
Как с этой бедой бороться? Отключать? gometalinter --fast --no-vendored-linters --vendor ./... WARNING: deadline exceeded by linter vetshadow (try increasing --deadline) WARNING: deadline exceeded by linter vet (try increasing --deadline) WARNING: deadline exceeded by linter gosec (try increasing --deadline)

Google
Ilya
29.09.2018
10:15:04
так же, как и с орм :)
Стало немножко лучше, но все еще нет)

Прост орм часто включают такой функционал, поэтому уточнил

Bohdan
29.09.2018
10:18:35
Прост орм часто включают такой функционал, поэтому уточнил
посмотреть его реализацию в орм и сделать так же?)

Ilya
29.09.2018
10:19:09
Да хорош рофлить

Я не знаю, реализовано ли это где-то. К тому же спросил про бест праксис, то есть может все в редисе такое хранят, понятно, что орм такого делать не будет

Просто до этого работал с языком, у которого из коробки буферизация запросов есть

А в го ничего такого нет, а свои велосипеды выдумывать смысла не вижу

Наверняка кто поумней меня уже все придумал

Александр
29.09.2018
10:35:09
Ну вроде самое простое - это когда ключ = сам запрос, а значение результаты? И в редисе хранить

Реализуется элементарно

Ilya
29.09.2018
10:50:25
Реализуется элементарно
А если много записей читаю? Норм их отдельно по ключу в редис класть? Или целой таблицей?

Александр
29.09.2018
10:51:28
Много записей - это же конкретный запрос :) и на него есть конкретные результаты.

Google
Ilya
29.09.2018
10:52:52
Это разумно

Как-то и не задумывался в таком ключе

Nikolay
29.09.2018
12:11:53
товарищи, а может кто-нибудь помочь найти баг с зависанием?

смотрите, у меня есть веб-приложуха, которую я реализовал по вот этой статье https://medium.com/smsjunk/handling-1-million-requests-per-minute-with-golang-f70ac505fcaa

в каждом воркере идут запросы на отдельные урлы с таймаутами по http, по сути, это кроулер

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

при этом дамп pprof пустой, то есть приложение висит не в юзерспейсе (ну либо что-то крайне быстро отрабатывает)

strace показывает, что futex'ы бесятся, то есть не зависание на сисколле, а какая-то битва где-то за что-то

как найти проблему?

Artem
29.09.2018
12:35:47
Долго это сколько?

Приделай таймаутов, какой-нибудь оборвется, там и будет проблема

Nikolay
29.09.2018
12:36:33
так в том-то и дело, что таймаут на http клиенте стоит

10 секунд

но запуск всей фигни на одних и тех же урлах может занять 10 секунд, а может 1500 секунд

вроде количество дескрипторов повысил - не помогло

Subbotin
29.09.2018
12:39:52
Илья
29.09.2018
12:40:06
Subbotin
29.09.2018
12:40:10
Использовать средства кэширования самой базы.
Иначе убьешься кэш инвалидировать

Nikolay
29.09.2018
12:40:32
Танцы футексов, обычно, это шедуллер, значит все повисло
вообще сейчас уже нет, я только что проверил - висит на фьютексе

Google
Nikolay
29.09.2018
12:40:40
и у процесса стейт Sl

Ilya
29.09.2018
12:40:48
Иначе убьешься кэш инвалидировать
Так идея не на сервере бд кешировать, чтобы снизить на него нагрузку, или я что-то не так понимаю?

Nikolay
29.09.2018
12:40:52
что он там может такое ждать и почему таймаут не срабатывает?

Илья
29.09.2018
12:41:24
Днс? Хендшейк?

Subbotin
29.09.2018
12:41:34
Илья
29.09.2018
12:41:45
Подсунь dialer с дебагом

Nikolay
29.09.2018
12:42:12
Днс? Хендшейк?
я dns-запрос руками делаю с таймаутом перед http

и если он не отрабатывает - даже не пытаюсь http

Subbotin
29.09.2018
12:42:33
Илья
29.09.2018
12:49:21
я dns-запрос руками делаю с таймаутом перед http
А по графу непонятно, какая ветка в футекс ушла? Pprof я имею ввиду

Nikolay
29.09.2018
12:49:53
А по графу непонятно, какая ветка в футекс ушла? Pprof я имею ввиду
я вот сейчас прошел руками по всем тредам - судя по всему, висит вызов epoll_pwait()

но я понятия не имею, что это может значить и, опять же, почему таймаут не отрабатывает

Nikolay
29.09.2018
12:50:29
не, я знаю, что такое epoll

Илья
29.09.2018
12:50:32
Медленное чтение?

Nikolay
29.09.2018
12:50:34
я не понимаю, почему на нем висит

Медленное чтение?
да вот фиг знает, таймаут-то на все сразу должен быть, разве нет?

Илья
29.09.2018
12:51:08
Попробуй readtimeout прокрутить

Nikolay
29.09.2018
12:52:45
Попробуй readtimeout прокрутить
такой настройки нет для клиента, как я понимаю https://blog.cloudflare.com/the-complete-guide-to-golang-net-http-timeouts/

Roman
29.09.2018
13:24:20
http://qr.ae/TUGK8h

Daniel
29.09.2018
13:27:38
коллега Николай, а вы логи-то пишете? по логам нельзя понять, что там у вас встает колом?

Google
Daniel
29.09.2018
13:28:16
а транспорт настраиваете? максимальное количество коннектов одновременны к одному серверу, и все вот это вот?

Nikolay
29.09.2018
13:28:23
коллега Николай, а вы логи-то пишете? по логам нельзя понять, что там у вас встает колом?
писал, но не особо помогло. Может зависнуть на разных урлах, которые отдельно проходят

Daniel
29.09.2018
13:28:52
что такое зависнуть?

зависнуть там ничего не может

может ждать отправки или получения данных

Nikolay
29.09.2018
13:31:19
может ждать отправки или получения данных
я выше написал, один из тредов ожидает на epoll_pwait крайне долго, и таймаут для http-клиента не помогает

Daniel
29.09.2018
13:31:50
еполл - это вы очень глубоко отправились

транспорт вы настраиваете?

Admin
ERROR: S client not available

Nikolay
29.09.2018
13:32:31
Daniel
29.09.2018
13:32:53
конечно она пцустая - у вас же приложение не делает ничего

Nikolay
29.09.2018
13:32:56
транспорт вы настраиваете?
я ему выставляю InsecureSkipVerify: true

больше ничего

Daniel
29.09.2018
13:33:11
это TLS

Nikolay
29.09.2018
13:33:33
конечно она пцустая - у вас же приложение не делает ничего
да, это и напрягает, что таймаут не соблюдается

Daniel
29.09.2018
13:34:01
ну вот посмотрите, сколько всего полезного можно настроить: https://golang.org/pkg/net/http/?#Transport

Roman
29.09.2018
13:41:31
Слушайте, а почему собственно не иметь возможность запускать разные goroutine'ы в разных runtime'ах с отдельным scheduler'ом?

это конечно повысит memory-footprint, но для time-critical applications это было бы вполне полезно

на одном рантайме 100.000 горутин занимаются всяким I/O, на другом рантайме 12 горутин занимаются обработкой time-critical заданий

Daniel
29.09.2018
13:42:55
это все зачем?

Google
Roman
29.09.2018
13:44:14
это все зачем?
да если даже про тот-же рендеринг говорить.. чтоб 100к горутин которые занимаются всяким I/O не крали время у тех горутин, которые занимаются time-critical заданиями как рендеринг на экран..

Daniel
29.09.2018
13:44:32
коллега, нет никакого рендеринга

Никита
29.09.2018
13:45:02
Эта идея может быть реализована в виде приоритетов для горутин

Daniel
29.09.2018
13:45:43
откуда у горутин приоритеты

Alexander
29.09.2018
13:45:58
на одном рантайме 100.000 горутин занимаются всяким I/O, на другом рантайме 12 горутин занимаются обработкой time-critical заданий
А зачем писать критичное ко времени на языке 1) с GC 2) с плохо оптимизирующим компилятором?

Daniel
29.09.2018
13:46:03
ладно, пойду еще на 8 часов замьючу чатик

Никита
29.09.2018
13:46:58
откуда у горутин приоритеты
Читал об этой идее в доке о дизайне планировщика в версии 1.1

Daniel
29.09.2018
13:47:31
в общем и целом идея сдохла (и хорошо)

горутины хорошо работают в ситуации, когда у нас есть запас по процессору.

Roman
29.09.2018
13:48:15
коллега, нет никакого рендеринга
это чисто пример, я не говорю что нам надо обязательно рендерить на Go))) просто collective concurrency это хорошо для массовой параллельности аля API-server. но для time-critical concurrency это ужасно.. если у нас 4 горутины играют роль DSP (signal processing) и пораждают дополнительные горутины для обработки асинхронных тасков, то растущее колво дополнительных горутин будет отрицательно влиять на точность работы первых 4, они будут красть у тех время. Т.е. на данный момент Go совершенно не применим для time-critical + massively parallel, что можно бы было изменить приоритетностью определённых горутин поместив их в некие "work groups"

Daniel
29.09.2018
13:48:28
а когда запаса по процессору нет - хорошо не будет, с приоритетами или без

короче

хотите меньше latency - добавьте ядер

а приоритеты для горутин - это смешно

Roman
29.09.2018
13:53:36
А зачем писать критичное ко времени на языке 1) с GC 2) с плохо оптимизирующим компилятором?
я абсолютно согласен что лучше просто взять C++ / Rust и не париться! Но тем не менее размышляю над тем как оправдать титул "general purpose programming language", поскольку на Go гораздо легче писать чем на C++ / Rust С гошным GC в принципе можно жить поскольку он оптимизирован не на throughput а на latency, главное мусора не создавать и всё будет окей.

Vladimir
29.09.2018
13:54:26
для SDL2 рендеринга делаю 15 милисекундный слип , итог 30 fps

Roman
29.09.2018
13:54:44
а приоритеты для горутин - это смешно
скорее не приоритеты а work-group'ы)

Daniel
29.09.2018
13:55:08
еще смешнее

Страница 1477 из 1630