
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

Maksim
29.09.2018
10:14:30

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
и если он не отрабатывает - даже не пытаюсь http

Subbotin
29.09.2018
12:42:33

Илья
29.09.2018
12:49:21

Nikolay
29.09.2018
12:49:53
но я понятия не имею, что это может значить и, опять же, почему таймаут не отрабатывает

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

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

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
больше ничего

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

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

Никита
29.09.2018
13:46:58

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

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

Roman
29.09.2018
13:54:44

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