Как стать автором
Обновить
6
0
Евгений @john_soft

Разработчик

Отправить сообщение

Пишем gRPC сервис на Go — сервис авторизации

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

Пишем gRPC сервис на Go — сервис авторизации


В этой статье мы научимся писать полноценный gRPC сервис на Go на примере сервера авторизации с полноценной архитектурой, готовой к продакшену. Мы напишем как серверную часть, так и клиентскую. В качестве клиента мы возьмём мой сервис — URL Shortener, о котором у меня также есть статья и видео-гайд на ютубе. Попутно мы познакомимся с базовыми подходами к работе с авторизацией. И в конце настроим автоматический деплой сервиса с помощью GitHub Actions на удалённый сервер.


Видео-версия этого гайда с более подробными объяснениями

Исходный код проекта: https://github.com/GolangLessons/sso


Итого, наш план:


  • Напишем простой, но полноценный gRPC-сервис
  • Разберемся с базовыми принципами работы авторизации — чтобы не было скучно
  • Настроим автоматический деплой в прод — потому что руками деплоить лень
  • Подружим его с уже готовым сервисом URL Shortener — чтобы был практический смысл
  • Напишем полноценные функциональные тесты

На выходе мы получим полноценный рабочий сервис авторизации, который вы сможете по аналогии подключать к своим пет-проектам.


Кратко обо мне: меня зовут Николай Тузов, я много лет занимаюсь разработкой на Go, очень люблю этот язык. Также веду свой YouTube-канал.

Читать дальше →
Всего голосов 62: ↑60 и ↓2+66
Комментарии44

Имплементируем WebSocket протокол на Go

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

Статья для тех, кто хочет познакомиться с устройством технологии WebSocket или языком программирования Go.

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

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

WebSocket в Go и причем тут горилла

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

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

WebSocket позволяет открыть интерактивный коммуникационный сеанс между пользовательским браузером и сервером. Здесь большое отличие от традиционного HTTP, который ограничен моделью запрос-ответ и не подходит для сценариев, требующих постоянного обмена данными

Go с помощью своей простоты и поддержкой конкурентности становится хорошим кандидатом для работы с WebSocket.

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

Миллион WebSocket и Go

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

image


Привет всем! Меня зовут Сергей Камардин, я программист команды Почты Mail.Ru.


Это статья о том, как мы разработали высоконагруженный WebSocket-сервер на Go.


Если тема WebSocket вам близка, но Go — не совсем, надеюсь, статья все равно покажется вам интересной с точки зрения идей и приемов оптимизации.

Читать дальше →
Всего голосов 119: ↑115 и ↓4+111
Комментарии78

eBPF в production-условиях

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

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

Данный материал подготовлен на базе выступления “eBPF в production-условиях” от Дмитрия Евдокимова и Александра Трухина из компании Luntry с конференции HighLoad++ 2022. Он будет полезен как компаниям, что используют внутри себя решения на базе eBPF, так и разработчикам, которые что-то пишут или планируют писать с использованием данной технологии.

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

Ручное управление памятью в языке Go

Время на прочтение12 мин
Количество просмотров12K
Привет, Хабр!

Наши читатели не могли не заметить нашего растущего интереса к языку Go. Наряду с книгой из предыдущего поста, у нас найдется на эту тему немало интересного. Сегодня мы хотим предложить вам перевод материала «для профи», в котором демонстрируются интересные аспекты ручного управления памятью на Go, а также одновременное выполнение операций над памятью на Go и C++.
Читать дальше →
Всего голосов 15: ↑13 и ↓2+13
Комментарии6

Механизмы выделения памяти в Go

Время на прочтение11 мин
Количество просмотров39K
Когда я впервые попытался понять то, как работают средства выделения памяти в Go, то, с чем я хотел разобраться, показалось мне таинственным чёрным ящиком. Как и в случае с любыми другими технологиями, самое важное здесь скрывается за множеством слоёв абстракций, сквозь которые нужно пробраться для того, чтобы что-то понять.



Автор материала, перевод которого мы публикуем, решил добраться до сути средств выделения памяти в Go и рассказать об этом.
Читать дальше →
Всего голосов 42: ↑36 и ↓6+30
Комментарии2

Автоматизация Для Самых Маленьких. Часть 1.1. Основы виртуализации

Время на прочтение15 мин
Количество просмотров44K
Предыдущая статья рассматривала архитектуру виртуализированной сети, underlay-overlay, путь пакета между VM и прочее.
Роман Горге вдохновился ею и решил написать обзорный выпуск о виртуализации вообще.

В данной статье мы затронем (или попытаемся затронуть) вопросы: а как собственно происходит виртуализация сетевых функций, как реализован backend основных продуктов, обеспечивающих запуск и управление VM, а также как работает виртуальный свитчинг (OVS и Linux bridge).

Тема виртуализации широка и глубока, объяснить все детали работы гипервизора невозможно (да и не нужно). Мы ограничимся минимальным набором знаний необходимым для понимания работы любого виртуализированного решения, не обязательно Telco.



Содержание


  • Введение и краткая история виртуализации
  • Типы виртуальных ресурсов — compute, storage, network
  • Виртуальная коммутация
  • Инструменты виртуализации — libvirt, virsh и прочее
  • Заключение




Читать дальше →
Всего голосов 26: ↑25 и ↓1+24
Комментарии8

Дженерики в Go: когда нужны и когда можно без них

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

Много раз при обсуждении преимуществ и прелестей Go, как языка разработки, мне приходилось слышать что-то вроде «у вас даже нет дженериков» или «вот завезут дженерики, тогда и поговорим». Так вот, дженерики завезли, давайте посмотрим что из этого вышло. 

Меня зовут Павел Грязнов. Я уже несколько лет пишу на Go в прод, хотя знакомство с языком начал с самых ранних версий. Видел как Garbage Collector мог сделать stop the world на пару секунд, страдал от отсутствия системы зависимостей и других проблем. В этой статье я расскажу о дженериках в Go. Начнём с самых основ, продолжим более продвинутыми примерами и закончим бенчмарками.

Чтобы лучше показать работу дженериков на контрасте, я сравню примеры их использования на двух языках — Python и Go. C Python последний раз работал слишком давно, поэтому вторую часть доклада мне помогли сделать коллеги из Evrone. Пойдем по порядку: разберем, для чего нужны дженерики и какие задачи они решают. Посмотрим, как выглядит мир без дженериков, на их синтаксис, ограничения, бенчмарки и немного затронем функциональное программирование.

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

Как запускать SQL в Go с максимальным комфортом

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

Писать SQL руками или использовать ORM — тема очень спорная, и я опишу, как использовать первый подход максимально эффективно. А какой из подходов выбрать, думаю, каждый сам для себя уже решил.

Читать далее
Всего голосов 36: ↑34 и ↓2+43
Комментарии9

Go's Garbage Collection: как работает и почему это важно знать

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

В статье посмотрим на Go Garbage Collector — механизм автоматического освобождения невостребованной памяти приложения в Go. Разберём его устройство и принципы работы.

Читать далее
Всего голосов 22: ↑18 и ↓4+17
Комментарии13

Организация «чистого» завершения приложений на Go

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


Здравствуйте, в данной заметке будет затронута тема организации «чистого» завершения для приложений, написанных на языке Go.
Чистым выходом я называю наличие гарантий того, что в момент завершения процесса (по сигналу или по любым иным причинам кроме system failure), будут выполнены определённые процедуры и выход будет отложен до окончания их выполнения. Далее я приведу несколько типичных примеров, расскажу о стандартном подходе, а также продемонстрирую свой пакет для упрощённого применения этого подхода в ваших программах и сервисах.

TL;DR: github.com/xlab/closer GoDoc
Читать дальше →
Всего голосов 53: ↑48 и ↓5+43
Комментарии10

Эффективное хранение: как мы из 50 Пб сделали 32 Пб

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

Видео доклада




Текстовая Версия


Изменения курса рубля два года назад заставили нас задуматься о способах снижения стоимости железа для Почты Mail.Ru. Нам понадобилось уменьшить количество закупаемого железа и цену за хостинг. Чтобы найти, где сэкономить, давайте посмотрим, из чего состоит почта.


Индексы и тела писем составляют 15 % объёма, файлы — 85 %. Место для оптимизаций надо искать в файлах (аттачах в письмах). На тот момент у нас не была реализована дедупликация файлов; по нашим оценкам, она может дать экономию в 36 % всего объёма почты: многим пользователям приходят одинаковые письма (рассылки социальных сетей с картинками, магазинов с прайсами и т.д.). В этом посте я расскажу про реализацию такой системы, сделанной под руководством PSIAlt.
Всего голосов 87: ↑84 и ↓3+81
Комментарии88

Сеть контейнеров — это не сложно

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

Работа с контейнерами многим кажется волшебством, пришло время разобраться как работает сеть Docker. Мы покажем на примерах, что это совсем не сложно. Нам потребуется немного сетевой магии и никакого кода...

В этой статье мы ответим на следующие вопросы:

Как виртуализировать сетевые ресурсы, чтобы контейнеры думали, что у каждого из них есть выделенный сетевой стек?

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

Как настроить сетевой доступ из контейнера во внешний мир (например, в Интернет)?

Как получить доступ к контейнерам, работающим на сервере, из внешнего мира (публикация портов)?

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

Создаём с нуля высоконагруженное приложение на Tarantool

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

image


В 2013 я пришел в Mail.ru Group, и я решал задачу, в которой мне нужна была очередь. Есть много разных инструментов для построения очередей, но я решил для начала узнать, что уже имеется в компании. Услышал, что есть такой продукт — Tarantool. Узнал, как он устроен, и мне показалось, что в него отлично может быть встроен брокер очередей.


Я пошёл к главному по Tarantool — Косте Осипову — и постарался объяснить, что я хочу получить. Предполагалось, что код очереди будет написан на C, как и остальной код Tarantool, но… На следующий день Костя дал мне скрипт на 250 строк, который реализовывал почти всё, что я хотел.


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


Прошло много времени, Tarantool развивался, в том числе и под влиянием наших запросов, но основные идеи и подходы сохранились. Я расскажу, как реализовать собственную очередь на современном Tarantool, например версии 2.2.

Читать дальше →
Всего голосов 32: ↑29 и ↓3+43
Комментарии8

Архитектура in-memory СУБД: 10 лет опыта в одной статье

Время на прочтение14 мин
Количество просмотров24K
image

База данных в оперативной памяти — понятие не новое. Но оно слишком плотно ассоциируется со словами «кэш» и «не персистентный». Сегодня я расскажу, почему это не обязательно так. Решения в памяти имеют гораздо более широкое поле применения и гораздо более высокий уровень надежности, чем кажется на первый взгляд.

В статье я рассуждаю об архитектурных принципах решений в оперативной памяти. Как можно взять лучшее от in-memory мира — производительность невероятного уровня — и не жертвовать достоинствами дисковых реляционных систем. В первую очередь, надежность — как можно быть уверенным в сохранности данных.

Этот рассказ сжимает 10 лет опыта работы с in-memory решениями в один текст. Порог входа максимально низкий. Чтобы получить пользу от прочтения, вам не нужно иметь столько же лет опыта, достаточно базового понимания IT.
Читать дальше →
Всего голосов 57: ↑57 и ↓0+57
Комментарии18

Введение в Puppet

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

Puppet — это система управления конфигурацией. Он используется для приведения хостов к нужному состоянию и поддержания этого состояния.


Я работаю с Puppet уже больше пяти лет. На мой взгляд, его официальная документация хороша для тех, кто уже знаком с Puppet, а для новичка она сложна — сразу даётся много новых терминов; непонятно, в каком порядке читать. Эта статья — по сути переведённая компиляция ключевых моментов из официальной документации, которая позволит новичкам быстро вникнуть в суть Puppet. Я переупорядочил информацию, чтобы постепенно рассказать про все сущности и термины.


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

Приложения для Tarantool. Часть 1. Хранимые процедуры

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

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


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


Tarantool — это NoSQL база данных, которая хранит данные в памяти либо на диске (в зависимости от подсистемы хранения). Хранилище персистентно за счет продуманного механизма write ahead log. В Tarantool встроен LuaJIT (Just-In-Time Compiler), позволяющий исполнять код на Lua. Также можно писать хранимые процедуры на C.


image

Читать дальше →
Всего голосов 65: ↑64 и ↓1+63
Комментарии13

i18n в Go: работа с переводами — Часть 2

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

В предыдущей части мы реализовали в нашем приложении базовый функционал перевода сообщений. Теперь давайте сделаем что-то более сложное — разберемся, как работать с переводами, содержащими переменные.

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

i18n в Go: работа с переводами — Часть 1

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

Недавно мне впервые довелось создавать полностью интернационализированное (i18n) и локализированное (L10n) веб-приложение, в котором я задействоал набор пакетов Go golang.org/x/text. Я обнаружил, что пакеты и инструменты, собранные в golang.org/x/text, невероятно полезны и очень хорошо спроектированы. Однако мне было довольно сложно понять, как объединить все это вместе в реальном приложении.

В этом руководстве я постараюсь объяснить, как вы можете использовать golang.org/x/text для работы с переводами в вашем приложении.

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

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность