Alexey
ну да. у тебя же приложение как стартует так и открывает коннект. И он живет пока сервис живет. И коннектов может быть не 1. И сервисов не 1
Herman
Если много сервисов подключены к одной бд это не микросервисы
Herman
С какого числа чего?
Artur
5 мая?
Ron Mount
Herman
Alexey
на postgrespro курсы есть по DBA, там вроде поднимаются темы баунсеров
Alexey
а. оно почему-то не в DBA а в DEV. 7 тема
https://postgrespro.ru/education/courses/DEV2
🄻🄰🄺🄸
Раз речь зашла по пгбаунсеры и постгрю. Как кокроучдб у кого-нибудь в продакшине поживает?
🄻🄰🄺🄸
Полноценное решение для распределённой базы данных. Поддерживает функциональность постгри ~ 9.5
🄻🄰🄺🄸
https://www.cockroachlabs.com/docs/stable/architecture/overview.html#goals-of-cockroachdb
🄻🄰🄺🄸
Ну она живучая как тараканы.
🄻🄰🄺🄸
(на словах) Мне интересно как оно в бою.
G
на локалке в кластере на докере норм работает. но перед тем, как запускать в прод, рекомендую изучить, как она дисковое пространство использует. там что-то типа бинлога с TTL записей на каждой ноде, который у меня на таблице в 100 записей разросся до 3 гигов, это по гигу на ноду.
G
как это число меняется при увеличении объёмов данных - не скажу, нагрузочного тестирования ещё не проводил
G
возможно, она заранее выделяет дисковое пространство. потому что откуда там гиг бинлога на 100 инсертов - ума не приложу.
G
G
Но не успел нагенерить 1М, потому что прифигел от размера))
Denis Pershin
G
Я пока ещё в настройки не залезал. Может, там это регулируется.
G
Это не в смысле "cockroach гавно он жрёт место". Это в смысле "изучи вот именно этот вопрос" 😊
Denis Pershin
Так понятно, может у тебя там настройки как то не так выставились, репликейшен фактор слишком большой или ещё что, надо смотреть, у них есть demo режим, туда можно загрузить их бд и провести нагрузку их инструментами, посмотреть как растёт лог
Alexander
А у тебя как настроено? Ты можешь сделать чтобы в микро сервисе было n коннектов и пгбаунсер держал постоянно n? Может переподключается просто постоянно.
Alexander
Это да, но я бы донастроил и провёл тест, мб разница была бы нулевая. Неужели ум такой не пытливый?
Alexander
[object Object]
Всем привет, не могу понять до конца как работает json,
Мне нужно сделать структуру
{
"createdAt":"2022-04-20T08:17:13.625Z",
"method":"test",
"responseBody":{
"jsonrpc":"2.0",
"id":123,
"result":"123"
}
}
[object Object]
[object Object]
Но оно мне возвращает это
[object Object]
{"createdAt":"2022-04-20T08:17:13.625Z","method":"test","responseBody":"{\"jsonrpc\":\"2.0\",\"id\":123,\"result\":\"123\"}\n"}
[object Object]
То есть json поломанный, и поле responseBody должно быть объектом а не строкой
Alexander
оберни stringifyBody в https://godocs.io/github.com/diamondburned/arikawa/utils/json#Raw
Alexander
может сработает
Alexander
бле, ссылка не на то по факту, сек
[object Object]
Я на го второй день пишу, так что если вопросы даунские соре
Alexander
https://docs.studygolang.com/pkg/encoding/json/#RawMessage
Alexander
просто json.RawMessage(stringifyBody)
[object Object]
Ахуеть работает
[object Object]
огромное спасибо
НеМаргарита
Всем доброго дня! Провожу небольшой опрос среди программистов насчет ресурсов которыми пользуются для повышения своей квалификации. Будет замечательно, если вы уделите мне пару минут)
https://docs.google.com/forms/d/e/1FAIpQLSfNAFHTHipJ02esDVfYCWmkolkV-BZWLXKh1ZF9waUaAaKV-g/viewform
Ashwin
is anyone familiar with mocking in testify? i have some doubts
[object Object]
[object Object]
Последний вопрос, буду очень признатален если поможете, это Transporter для proxy.Transport = &transport{http.DefaultTransport}
[object Object]
Если раскоментировать код, то с респонсом какая-то срань происходит
[object Object]
то есть сам факт того что я этот ридер создаю
[object Object]
Даже если не паршу gzip
[object Object]
Ломает проксирование
Alexander
я еще пока не прочитал, но с гзипом такая фигня, что заголовок accept-encoding выставляется в гзип и автоматом разгзипывается, если ты не выставлял accept-encoding
Alexander
если сам разгизипуешь, не выставив заголовок, то происходит сам понимаешь что
Alexander
а зачем тебе тут свой транспорт реализовывать? еще и накладные расходы лишние. нет опять же возможности побайтово вычитывать, если большой ответ
Alexander
для того же джейсона можно создать ридер и сэкономить на памяти и тактах, не вычитывая все тело в слайс байт
Alexander
заменить контент и оценить его длину можно и потом
[object Object]
Я заменил на proxy.ModifyResponse = modifyResponse
[object Object]
И там пытаюсь сделать тоже самое
[object Object]
То есть мне нужно в хедерс
Alexander
а что за proxy? я не очень понял
[object Object]
Указать accept-encoding: gzip?
[object Object]
proxy := httputil.NewSingleHostReverseProxy(remote)
proxy.ModifyResponse = modifyResponse
http.HandleFunc("/", handler(proxy))
err = http.ListenAndServe(":5006", nil)
[object Object]
В моём случае нет
Alexander
ну то бишь, когда body читаешь
Alexander
хотя мб да, я чет с реверс прокси не продумал
Alexander
а ты пробовал логировать контент энкодинг? и что за сервер с которого ты проксируешь? некоторые плюют на accept-encoding и дают как хотят
Alexander
ну и скинь код modifyResponse с которым ломается, чтобы не гадать
Alexander
ну плюс, вычитывать весь контент при проксировании, чтобы отдать юзеру его размер - сомнительное преимущество. можно же отдавать пока сам читаешь
[object Object]
Проблема конкретно
[object Object]
В одном месте
Alexander
касательно подмены контента - можно создать свой ридер. но тут конечно придется поразмыслить
[object Object]
func parseGZipResponseBody(body io.Reader) string {
gr, err := gzip.NewReader(body)
if err != nil {
panic(err)
}
defer gr.Close()
data, err := ioutil.ReadAll(gr)
if err != nil {
panic(err)
}
return string(data)
}
[object Object]
Проблема возникает тогда
[object Object]
Когда я вызываю data, err := ioutil.ReadAll(gr)
[object Object]
Если его закоментить
[object Object]
Всё ок
Alexander
а какая ошибка?
[object Object]
Alexander
ну это ошибка body самого похоже
Alexander
хотя уже не понимаю о чем речь
[object Object]
Может быть я могу по другому этот ебанный json записать
[object Object]