Alexander
Разве это Фреймворк? Помнится storage, но с Erlang очень давно работал
Илья
это кусок open telecom platform
MXLTN
друзья, как правильно организовать масштабируемый апликейшин внтури которого выполняются воркеры по планировщику? что бы они не выполнялись одновременно на более чем 1 ноде?
MXLTN
пример каждый 10 минут проверять что-то - надо что бы это выполнялось только один раз
MXLTN
а не одновременно на всех нодах который запущены
MXLTN
как правильно это с архитектурной точки зрения сделать/?
Maksim (Ellrion)
а не одновременно на всех нодах который запущены
Встречал реализацию такого через редис мьютекс (редис соответственно доступен всем нодам)
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Немного теоретический топик хочу поднять: как тестировать grpc сервисы? 1. Сервер 1.1. Unary Тут все достаточно просто, даже моков не надо, просто func (s *Svc)Method(ctx context.Context, args...) (ret, error) 1.2. streaming Тут все менее красиво: мокать * StreamServer. И получаются разные вещи: возможные конфликты по импортам с vendor, если пользовать gomock, свои велосипеды-моки на стрим, и потенциально другое. И вот вопрос, как бы такой метод тестабильно написать и потестить: func (s *Svc) Stream(args *proto.StreamReq, stream proto.Svc_GetStreamServer) error { b, err := s.httpClient.Get(third-party-api) if err != nil { return err } data, err := unmarshal(b, s.SomeOpts) if err != nil { return err } for _, record := range data { result,err := s.doSmth(record) if err != nil { return err } err := stream.Send(result) if err != nil { return err } } return nil }
𝕲𝖎𝖗𝖆𝖋𝖋𝖊
Можно написать или сгенерить мок на стрим, тогда тесты на этот метод получаются не очень красивые, ибо много лапши на сетап. А тестить надо по сути third party API
Vladislav
как правильно это с архитектурной точки зрения сделать/?
Я такое решал с помощью etcd. Там есть специализированный механизм для этого.
Maksim (Ellrion)
Nikita
как масштабировать сервис планировщик?
Зависит откуда будут браться задачи и как он будут храниться
Roman
пример каждый 10 минут проверять что-то - надо что бы это выполнялось только один раз
шли воркерам задачи через канал, при этом шли через time.Ticker
Aleksandr
ркн почти 2млн ip-адресов закинул, чтобы нас отсюда выкурить
Alexei
🎉
ркн почти 2млн ip-адресов закинул, чтобы нас отсюда выкурить
Ахренеть, я про 655 352 айпишнегов слышал...
Vladislav
Ахренеть, я про 655 352 айпишнегов слышал...
https://2018.schors.spb.ru/ наслаждайся
Aleksandr
вполне вероятно что утром мы будем о 5 млн говорить)
Constantine️
надо идти спать
Constantine️
завтра новый день
Constantine️
)))
Aleksandr
все за ваши деньги, господа)
Constantine️
пол интернета работать не будет
Constantine️
чего переживать
🎉
В принципе я уже в i2p вылез, тут тоже мона сайтик сваять, форум.
🎉
Тут точно не достанут.
Aleksandr
кстати, апдейты дата-центров через пуш-уведомления у телеграма была еще в 2015. может раньше. Итого мы имеем приложение, которое невозможно заблокировать, кроме как заблокировать пуш-сервера гугла/эппла либо взять измором, перебанив пол-интернета
🎉
Рушного интернета, остальные не заметят.
Aleksandr
https://2018.schors.spb.ru/ наслаждайся
это же наш Фил Кулин делает
Aleksandr
@schors
🎉
Не понял, россиян блочат жи... остальных-то как они осилят?
Aleksandr
слушай, я не знаю с какой стороны ты. но с моей блочат не россиян, а для россиян
🎉
Ну да.
Aleksandr
> взять измором, перебанив пол-интернета для россиян.
🎉
Дурову нуно было децентрализованный мессенджер писать... меньше гемора было-бы...
Pawel
Борьба с мифическим международным терроризмом - прикрытие банальной борьбы за пользователей Телеграма. Для холопов есть усмановский Там-Там, а нравится он вам или нет - да кого это волнует?
🎉
Исходники i2p есть, правда на Java... Щас даже айтупи для андроида и йоса есть... но это просто роутер, а вот как мессенджер было бы круть...
Pawel
🎉
расскажи как это сделать)
Ну дык, скрестить мессенджер с i2p, знал бы как в подробностях, рассказал бы.))))
Anonymous
i2p тоже не полностью децентрализованный
Aleksandr
Павел Дуров пообещал, что с 22 апреля новая версия Телеграма начнет обходить блокировки по технологии domain-fronting. "Клиенты для всех платформ смогут соединяться с доменами clients4.google.com и graph.facebook.com и проксировать соединение дальше. Согласие Гугла и Фейсбука нами уже получено" - написал Дуров в своем твиттере.
Slava
будет как в китае
Slava
ничего недоступно, только внутренние, разрешённые ресурсы =)
Ivan
подскажите, как избавится от такой конструкции User, _ := c.Get("User") User_ := User.(model.User) что бы User сразу был как .(model.User)
Lev
может он в директ написал)
Aleksandr
Времена постправды
Aleksandr
Возможно фейк. Вероятно. Слишком сладко казалось
MXLTN
Я делал редис лок. Для либы редиго была либа готовая, название не помню
хм а без редиса никак? не хочется поднимать для этого редис
Алексей
Добрейший вечерок господа ,ребят где найти инфу по написанию функциональных тестов при помощи библиотек json, и go-resty!может кто то где то встречал ?кроме официальных ссылок на эти библиотеки! спасибо заранее
Илья
Да хоть майсиквель, хоть зукипер, любой distributed lock подойдёт
Nikita
подскажите, как избавится от такой конструкции User, _ := c.Get("User") User_ := User.(model.User) что бы User сразу был как .(model.User)
Специально заложено, чтобы так не делали. Если юзера нет, тогда на второй строчке паника будет, а так как ты собственно-ручно ее замолчал — ССЗБ
Алексей
Добрейший вечерок господа , где найти инфу по написанию функциональных тестов при помощи библиотек json, и go-resty!может кто то где то встречал ?кроме официальных ссылок на эти библиотеки! спасибо заранее
Vladislav
т.е. я правильно сделал?
нужно проверять 2 результат
Nikita
т.е. я правильно сделал?
Нет, надо смотреть, что Get() возвращает во втором значении
Ivan
там exist - т.е. существует ли переменная, я понял, ее надо проверить, а то что я это использую User_ := User.(model.User) это нормально?
Nikita
там exist - т.е. существует ли переменная, я понял, ее надо проверить, а то что я это использую User_ := User.(model.User) это нормально?
Ну во-первых, ты не проверяешь в касте ситуацию, если значение таки не model.User, во-вторых, название переменной должно отражать суть данных, которую содержит. Потому User_ настоятельно рекомендую переименовать в data или value (сарказм)
heavycharged
господа, xml умеет паковать и распаковывать map[string]interface{}? есть структура, и к ней в догонку нужно паковать всякий мусор в эту мапу. все это потом сохраняется как xml файл. нужно, чтобы и эти данные сохранялись. я тут прикуралесил уже xml.Marshaler, и все ок. А вот с распаковкой траблы, там и слайсы, и мапы, и булевы значения. Вот собственно вопрос возникает, можно ли это все не ручками декодить? Если XML это как-то запаковал, то может он умеет сам распаковывать?
heavycharged
<Data> <values> <string>abc</string> <slice>hello</slice> <slice>world</slice> <number>1</number> <float>1.23</float> <bool>true</bool> <nestedMap> <nestedKey>nestedValue</nestedKey> </nestedMap> </values> </Data>
Yevhen
xml.Unmarshal. А в чем собсна проблема? Передал xml и структуру и все распакуется
heavycharged
xml.Unmarshal. А в чем собсна проблема? Передал xml и структуру и все распакуется
А вы пробовали просто взять, и передать map[string]interface{} в xml.Marshal?
Yevhen
А, нужно interface{} распаковать? Ну тогда ручками. Я подумал что есть struct, которий нужно паковать/распаковать. Недопонял. Можно поискать какую нибуть либу для етого.
heavycharged
я думал, может в json запаковать, а потом в base64.
Anonymous
Когда стоит использовать ГО вместо node js?
Anonymous
Когда пишешь сервис
Я сервис и на ноде могу написать. Можно подробнее с примером, когда по вашему стоит использовать ГО а когда году?
Anonymous
Ноду
Заур
Знаешь го, не знаешь ноду, пишешь на го Знаешь ноду, но не знаешь го, пишешь на ноде
Заур
Знаешь ноду и го, пишешь на чём по кайфу
Заур
Но советчик из меня хреновый 😁