kostyaBro
Можно вообще sonic заюзать. Но у меня был кейс когда sonic не завелся на проде, что очень странно.
kostyaBro
Причем работал, а потом вдруг перестал
Oleg
Oleg
Он же на арм не фурычил на старых версиях
Oleg
Сейчас он вроде хотя бы не падает
kostyaBro
Мб у вас процы поменяли
Думали про это, но чет вряд-ли, ну хотя там такие заказчики были что могли любую дичь вытворить
Oleg
Мы сделали проще и через Билд теги два файла с выбором маршаллера сделали 🤷🏼♀️
Oleg
Хотя бы стабильно работает
kostyaBro
Норм тема
kostyaBro
Но вообще, avx разве что только у динозавров не было
Oleg
И у м1)))
kostyaBro
К сожалению пока так и не потрогал
kostyaBro
Но да
kostyaBro
Кароч protobuf union топ тема.
Надо бенчмарки прогнать ради интереса
Илья
union? вы о чем?
Илья
kostyaBro
https://developers.google.com/protocol-buffers/docs/proto3#oneof
kostyaBro
Сори, oneOf
union это в сях
Илья
если уж заговорили про protobuf, то вопрос по gRPC
gRPC в основном использует синхронные запросы и ответы, но вместе с тем имеет полностью асинхронный или потоковый режим, доступный после установления соединения.
Переключение режимов автоматическое или настраивается вручную? только начал изучать, возможно не видел метода для этого
kostyaBro
Там ты сам выбираешь стриминговый тип или нет.
kostyaBro
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
Типо как в примере
На вход стриминговый тип на выход обычный
kostyaBro
Лан, я спать)
Илья
kostyaBro
Да, так
kostyaBro
Ну по сути под капотом все стриминг там.
Но это совсем другая история.
Иван 💎
Всем привет. Еще несколько дней и закончу изучение данной книги. Подскажите что лучше потом изучать? После книги начну какой-нибудь проектик делать, но может есть литература которая поможет быстрее освоится?
Rostislav
Rostislav
минимально включи в него:
веб-сервер
бд
заверни в докер и выложи в кубер локально развернутый
Это будет хороший проект. Остальное по желанию. Можешь редис прикрутить например
Rostislav
ну это пет проект для резюме
Иван 💎
Иван 💎
Или кубер это оно и есть)
Sebor▂▅▇█▓▒░
Larchenko
Larchenko
Иван 💎
Понял, что не понял нагуглю) Спасибо за направления.
Михаил
G
Народ, всем привет! Вопрос по взаимодействию сервисов.
Есть сервис Realty, который управляет адресной базой и связанными с ней вопросами - один Bounded Context.
Есть сервис Owners, который управляет информацией о собственниках недвижимости - второй Bounded Context.
У Realty есть API администрирования, которое по сути CRUD и позволяет:
- получать список недвижки (с разным фильтрами);
- получать данные конкретного объекта по ID;
- изменять объект по ID;
- добавлять объект.
У Owners есть аналогичный CRUD-API для, соответственно, собственников.
Оба API закрыты JWT-токенами. Для работы с Realty у пользователя должна быть роль realty-admin, для работы с Owners - owners-admin.
Но при этом когда в Owners добавляется или изменяется собственник, одним из его параметров является список ID объектов недвижки этого собственника. Возникает необходимость следующего:
- банально проверить, что такая недвижка есть;
- забрать часть её данных для дальнейшей обработки в логике Owners.
Для этого сервис Owners должен стучаться в Realty. И тут возникает вопрос с авторизацией.
Если Owners придёт в Realty с токеном пользователя, у которого нет роли realty-admin, то не сможет выполнить чтение недвижки и, соответственно, добавление/изменение собственника. Не айс, потому что тогда при выставлении роли owners-admin будет всегда требоваться выставление realty-admin и предоставление доступа к совершенно левому Bounded Context.
Если Realty будет позволять делать поиск недвижки по роли owners-admin, то в него протечёт зависимость из другого сервиса. А таких сервисов в теории может быть много разных. Плюс теоретически пользователь без доступа к Realty сможет выполнять запросы на поиск недвижки, если узнает об этой особенности. Тоже не айс.
Если заводить отдельную роль realty-read, то надо не забывать проставлять её всем, у кого есть owners-admin - получится примерно такое же протекание зависимости, но в другую сторону.
Вопрос: как правильно организовать проверку доступа к списку недвижки в Realty при межсервисном взаимодействии? Желательно с передачей информации о пользователе, который инициировал оригинальный запрос, потому что в аналогичном сценарии с другими сервисами будут write-операции. Пилить отдельный API для внутрянки? Использовать другую схему авторизации для внутрянки?
Спасибо!
Sergey
Народ, всем привет! Вопрос по взаимодействию сервисов.
Есть сервис Realty, который управляет адресной базой и связанными с ней вопросами - один Bounded Context.
Есть сервис Owners, который управляет информацией о собственниках недвижимости - второй Bounded Context.
У Realty есть API администрирования, которое по сути CRUD и позволяет:
- получать список недвижки (с разным фильтрами);
- получать данные конкретного объекта по ID;
- изменять объект по ID;
- добавлять объект.
У Owners есть аналогичный CRUD-API для, соответственно, собственников.
Оба API закрыты JWT-токенами. Для работы с Realty у пользователя должна быть роль realty-admin, для работы с Owners - owners-admin.
Но при этом когда в Owners добавляется или изменяется собственник, одним из его параметров является список ID объектов недвижки этого собственника. Возникает необходимость следующего:
- банально проверить, что такая недвижка есть;
- забрать часть её данных для дальнейшей обработки в логике Owners.
Для этого сервис Owners должен стучаться в Realty. И тут возникает вопрос с авторизацией.
Если Owners придёт в Realty с токеном пользователя, у которого нет роли realty-admin, то не сможет выполнить чтение недвижки и, соответственно, добавление/изменение собственника. Не айс, потому что тогда при выставлении роли owners-admin будет всегда требоваться выставление realty-admin и предоставление доступа к совершенно левому Bounded Context.
Если Realty будет позволять делать поиск недвижки по роли owners-admin, то в него протечёт зависимость из другого сервиса. А таких сервисов в теории может быть много разных. Плюс теоретически пользователь без доступа к Realty сможет выполнять запросы на поиск недвижки, если узнает об этой особенности. Тоже не айс.
Если заводить отдельную роль realty-read, то надо не забывать проставлять её всем, у кого есть owners-admin - получится примерно такое же протекание зависимости, но в другую сторону.
Вопрос: как правильно организовать проверку доступа к списку недвижки в Realty при межсервисном взаимодействии? Желательно с передачей информации о пользователе, который инициировал оригинальный запрос, потому что в аналогичном сценарии с другими сервисами будут write-операции. Пилить отдельный API для внутрянки? Использовать другую схему авторизации для внутрянки?
Спасибо!
Микросервисы или монолит? Может быть создать еще один api с доступом уровня owner для предоставления данных о недвижке в том объеме, в котором пользователь с owner-доступом не сможет воспользоваться информацией о недвижке? Просто здесь решения надо принимать, исходя из многих факторов, которые не описаны
G
G
Честно говоря, моего уровня компетенции не хватает для оптимального решения, но возможно я бы начал с разработки универсального механизма взаимодействия между сервисами внутри системы (не показывая эту систему наружу), т.е. изменения достаточно фундаментальные, а не просто заплатка в виде дополнительной роли. Надеюсь, тут найдется сеньор, который имеет опыт решения этой проблемы (потому что проблема достаточно распространенная)
Вообще, тоже склоняюсь к приватному каналу общения для микросервисов. Придумалось такое: сделать API, аналогичное "публичному", но за middleware, который игнорирует роли в jwt-токене, но проверяет наличие внутреннего preshared-токена в кастомном заголовке, чтобы удостовериться, что вызывающая сторона - наш сервис. Или вообще вместо jwt-токена передавать просто кортеж из ID пользователя, ID сессии и всего прочего полезного из payload. Но по ощущениям как-то кривенько. Хотя, может быть, достаточно хорошо?
Sergey
Вообще, тоже склоняюсь к приватному каналу общения для микросервисов. Придумалось такое: сделать API, аналогичное "публичному", но за middleware, который игнорирует роли в jwt-токене, но проверяет наличие внутреннего preshared-токена в кастомном заголовке, чтобы удостовериться, что вызывающая сторона - наш сервис. Или вообще вместо jwt-токена передавать просто кортеж из ID пользователя, ID сессии и всего прочего полезного из payload. Но по ощущениям как-то кривенько. Хотя, может быть, достаточно хорошо?
Неужели никто не выносил эту тему на какой-нибудь конференции? Ведь про микросервисы многие говорят, Проблема взаимодействия должна стоять достаточно остро. Думаю, что озвученный путь на первый взгляд - оптимальный. Этот как с алгоритмами - вроде есть просто и понятный алгоритм решения задачи, а потом читаешь про какой то алгоритм, который проще, с меньшим О(), но не тривиальный, до которого сразу не додумаешься. Я бы погуглил эту тему и скорее всего в англоязычном сегменте, а пока двигался по вышеописанному пути
G
Неужели никто не выносил эту тему на какой-нибудь конференции? Ведь про микросервисы многие говорят, Проблема взаимодействия должна стоять достаточно остро. Думаю, что озвученный путь на первый взгляд - оптимальный. Этот как с алгоритмами - вроде есть просто и понятный алгоритм решения задачи, а потом читаешь про какой то алгоритм, который проще, с меньшим О(), но не тривиальный, до которого сразу не додумаешься. Я бы погуглил эту тему и скорее всего в англоязычном сегменте, а пока двигался по вышеописанному пути
Я гуглил. Советуют примерно то же самое с разными вариациями, в основном в сторону асинхронных взаимодействий на базе RabbitMQ и прочих кафк. Сюда написал именно в надежде на тот самый нетривиальный, но более простой способ 😊 Ну или на примеры имплементаций, или на статьи/доклады. Взаимодействие пока точно будет синхронное через API. Не хочется делать лишних нагромождений. Отдельный HTTP-endpoint с другой схемой авторизации, например, или вообще GRPC - возможно, это усложнения, которых можно избежать без вреда для решения задачи.
Sergey
Я гуглил. Советуют примерно то же самое с разными вариациями, в основном в сторону асинхронных взаимодействий на базе RabbitMQ и прочих кафк. Сюда написал именно в надежде на тот самый нетривиальный, но более простой способ 😊 Ну или на примеры имплементаций, или на статьи/доклады. Взаимодействие пока точно будет синхронное через API. Не хочется делать лишних нагромождений. Отдельный HTTP-endpoint с другой схемой авторизации, например, или вообще GRPC - возможно, это усложнения, которых можно избежать без вреда для решения задачи.
у меня взаимодействие между сервисами сделано через grpc (с шифрованием трафика), но api внутренний, только для организации, так что мне проще)
G
G
Просто в теле запроса ID пользака?
Sergey
нет, пока еще не реализовал, основной сервис собирает данные, обращаясь к другим сервисам без авторизации, аутентификация происходит посредством проверки сертификатов, ключи доступны только сервисам. Возможно это не совсем безопасно, но то, что api не публичный - мне в этом проще
Fgyutr
Всем привет, можете подсказать канал по pl/sql?
🅞leksiy
Я гуглил. Советуют примерно то же самое с разными вариациями, в основном в сторону асинхронных взаимодействий на базе RabbitMQ и прочих кафк. Сюда написал именно в надежде на тот самый нетривиальный, но более простой способ 😊 Ну или на примеры имплементаций, или на статьи/доклады. Взаимодействие пока точно будет синхронное через API. Не хочется делать лишних нагромождений. Отдельный HTTP-endpoint с другой схемой авторизации, например, или вообще GRPC - возможно, это усложнения, которых можно избежать без вреда для решения задачи.
Если рост планируется, то возьми nats, в принципе позволяет паттерны Request-Reply, при этом будет единый endpoint, без головняка, какой микросервис на каком порту запущен и во сколько инстансов. Он на go написан, позволяет повторно обрабатывать сообщения, которые, например, были получены, но не были обработаны из-за падения сервиса.
Null
Тестирование в Go: от плохого к хорошему.
В этом видео мы расскажем теорию тестирования, поговорим о том, как нужно писать тесты в Golang и затронем тему архитектуры проекта.
Первая часть
Вторая часть
Код
Test Pyramid
@Golang_google
Михаил
Bogdan
Господа, день добрый. Вопрос такой, немного нестандартный(А может и стандартный для чата). Есть ли кто мог провести код ревью? Написал сервис, но хочется со стороны архитектуры все в идеал вывести, да и, возможно, поработать над рефакторингом. В общем, хочется взгляд с горы опыта, шоб поделились, так сказать
Юра (Юрий Александрович)
А сервис большой?
Bogdan
Нет, два эндпоинта. Upload-download image
Bogdan
Я в течении дня ещё rabbitMQ и Redis подкручу. Пропишу docker-compose и, думаю, будет готово
Юра (Юрий Александрович)
Как говорится "Я не доктор, но тоже могу посмотреть".
(хотя очень хочется отморозиться...)
Bogdan
Юра (Юрий Александрович)
Все не так просто. Все очень сложно. Мне хочется посмотреть, спать и компотика.
G
Если рост планируется, то возьми nats, в принципе позволяет паттерны Request-Reply, при этом будет единый endpoint, без головняка, какой микросервис на каком порту запущен и во сколько инстансов. Он на go написан, позволяет повторно обрабатывать сообщения, которые, например, были получены, но не были обработаны из-за падения сервиса.
Правильно понимаю, что в этом случае авторизация пользователя в шине не передаётся из одного сервиса в другой вообще, или передаётся в виде минимальной информации типа ID пользователя, но роли пользователя уже не проверяются?
🅞leksiy
https://docs.nats.io/running-a-nats-service/configuration/securing_nats/authorization
🅞leksiy
Или я может неверно понял вопрос?
🅞leksiy
Если речь о пользователях приложения, то все от архитектуры зависит, один сервис может глядеть наружу, проверять авторизацию, а дальше внутри системы запросы будут по id идти
G
Или я может неверно понял вопрос?
Вопрос про контроль разрешений пользователя на уровне отдельных действий в каждом сервисе. Делают ли его вообще при общении через внутренний межсервисный канал, и если делают, то как?
🅞leksiy
anhckie
может кто-то объяснить новичку, в чем принципиальное отличие от буферизированных и небуферизированных каналов?
anhckie
шо-то путаница в голове
Sebor▂▅▇█▓▒░
Ну в одном есть буфер, а в другом нет 😏
Eugene
English please
John
Вопрос: DI-контейнер уместен в go-приложение?
Emin Zalaev
Eugene
Eugene