Zver
И тут Го типа весь уже асинхронный. За что его и любят.
Гоу асинхронный? Я думал, что у него синхронная модель поведения.
Yura
Гоу асинхронный? Я думал, что у него синхронная модель поведения.
У него синхронное видимое поведение, но ассинхронная реализация: "зелёные потоки" не строго говоря.
ainu
В кишках - синхронная (конкуррентная). А вот код - асинхронный. С точки зрения программиста ты можешь отправить программу грузить файл, а пока он это делает - заняться другими делами
Vladislav
/voteban
ainu
только важно помнить, это не система реального времени. Статику через Go лучше не отдавать - nginx отдаст её при любом запросе, Go может например сборщик включить или ещё что там у себя делать
ainu
например не открыть сокет во время работы сборщика
Zver
/voteban
Я посмотреть порно не успел. 😔
arkady
/voteban
Yura
Инновационными в Го являются две вещи: резиновый стэк для компилируемого языка, и прозрачный фолбэк на трэды для блокирующих сисколов (именно фолбэк для долгих сисколов, а не реализация через тредпул всех блокирующих сисколов). Эти две вещи не были применены в массовых продуктах до Go. Больше особой навизны нет. Ну да, еще каналы :-)
Valar
Я посмотреть порно не успел. 😔
могу скинуть ссылку, я успел закопить))
Vladislav
только важно помнить, это не система реального времени. Статику через Go лучше не отдавать - nginx отдаст её при любом запросе, Go может например сборщик включить или ещё что там у себя делать
Нууу. Паузы на сборщики обычно меньше таймаутов и сильно меньше задержек по сети. Так что ничего криминального в раздаче статики на go нет.
Maxim
могу скинуть ссылку, я успел закопить))
Я могу на другое ссылки вбросить 👀
ainu
Нууу. Паузы на сборщики обычно меньше таймаутов и сильно меньше задержек по сети. Так что ничего криминального в раздаче статики на go нет.
Ну вот, только несколько месяцев назад мусолили и уже твердо договорились что это плохо и вот опять
Yura
video.mail.ru - раздатчик видео файлов целиком на Go.
Он же кэширует, он же нарезает mpeg4 для flash и mpeg-dash.
Zver
Я могу на другое ссылки вбросить 👀
У меня есть ваша ссылка с хентаем. )
Vladislav
Ну вот, только несколько месяцев назад мусолили и уже твердо договорились что это плохо и вот опять
Для чего? Если у вас сайтик кошечек раздает для 2 людей, то ничего плохого. Но ваши доводы понимаю.
Yura
Ну вот, только несколько месяцев назад мусолили и уже твердо договорились что это плохо и вот опять
Как то вы не правильно мусолили. На практике получается, а в разговорах у вас - нет.
Igor
video.mail.ru - раздатчик видео файлов целиком на Go.
Только они скорей всего переписали половину net либы что бы это работало как надо
Chebyrash
Chebyrash
Есть желающие?)
Yura
Только они скорей всего переписали половину net либы что бы это работало как надо
Нет. Его писал преимущественно я, и я не патчил стандартную библиотеку. В паре мест пришлось применить нестандартные workaround, но все снаружи. Даже hijack не пришлось делать на коннекте.
Billyfbrain
к слову mpeg-dash есть ли что-то готовое для нарезки под го, или только биндинги сишных либ?
Yura
к слову mpeg-dash есть ли что-то готовое для нарезки под го, или только биндинги сишных либ?
Я в итоге, писал сам. И оно получилось урезанное по возможностям.
Igor
Нет. Его писал преимущественно я, и я не патчил стандартную библиотеку. В паре мест пришлось применить нестандартные workaround, но все снаружи. Даже hijack не пришлось делать на коннекте.
Ого. Интересно послушать. А проводились замеры, реально получился выйгрыш в раздаче статики по сравнение с Nginx или тут вопрос скорей удобства написания сервиса, что всё в одном месте?
Billyfbrain
Я в итоге, писал сам. И оно получилось урезанное по возможностям.
я так понимаю го нормально с этим справляется и оно того стоит?
Yura
Ого. Интересно послушать. А проводились замеры, реально получился выйгрыш в раздаче статики по сравнение с Nginx или тут вопрос скорей удобства написания сервиса, что всё в одном месте?
Да, вопрос был в гибкости: - во-первых, на момент переписывания nginx все еще читал с диска в главном потоке воркера, и это было серьезной проблемой, т.к. все воркеры в итоге упирались в диск с популярным файлом, а остальные диски курили. Go же просто создает новый тред под капотом. Вы когда-нибудь видели LA 15000? Я видел. Сейчас у nginx появились тред-пулы, их можно настраивать на каждый диск. - во-вторых, nginx хреново кэшировал большие файлы. До Гошки приходилось кэшировать с помощью nodejs, стоящей позади nginx. Сейчас в nginx появилась кэширование по чанкам. Мы его изначально сделали. (на nodejs - в 2012году). - в третьих, у nginx не дружило кэширование и нарезка flash mpeg4. Мы сделали нарезку на лету, пока файлвыкачивался еще со стораджа. Не знаю, как сейчас с этим у nginx. - Ну и, точно так же на лету нарезается mpeg-dash, и сохраняется на диск.
Nikita
Нет. Его писал преимущественно я, и я не патчил стандартную библиотеку. В паре мест пришлось применить нестандартные workaround, но все снаружи. Даже hijack не пришлось делать на коннекте.
Круто, раз ты участвовал в разработке такого сервиса. А можешь рассказать, как он устроен? Как устроено хранение файлов, перекодирование, их раздача клиентам?
Yura
я так понимаю го нормально с этим справляется и оно того стоит?
нарезнные куски агрессивно кэшируются на диск, и нарезаются один раз для любогоколичества клиентов.
Yura
btw, @mcsseifer - Тимур Нурутдинов - тоже принимал активное участие.
Yura
Круто, раз ты участвовал в разработке такого сервиса. А можешь рассказать, как он устроен? Как устроено хранение файлов, перекодирование, их раздача клиентам?
я в основном раздатчиком занимался. Из того, что знаю: перекодирование - ffmpeg, очереди заданий - свои на перле, стороджа - самописные, но частично мигрируют на Ceph с erasure coding (производительности хватает из-за жирных кэширующих раздатчиков, а не-убиваемость у Ceph отличная).
Igor
Спасибо за ответ!
🎉
А 'мой круг' мэйлру принадлежит? А то у них сайт лёг.
Grigoriy
А 'мой круг' мэйлру принадлежит? А то у них сайт лёг.
моймир мейлу, а мойкруг тематических медиа
Daniel
в Го всё синхронно кроме select-а
это с нашей стороны. а внутри там event loop вокруг сетевого IO
Daniel
там, где можно, он асинхронный
саша
Или какая-то эмуляция асинхронности через нативные треды?
Daniel
коллега, о чем вы спрашиваете?
Daniel
со стороны программера там всегда синхронно, кроме селекта с дефолтом
Daniel
а вот со стороны рантайма возможны варианты
Daniel
в том же линуксе файловое IO не до конца асинхронное. go тут ничего сделать не может
Daniel
еще там, конечно, есть динамическое увеличение тред-пула в случае, если все имеющиеся треды оказались заблокированы на синхронных операциях в ядре
саша
а вот со стороны рантайма возможны варианты
Так вот я и спрашиваю, мало ли, может го через нативные треды эмулирует асинхронность.
Daniel
кому оно эмулирует асинхронность и зачем?
саша
Вот представьте, что вам надо написать раздатчик файлов. Допустим у вас сотни коннектов, которым надо выкачать по гигу с вашего диска. Разве вы будете заниматься чтением с диска в тех же тредах, где вы обрабатываете коннекты?
Daniel
почему нет?
maxnemoy
Господа, подскажите пожалуйста, есть ли как-то либы для авто-генерации какой-нибудь +- веб морды для апи, чтобы не лазить постоянно во всякие курлы, постмены?
Daniel
а?!
Yura
Так вот я и спрашиваю, мало ли, может го через нативные треды эмулирует асинхронность.
Весь сетевой ввод-вывод асинхронный. Не блокирующие сисколы тредов не порождают, а выполняются в потоке шедулера горутин. Блокирующий сискол, если отработал быстро, тоже не порождает тред. Если же заблокировался на долго, то рантайм создает новый тред и уносит на него шедулер: заблокированная горутина остаётся на этом треде, другие горутины выполняются на новом.
maxnemoy
Swagger?
она же вроде только документацию собирает? а я бы хотел именно функционал, или я ошибаюсь?
bebebe
если сделать все прямо, то твой бинарник, который провайдит rest api - по хттп сможет отдавать тот rest который поддерживает
Daniel
это не совсем так
Daniel
Вызывать методы в нем можно
но ответ будет - not implemented yet :)
Daniel
сваггеру надо переопределить обработчики, и тогда будет примерно то, что запросил топикстартер
bebebe
при помощи swagger.io можно захостить прототип своего rest'a и на нем дергать примеры, или сделать fake-api, что бы тестировать клиента
iči
Про го не могу сказать, но на дотнет проекте сваггер дёргал вполне реальные методы
Daniel
коллега
maxnemoy
спасибо всем, пойду в доке пороюсь, может чего получится
Daniel
если вы написали реальные методы - сваггер будет их дергать, только надо объяснить ему, какие куда
Daniel
а если не написали - дефолтный обработчик возвращает "not implemented"
maxnemoy
если вы написали реальные методы - сваггер будет их дергать, только надо объяснить ему, какие куда
а как можно найти рабочий варинт реализации? как правильно загуглить
Daniel
сегодня день вопросов, которые я не понимаю :(
Daniel
у вас есть описание вашего api в формате swagger
Daniel
вы генерите из него серверный код (с помощью go-swagger)
Daniel
получается нечто, что можно собрать и запустить, и даже все endpoints будут обрабатываться
Daniel
но
Daniel
что делать-то по запросу на каждый endpoint вам еще предстоит написать, правда?
iči
У вопрошающего апи написан уже, как я понял