@proGO

Страница 690 из 1674
Vladimir
04.07.2017
13:35:38
это не такая проблема когда ты тыкаешься из нормального языка

но некоторые проблемы если ты на баше ваяешь клиента и дергаешь curl/wget

короче не надо ошибки с кодом 200 ок возвращать

Dmitry
04.07.2017
13:36:05
если тебе оно важно
ну я со стороны UI смотрю если курлом, то пофиг, конечно

Google
Vladimir
04.07.2017
13:36:18
ну я со стороны UI смотрю если курлом, то пофиг, конечно
я смотрю со стороны вообще очевидности решения

не-200ки могут иначе обрабатываться клиентами

Denis
04.07.2017
13:37:39
а можно было бы просто 500 вернуть, а в теле описание
бизнес ошибка, кеширующий сервис а ля cloudflare кеширует повторяющиеся запросы которые ведут к 500, статус ресурса меняется, то что было бизнес ошибкой являлось просто временным локом на ресурс, что делать?

Vladimir
04.07.2017
13:37:42
короче если клиент ожидает что на ошибку он получит не-200 (а так обычно и бывает), а он получит "200" то это может быть очень плохо

Dmitry
04.07.2017
13:39:16
короче если клиент ожидает что на ошибку он получит не-200 (а так обычно и бывает), а он получит "200" то это может быть очень плохо
разницы никакой клиенту всё так же нужно разбирать код ошибки и так же разбирать тело

nezorflame
04.07.2017
13:39:35
есть разница всегда

сперва на код смотрят

потом уже на содержимое

Vladimir
04.07.2017
13:39:44
когда у тебя ошибка приходит с "200" это блин пипец и хочется взять биту и идти убивать

nezorflame
04.07.2017
13:39:51
^this

Vladimir
04.07.2017
13:39:53
потому что это нефига не очевидное поведение

Google
Vladimir
04.07.2017
13:40:08
@slonoed давай ты так сделаешь, скажешь мне адрес, а потом не будешь удивляться сломанным рукам? :)

Dmitry
04.07.2017
13:42:43
@slonoed давай ты так сделаешь, скажешь мне адрес, а потом не будешь удивляться сломанным рукам? :)
ну ты по айпи вычисляй, как положено я говорю, что технической разницы почти нет, что обрабатывать только в случае когда клиент получив заголовки, увидит 500 и не будет парсить тело, чтоб не жечь траффик + если есть промежуточные сервисы, которые ошибку интерпретируют по разному могут создать проблему а так всё решается документацией, если проект большой, то там весь rpc обёрнут в стопицот оберток

Dmitry
04.07.2017
13:45:02
ок

Vladimir
04.07.2017
13:45:04
потому что технически клиенту конечно пофигу

но на практике человек может ожидать например исключения от библиотеки

или реально проверять статус

увидеть 200 и пойти обрабатывать данные

а там ты вот такую свинью подложил

уважай других и делай правильно

Dmitry
04.07.2017
13:45:57
ок

Alexey
04.07.2017
13:51:16
Не подскажите, можно запарсить json, не имея модели этого json? Например, мне приходит какой-то json, я его тупо хочу запихнуть в бд. var err error var v []interface{} err = json.Unmarshal(request, &v) checkErr(err) c := Session.DB("a").C("b") err = c.Insert(v...)

Вот такой код падает с ошибкой(

Alexey
04.07.2017
13:52:07
В какую БД?

Google
Denis
04.07.2017
13:52:15
так пихай строкой как пришла

Denis
04.07.2017
13:52:35
или тебе валидировать нужно?

тогда валидатор прикрути

Alexey
04.07.2017
13:52:45
В монго... В монго вроде нельзя пихать последовательность байт тупо.

Denis
04.07.2017
13:52:50
но это все равно будет строка

мона

[]byte

принимает же)

Alexey
04.07.2017
13:54:07
А, ну действительно, лол.

Спасибо

Denis
04.07.2017
13:55:28
но я бы все равно валидировал хотя бы на размер

Евгений
04.07.2017
14:16:58
Добрый день. Народ, кто занимался написанием и развертыванием микросервисов на го? Что можете сказать про go-micro? Для написания этих самых сервисов, не избыточен этот framework? Или лучше все с ноля делать? Со своими интерфейсами, транспортным протоколом и тд? А то встала задача распилить проект на микросервисы, присматриваюсь к реализации именно на этом языке ...

Denis
04.07.2017
14:26:56
Есть низкоуровневый go-kit, ограниченный go-grpc, и вполне себе go-micro

1 и 3 расширяется как вам нужно

Любой транспорт, любой MQ

И так далее

С 1 будет много бойлерплейта

Denis
04.07.2017
14:28:27
Писать с нуля тоже нет смысла

Google
Евгений
04.07.2017
14:38:27
А, если не секрет, можно узнать как возникла такая задача?
Бизнесу захотелось больше автономности, доступности, отказоустойчивости, децентролизованности, комплексного и глубокого мониторинга всех узлов системы, в общем обычная история по мере роста проекта и монолит с толстой ESB перестал вывозить, вернее удовлетворять требованиям в полной мере ... так же одной из задач и идей было посадить отдельные команды на разработку и дальнейшую поддержку сервисов, чтобы их можно было максимально легко обновлять, управлять ими, чтобы эти процессы не тормозили основное ядро. Как-то так, сумбурненько получилось конечно! И это все как раз и продиктовало переход на микросервисы и DDD.

Denis
04.07.2017
14:47:03
Классика

Kristina
04.07.2017
16:03:04
А в чем преимущество использования RPC фреймворков перед брокерами сообщений для взаимодействия микросервисов?

Michael
04.07.2017
16:07:03
сравнение бананов с апельсинами?

Ivan
04.07.2017
16:08:07
А в чем преимущество использования RPC фреймворков перед брокерами сообщений для взаимодействия микросервисов?
как тебе очередь поможет, если надо сделать вызов к удаленному сервису и получить от него результат?

Kristina
04.07.2017
16:09:33
Да, вроде две очереди

Ivan
04.07.2017
16:09:42
Да, вроде две очереди
какие 2 очереди?)

nezorflame
04.07.2017
16:10:02
видимо, вторая с ответами после обработки

redbeard
04.07.2017
16:10:06
а зачем тут вообще очереди?

nezorflame
04.07.2017
16:10:15
но очереди тут реально не нужны

Александр
04.07.2017
16:10:22
Да, вроде две очереди
не, это к вопросы как организовать RPC через брокер, а не в чем профит

Ivan
04.07.2017
16:12:36
ну мало того, что это не будет работать для клиентских запросов. Так еще потом и замучаешься отлаживать, что у тебя происходит в случае баги, когда одни евенты туда-сюда летают.

Kristina
04.07.2017
16:16:19
Ну мне видится, что с фрейморками мы добавляем ещё один отдельный слой, от которого зависят все составляющие. Типа если два сервиса используют одну и ту же функцию, то потом, в случае доработки, их надо будет дублировать. С очередями все более локально - создал очередь и читай с нее Опять же, как происходит взаимодействие с микросервисами, написанными на других языках? Я не шарю, вопрос не риторический

Aleksandr
04.07.2017
16:17:47
»> Опять же, как происходит взаимодействие с микросервисами, написанными на других языках? у тебя микросервис отдает json, protobuf итд определенной схемы. Каким языком это сгенерировано по сути неважно

Kristina
04.07.2017
16:18:44
Надо будет попробовать поюзать крч, спасибо

Александр
04.07.2017
16:20:28
один фиг придется фреймворк писать (либо заюзать готовое), что на обычном rpc, что над очередями.

IronWolf
04.07.2017
16:21:25
handlers

Google
Denis
04.07.2017
16:48:35
Я в последнее время стараюсь минимально юзать блокирующие вызовы

Cqrs в помощь как говорится

Sergey
04.07.2017
16:48:53
А в чем преимущество использования RPC фреймворков перед брокерами сообщений для взаимодействия микросервисов?
например в архитектуре с очередями у тебя нет способа легко напрограммировать "тык в один апстрим, ааа, заглох, тык в другой, фааак, тоже заглох, тык в третий с сообщением об ошибках на предыдущих апстримах, умереть с 504".

Denis
04.07.2017
16:49:24
Чем делать кашу с req/reply и pub/sub

Chuvi
04.07.2017
19:46:07
Всем ??. Есть проблема с растрированием (в картинку) utf текста, который содержит эмодзи. Они либо квадратиками (если в шрифте нет эмодзи), либо панику вызывают, если есть. Никто не сталкивался? Растрирую через github.com/fogleman/gg + golang/freetype, но проблема во втором как раз (судя по их репе). Есть ли другие способы перевести текст в изображение?

serbernar
04.07.2017
21:34:34
О статусах и ошибках с кодом 200.



Труба
04.07.2017
22:00:00
Всем привет, пытаюсь записать в redis структуру CustomStruct. LPush реализует интерфейс MarshalBinary(), который конвертирует данные в []byte. Добавил метод MarshalBinary к CustomStruct, затем, получилось записать первый элемент из массива cs[0], а как записать туда весь массив? Прошу прощения за терминологию =) LPush func(key string, values ...interface{}) *IntCmd func SaveList(redis *redis.Client, cs []*CustomStruct) error { return redis.LPush("testKey", cs[0]).Err() }

Alexey
04.07.2017
22:02:05
for _, csItem := range cs { err := redis.LPush("testKey", csItem).Err() if err != nil { break } }

Труба
04.07.2017
22:03:58
а это не слишком большой удар по производительности?

Alexey
04.07.2017
22:05:37
А, так можно

Труба
04.07.2017
22:05:44
что означают точки перед interface{} вроде как томжно весь массив отправить как в database/sql там аргументы отправляются пачкой

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