Как стать автором
Обновить
102.68

Go *

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

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

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 2

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

Вторая часть статьи, в которой Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик» рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Статья состоит из 5 частей, которые будут выходить по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее
Всего голосов 1: ↑1 и ↓0+1
Комментарии0

Новости

Проверка готовности приложения к работе в реальном ненадежном мире. Часть 1

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

Опытом делится Виталий Лихачёв, SRE в booking.com и спикер курса Слёрма «Golang-разработчик». Он рассказывает, о чём стоит подумать перед выкаткой сервиса в жестокий прод, где он может не справиться с нагрузкой или деградировать из-за резких всплесков при наплыве пользователей и по вечерам.

Считайте это некоторым чек-листом, но не применяйте все пункты as is, потому что каждая система уникальна и иногда вполне допустимо построить менее надежную систему с целью значительного сокращения затрат на разработку, поддержку и эксплуатацию (например, отсутствие резервирования). Однако бэкапы обязательно должны быть 🙂

Некоторые термины не будем переводить не в силу лени автора, а в силу устойчивости терминов в литературе.

Отдельные пункты внимательный читатель может отнести сразу к нескольким разделам верхнего уровня. Поэтому деление на подгруппы довольно условное.

Если возникнет вопрос, а почему не описан некоторый X в чек-листе, то ответ простой: статья и так получилась огромной, и вы вероятно сможете найти что-то полезное для себя.

Статья состоит из 5 частей, которые будут выходить по очереди:

1. Надежность.

2. Масштабируемость/отказоустойчивость.

3. Resiliency/отказоустойчивость.

4. Безопасность. Процесс разработки. Процесс выкатки.

5. Наблюдаемость. Архитектура. Антипаттерны.

Читать далее
Всего голосов 10: ↑9 и ↓1+8
Комментарии2

Погружение в интерфейсы Go

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

Интерфейсы — одна из самых сложных тем для начинающих в Go. Я решил тщательно разобраться с этой темой и одновременно написать эту статью. После прочтения этой статьи вы сможете ответить на следующие вопросы:
Что такое интерфейс? Что такое значение интерфейса? Что такое пустой интерфейс? Почему nil-интерфейс не равен nil? Где разместить интерфейс? Какая структура интерфейса?

Читать далее
Всего голосов 13: ↑12 и ↓1+13
Комментарии7

Делаем форму обратного звонка: лендинг, Go и SMS-уведомления

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

Привет, Хабр! Меня зовут Екатерина Саяпина, я Product Owner личного кабинета платформы МТС Exolve. Сегодня расскажу, как создать простую, но эффективную форму обратного звонка с SMS-уведомлениями. Дам пример для сценария, когда клиент оставляет заявку через форму, а менеджер связывается с ним через Callback API. После успешного разговора система автоматически отправляет SMS через SMS API с подтверждением договоренностей и следующими шагами.

SMS-уведомления здесь играют роль надежного канала для закрепления результатов разговора и напоминания о договоренностях. Они не требуют интернета или установки приложений и работают везде, даже при слабом сигнале связи.

Причем пример будет без громоздких фреймворков — только Go и чистый HTML с щепоткой JavaScript.

Читать далее
Всего голосов 10: ↑9 и ↓1+16
Комментарии2

Истории

Строим микрокernel на Golang

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

Привет, Хабр! Сегодня рассмотрим, как построить гибкую и масштабируемую систему с использованием микрокernel архитектуры на Golang.

Перед тем как взяться за код, разберёмся, о чём вообще идёт речь. Микрокernel — это архитектурный стиль, при котором минимальное ядро системы отвечает за основные функции: управление процессами, памятью, коммуникациями и т.д., а всё остальное делегируется в виде отдельных модулей или сервисов.

Почему стоит использовать микрокernel? Простота модификации, высокая степень изоляции компонентов и легкость масштабирования — лишь малая часть преимуществ.

Читать далее
Всего голосов 9: ↑6 и ↓3+7
Комментарии8

Лёгкости перехода: четыре разработчика о том, почему они перешли на Go

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

Микросервисная архитектура — это новый черный: кажется, уже все бигтехи пилят монолиты на сервисы и и ищут гошников в штат. Спрос рождает предложение — всё больше ребят переходят с других бэкенд-языков на Golang. 

Мы попросили наших разработчиков поделиться своим опытом перехода на Go и рассказать, почему они решили освоить новый язык программирования, какие плюсы и минусы видят в нём, дал ли переход на Go буст в новых карьерных возможностях и кому и в каких случаях они бы они советовали освоить golang. 

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

Читать далее
Всего голосов 14: ↑8 и ↓6+4
Комментарии13

Golang + Redux

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

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

Сегодня мы попробуем реализовать управление состоянием в Go‑приложениях с помощью паттерна Redux. Да‑да, Redux не только для JS.

Redux — это предсказуемый контейнер состояния для приложений. Он помогает управлять состоянием приложения централизованно, делая его более предсказуемым и удобным для отладки. В основном Redux ассоциируется с фронтендом на JavaScript, но принципы, лежащие в его основе, иногда могут подойти и для Go‑приложений.

Читать далее
Всего голосов 8: ↑4 и ↓4+3
Комментарии4

Как мы внедрили CockroachDB на DBaaS в компанию классических СУБД

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

Привет! Меня зовут Полина Кудрявцева, я инженер DBA в Авито. В этой статье я расскажу о том, как мы внедрили CockroachDB на DBaaS в компанию классических СУБД, а также опишу его плюсы, минусы и особенности работы.

Читать далее
Всего голосов 21: ↑21 и ↓0+23
Комментарии3

Приложение на Go шаг за шагом. Часть первая: скелет, НТТР-сервер и конфигурация

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

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

Привет! Я Владислав Попов, автор курса «Go-разработчик с нуля» в Яндекс Практикуме. В серии статей я хочу помочь начинающим разработчикам упорядочить знания и написать приложение на Go с нуля: мы вместе пройдём каждый шаг и создадим API для получения информации о книгах и управления ими. 

Читать далее
Всего голосов 10: ↑8 и ↓2+8
Комментарии6

Как писать качественные unit-тесты: процент покрытия, мутанты и работа с моками

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

Привет, Хабр! Меня зовут Марина, я Backend-инженер в компании Авито. Сегодня я хочу поделиться собственными рекомендациями, к которым удалось прийти при работе над качеством тестового покрытия сервисов нашей команды.

Читать далее
Всего голосов 12: ↑11 и ↓1+16
Комментарии21

Паттерны проектирования Go. Fan-in

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

Доброго времени суток!

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

В этой статье хочется немного поговорить о паттернах, которые применяются в Go. Поэтому рассмотрим, так называемый, fan-in: попишем немного код и unit-тест.

Читать далее
Всего голосов 3: ↑3 и ↓0+3
Комментарии2

Вопросы по мэпам (map) в Go

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

Пару недель назад я собрал в статейку несколько базовых вопросов по массивам и слайсам - и в комментариях было предложено "а теперь надо про мэпы". Хорошая мысль - мы пользуемся ими почти на "интуитивном" уровне и о некоторых нюансах не задумываемся. Довольно много статей посвящено сверхподробному изложению внутреннего устройства - это мы пропустим. А посмотрим на мэпы так сказать "снаружи", с точки зрения их использования. Для знатоков тут вряд ли будет что-то новенькое, а тем кто недавно в языке всё-таки может послужить небольшим "чек-листом" :)

Мы используем жаргонный термин "мэпа" (она же "мапа") вместо того чтобы писать по-английски "map" чисто ради того чтобы иметь возможность пользоваться свойственными русскому языку падежными окончаниями для большей связности текста.

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии5

Как создать систему страшных звонков на Хэллоуин на Go и Exolve Voice API

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

Хэллоуин — это время костюмов, конфет и, конечно же, легких розыгрышей. И что может быть лучше, чем отправить друзьям и знакомым жуткие автоматические звонки со страшными аудиосообщениями? В этой статье рассмотрим, как с помощью Exolve Voice API и Go можно создать систему для отправки пугающих звонков.

Читать далее
Всего голосов 10: ↑9 и ↓1+10
Комментарии3

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

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Микросервисы: Почему именно gRPC?

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

Архитектура микросервисов широко распространена в современном программировании. Благодаря этой архитектуре разработчики смогут самостоятельно разрабатывать сервисы и управлять ими. Однако очень важно выбрать правильный протокол для эффективного взаимодействия между микросервисами. Здесь протокол gRPC (Google Remote Treatment Call) выделяется своей высокой эффективностью и скоростью. В этой статье мы предоставим подробную информацию о RPC и gRPC, рассмотрим преимущества gRPC в архитектурах микросервисов и продемонстрируем их различия на примерах кода на языке программирования Go.

Читать далее
Всего голосов 22: ↑3 и ↓19-12
Комментарии28

Sidecar на Go: позволь другому заниматься твоими проблемами

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

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

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

Сегодня мы рассмотрим реализацию Sidecar на Golang.

Читать далее
Всего голосов 19: ↑17 и ↓2+20
Комментарии1

Как я отказался от оффера

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

Вы, наверное, хотите сказать: "Ну отказался и отказался, что тут такого?". Чтобы добавить контекста, расскажу немного о себе. Ещё год назад я новоиспечённый гофер, только начинаю познавать основы языка, делаю свои первые пет-проекты и начинаю делать свои первые отклики. Естественно получаю кучу отказов. В тот момент я готов хвататься за любые возможности, лишь бы получить бесценный коммерческий опыт, даже работать бесплатно. По сути обучение и самообразование - это такая же неоплачиваемая работа. Если бы тогда я получил подобное предложение, я бы не смел отказаться и согласился бы на любые условия. Забавно, как быстро растут аппетиты, когда знаешь себе цену и на что ты способен.

Читать далее
Всего голосов 60: ↑36 и ↓24+18
Комментарии183

Развлекаемся с итераторами в Go

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

Релиз версии Go 1.23 добавил поддержку итераторов и пакет iter. Теперь можно перебирать константы, контейнеры (map, slice, array, string) и функции. Сначала создание итератора показалось мне неудобным, хотя в то же время его использование выглядело простым.

Моя проблема с подходом к итераторам в Go заключается в том, что их нельзя «связывать» так,как это можно делать в JavaScript:

Читать далее
Всего голосов 10: ↑10 и ↓0+12
Комментарии3

Сравнение двух функций в Go с указателями и без

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

Меня часто спрашивают, почему указатели лучше? Шёрт побери, вот почему!

Описание функций меняющих местами значения переменных:

1. Функция с указателями:

Читать далее
Всего голосов 16: ↑2 и ↓14-9
Комментарии7

Паттерны многопоточности в Go

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

В этой статье я постараюсь рассказать о том как их компоновать в самые популярные паттерны для поддержки масштабируемости и удобства сопровождения будущих систем.Почему же многопоточность так важна? Сегодняшние приложения должны быть быстрыми и отзывчивыми, а для этого нужно выполнять множество задач одновременно. 

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

Читать далее
Всего голосов 24: ↑22 и ↓2+25
Комментарии12

Создание кастомного Kubernetes Scheduler для StatefulSet

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

В этой статье мы рассмотрим процесс создания кастомного scheduler'а для Kubernetes, ориентируясь на Kubernetes Scheduling Framework.

Обычно для назначения подов на вычислительные узлы используется стандартный планировщик, который, проанализировав различные параметры, автоматически выполнит оптимальное размещение (например, распределит поды таким образом, чтобы не размещать их на вычислительных узлах с недостаточными ресурсами).

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

Schedule Reading
Всего голосов 5: ↑5 и ↓0+7
Комментарии2
1
23 ...

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

Работа

Go разработчик
123 вакансии