В хабе на Хабр «Разработка публичных облаков» — свежие статьи
от инженеров MWS Cloud Platform⬜️ .
Ценности решают. Как пять принципов помогли вырасти с 150 до 520 человек и запустить IaaS за год.
Binapi и VPP. Программируем SR Policy на Go, разбираем грабли и показываем рабочий прототип для traffic engineering.
Control plane под замком. Зачем прятать мастера Kubernetes и какие решения мы протестировали в Managed Kubernetes.
SPDK для VM. Почему стандартного QEMU мало и как мы ускоряли диски в публичном облаке.
eBPF & Security. Новые возможности для Cilium и Falco и новые риски: атаки на maps, io_uring и rootkits.
🔗 Подпишись на облачный хаб MWS — там регулярно рассказываем, как строим новое облако с нуля.
от инженеров MWS Cloud Platform
Ценности решают. Как пять принципов помогли вырасти с 150 до 520 человек и запустить IaaS за год.
Binapi и VPP. Программируем SR Policy на Go, разбираем грабли и показываем рабочий прототип для traffic engineering.
Control plane под замком. Зачем прятать мастера Kubernetes и какие решения мы протестировали в Managed Kubernetes.
SPDK для VM. Почему стандартного QEMU мало и как мы ускоряли диски в публичном облаке.
eBPF & Security. Новые возможности для Cilium и Falco и новые риски: атаки на maps, io_uring и rootkits.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Tetrigo
Играйте в Тетрис на своём терминале.
Реализация Тетриса на Golang, соответствующая официальному руководству по дизайну Тетриса 2009 года.
https://github.com/Broderick-Westrope/tetrigo
👉 @golang_lib
Играйте в Тетрис на своём терминале.
Реализация Тетриса на Golang, соответствующая официальному руководству по дизайну Тетриса 2009 года.
https://github.com/Broderick-Westrope/tetrigo
👉 @golang_lib
👍6
Советы по созданию приложений Bubble Tea
По словам его создателей, Bubble Tea — это «мощный небольшой TUI-фреймворк» для Go. Он, может быть, и небольшой, но мне пришлось изрядно попотеть, прежде чем я смог по-настоящему освоить его мощь. Я провёл много ночей, борясь с неисправными раскладками и неотзывчивыми клавишами, прежде чем на собственном горьком опыте понял, где я ошибался. Результатом моих усилий стал PUG, полноэкранный терминальный интерфейс для управления Terraform:
https://leg100.github.io/en/posts/building-bubbletea-programs/
👉 @golang_lib
По словам его создателей, Bubble Tea — это «мощный небольшой TUI-фреймворк» для Go. Он, может быть, и небольшой, но мне пришлось изрядно попотеть, прежде чем я смог по-настоящему освоить его мощь. Я провёл много ночей, борясь с неисправными раскладками и неотзывчивыми клавишами, прежде чем на собственном горьком опыте понял, где я ошибался. Результатом моих усилий стал PUG, полноэкранный терминальный интерфейс для управления Terraform:
https://leg100.github.io/en/posts/building-bubbletea-programs/
👉 @golang_lib
🗑 Сборщик мусора в Go — тема, которая кажется скучной, пока ваше приложение не начинает “есть” память, тормозить и загадочно падать в проде.
📗 На открытом уроке мы разберём, как устроен GC: от триколорной маркировки до последних улучшений в новых версиях языка. Мы покажем, как измерить и проанализировать работу сборщика с помощью GODEBUG и pprof, а также разберём практические приёмы снижения нагрузки — от оптимизации указателей до пулов объектов.
❗️ Поймёте, как Golang взаимодействует с системой и где скрываются узкие места, влияющие на производительность. После урока сможете писать код, который не “утекает”.
Регистрируйтесь 📆 21 октября в 19:00 МСК и разберитесь, как приручить сборщик мусора, а не бороться с ним: https://vk.cc/cQnOrz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📗 На открытом уроке мы разберём, как устроен GC: от триколорной маркировки до последних улучшений в новых версиях языка. Мы покажем, как измерить и проанализировать работу сборщика с помощью GODEBUG и pprof, а также разберём практические приёмы снижения нагрузки — от оптимизации указателей до пулов объектов.
❗️ Поймёте, как Golang взаимодействует с системой и где скрываются узкие места, влияющие на производительность. После урока сможете писать код, который не “утекает”.
Регистрируйтесь 📆 21 октября в 19:00 МСК и разберитесь, как приручить сборщик мусора, а не бороться с ним: https://vk.cc/cQnOrz
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤1👍1
Go Beyond: Создание высокопроизводительных и надёжных приложений на Golang
Представьте себе: вы находитесь в атмосфере военной переговорной. Напряжение витает в воздухе, пока ваша команда разработки и вы сами лихорадочно пытаетесь разобраться со внезапным всплеском OOM-проблем, поразивших контейнеры вашего приложения. Кажется, что утечек памяти нет, но дальнейшее расследование раскрывает шокирующую правду: сборщик мусора (GC) не запускался тогда, когда должен был! Этот критически важный процесс очистки не освободил память до того, как её использование превысило жёсткий лимит контейнера, вызвав те самые ненавистные OOM-события.
https://blog.zomato.com/go-beyond-building-performant-and-reliable-golang-applications
👉 @golang_lib
Представьте себе: вы находитесь в атмосфере военной переговорной. Напряжение витает в воздухе, пока ваша команда разработки и вы сами лихорадочно пытаетесь разобраться со внезапным всплеском OOM-проблем, поразивших контейнеры вашего приложения. Кажется, что утечек памяти нет, но дальнейшее расследование раскрывает шокирующую правду: сборщик мусора (GC) не запускался тогда, когда должен был! Этот критически важный процесс очистки не освободил память до того, как её использование превысило жёсткий лимит контейнера, вызвав те самые ненавистные OOM-события.
https://blog.zomato.com/go-beyond-building-performant-and-reliable-golang-applications
👉 @golang_lib
👍1
Media is too big
VIEW IN TELEGRAM
Ты не все знаешь о массивах и слайсах в Go
Таймкоды:
00:00 - Введение
00:47 - Устройство массивов в Go
01:40 - Работа с массивами в Go
10:00 - Перемещение массива в стеке
11:29 - Итерация по массивам в Go
15:11 - Где аллоцируются массивы в Go
17:22 - Педедача массива в функцию
18:16 - Слайсы в Go
21:34 - Реаллокация слайса в Go
24:45 - Резервирование памяти под слайс
25:44 - Создание слайса без инициализации
27:38 - Модификация строк в Go
28:35 - Приведение слайсов в строки и обратно без копирования
30:13 - Передача слайса в функцию
31:12 - Итерация по слайсам в Go
33:55 - Оптимизация итерации по слайсам в Go
35:42 - Получение слайсов в Go
42:40 - Получение слайса из массива в Go
43:15 - Конвертация слайса в массив в Go
44:15 - Конвертация слайса в указатель на массив в Go
45:02 - Указатель на нулевой массив в Go
46:18 - Удаление из конца слайса в Go
46:51 - Удаление из начала слайса в Go
49:02 - Реализация стека и очереди в Go
50:00 - Как увеличить размер слайса в Go
50:48 - Как уменьшить емкость слайса в Go
54:05 - Где аллоцируются слайсы в Go
59:12 - Как очистить слайс в Go
01:01:51 - В чем разница пустых и нулевых слайсов в Go
01:05:17 - Как сравнивать слайсы в Go
01:07:53 - Как скопировать данные слайса в Go
01:09:47 - Почему функция appeng возвращает слайсв в Go
01:12:39 - Потенциальные проблемы с функцией append в Go
01:14:10 - Реализация функции append в Go
01:15:32 - Утечки памяти при работе со слайсами в Go
01:21:59 - Курс по глубокому Go
источник
👉 @golang_lib
Таймкоды:
00:00 - Введение
00:47 - Устройство массивов в Go
01:40 - Работа с массивами в Go
10:00 - Перемещение массива в стеке
11:29 - Итерация по массивам в Go
15:11 - Где аллоцируются массивы в Go
17:22 - Педедача массива в функцию
18:16 - Слайсы в Go
21:34 - Реаллокация слайса в Go
24:45 - Резервирование памяти под слайс
25:44 - Создание слайса без инициализации
27:38 - Модификация строк в Go
28:35 - Приведение слайсов в строки и обратно без копирования
30:13 - Передача слайса в функцию
31:12 - Итерация по слайсам в Go
33:55 - Оптимизация итерации по слайсам в Go
35:42 - Получение слайсов в Go
42:40 - Получение слайса из массива в Go
43:15 - Конвертация слайса в массив в Go
44:15 - Конвертация слайса в указатель на массив в Go
45:02 - Указатель на нулевой массив в Go
46:18 - Удаление из конца слайса в Go
46:51 - Удаление из начала слайса в Go
49:02 - Реализация стека и очереди в Go
50:00 - Как увеличить размер слайса в Go
50:48 - Как уменьшить емкость слайса в Go
54:05 - Где аллоцируются слайсы в Go
59:12 - Как очистить слайс в Go
01:01:51 - В чем разница пустых и нулевых слайсов в Go
01:05:17 - Как сравнивать слайсы в Go
01:07:53 - Как скопировать данные слайса в Go
01:09:47 - Почему функция appeng возвращает слайсв в Go
01:12:39 - Потенциальные проблемы с функцией append в Go
01:14:10 - Реализация функции append в Go
01:15:32 - Утечки памяти при работе со слайсами в Go
01:21:59 - Курс по глубокому Go
источник
👉 @golang_lib
❤3👍2🔥1
😨 Даже опытные Go-разработчики часто обходят стороной sync.Cond — это слишком «темная лошадка», не так ли? Но именно она может стать вашим самым точным инструментом для управления конкурентностью, если знать, как использовать её правильно.
📗 На открытом уроке вы разберёте механику этого примитива синхронизации, поймёте, чем он отличается от каналов и мьютексов, и увидите реальные примеры, где без него не обойтись.
❗️ После вебинара вы перестанете «бояться» sync.Cond, научитесь применять его для оптимизации кода и получите новые инструменты для решения задач конкурентности.
Открытый вебинар проходет 📆 20 октября в 20:00 МСК.
👉 Регистрируйтесь и разберитесь, что скрывает Golang: https://vk.cc/cQvBpK
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📗 На открытом уроке вы разберёте механику этого примитива синхронизации, поймёте, чем он отличается от каналов и мьютексов, и увидите реальные примеры, где без него не обойтись.
❗️ После вебинара вы перестанете «бояться» sync.Cond, научитесь применять его для оптимизации кода и получите новые инструменты для решения задач конкурентности.
Открытый вебинар проходет 📆 20 октября в 20:00 МСК.
👉 Регистрируйтесь и разберитесь, что скрывает Golang: https://vk.cc/cQvBpK
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
❤1
Статическая и динамическая компоновка бинарных файлов Go
Одним из главных преимуществ Go является его компилятор, который абстрагирует множество деталей от программиста и позволяет легко компилировать программу практически под любую платформу и архитектуру.
И хотя всё выглядит просто, есть определённые нюансы и несколько способов компиляции одной и той же программы, что приводит к разным типам исполняемых файлов.
В этой статье мы рассмотрим статически и динамически слинкованные исполняемые файлы, внутренние и внешние линкеры, а также изучим бинарники с помощью инструментов
https://packagemain.tech/p/golang-statically-and-dynamically-linked-binaries
👉 @golang_lib
Одним из главных преимуществ Go является его компилятор, который абстрагирует множество деталей от программиста и позволяет легко компилировать программу практически под любую платформу и архитектуру.
И хотя всё выглядит просто, есть определённые нюансы и несколько способов компиляции одной и той же программы, что приводит к разным типам исполняемых файлов.
В этой статье мы рассмотрим статически и динамически слинкованные исполняемые файлы, внутренние и внешние линкеры, а также изучим бинарники с помощью инструментов
file, ld, ldd и других.https://packagemain.tech/p/golang-statically-and-dynamically-linked-binaries
👉 @golang_lib
👍3
Одна строка — тысячи горутин: как мы поймали утечку памяти в сервисе на Go
В этом техническом разборе рассмотрим, как инженеры Harness обнаружили и исправили критическую утечку памяти в Go: переназначение переменной контекста в циклах воркеров порождало невидимые цепочки, мешавшие сборщику мусора освобождать память в тысячах горутин, из-за чего их сервис-делегат CI/CD в итоге потреблял гигабайты памяти.
https://www.harness.io/blog/the-silent-leak
👉 @golang_lib
В этом техническом разборе рассмотрим, как инженеры Harness обнаружили и исправили критическую утечку памяти в Go: переназначение переменной контекста в циклах воркеров порождало невидимые цепочки, мешавшие сборщику мусора освобождать память в тысячах горутин, из-за чего их сервис-делегат CI/CD в итоге потреблял гигабайты памяти.
https://www.harness.io/blog/the-silent-leak
👉 @golang_lib
🤷♂1👍1
23 октября(в четверг!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью на Middle Go-разработчика.
Как это будет:
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot
Реклама.
О рекламодателе.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Qrcp
Передавайте файлы по Wi-Fi с компьютера на мобильное устройство, сканируя QR-код, не отходя от терминала.
https://github.com/claudiodangelis/qrcp
👉 @golang_lib
Передавайте файлы по Wi-Fi с компьютера на мобильное устройство, сканируя QR-код, не отходя от терминала.
https://github.com/claudiodangelis/qrcp
👉 @golang_lib
👍4
Три способа оптимизировать работу с памятью на Go с помощью memory pools
Меня зовут Александр Иванов, я разрабатываю средства управления сетевыми элементами сотовой связи и пишу на языке Go в YADRO. Однажды я работал над приложением, которое испытывало пиковые нагрузки каждые 10 минут, но выполнить обработку памяти быстро мешал Garbage Collector. Чтобы решить эту проблему, я изучил несколько способов реализации memory pool и провел испытания скорости работы.
В этой статье расскажу, как уменьшить влияние GC на выполнение программы и покажу бенчмарки для разных memory pools. Объясню, какая из реализаций подойдет вашему проекту, а когда лучше не использовать memory pools и полагаться на встроенные механизмы рантайм-окружения Go.
https://habr.com/ru/companies/yadro/articles/842314/
👉 @golang_lib
Меня зовут Александр Иванов, я разрабатываю средства управления сетевыми элементами сотовой связи и пишу на языке Go в YADRO. Однажды я работал над приложением, которое испытывало пиковые нагрузки каждые 10 минут, но выполнить обработку памяти быстро мешал Garbage Collector. Чтобы решить эту проблему, я изучил несколько способов реализации memory pool и провел испытания скорости работы.
В этой статье расскажу, как уменьшить влияние GC на выполнение программы и покажу бенчмарки для разных memory pools. Объясню, какая из реализаций подойдет вашему проекту, а когда лучше не использовать memory pools и полагаться на встроенные механизмы рантайм-окружения Go.
https://habr.com/ru/companies/yadro/articles/842314/
👉 @golang_lib
👍2
🚀 1 ноября в Москве пройдет Я.Субботник по Go — митап для разработчиков и энтузиастов Go
Встречаемся в московском офисе Яндекса и на онлайн-трансляции, чтобы обсудить с коллегами все: от свежих релизов и архитектурных решений до трендов и вызовов индустрии.
В программе:
— Доклады спикеров. Старший разработчик бэкенда Яндекс Маркета Александр Никитин расскажет про трассировку логики вычислений с помощью Debug Tree, а разработчик бэкенда Плюса и Финтеха Игорь Панасюк разберет новый garbage collector в Go 1.25.
Полный список спикеров и расписание докладов доступны на сайте.
— Круглые столы с экспертами. Обсудим использование AI-инструментов, структуру проектов, highload, нетипичное применение Golang, инструменты разработки и будущее языка.
— Живое общение и нетворкинг. Общаемся с коллегами в перерывах между докладами, обсуждаем, делимся опытом и заводим полезные знакомства.
Для тех, кто не сможет посетить митап в Москве, будет доступна онлайн-трансляция докладной части.
Ознакомиться с программой и зарегистрироваться можно тут.
Встречаемся в московском офисе Яндекса и на онлайн-трансляции, чтобы обсудить с коллегами все: от свежих релизов и архитектурных решений до трендов и вызовов индустрии.
В программе:
— Доклады спикеров. Старший разработчик бэкенда Яндекс Маркета Александр Никитин расскажет про трассировку логики вычислений с помощью Debug Tree, а разработчик бэкенда Плюса и Финтеха Игорь Панасюк разберет новый garbage collector в Go 1.25.
Полный список спикеров и расписание докладов доступны на сайте.
— Круглые столы с экспертами. Обсудим использование AI-инструментов, структуру проектов, highload, нетипичное применение Golang, инструменты разработки и будущее языка.
— Живое общение и нетворкинг. Общаемся с коллегами в перерывах между докладами, обсуждаем, делимся опытом и заводим полезные знакомства.
Для тех, кто не сможет посетить митап в Москве, будет доступна онлайн-трансляция докладной части.
Ознакомиться с программой и зарегистрироваться можно тут.
👍1🔥1
Создание приложений на Go с использованием LLM
По мере того как возможности LLM (Large Language Models — большие языковые модели) и связанных инструментов, таких как модели для эмбеддингов, значительно выросли за последний год, всё больше разработчиков задумываются о внедрении LLM в свои приложения.
Поскольку LLM обычно требуют специализированного оборудования и значительных вычислительных ресурсов, их чаще всего упаковывают как сетевые сервисы, предоставляющие API для доступа. Так работают API ведущих LLM, таких как OpenAI или Google Gemini; даже инструменты для локального запуска собственных моделей, например Ollama, оборачивают LLM в REST-API для локального использования. Более того, разработчики, использующие LLM в приложениях, часто нуждаются в дополнительных инструментах вроде векторных баз данных, которые также обычно разворачиваются как сетевые сервисы.
Другими словами, приложения на базе LLM очень похожи на современные cloud-native приложения: они требуют отличной поддержки REST и RPC протоколов, высокой производительности и хорошей работы с конкурентностью. А это как раз те области, в которых Go силён, что делает его великолепным языком для создания приложений с использованием LLM.
Этот пост демонстрирует пример использования Go для простого приложения на базе LLM. Он начинается с описания задачи, которую решает демонстрационное приложение, и затем показывает несколько вариантов его реализации, использующих разные пакеты для достижения одной и той же цели. Весь исходный код примеров доступен онлайн.
https://go.dev/blog/llmpowered
👉 @golang_lib
По мере того как возможности LLM (Large Language Models — большие языковые модели) и связанных инструментов, таких как модели для эмбеддингов, значительно выросли за последний год, всё больше разработчиков задумываются о внедрении LLM в свои приложения.
Поскольку LLM обычно требуют специализированного оборудования и значительных вычислительных ресурсов, их чаще всего упаковывают как сетевые сервисы, предоставляющие API для доступа. Так работают API ведущих LLM, таких как OpenAI или Google Gemini; даже инструменты для локального запуска собственных моделей, например Ollama, оборачивают LLM в REST-API для локального использования. Более того, разработчики, использующие LLM в приложениях, часто нуждаются в дополнительных инструментах вроде векторных баз данных, которые также обычно разворачиваются как сетевые сервисы.
Другими словами, приложения на базе LLM очень похожи на современные cloud-native приложения: они требуют отличной поддержки REST и RPC протоколов, высокой производительности и хорошей работы с конкурентностью. А это как раз те области, в которых Go силён, что делает его великолепным языком для создания приложений с использованием LLM.
Этот пост демонстрирует пример использования Go для простого приложения на базе LLM. Он начинается с описания задачи, которую решает демонстрационное приложение, и затем показывает несколько вариантов его реализации, использующих разные пакеты для достижения одной и той же цели. Весь исходный код примеров доступен онлайн.
https://go.dev/blog/llmpowered
👉 @golang_lib
👍1
Заметки о запуске Go в браузере с WebAssembly
Недавно мне пришлось компилировать Go в WebAssembly, чтобы запускать его в браузере в паре небольших проектов, и вообще я уделил некоторое время изучению WebAssembly. Мне кажется, что WebAssembly — очень захватывающая технология как для веба, так и для других применений (например, через WASI). Особенно классно, что мы можем брать существующие проекты и компоненты, написанные на Go, и запускать их прямо в браузере.
В этом посте я подытожу несколько полезных шаблонов запуска Go в браузере через WebAssembly. Все примеры представлены небольшими, самодостаточными программами, которые можно найти в этом репозитории на GitHub.
https://eli.thegreenplace.net/2024/notes-on-running-go-in-the-browser-with-webassembly/
👉 @golang_lib
Недавно мне пришлось компилировать Go в WebAssembly, чтобы запускать его в браузере в паре небольших проектов, и вообще я уделил некоторое время изучению WebAssembly. Мне кажется, что WebAssembly — очень захватывающая технология как для веба, так и для других применений (например, через WASI). Особенно классно, что мы можем брать существующие проекты и компоненты, написанные на Go, и запускать их прямо в браузере.
В этом посте я подытожу несколько полезных шаблонов запуска Go в браузере через WebAssembly. Все примеры представлены небольшими, самодостаточными программами, которые можно найти в этом репозитории на GitHub.
https://eli.thegreenplace.net/2024/notes-on-running-go-in-the-browser-with-webassembly/
👉 @golang_lib
👍1
System Design интервью с ТимЛидом из американского FinTech уже завтра
29 октября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью по System Design.
Как это будет:
📂 Дмитрий Дорофеев, TeamLead в американском FitTech Truv Inc, ex-VK, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Дмитрий будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Дмитрию
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot
Реклама.
О рекламодателе
29 октября(уже завтра!) в 19:00 по мск приходи онлайн на открытое собеседование, чтобы посмотреть на настоящее интервью по System Design.
Как это будет:
📂 Дмитрий Дорофеев, TeamLead в американском FitTech Truv Inc, ex-VK, будет задавать реальные вопросы и задачи разработчику-добровольцу
📂 Дмитрий будет комментировать каждый ответ респондента, чтобы дать понять, чего от вас ожидает собеседующий на интервью
📂 В конце можно будет задать любой вопрос Дмитрию
Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_go_bot
Реклама.
О рекламодателе