@proGO

Страница 697 из 1674
Daniel
08.07.2017
16:27:35
это похая секурити

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

m
08.07.2017
16:29:11
с обновлениями всё просто - делать их руками. только править чуть больше, чем при ручном перевыпуске

Daniel
08.07.2017
16:29:40
дело ваше. но это очень, очень плохое решение

Google
Daniel
08.07.2017
16:29:46
даже дать права - лучше

m
08.07.2017
16:30:25
а как тогда преодолеть будущую проблему: вебсервер запускается на двух разных машинах. как быть с файлами ?

на каждой перевупуск делать? будут разные файлы.

хотя, наверное лучше перевыпускать на одной машине, а потом копировать на все оставшиеся. а ещё лучше, отдельно nginx поставить и на нём весь TLS и крутить.

но nginx не хочется. лишнее звено, задержек добавляет и тройная работа с http-трафиком.

LexsZero
08.07.2017
17:14:10
к тому моменту, как мы зовем setuid, некоторые треды уже запущены, и своего uid не поменяют. поэтому setuid в go сломан
можно мелкий враппер написать, который будет открывать нужные фд от рута, дропать привелегии и экзекать гошную софтину

m
08.07.2017
17:19:25
https://github.com/fiorix/go-daemon

Dmitry
08.07.2017
17:33:36
есть и третий. зашить файлы в бинарь. это позволит запускать его на любой машине.
можно еще четвертый. хранить секреты в каком-нибудь отдельном сервисе типа vault

Daniel
08.07.2017
17:35:04
https://github.com/fiorix/go-daemon
кой толк с него?

Труба
08.07.2017
17:37:00
Всем привет, мужик с хабры запретил мне вставлять интерфейс в стуктуры. Получается такой код неправильный или я запутался в терминах? type Inserter interface { insert() } type List struct { Key string inserter Inserter } func (li List) check() { fmt.Printf("Checked: %s\n", li.Key) li.inserter.insert() }

m
08.07.2017
17:37:16
запускает от заданного юзера с заданой директорией, пишет вывод в лог, сохраняет пид-файл

m
08.07.2017
17:38:24
правда пид-файл почему-то никак не могу заставить писать ?

Google
Труба
08.07.2017
17:38:34
Alexander
08.07.2017
17:56:47
обычнож всякие supervisord, systemd юзают

m
08.07.2017
19:28:23
почитай как сертификаты юзаются пол nginx, там делается ln -s на файлы, а вот ссылки вписываются в конфиг nginx
Так приведённые мной пути и есть ссылки на текущие валидные файлы. При перевыпуске ссылки заменяются.

что-что а nginx не намногодаст задержек, у тебя там что, борьба за 10ки млсекунд?
Если вдруг будет много трафика, то даже tcp-пакеты пропускать через лишние прослойки не хочется, не то что http.

да и было бы странно использовать fasthttp и ставить перед ним nginx

а никто не сталкивался с тем, что fasthttp начинает жрать процессор и перестаёт отвечать, если запускается не из под рута?

terry
08.07.2017
20:15:20
я вот решил почитать что такое го заодно мож чего написать, но пока что у меня твои тексты вызывавают когнитивный диссонанс

и еще - я у себя на серваке снес к хуям фряху и поставил дебиан

имхо грабли фри меня уже захарили...

m
08.07.2017
20:18:21
Очень сильно сомневаюсь что проблема в fasthttp
Да, ты права. поно и под рутом стало кушать проц почему-то... Котя исходный код не менялся. Чудеса...

corpix
08.07.2017
20:19:02
Ну тогда надо искать проблему в коде сервиса

И я не она... хотя имя смущает, да. Лол

terry
08.07.2017
20:36:34
а че есть там уровень дебаг левел или логирование?

m
08.07.2017
20:37:03
да до моих экспериментов с запуском демона под непривелигированным юзеров всё было ок. а сейчас одно ядро всё съедается почему-то и отвечает еле-еле.

есть net/http/pprof

хотя, наверное это в моём коде что-то чудесного. потому что и на девелоперской машине начало воспроизводиться.

Google
m
08.07.2017
20:43:53
Нашёл. делаю в цикле select и внутри него break для выхода из цикла. А оно из селета выходит, а не из цикла. Уже в который раз на эти грабли наступаю.

ИМХО, неудачная это конструкция, когда и select и for останавливаются одной командой.

хотя не знаю даже, как лучше сделать.

Daniel
08.07.2017
20:47:04
там можно лейбл указать

m
08.07.2017
20:51:04
да, так и написал. goto-style ?

Наконец то заработало: https://tolxy.com

Daniel
08.07.2017
20:53:24
я селект в отдельную функцию уношу обычно

m
08.07.2017
20:55:44
мне надо было из канала вычитать всё, что в нём накопилось и потом дальше продолжить работать. OuterLoop: for { select { case userID := <-fsm.usersToDelete: deleteUsers = append(deleteUsers, userID) default: break OuterLoop } }

тут с функцией не знаю даже как переписать...

Daniel
08.07.2017
20:57:17
а зачем тут селект?!

m
08.07.2017
20:58:19
чтобы остановиться, когда в канале закончатся данные.

Daniel
08.07.2017
20:58:29
а это зачем?

m
08.07.2017
20:59:07
чтобы обработать все накопленные в канале данные пачкой.

Daniel
08.07.2017
20:59:18
зачем переставать?

corpix
08.07.2017
20:59:40
Мне нравится стиль выдавать информацию порциями, вместо того чтобы обрисовать общую картину вцелом :)

Daniel
08.07.2017
21:00:24
вообще, конечно, я могу себе представиь, зачем

m
08.07.2017
21:00:33
ну как: выкачал данные из канала, поделал с ними что-то , поделал ещё что-то нужное, потом выкачал следующую пачку и т.д.

Daniel
08.07.2017
21:00:59
в одной горуине вынимаешь данные из канала

в другой делаешь свое другое

я, вообще-то, могу представить, зачем вот это вот нужно

Google
m
08.07.2017
21:02:24
у меня иначе: раз в несколько милисекунд пересчитвается вся игровая арена. а данные для этого пересчёта накапливаются заранее.

Daniel
08.07.2017
21:02:53
то есть - налицо формирователь batch job

тогда твоя функция выглядит примерно так

func getBatchJob(job <- chan *Job, maxBatchSize int, maxBatchDelay time.Duration) []*Job

и вместо брейка у тебя ретёрн

и это слегка более очевидно

m
08.07.2017
21:06:19
Отличная мысль про return!

Daniel
08.07.2017
21:06:33
обращайтесь

но этот getBatchJob тебе все равно гонять в цикле в отдельной горутине

m
08.07.2017
21:07:19
небольшое улучшение: func getBatchJob(job <- chan *Job, maxBatchSize int, maxBatchDelay time.Duration, jobs []*Job) []*Job

Daniel
08.07.2017
21:07:32
а?!

зачем?

m
08.07.2017
21:07:45
make чтобы не делать

Daniel
08.07.2017
21:08:00
да чем тебе make-то не угодил?

m
08.07.2017
21:10:03
память выделяет. а зачем, если можно один раз создать слайс и работать с ним в цикле много раз, в конце цикла делая jobs = jobs[:0]

Daniel
08.07.2017
21:11:00
measure then optimise

ты померял разницу?

m
08.07.2017
21:30:06
Я когда писал свою Тауку, то там это очень сильно было заметно. Когда убрал все аллокации, то упёрся в производительность sync.Pool-а .

а писать так, чтобы не было аллокаций и синкпулов не так и сложно. просто чуть иначе подходишь к структуре кода и всё.

так что никакой преждевременной оптимизации нет. сразу пишу нормально.

Google
Daniel
08.07.2017
21:31:47
ну ок

m
08.07.2017
21:38:34
а как реализовать отладку на работающем веб-сервере? есть "-race" и "net/http/pprof" , но они ведь вроде кучу своих данных накапливают и со временем займут всю свободную память.

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

Daniel
08.07.2017
21:41:32
можно заставить его помереть после определенного количества запросов

m
08.07.2017
21:43:24
это сотрёт весь игровой мир. он в оперативке живёт.

Vladimir
08.07.2017
21:43:39
-race другой более вредной для прода особенностью обладает

m
08.07.2017
21:44:36
-race точно копит. а про net/http/pprof на 100% не знаю. может и не копит.

Vladimir
08.07.2017
21:44:38
у него просто огромный оверхед по скорости, плюс жесткий однопоток

-race точно копит. а про net/http/pprof на 100% не знаю. может и не копит.
net/http/pprof - ты можешь в любой момент попросить 30 секунд пособирать профайл, например

но как бы это мелочь

m
08.07.2017
21:46:28
профайлинг по cpu имеет мало смысла. намного интереснее смотреть мьтексы, благо они появились.

Vladimir
08.07.2017
21:47:00
зависит от ситуации )

мне намного интереснее смотреть вообще heap :)

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

m
08.07.2017
21:47:45
просто задачи, жрущие cpu обычно не на Go пишут.

Страница 697 из 1674