Миллионы пользователей ежедневно заходят на Яндекс Маркет. И одна из ключевых задач сервиса — показывать им точные сроки доставки на поиске и в корзине. При пиковых нагрузках это около 40 тысяч запросов в секунду. Как обеспечить столь быструю и точную обработку данных о доставке?
Рубрика «golang»
Так ли плох Go в глазах C++ разработчика: пишем микросервис и учимся на ошибках
2025-01-17 в 9:15, admin, рубрики: golang, grpc, sync.Pool, аллокация, высокая нагрузка, концепции, подходы, профилирование, слайсы, указателиКогда слайсы начинают расти
2025-01-16 в 9:15, admin, рубрики: array, Go, golang, slice, массивы, Программирование, слайсыВведение
Я не применяю Go в коммерческой разработке, я недавно начал изучать и применять этот язык для пет-проектов и разного рода опытов. В этой статье речь пойдёт о слайсах. Пример, который мы будем рассматривать, мне показал коллега, за что ему большое спасибо.
Что такое "слайс"?
Говоря простым языком, слайсы — это надстройка, интерфейс над массивами, который позволяет нам более гибко с ними работать. Мы можем работать со слайсом как с динамическим массивом: добавлять или удалять элементы, то есть менять его размер. При этом под каждым слайсом содержится базовый массив строго определённой длины.
Отмена defer вызова функции в Golang
2024-12-26 в 18:15, admin, рубрики: defer, golang, golang defer, методы, отложенные функции, паттерны, функцииНедавно столкнулся с такой проблемой, что не всегда приходиться выполнять defer вызов функции. Те кто знают, как работает defer можете листать вниз до реализации моего паттерна.
Представьте, что у вас есть 10 кейсов, в одном из которых не вам не нужен вызов defer func. Что же тогда делать......
Оператор defer помещает вызов функции в список. Список сохраненных вызовов выполняется после того, как возвращается функция. Defer обычно используется для упрощения функций, выполняющих различные действия по очистке.
package main
import "fmt"
func foo(){
defer fmt.Println("Deffered out")
fmt.Println("End of func")
}
func main(){
foo()
}
Результат:
End of func
Читать полностью »
Умение работать с пакетом context является очень важным: его использование в Golang пронизывает весь код, но не смотря на это очень часто он используется формально. Контекст создается (иногда непосредственно перед вызовом функции), передается из одной функции в другую и дальше по цепочке. Для чего это делается, в чем конечная цель? Для того, чтобы ответить на этот вопрос необходимо сделать шаг назад и опереться на знания о каналах, горутинах и шаблонах работы с ними.
Конвейеризация: универсальный способ повышения пропускной способности
2024-12-02 в 19:15, admin, рубрики: golang, latency, pipeline, throughput, архитектура приложений, архитектура процессоров, архитектура систем, конвейер, микросервисы, пропускная способностьЧто общего между стиральной машиной, CPU и микросервисами? Все они выигрывают от «конвейеризации» (англ. pipelining).
Как писать качественные unit-тесты: процент покрытия, мутанты и работа с моками
2024-10-30 в 5:15, admin, рубрики: golang, gomock, qa, testing, качество, моки, мутационное тестирование, юнит-тестыПривет! Меня зовут Марина, я Backend-инженер в компании Авито. Сегодня я хочу поделиться собственными рекомендациями, к которым удалось прийти при работе над качеством тестового покрытия сервисов нашей команды.
Итак, дело было давным-давно, у нас было пять сервисов, около 70% покрытия, интеграционные тесты... и всё равно баги оставались неуловимыми. Шутка, конечно, все куда проще. Процент покрытия и правда выглядел неплохо, но почему тогда мы решили что-то менять?
В чём подвох процента покрытия?
Микросервисы: Почему именно gRPC?
2024-10-25 в 9:32, admin, рубрики: golang, grpc, Microservices, protobuf, RPCАрхитектура микросервисов широко распространена в современном программировании. Благодаря этой архитектуре разработчики смогут самостоятельно разрабатывать сервисы и управлять ими. Однако очень важно выбрать правильный протокол для эффективного взаимодействия между микросервисами. Здесь протокол gRPC (Google Remote Treatment Call) выделяется своей высокой эффективностью и скоростью. В этой статье мы предоставим подробную информацию о RPC и gRPC, рассмотрим преимущества gRPC в архитектурах микросервисов и продемонстрируем их различия на примерах кода на языке программирования Go.
Как подружить Gorm и PostGIS, решение промышленного уровня
2024-09-30 в 10:15, admin, рубрики: geolocation, golang, gorm, postgis, postgres, геоданныеGORM Фантастическая ORM для Golang.
PostGIS расширяет возможности реляционной базы данных PostgreSQL , добавляя поддержку хранения, индексирования и запросов геопространственных данных.
В этой статье поделимся своим опытом интеграции GORM и PostGIS, сложностями при попытке использования gorm для работы с геометрическими данными и конечно предлагаем готовое решение.
Изначально эта статья была опубликована здесь.
Задача
Реализация микросервиса, отвечающего за работу с геоданными:Читать полностью »
Особенности трудоустройства в 2024 (golang)
2024-09-30 в 6:15, admin, рубрики: backend, golang, рекрутинг, трудоустройство, трудоустройство в itЗа свои 15+ лет в разработке я прошёл наверное 100+ собеседований — и почти четверть из них в этом году, в течение последнего месяца:) Что‑то необычное происходит — подумал я — и решил поделиться наблюдениями — может вы тоже что‑то заметили? А может это просто кому‑то чуть поможет в поиске работы или наоборот в рекрутинге.
Бэкграунд
Всем привет, этой мой первый пост на данной платформе, прошу любить и жаловать.
Трассировка — это важный инструмент для мониторинга и диагностики микросервисов. Она позволяет понять, как запросы проходят через систему, где возникают узкие места, и как взаимодействуют различные компоненты приложения. В этой статье я расскажу про свой опыт, как интегрировал трассировку в сервис на Go, использующий GORM.