Все потоки
Поиск
Написать публикацию
Обновить
94.55

Go *

Компилируемый, многопоточный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Архитектура Hashicorp Vault

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров8.6K

В данной статье описал схему маршрутизации и получения данных в hashicorp vault(это зашифированное хранилище секретов с доступом по политикам). Возможно будет полезно тем, кто думает над архитектурой сервера или слоем(‑ми) доступа к данным.

Читать далее

Эволюция алгоритма фильтрации модификаций товаров в Авито

Время на прочтение16 мин
Количество просмотров5.5K

Всем привет! Меня зовут Денис Колпаков, я бэкенд-инженер в юните Core Services Авито. Долгое время я был овнером критически значимого для бизнеса сервиса форм, а последний год занимаюсь каталогами и каталогизацией. 

Я расскажу, как мы решали продуктовую задачу — искали способ отфильтровать модификации товаров из базы данных. 

Читать далее

Bazel, stamping, remote cache

Время на прочтение10 мин
Количество просмотров2.1K

В Bazel есть любопытная фича, позволяющая добавить данные, которые не инвалидируют кэш сборки.

Например, это бывает полезно, чтобы добавить в исполняемый файл информацию о том, когда он был собран и из какой ревизии. Если для времени и номера ревизии использовать stamping, то, когда собранный файл уже есть в кэше, он пересобираться не будет.

Разберемся, как stamping использовать...

Читать дальше →

Сказ о том как pet-project превратился в небольшой пассивный доход (часть 2)

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров7.4K

Первая Часть

Предыдущая часть закончилась неудачной балансировкой, которая не решает практически никаких проблем. В комментариях кто-то спросил, почему я не использовал балансировку на уровне DNS. Так вот, я ее использовал. Оказалось, что c помощью DNS записей можно организовать балансировку Round Robin. Для этого в конфигурации Wireguard всего лишь нужно использовать доменное имя вместо IP адреса.

Читать далее

Мой путь в профессию: из аналитиков в Go-разработчики

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров8K
image

Привет! Меня зовут Герман, я backend-разработчик в команде Managed Service for Redis в компании #CloudMTS. В этой статье расскажу про свой приход в разработку на Go и поделюсь полезными ресурсами, которые мне помогли на этом пути.

Читать дальше →

Golang-дайджест № 26 (1 – 28 февраля  2023)

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4K

Свежая подборка новостей и материалов.

Интересное в этом выпуске

Выпущены Go 1.20.1 и 1.19.6, воздушный шар дальнего радиуса действия, полное руководство по OpenTelemetry, пасьянс в терминале

Читать далее

Выбираем IAM в 2023 или, что есть кроме Keycloak

Время на прочтение4 мин
Количество просмотров26K

Гипотетическая ситуация — ваш работодатель поручил вам выбрать Identity and Access Management platform.

Обязательно: open‑source (Apache 2.0), self‑hosted, OAuth 2.0, OIDC, SAML, LDAP.

Для тех кому интересно узнать, что есть еще кроме Keycloak.

Узнать

Assembler в Go: техники ускорения и оптимизации

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров7.3K

Привет, Хабр!

В прошлой статье я рассказывал об ускорении копирования элементов одного слайса в другой с помощью средств Go. В этот раз я решил пойти дальше и посмотреть, что можно достичь, начав разговаривать с процессором на его языке. Я выбрал одну из оптимизированных версий функции Copy в качестве объекта исследования из решения задачи VK Cup'22/23, которая копирует только синий компонент RGBA в Paletted картинку. Если интересно узнать как её ускорить почти в 10 раз, прошу под кат.

Читать далее

Шаблон backend сервера на Golang — часть 5 — оптимизация Worker pool

Уровень сложностиСредний
Время на прочтение32 мин
Количество просмотров10K

# Шаблон backend сервера на Golang — часть 5 — оптимизация Worker pool


Пятая часть посвящена оптимизации Worker pool и особенностям его работы в составе микросервиса, развернутого в Kubernetes.


Представленный Worker pool поддерживает работу с двумя типами задач


  • "Короткие" — не контролируется предельный timeout выполнения и их нельзя прервать
  • "Длинные" — контролируется предельный timeout выполнения и их можно прервать

Накладные расходы Worker pool на добавление в очередь, контроль очереди, запуск обработки task, контроль времени выполнения task:


  • Для "коротких" task — от 300 ns/op, 0 B/op, 0 allocs/op
  • Для "длинных" task — от 1400 ns/op, 16 B/op, 1 allocs/op

Для task, которые должны выполняться быстрее 200 ns/op представленный Worker pool использовать не эффективно


Собираются следующие метрики prometheus:


  • wp_worker_process_count_vec — количество worker в работе
  • wp_task_process_duration_ms_by_name — гистограмма длительности выполнения task в ms с группировкой по task.name
  • wp_task_queue_buffer_len_vec — текущая длина канала-очереди task — показывает заполненность канала
  • wp_add_task_wait_count_vec — количество задач, ожидающих попадания в очередь

Ссылка на репозиторий проекта.


Шаблон goapp в репозитории полностью готов к развертыванию в Docker, Docker Compose, Kubernetes (kustomize), Kubernetes (helm).


Ссылки на предыдущие части:


  • Первая часть шаблона была посвящена HTTP серверу.
  • Вторая часть шаблона была посвящена прототипированию REST API.
  • Третья часть посвящена развертыванию шаблона в Docker, Docker Compose, Kubernetes (kustomize).
  • Четвертая часть будет посвящена развертыванию в Kubernetes с Helm chart и настройке Horizontal Autoscaler.
Читать дальше →

Тайные каналы связи или как централизованные сервисы способны разлагаться изнутри

Уровень сложностиСложный
Время на прочтение17 мин
Количество просмотров5.5K

Современный мир нельзя представить без сервисов связи, таких как социальные сети, мессенджеры, электронная почта, файловые хранилища и т.п. Мы пользуемся данными сервисами постоянно, ровно как и они планомерно пользуются нами. Конфиденциальная информация становится для сервисов связи святым граалем в задачах таргетированной рекламы. А для нас граалем становится их лёгкость использования, высокая производительность и большие размеры хранилищ.

На первый взгляд кажется, что такой специфичный способ взаимодействия клиентов с сервисами представляет собой некий симбиоз, при котором мы друг друга дополняем и оберегаем (исключительно ради собственных интересов). Но всё же, если смотреть более углубленно на данный вид коммуникаций, то может появиться дополнительный вопрос: есть ли место в подобной парадигме паразитическим отношениям?

Читать далее

Как я приложение с Go на Rust переписывал

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров19K

О Rust я слышал ещё несколько лет назад и все его либо хвалили, либо порицали, по различным причинам, но сам как-то не брался за него - мне, неподготовленному к подобному синтаксису и не знакомому с подобными языками хотя бы на базовом уровне, в то время он казался совершенно непонятным.

Не так давно решил написать для себя небольшое приложение-бенчмарк для теста HTTP API серверов и написал его на Go. Но размер в 5 с лишним Мбайт, несоблюдение целевого RPS и некоторые другие проблемы заставили посмотреть в сторону более производительного Rust + Tokio + Hyper.

Эта статья о коде Rust-приложения, переходе с Go на Rust, преимуществах и недостатках обоих языков и сравнении двух сферических коней в вакууме.

Читать далее

Полиморфизм: подавать холодным

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров24K

Полиморфизм является одним из трёх столпов ООП, наравне с наследованием и инкапсуляцией, да и в целом краеугольным камнем современного программирования. Думаю, большинство читателей не представляет своей жизни без полиморфизма, за что я, конечно, это большинство никак не осуждаю, ибо сам к нему принадлежу. Дело, однако, в том, что многие не задумываются об устройстве этого полиморфизма, ведь любой принцип программирования, по сути, представляет из себя математическую матрёшку.

Читать далее

Путь миграции с go build на Bazel

Время на прочтение6 мин
Количество просмотров3.2K

При поиске решений для сборки больших проектов на Go с завидной регулярностью попадались отсылки на статьи про Bazel.

К сожалению, понимания того, как должна выглядеть разработка после миграции на Bazel они не давали. Попробуем разобраться...

Читать дальше →

Ближайшие события

Брифинг по дженерикам Go 1.18

Время на прочтение9 мин
Количество просмотров5K

Добавление дженериков (generics) в Go (ранее Golang) — самое значительное изменение, которое он претерпел, с момента его релиза. Сообщество Go просило добавить дженерики с самых первых дней языка, и мы, наконец, дождались.

Реализация дженериков в Go сильно отличается от традиционных реализаций, которые можно найти в C++, но все-таки имеет некоторое сходство с реализацией дженериков в Rust. В этой статье вашему вниманию представлен обзор, нацеленный помочь вам сформировать понимание дженериков Go и продемонстрировать, как с ними работать.

Читать далее

Fitter —  сшиватель API/Website's, часть личного проекта которую хотел опенсорснуть

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.1K

Добрый вечер всем!

Возможно выбрал не лучшее время для охвата аудитории, но тем не менее главное чтоб продукт был хороший, а не статья о нем. Последние несколько недель я пишу приложение в рамках которого надо собирать огромное количество информации из сети(запросы к API/парсинг HTML кода) и под конец 4-ой интеграции я подумал что надо бы это максимально облегчить(не дело это пересобирать приложение под каждый чих интеграции), возможно это не лучшая преамбула, но хотя бы была реальная проблема решение к которой хотелось показать и заопенсорнуть.

Итак Fitter = сшиватель достаточно жаргонный перевод, но мне он кажется что лучше всего подходит. Я делал эту штуки исходя из следующих предположений:

Читать далее

Сказ о том как pet-project превратился в небольшой пассивный доход (часть 1)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров43K

Я backend разработчик с опытом около 3-х лет, пишу в основном на Golang. Проработал в нескольких крупных российских компаниях. Сейчас я параллельно со своей работой пытаюсь сделать удобный, дешевый VPN сервис с высокой пропускной способностью. В этой статье я хочу просто рассказать про жизненный цикл своего проекта. Возможно кому-то будет просто интересно почитать, а кто-то может почерпнуть что-то новое для себя.

Читать далее

Зачем мигрировать с go build на Bazel?

Время на прочтение6 мин
Количество просмотров5.5K

Это первый пост из цикла, посвященного миграции с go build на Bazel.

К процессу миграции мы подошли на этапе, когда запуск тестов на CI занимал примерно от 15 минут до часа. При этом мы уже успели реализовать некоторое распараллеливание и кэширование результатов тестов. Без этого тесты на одной машине должны были бы идти примерно часов восемь.

После внедрения Bazel запуск тестов на CI в основном укладывается в интервал от 1,5 до 25 минут (50 перцентиль в районе 12 минут), что гораздо комфортнее исходной ситуации.

Оговоримся, что сравнение этих цифр «в лоб» несколько некорректно: с одной стороны, за время пути кодовая база стала еще больше, а с другой – поменялась топология CI. Но в целом представление о полученном эффекте они дают.

Далее опишем, за счет какого механизма достигнуто ускорение.

Читать дальше →

Микросервисные приложения на GoMicro

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров15K

Go благодаря возможностям компиляции и встроенным механизмам конкурентной многозадачности очень хорошо подходит для создания сетевых приложений и активно используется в создании инструментов для DevOps и распределенных приложений. В этой статье мы рассмотрим некоторые возможности фреймворка GoMicro для реализации микросервисных приложений на Go.

Читать далее

Schema Registry с Protobuf в Kafka — зачем оно надо?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров20K

Всем привет. Меня зовут Нина Пакшина, я разработчик “Лента Онлайн” и часть операционной команды в сервисе доставки продуктов.

В данной статье на примере языка Go я расскажу о том, как мы внедряли Kafka в связке с Schema Registry и Protobuf в качестве формата сообщений.

Я расскажу о том, какие появятся преимущества от использования данных технологий, а также пройдусь по подводным камням, с которыми можно столкнуться при разработке.

Читать далее

Вклад авторов