Daniel
пока у нас все более-менее в порядке, на самом деле, с тех пор как мы научились вендорить
Daniel
другое дело, что вендоринг создает дополнительные проблемы
Daniel
а, может быть, дело не в вендоринге, а в отсутствии общепринятого workflow и в отсутствии средств контроля library api
Daniel
возможно, нам нужна тулза, которая при вендоринге будет делать слепок api, и при апдейте сравнивать, осталась ли совместимость. если нет - не будет апдейтить (или будет до последнего совместимого коммита, или еще как)
Мерль
я думаю оно со временем устаканится и будем мы проектировать мощные api с параноидальной обратной совместимостью
Daniel
я вот думаю - устаканится нейминг для веток
Ivan
Ничто не помешает авторам менять поведение метода. Как это проверить? Внешне сигнатура не поменялась, а внутри происходит не то, что раньше
Мерль
Ничто не помешает авторам менять поведение метода. Как это проверить? Внешне сигнатура не поменялась, а внутри происходит не то, что раньше
не важно насколько сложную проверку мы придумаем, автор всё равно сможет сломать, если захочет такие тулзы нужны для того, чтобы напоминать об изменениях самих разработчиков библиотеки
Daniel
но в перле, например, где есть и cpanfile с фиксацией версии, и центральная репа, я регулярно въезжал в проблемы совместимости. так что универсальная таблетка не придумана пока
Мерль
ну такое всегда на совести разработчика
Daniel
не совсем
Daniel
не будь у нас фиксации версий - проблемы бы не могли накопиться
Ivan
Это первый уровень... дальше ведь транзитивные зависимости, когда проект зависит от двух либ, которые зависят от разных версий третьей либы 😱
Мерль
ну такое всегда на совести разработчика
единственный способ гарантировать повторяеме билды - это упаковать исходники и все зависимости с компилятором в один тар гзип и возить с собой
Мерль
* их вообще не должно быть по-хорошему
Alexander
Коллеги, очень нужна помощь экспертов. Кейс: надо делать очень много асинхронных http запросов в чужие сервисы (RTB) с установленным таймаутом. Как сделали: в гоурутинах создаем http.Client с таймаутом. Проблема: многие коннекты отваливаются по таймауту, даже те, которые гарантированно успевают ответить. По-видимому, переключение гоурутин происходит с запазданием, а таймер таймаута продолжает увеличиваться, пока не переключится на эту гоурутину, хотя сервис уже ответил/готов ответить быстро. Как решить данную проблему?
Konstantin
Может контекст с таймаутом в рутины передавать...
Alexander
Тоже об этом думал, но с точки зрения рантайма чем это отличается от таймаута в хттп клиенте?
Alexander
Вот у меня есть группа http запросов (допустим, 50), и мне надо, чтобы они гарантированно выполнились, либо закрылись через 100 мс после старта. Правильно ли я понимаю, что это надо создать для них глобальный контекст с таймаутом? В таком случае есть ли гарантия, что гоурутины с этими запросами будут активированы хоть раз до наступления этого таймаута?
Daniel
А сколько у вас ядер, какова на них нагрузка и чему равна GOMAXPROCS?
Alexander
32 ядра, нагрузка около 15%, GOMAXPROCS не выставляю, так как, насколько мне известно, с 1.5 версии она равна количеству ядер
Dmitriy
Off-topic: так и знал, что этот баннер на гиктаймсе нарочно программно появляется позже, чтобы цтр понять
Alexander
Вы думаете, что CPU не справляется?
Daniel
Думал, но нет
Daniel
А коннектов сколько?
Alexander
Много) Тысячи. Но сейчас модуль написан на Scala и справляется
Daniel
Эт понятно
Daniel
А если поднять GOMAXPROCS до, скажем, 500 - изменится ситуация?
Daniel
Мне любопытно
Alexander
Надо попробовать
Ilya
Имеет смысл посмотреть в сторону runtime.LockOSThread()
Ilya
Но с колвом потоков все равно придется шаманить
Daniel
Да вот непонятно
Daniel
Надо диагностику проводить
Daniel
А какой там таймаут?
Alexander
100 мс
Alexander
Короче проблема вроде стала более ясна
Alexander
У нас количество коннектов никак не ограничено пулом
Alexander
Надо сделать пул коннектов
Alexander
Иначе серверу становится плохо
Alexander
Никто не знает, как через стандартную либу сделать пул? Там есть что-нибудь встроенное?
Alexander
http.Transport похоже
Максим
Есть у кого то примеры работы с eventlog на windows? Библиотека есть, а примеров нет
Daniel
А в чем это плохо выражается?
Daniel
Я про то, во что оно упирается
Alexander
GC начинает долго работать
Alexander
По полсекунды
Vladimir
Alexander
Вот так это в графане выглядит
Daniel
GC начинает долго работать
А что за версия go? Вроде, пауз такой длины быть-то не должно сегодня
Антон
а это точно пауза?
Alexander
1.8
Vladimir
Вот так это в графане выглядит
а вы как часто замеряете?
Alexander
Раз в 15 сек
Vladimir
А что за версия go? Вроде, пауз такой длины быть-то не должно сегодня
бывают же. Магии то не существует - много мусора, много пауз
Vladimir
Раз в 15 сек
то есть это 509мс на 15 секунд?
Daniel
Но сами паузы должны быть короткие
Alexander
то есть это 509мс на 15 секунд?
На графике квантили
Vladimir
Но сами паузы должны быть короткие
они никому ничего не должны в общем-то
Daniel
:)
Vladimir
На графике квантили
ну я пытаюсь понять что вы меряете и как
Daniel
Нам же обещали короткий stoptheworld
Vladimir
Нам же обещали короткий stoptheworld
чувак, магии не бывает
Vladimir
пойми
Anonymous
Нам же обещали короткий stoptheworld
Вроде как не с чего ему быть коротким
Michael
в 1.9 ещё короче вроде
Vladimir
если ты нагенерил 60-80ГБ мусора мелкими объектами то у тебя stop the world будет огромным
Антон
Вот так это в графане выглядит
а попробуйте посмотреть с помощью https://github.com/davecheney/gcvis
Anonymous
Алогритмы те же, что и в JVM, если память меня сейчас не подводит
Vladimir
что бы ты ни делал
Антон
он больше информации даёт. И размеры мусора будут видно
Michael
но что в 1.8 и в 1.9 начинал gc дольше работать т.к. создавалась мнооого замыканий