Довелось тут потрогать grpc-gateway https://grpc-ecosystem.github.io/grpc-gateway/ и оценить в работе на реальной задаче. Суть этой штуки в том, что она транслирует REST запросы в gRPC. То есть вы пишите protobuf а она генерирует вам HTTP сервис.
Для чего это может быть нужно? Например, если ваше приложение состоит из нескольких компонентов, которые должны общаться, и вам не хочется возиться с REST, ведь есть же gRPC с кодогенерацией. Но при этом один из компонентов должен таки REST предоставлять скажем для фронтента. GRPC-gateway поможет избавить от двойной работы.
Как это устроено?
Сначала вы описываете какой-то сервис в protobuf
Затем запускаете генератор кода
Получается несколько файликов, которые содержат http сервис с хэндлерами, которые могут превращать ваши HTTP запросы в gRPC.
Далее используете этот сгенерированный код
Готово!
Тут же рядом можно нагенерить openAPI схему. REST реализован практически бесплатно. Приколы конечно есть свои у продукта, куда же без них, и куда стремиться тоже, но все равно это огромная польза и экономия времени.
В сочетании с kube generator можно еще
👉 Из гошной структуры сгенерить protobuf файлы
👉 Из гошной структуры генерить клиенты для CRD
👉 И даже сами CRD манифесты
То есть если один из компонентов приложения это кубовый контроллер, то вообще сказка. Описываем нашу апишку в структурах и генерим из нее вообще все. Ну почти, если не считать что куборгенератор может делать пока что только proto2 синтакс и надо все же сам сервис описать, но это все прям мелочи.
Нашел даже реальный пример - Argo продукты, которые используют всю эту машинерию, argo workflow и argocd точно. Так что в проде это используется. Рекомендую присмотреться подробнее, мне зашло.
Для чего это может быть нужно? Например, если ваше приложение состоит из нескольких компонентов, которые должны общаться, и вам не хочется возиться с REST, ведь есть же gRPC с кодогенерацией. Но при этом один из компонентов должен таки REST предоставлять скажем для фронтента. GRPC-gateway поможет избавить от двойной работы.
Как это устроено?
Сначала вы описываете какой-то сервис в protobuf
syntax = "proto3";
package your.service.v1;
option go_package = "github.com/yourorg/yourprotos/gen/go/your/service/v1";
message StringMessage {
string value = 1;
}
service YourService {
rpc Echo(StringMessage) returns (StringMessage) {}
}
Затем запускаете генератор кода
protoc -I . \
--go_out ./gen/go/ --go_opt paths=source_relative \
--go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative \
your/service/v1/your_service.proto
Получается несколько файликов, которые содержат http сервис с хэндлерами, которые могут превращать ваши HTTP запросы в gRPC.
Далее используете этот сгенерированный код
mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}
gw.RegisterYourServiceHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts)
http.ListenAndServe(":8081", mux)
Готово!
Тут же рядом можно нагенерить openAPI схему. REST реализован практически бесплатно. Приколы конечно есть свои у продукта, куда же без них, и куда стремиться тоже, но все равно это огромная польза и экономия времени.
В сочетании с kube generator можно еще
👉 Из гошной структуры сгенерить protobuf файлы
👉 Из гошной структуры генерить клиенты для CRD
👉 И даже сами CRD манифесты
То есть если один из компонентов приложения это кубовый контроллер, то вообще сказка. Описываем нашу апишку в структурах и генерим из нее вообще все. Ну почти, если не считать что куборгенератор может делать пока что только proto2 синтакс и надо все же сам сервис описать, но это все прям мелочи.
Нашел даже реальный пример - Argo продукты, которые используют всю эту машинерию, argo workflow и argocd точно. Так что в проде это используется. Рекомендую присмотреться подробнее, мне зашло.
👍12❤1
Василий Романов выложил свой курс по Golang бесплатно в качестве новогоднего подарка. https://stepik.org/course/187490/promo
Помню как когда-то осваивал гошку по его курсам. Прекрасная подача по принципу коротко и по делу (только такое мне и заходит). А тут еще и бесплатно. Крайне рекомендую.
Помню как когда-то осваивал гошку по его курсам. Прекрасная подача по принципу коротко и по делу (только такое мне и заходит). А тут еще и бесплатно. Крайне рекомендую.
🔥19👍1💩1
Я представляю вам видезапись доклада с Highload++ 2023 https://www.youtube.com/watch?v=yyrAH7nl7RM о крупном и интересном проекте межсеврисной авторизации. Я был лидом и основным разработчиком этого проекта с самого начала и продолжаю работать над ним до сих пор. В течение 30 минут я расскажу о всех важных аспектах проекта, но, конечно, за это время невозможно охватить все детали. Я сосредоточусь на самом важном.
Этот проект не только технический и связан с борьбой за миллисекунды. Интеграция в работающие сервисы - это настоящее испытание, не говоря уже об интеграции в головы пользователей. В целом проект оказался успешным, хотя и не без ошибок. Я уверен, что те, кто стоит перед подобной задачей, смогут извлечь из него полезные уроки.
Этот проект не только технический и связан с борьбой за миллисекунды. Интеграция в работающие сервисы - это настоящее испытание, не говоря уже об интеграции в головы пользователей. В целом проект оказался успешным, хотя и не без ошибок. Я уверен, что те, кто стоит перед подобной задачей, смогут извлечь из него полезные уроки.
🔥9
В продолжение темы изучающих гошку (или углубляющихся), я мог бы дополнительно порекомендовать Go101 https://go101.org/article/101.html. Как оказывается, не все видели или знают об этом материале. Читал по диагонали и останавливался только на своих пробелах. Инженеры самых разных уровней смогут для себя найти что-то новое.
👍10❤2💩1
Продолжаю делиться накопившимися полезными источниками информации. На этот раз еще один достойный труд (и даже на русском) на тему проектирования API. Автор делает упор на API-first подход частенько, и можно к этому подходу относиться по-разному, но это не отменяет полезности остального материла. https://twirl.github.io/The-API-Book/API.ru.html
👍7🔥4
Еще один инструмент для работы с внутренними (и не только) TLS сертами. Можно использовать для реализации CA куба или автоматизированной выдачи сертификатов для mutual TLS, пользователеям и прочего. https://github.com/smallstep/certificates
GitHub
GitHub - smallstep/certificates: 🛡️ A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate…
🛡️ A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH. - smallstep/certificates
Отличная книжка для желающих получить базовые или первоначальные знания в ИИ и тоже быть на хайпе и больше понимать. Много положительных отзывов от коллег и знакомых.
👍6👎1
Маэстро возвращается. Андрей Созыкин, автор самого крутейшего на мой взгляд курса по сетям https://www.asozykin.ru/courses/networks_online (писал о нем ранее), выпустил вступительное видео к продолжению этого курса! Вернее обновлению и актуализации. Все это он делает бесплатно и весьма качественно. Ждем с нетерпением выхода лекций. Спасибо за труд!
👍16👎1🔥1
Оказывается не все еще успели узнать о возможности обрезать capacity слайса в гошке. Когда занимаешься оптимизациями бывает и такое нужно. В новом пакете slices есть такой метод https://cs.opensource.google/go/x/exp/+/master:slices/slices.go;l=419
👍2👎1
Давненько ничего не писал, а уже набралось много интересного. Пора это исправлять. А пока для разминки вот вам анонс на первую конфу от Авито.
👍1💩1
Forwarded from AvitoTech
Avito All Day Long
#avitoteam
У нас накопилось столько решений, технологий и кейсов, что можно устроить свою собственную конференцию. Что мы и делаем.
20 июля в 11:00 мск приглашаем на нашу первую конференцию AvitoTech.
Место встречи: Центр событий РБК, Космодамианская набережная, 52, стр. 7 (м. Павелецкая)
В пространстве:
1️⃣ зона для дискуссий — обсуждаем тренды рынка и актуальные решения;
2️⃣ зона для тест-драйва наших технопродуктов — демо-станции с AvitoPlato, Trisigma, Emcee;
3️⃣ зона знакомства с Вертикалями Авито — Недвижимость, Авто, Работа, Товары и Услуги;
4️⃣ зона отдыха и игр.
В программе:
– инструменты платформенных команд, которые делают пользователей счастливыми;
– Low Code + Backend Driven UI;
– MLOps с нуля;
– продуктовая разработка от платформенных команд;
– техстратегии, инженерная культура, взаимоотношения разработчиков и дизайнеров.
И многое другое, через что мы прошли, нашли эффективные решения и готовы рассказать, как вы можете применить это всё у себя.
Увидимся на Avito All Day Long! Регистрация обязательна :)
Вам понравится эта встреча!❤️
в начало поста⬅️
#avitoteam
У нас накопилось столько решений, технологий и кейсов, что можно устроить свою собственную конференцию. Что мы и делаем.
20 июля в 11:00 мск приглашаем на нашу первую конференцию AvitoTech.
Место встречи: Центр событий РБК, Космодамианская набережная, 52, стр. 7 (м. Павелецкая)
В пространстве:
В программе:
– инструменты платформенных команд, которые делают пользователей счастливыми;
– Low Code + Backend Driven UI;
– MLOps с нуля;
– продуктовая разработка от платформенных команд;
– техстратегии, инженерная культура, взаимоотношения разработчиков и дизайнеров.
И многое другое, через что мы прошли, нашли эффективные решения и готовы рассказать, как вы можете применить это всё у себя.
Увидимся на Avito All Day Long! Регистрация обязательна :)
Вам понравится эта встреча!
в начало поста
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6💩3👍1
Плагинизация и расширение возможностей envoy
Envoy - это действительно стандарт на сегодняшний день для использования в качестве сайдкаров, и не только. Одно из главных его преимуществ - это xDS протокол для конфигурации прокси на лету. Именно на этом построена работа таких инструментов, как Istio. Общая механика такова - пишем yaml манифесты с правилами роутинга, безопасности и прочим, а Istio конфигурирует нужные сайдкары в нужных подах.
Принцип обработки запроса у Envoy - это цепочка фильтров, которые по сути являются middleware. Из коробки доступны множество различных фильтров на любой вкус. Однако, все равно рано или поздно их может не хватить. Это произошло и со мной, когда потребовалось накрутить кэширование для авторизационных запросов для снижения latency. Существует несколько способов создания собственного фильтра:
➡️ C++ - это максимально эффективный способ с точки зрения возможностей, но также и максимально травмирующий :). Однако, если в вашей команде есть c++ разработчики, то проблем возникнуть не должно.
➡️ Golang - наша любимая "гошечка". Все достаточно просто: пишем код на основе предоставленных интерфейсов, собираем so, добавляем в образ - готово. Ограничений в функциональности не встретил.
➡️ Wasm - там тоже есть go, но только tiny-go. Это уже ограничение, например, в сетевых запросах, дополнительный latency до 6мс (по заверениям авторов Istio, но надо тестировать самостоятельно), что может быть достаточно заметно для нагруженных частей проекта. Находил тесты производительности, которые также заставляли сомневаться.
➡️ Lua - простой как палка, есть все что необходимо в плане функционала, код работает из коробки, даже не надо образ дополнять. Но Envoy буферизует запрос перед тем как отдать его в lua код (перед сетевыми запросами). Можно столкнуться, например, с проблемой "too large body".
Эти методы расширения - те, с которыми мне пришлось столкнуться ближе всего. Для простых задач я буду продолжать использовать Lua, но если логика чуть сложнее, чем изменение заголовков, то я буду смотреть в сторону Golang.
Envoy - это действительно стандарт на сегодняшний день для использования в качестве сайдкаров, и не только. Одно из главных его преимуществ - это xDS протокол для конфигурации прокси на лету. Именно на этом построена работа таких инструментов, как Istio. Общая механика такова - пишем yaml манифесты с правилами роутинга, безопасности и прочим, а Istio конфигурирует нужные сайдкары в нужных подах.
Принцип обработки запроса у Envoy - это цепочка фильтров, которые по сути являются middleware. Из коробки доступны множество различных фильтров на любой вкус. Однако, все равно рано или поздно их может не хватить. Это произошло и со мной, когда потребовалось накрутить кэширование для авторизационных запросов для снижения latency. Существует несколько способов создания собственного фильтра:
➡️ C++ - это максимально эффективный способ с точки зрения возможностей, но также и максимально травмирующий :). Однако, если в вашей команде есть c++ разработчики, то проблем возникнуть не должно.
➡️ Golang - наша любимая "гошечка". Все достаточно просто: пишем код на основе предоставленных интерфейсов, собираем so, добавляем в образ - готово. Ограничений в функциональности не встретил.
➡️ Wasm - там тоже есть go, но только tiny-go. Это уже ограничение, например, в сетевых запросах, дополнительный latency до 6мс (по заверениям авторов Istio, но надо тестировать самостоятельно), что может быть достаточно заметно для нагруженных частей проекта. Находил тесты производительности, которые также заставляли сомневаться.
➡️ Lua - простой как палка, есть все что необходимо в плане функционала, код работает из коробки, даже не надо образ дополнять. Но Envoy буферизует запрос перед тем как отдать его в lua код (перед сетевыми запросами). Можно столкнуться, например, с проблемой "too large body".
Эти методы расширения - те, с которыми мне пришлось столкнуться ближе всего. Для простых задач я буду продолжать использовать Lua, но если логика чуть сложнее, чем изменение заголовков, то я буду смотреть в сторону Golang.
👍3👎1
📖 Наглядные и подробные интерактивные руководства об устройстве TLS протоколов:
- версия 1.2 https://tls12.xargs.org/
- версия 1.3 https://tls13.xargs.org/
И рядом также лежит аналогичный гайд по QUIC https://quic.xargs.org/
- версия 1.2 https://tls12.xargs.org/
- версия 1.3 https://tls13.xargs.org/
И рядом также лежит аналогичный гайд по QUIC https://quic.xargs.org/
tls12.xargs.org
The Illustrated TLS 1.2 Connection
Every byte of a TLS connection explained and reproduced
👍7🤡1
Авито запартнерилось с GetMentor и Solvery
Теперь можно сразу посмотреть всех доступных менторов с Авито и обратиться за помощью. Я на GetMentor тоже есть . Помогаю готовиться к собеседованиям, и составлять индивидуальные планы развития как по тех части, так и по софт скиллам, включая и компетенции лида. Но бывают и консультации по конкретным проектам, и даже непосредственная помощь в качестве исполнителя.
Ни разу про это не писал раньше, но раз уж пошло такое дело, то почему бы и да 🙂
Теперь можно сразу посмотреть всех доступных менторов с Авито и обратиться за помощью. Я на GetMentor тоже есть . Помогаю готовиться к собеседованиям, и составлять индивидуальные планы развития как по тех части, так и по софт скиллам, включая и компетенции лида. Но бывают и консультации по конкретным проектам, и даже непосредственная помощь в качестве исполнителя.
Ни разу про это не писал раньше, но раз уж пошло такое дело, то почему бы и да 🙂
🔥4
Forwarded from AvitoTech
Запустили менторскую программу, и теперь нас можно найти на Getmentor и Solvery.
Наши опытные инженеры помогут подтянуть харды, объяснят сложную задачу и посоветуют ресурсы для развития. С софтами тоже разберутся — от первого собеседования до планирования карьерного пути🚀
В общем, любой вопрос за ваши деньги: их можно отдать непосредственно за сессию, а можно перечислить взнос на благотворительность — такое мы ценим🐞
#avitoteam
Наши опытные инженеры помогут подтянуть харды, объяснят сложную задачу и посоветуют ресурсы для развития. С софтами тоже разберутся — от первого собеседования до планирования карьерного пути
В общем, любой вопрос за ваши деньги: их можно отдать непосредственно за сессию, а можно перечислить взнос на благотворительность — такое мы ценим
#avitoteam
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🤡1
Наткнулся на классную штуку. Визуализация алгоритмов https://www.cs.usfca.edu/~galles/visualization/Algorithms.html Я как сторонник понимать, а не зубрить очень такое ценю.
👍7🔥2
Наткнулся на шикарный гайд по профилированию go приложений от Dave Cheney. Все понятно и разложено по полочкам. Ну а если 40 минут на английском тяжелова-то, то есть неплохая статья на русском по этой же теме (и много еще других). Эту тему кстати часто затрагивают на собесах, когда все простые и средние вопросы успешно отвечены. Если претендуете на высокие грейды, то в таких вещах хорошо бы ориентироваться.
YouTube
GopherCon 2019: Two Go Programs, Three Different Profiling Techniques - Dave Cheney
Go, being a relatively recent statically typed, compiled language, is known to produce efficient programs. But writing a program in Go is not sufficient for good performance.
In this tutorial Dave will demonstrate three different methods of profiling Go…
In this tutorial Dave will demonstrate three different methods of profiling Go…
👍17❤1✍1🤝1
Всем привет. Знаю, что поиск работы в так называемом "бигтехе" для многих вопрос актуальный. Делаю такой вывод в первую очередь из характера обращений ко мне на менторство, а так же из обсуждений в различных чатиках. Поэтому информация ниже как раз для таких инженеров.
В эти выходные Авито проводит Weekend Offer для go инженеров (рефералка). Это когда за выходные вы проходите все секции интервью и получаете офер. Конечно же секции идут не подряд, с перерывом минимум час между подходами. Как по мне это гораздо удобнее чем 2-3 недели мариноваться в обычном формате.
Я конечно позднова-то написал, многие предпочитают много времени уделять подготовке. Многие, но не все 🙂 Я вот ни разу не готовился ни к одному собесу, потому что
- все равно вопросы потом другие попадуются
- сейчас большая часть собесов это формат решения практических задач, и там может помочь только имеющийся опыт.
Рекомендую попробовать сходить, проверить свои силы. Может вы их недооцениваете 🙂 В любом случае получите полезный опыт, а кто-то вероятно и офер. Удачи!
В эти выходные Авито проводит Weekend Offer для go инженеров (рефералка). Это когда за выходные вы проходите все секции интервью и получаете офер. Конечно же секции идут не подряд, с перерывом минимум час между подходами. Как по мне это гораздо удобнее чем 2-3 недели мариноваться в обычном формате.
Я конечно позднова-то написал, многие предпочитают много времени уделять подготовке. Многие, но не все 🙂 Я вот ни разу не готовился ни к одному собесу, потому что
- все равно вопросы потом другие попадуются
- сейчас большая часть собесов это формат решения практических задач, и там может помочь только имеющийся опыт.
Рекомендую попробовать сходить, проверить свои силы. Может вы их недооцениваете 🙂 В любом случае получите полезный опыт, а кто-то вероятно и офер. Удачи!
Avito
Avito Weekend Offer для Go-разработчиков
Пройдите все этапы отбора и получите оффер на грейд middle или senior за одни выходные
🔥9👍2❤1👎1
