🛠️ Управление конкурентностью в Go: внутри кастомных примитивов синхронизации rqlite
Написание распределенной базы данных подразумевает интенсивное использование конкурентности. Philip O'Toole, создатель rqlite, распределенной базы данных на основе SQLite, столкнулся с некоторыми ограничениями встроенного в Go инструментария конкурентности и создал несколько кастомных примитивов. Под катом автор делится наработками — кто знает, может какие-то из них пригодятся и вам.
👉 Читать
Написание распределенной базы данных подразумевает интенсивное использование конкурентности. Philip O'Toole, создатель rqlite, распределенной базы данных на основе SQLite, столкнулся с некоторыми ограничениями встроенного в Go инструментария конкурентности и создал несколько кастомных примитивов. Под катом автор делится наработками — кто знает, может какие-то из них пригодятся и вам.
👉 Читать
GitHub
GitHub - rqlite/rqlite: The lightweight, user-friendly, distributed relational database built on SQLite.
The lightweight, user-friendly, distributed relational database built on SQLite. - rqlite/rqlite
🤔5❤3👍1
Кстати, на Хабре опубликован перевод гайда про транзакции в БД на Go с использованием многослойной архитектуры 👉 https://t.iss.one/goproglib/5276
Читайте, если хотите узнать об организации кода таким образом, чтобы избежать путаницы между слоями.
Читайте, если хотите узнать об организации кода таким образом, чтобы избежать путаницы между слоями.
Telegram
Библиотека Go разработчика | Golang
🔥 Распределенные транзакции в Go: прочтите, прежде чем попробовать
В микросервисной архитектуре иногда возникает необходимость в транзакциях, которые должны охватывать несколько сервисов. Это приводит к проблемам, когда проблема на одном из этапов оставляет…
В микросервисной архитектуре иногда возникает необходимость в транзакциях, которые должны охватывать несколько сервисов. Это приводит к проблемам, когда проблема на одном из этапов оставляет…
👍13👏3
Привет, друзья! 👋
Мы готовим статью о распространенных ошибках в карьере программиста и хотели бы услышать ваше мнение! Поделитесь своими мыслями и опытом, и самые полезные советы мы включим в нашу статью.
Вот несколько вопросов для вас:
🤔 С какими ошибками в своей карьере программиста вы сталкивались? Как вы их преодолели?
📚 Какие советы вы бы дали начинающим разработчикам, чтобы избежать распространенных ловушек в программировании?
🖥️ Что, по вашему мнению, важно учитывать при планировании своей карьеры в IT, чтобы минимизировать сожаления в будущем?
Спасибо за ваше участие! 🚀
Мы готовим статью о распространенных ошибках в карьере программиста и хотели бы услышать ваше мнение! Поделитесь своими мыслями и опытом, и самые полезные советы мы включим в нашу статью.
Вот несколько вопросов для вас:
🤔 С какими ошибками в своей карьере программиста вы сталкивались? Как вы их преодолели?
📚 Какие советы вы бы дали начинающим разработчикам, чтобы избежать распространенных ловушек в программировании?
🖥️ Что, по вашему мнению, важно учитывать при планировании своей карьеры в IT, чтобы минимизировать сожаления в будущем?
Спасибо за ваше участие! 🚀
👍4🙏2
🤔 Размышления о Go reflection
По-настоящему холиварная статья, которая, вероятно, вызовет разногласия. Как программист, который предпочитает использовать «самые обыденные функции» любого языка, пакет reflect Go не входил в список того, что Neil Macneale из Dolthub хотел попробовать, но он «погрузился в пучину рефлексии» и... до сих пор не является ее поклонником.
👉 Читать
По-настоящему холиварная статья, которая, вероятно, вызовет разногласия. Как программист, который предпочитает использовать «самые обыденные функции» любого языка, пакет reflect Go не входил в список того, что Neil Macneale из Dolthub хотел попробовать, но он «погрузился в пучину рефлексии» и... до сих пор не является ее поклонником.
👉 Читать
Dolthub
Reflecting on Go Reflection
Golang reflection is wonderfully horrible. Let's reflect on it.
👍6🤔1😢1
🤯 Go memory ballast: как перестать волноваться и полюбить кучу
Еще в 2019 году команда Twitch оптимизировала работу одного из сервисов на Go, сократив использование процессора на 30% и уменьшив задержки API на 45% за счет так называемой «балластной» памяти.
Основная идея заключалась в создании большого блока предвыделенной памяти (балласта), что уменьшило частоту запуска GC в приложении. GC в Go запускается, когда размер кучи удваивается, и, создав большой балласт, команда смогла увеличить базовый размер кучи, тем самым снижая частоту срабатывания сборщика мусора. В результате нагрузка на процессор уменьшилась, так как сборка мусора стала происходить реже.
Балластная память в основном использует виртуальную память и не занимает физическую память, если к ней не обращаться напрямую.
✅ Результаты: снижение числа циклов сборки мусора почти на 99% и значительное улучшение производительности без лишних затрат на память.
👉 Подробнее
Еще в 2019 году команда Twitch оптимизировала работу одного из сервисов на Go, сократив использование процессора на 30% и уменьшив задержки API на 45% за счет так называемой «балластной» памяти.
Основная идея заключалась в создании большого блока предвыделенной памяти (балласта), что уменьшило частоту запуска GC в приложении. GC в Go запускается, когда размер кучи удваивается, и, создав большой балласт, команда смогла увеличить базовый размер кучи, тем самым снижая частоту срабатывания сборщика мусора. В результате нагрузка на процессор уменьшилась, так как сборка мусора стала происходить реже.
Балластная память в основном использует виртуальную память и не занимает физическую память, если к ней не обращаться напрямую.
✅ Результаты: снижение числа циклов сборки мусора почти на 99% и значительное улучшение производительности без лишних затрат на память.
👉 Подробнее
👍38🤔5🥱1
🤯 Что вам помогает работать, когда устаете? Когда в отпуск ну вообще никак, а сил уже нет.
💬 Может быть, чтение отвлеченной литературы, спорт, дневной сон, прогулки, встречи с друзьями, что-то ещё?
#интерактив
💬 Может быть, чтение отвлеченной литературы, спорт, дневной сон, прогулки, встречи с друзьями, что-то ещё?
#интерактив
Кстати, функция
👉 Пример здесь
equals
в пакете maps
может использоваться для проверки того, содержат ли две мапы одинаковые пары «ключ-значение». 👉 Пример здесь
👍40❤1
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🪶 Как следовать принципу DRY при настройке Apache APISIX
DRY — один из самых известных принципов разработки ПО: он помогает избежать ненужного повторения фрагментов кода, которые выполняют одни и те же действия. DRY также стоит применять при настройке конфигурации сложных систем, поскольку этот принцип:
☑️ Делает конфигурацию более компактной и легкой для понимания.
☑️ Упрощает поддержку — когда нужно внести изменения, вы делаете это только в одном месте.
☑️ Повышает читаемость — конфигурация становится более структурированной и логичной, что облегчает ее понимание.
☑️ Улучшает масштабируемость — при усложнении конфигурации принципы DRY помогают сохранять ее управляемой и расширяемой.
☑️ Сокращает время на настройку — используя переиспользуемые компоненты, можно быстрее создавать новые конфигурации или модифицировать существующие.
В качестве примера в статье рассматриваем, как применять DRY при настройке конфигурации API-шлюза Apache APISIX.
🔗 Читать статью
🔗 Зеркало
DRY — один из самых известных принципов разработки ПО: он помогает избежать ненужного повторения фрагментов кода, которые выполняют одни и те же действия. DRY также стоит применять при настройке конфигурации сложных систем, поскольку этот принцип:
☑️ Делает конфигурацию более компактной и легкой для понимания.
☑️ Упрощает поддержку — когда нужно внести изменения, вы делаете это только в одном месте.
☑️ Повышает читаемость — конфигурация становится более структурированной и логичной, что облегчает ее понимание.
☑️ Улучшает масштабируемость — при усложнении конфигурации принципы DRY помогают сохранять ее управляемой и расширяемой.
☑️ Сокращает время на настройку — используя переиспользуемые компоненты, можно быстрее создавать новые конфигурации или модифицировать существующие.
В качестве примера в статье рассматриваем, как применять DRY при настройке конфигурации API-шлюза Apache APISIX.
🔗 Читать статью
🔗 Зеркало
👍7
Опрос «Как вы учитесь с помощью телефона: поделитесь своим опытом!»
Мы хотим стать ещё круче, и для этого нужно узнать, как вы учитесь!
Заполните мини-анкету о том, как вы используете мобильные приложения для прокачки знаний.
⏳ Займёт всего 5 минут — как раз успеете за чашкой кофе! А за ваш ценный вклад мы дарим 15% скидку на все курсы https://proglib.academy/ 🎁
Дорогие подписчики, мы на миссии улучшений, и вы — наш ключ! 🔑
Мы хотим стать ещё круче, и для этого нужно узнать, как вы учитесь!
Заполните мини-анкету о том, как вы используете мобильные приложения для прокачки знаний.
⏳ Займёт всего 5 минут — как раз успеете за чашкой кофе! А за ваш ценный вклад мы дарим 15% скидку на все курсы https://proglib.academy/ 🎁
🔥2
Forwarded from Библиотека девопса | DevOps, SRE, Sysadmin
🎭 Двойная игра в Power BI: как совмещать роли разработчика и администратора
Когда твой руководитель говорит: «А теперь ты еще и администратор сервера Power BI». Гид по выживанию для разработчика, внезапно ставшего многостаночником.
Читать статью
Когда твой руководитель говорит: «А теперь ты еще и администратор сервера Power BI». Гид по выживанию для разработчика, внезапно ставшего многостаночником.
Читать статью
⚒️ sync.Map в Go: правильный инструмент для правильной работы
Оказывается,
Читайте продолжение серии статей Phuong Le про сложные аспекты Go на простых иллюстрациях👇
👉 Читать
👉 Другие статьи в серии:
• Go sync.Mutex: нормальный/starvation режим
• Go sync.WaitGroup и проблема выравнивания
• Go sync.Pool и механика, стоящая за ним
• Go sync.Cond, самый недооцененный механизм синхронизации
• Пакет singleflight
Оказывается,
sync․Map
под капотом поддерживает две мапы, что может быть неидеально, если вы часто добавляете или удаляете ключи.Читайте продолжение серии статей Phuong Le про сложные аспекты Go на простых иллюстрациях👇
👉 Читать
👉 Другие статьи в серии:
• Go sync.Mutex: нормальный/starvation режим
• Go sync.WaitGroup и проблема выравнивания
• Go sync.Pool и механика, стоящая за ним
• Go sync.Cond, самый недооцененный механизм синхронизации
• Пакет singleflight
👍7🥰2
Самые полезные каналы для программистов в одной подборке!
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
Сохраняйте себе, чтобы не потерять 💾
🔥Для всех
Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы
Азбука айтишника — здесь мы познаем азы из мира программирования
🤖Про нейросети
Библиотека робототехники и беспилотников | Роботы, ИИ, интернет вещей
Библиотека нейрозвука | Транскрибация, синтез речи, ИИ-музыка
Библиотека нейротекста | ChatGPT, Gemini, Bing
Библиотека нейровидео | Sora AI, Runway ML, дипфейки
Библиотека нейрокартинок | Midjourney, DALL-E, Stable Diffusion
#️⃣C#
Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel
☁️DevOps
Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
🐘PHP
Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты
🐍Python
Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты
☕Java
Книги для джавистов | Java
Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков
👾Data Science
Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту
🦫Go
Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go
🧠C++
Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++
💻Другие каналы
Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика
Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности
Библиотека разработчика игр | Gamedev, Unity, Unreal Engine
📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈
Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT
Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *
* Организация Meta запрещена на территории РФ
👍5👏2
Спикер: Иван Потапов – Staff Machine Learning Engineer at ShareChat. Руководит командой, отвечающей за качество рекомендаций, и имеет 8-летний опыт в сфере машинного обучения.
– Теорию вероятностей: случайные величины, математическое ожидание и дисперсию.
– Линейную алгебру: векторы, матрицы, собственные векторы и собственные значения.
– Математический анализ: производные и разложение функций в ряд Тейлора.
Понимание математических основ помогает глубже разобраться в работающих под капотом алгоритмах ML/DL и эффективно применять их на практике.
Присоединяйтесь к нам и совершенствуйте свои навыки в машинном обучении!
📌 Регистрация по ссылке: https://proglib.io/w/a5eddd40
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Я рад, что сделал это на Go
— Thorsten Ball, автор книги Writing An Interpreter In Go, размышляет о том, что восемь лет спустя Go оказался подходящим языком для книги.
Just as impressive, I think: the code in the books has barely changed since then. I had to fix some typos and bugs over the years, but really the only change I had to do in order to keep the code up to date was to drop a three line go.mod in there, so that users with G 1.13 or later don’t have to use the GO111MODULE=off environment variable. I added the go.mod in 2020, four years ago and four years after the original release.
Thorstenball
Glad I did it in Go
Go, the greatest teaching language?
👍19
This media is not supported in your browser
VIEW IN TELEGRAM
⚒️ go-pretty — Go-инструмент для улучшения отображения таблиц, списков, индикаторов выполнения, текста и т. д. в CLI-приложениях. Главная фича — упор на кастомизацию.
👉 GitHub
👉 GitHub
❤16👍6
🔐 Защита gRPC-сервисов с помощью JWT-аутентификации на Go
gRPC является популярным выбором для создания веб-API благодаря своей эффективности и независимости от языка. Однако защита gRPC-сервисов так же важна, как и защита любой другой распределённой системы.
gRPC предоставляет несколько механизмов для повышения безопасности. В гайде Matt Boyle разбирает пример реализации аутентификации в gRPC с упором на interceptors, metadata и JWT в качестве механизма аутентификации.
👉 Читать
gRPC является популярным выбором для создания веб-API благодаря своей эффективности и независимости от языка. Однако защита gRPC-сервисов так же важна, как и защита любой другой распределённой системы.
gRPC предоставляет несколько механизмов для повышения безопасности. В гайде Matt Boyle разбирает пример реализации аутентификации в gRPC с упором на interceptors, metadata и JWT в качестве механизма аутентификации.
👉 Читать
🔥15❤1👍1🎉1
🛠️ Go Blueprint — инструмент для создания новых Go-проектов с определенной структурой
Это один из растущего числа инструментов (еще один GoForge) для запуска нового Go-проекта с предопределенной структурой файлов и некоторой генерацией кода.
Он позволяет вам запустить приложение на основе Chi, Gin, Fiber или других фреймворков, с поддержкой баз данных и дополнительных инструментов вроде HTMX и Tailwind CSS.
👉 GitHub & Документация
Это один из растущего числа инструментов (еще один GoForge) для запуска нового Go-проекта с предопределенной структурой файлов и некоторой генерацией кода.
Он позволяет вам запустить приложение на основе Chi, Gin, Fiber или других фреймворков, с поддержкой баз данных и дополнительных инструментов вроде HTMX и Tailwind CSS.
👉 GitHub & Документация
👏22👍6🥰2
📹 Секреты внутреннего устройства аллокатора Go: видеогайд от Владимира Балуна
⏱️ Таймкоды:
00:00 Введение
01:49 Концепция аллокатора
06:09 Линейный аллокатор
11:22 Блочный аллокатор
16:21 Стековый аллокатор
20:18 Устройство malloc
25:01 Недостатки malloc
26:55 Устройство tcmalloc
28:28 Устройство аллокатора Go
32:55 Предсказуемая фрагментация памяти
40:33 Где аллоцируются объекты в Go
51:11 Почему аллокация на стеке работает быстрее, чем в куче
52:35 Расширение и уменьшение стека в Go
58:12 Зачем это все нужно знать (практические примеры)
01:03:37 Пулы объектов (sync.Pool)
01:06:57 Арены (memory arenas)
01:14:30 Аллокатор ОС
▶️ YouTube | Rutube | VK
⏱️ Таймкоды:
00:00 Введение
01:49 Концепция аллокатора
06:09 Линейный аллокатор
11:22 Блочный аллокатор
16:21 Стековый аллокатор
20:18 Устройство malloc
25:01 Недостатки malloc
26:55 Устройство tcmalloc
28:28 Устройство аллокатора Go
32:55 Предсказуемая фрагментация памяти
40:33 Где аллоцируются объекты в Go
51:11 Почему аллокация на стеке работает быстрее, чем в куче
52:35 Расширение и уменьшение стека в Go
58:12 Зачем это все нужно знать (практические примеры)
01:03:37 Пулы объектов (sync.Pool)
01:06:57 Арены (memory arenas)
01:14:30 Аллокатор ОС
▶️ YouTube | Rutube | VK
👍25🔥4