🤩 Команда Uber очень любит и развивает проекты с открытым исходным кодом, в том числе и на Go. В их техническом стеке Go тоже присутствует: cadence и H3-Go 👇
GitHub
GitHub - uber/cadvisor: Analyzes resource usage and performance characteristics of running containers.
Analyzes resource usage and performance characteristics of running containers. - uber/cadvisor
👍4
Forwarded from Библиотека программиста | программирование, кодинг, разработка
😴Вы ведь там не спите?! И правильно — ведь у нас для вас есть предложение отправиться в путешествие по техническому стеку Uber (аналогичный недавний пост про Netflix)
Иллюстрация основана на исследованиях из технических блогов Uber и проектов с открытым исходным кодом:
📌Фронтенд
• Веб: Fusion.js (React-фреймворк для создания надежных веб-приложений) + Visualization.js для сценариев геопространственной визуализации.
• Mobile: кроссплатформенная система RIB с архитектурой VIPER вместо MVC.
📌Бэкенд:
• Uber Gateway как динамическая конфигурация поверх Nginx. Сервис использует gRPC и QUIC для взаимодействия клиент-сервер, а также Apache Thrift для описания интерфейсов.
• Единое хранилище конфигураций под названием Flipr (позже измененное на UCDP), H3 в качестве библиотеки хранилища location-index, Spring Boot для сервисов на основе Java, uAct для архитектуры, управляемой событиями, и Cadence для оркестрации.
📌Базы данных: для OLTP используется DocStore, под капотом у которой MySQL + PostgreSQL + движок RocksDB.
📌Big data: управление осуществляется с помощью семейства Hadoop. В качестве форматов файлов используются Hudi и Parquet, а Alluxio — для кэширования. Данные временных рядов хранятся в Pinot и AresDB.
📌Обработка данных: Hive, Spark и фреймворк с открытым исходным кодом Marmaray + Apache Kafka и Apache Flink.
📌DevOps: Uber использует Monorepo с упрощенным окружением под названием devpod. CD управляется через Netflix Spinnaker, метрики передаются в uMetric, уведомления в uMonitor и базу данных observability M3.
🔗Подробнее
#инфографика #проектирование_систем
Иллюстрация основана на исследованиях из технических блогов Uber и проектов с открытым исходным кодом:
📌Фронтенд
• Веб: Fusion.js (React-фреймворк для создания надежных веб-приложений) + Visualization.js для сценариев геопространственной визуализации.
• Mobile: кроссплатформенная система RIB с архитектурой VIPER вместо MVC.
📌Бэкенд:
• Uber Gateway как динамическая конфигурация поверх Nginx. Сервис использует gRPC и QUIC для взаимодействия клиент-сервер, а также Apache Thrift для описания интерфейсов.
• Единое хранилище конфигураций под названием Flipr (позже измененное на UCDP), H3 в качестве библиотеки хранилища location-index, Spring Boot для сервисов на основе Java, uAct для архитектуры, управляемой событиями, и Cadence для оркестрации.
📌Базы данных: для OLTP используется DocStore, под капотом у которой MySQL + PostgreSQL + движок RocksDB.
📌Big data: управление осуществляется с помощью семейства Hadoop. В качестве форматов файлов используются Hudi и Parquet, а Alluxio — для кэширования. Данные временных рядов хранятся в Pinot и AresDB.
📌Обработка данных: Hive, Spark и фреймворк с открытым исходным кодом Marmaray + Apache Kafka и Apache Flink.
📌DevOps: Uber использует Monorepo с упрощенным окружением под названием devpod. CD управляется через Netflix Spinnaker, метрики передаются в uMetric, уведомления в uMonitor и базу данных observability M3.
🔗Подробнее
#инфографика #проектирование_систем
👍8❤2🤔1🌚1
📚Найти подходящую для себя книгу по Go, которая принесет максимальную пользу, — не самая простая задача. Но решение есть: Awesome Go Books. Репозиторий поддерживается и обновляется новыми книгами. Пользуйтесь 😍
🔗GitHub
#перечитываястарое
🔗GitHub
#перечитываястарое
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - dariubs/GoBooks: List of Golang books
List of Golang books. Contribute to dariubs/GoBooks development by creating an account on GitHub.
🔥19👍3
Реализация плагина ClickHouse для Telegraf на Go
Telegraf — серверный агент для сбора и отправки всех показателей и событий из баз данных, систем и сенсоров IoT. А как на счет поддержи ClickHouse? Она есть, но имеет несколько недостатков.
Автор статьи решил это исправить и, надо сказать, получилось быстро и эффективно. Вывод один: не бойтесь писать интеграции самостоятельно — оно того стоит.
👀 Читать
Telegraf — серверный агент для сбора и отправки всех показателей и событий из баз данных, систем и сенсоров IoT. А как на счет поддержи ClickHouse? Она есть, но имеет несколько недостатков.
Автор статьи решил это исправить и, надо сказать, получилось быстро и эффективно. Вывод один: не бойтесь писать интеграции самостоятельно — оно того стоит.
Please open Telegram to view this post
VIEW IN TELEGRAM
1823.pl
Implementing a ClickHouse output plugin for Telegraf in Go - d1823.pl
A process of implementing a Go-based ClickHouse output plugin for Telegraf, along with the surprises and pitfalls.
👍5
Кажется, этот формат значительно удобнее, чем смотреть весь плейлист в поисках чего-то полезного. Вас ждет краткое описание докладов на следующие темы:
1⃣Rubiks-Kube
2⃣Is unit testing an afterthought or a necessity?
3⃣Generics in Go
4⃣Metaprogramming in Go
5⃣Fuzz testing
6⃣Cache design patterns
7⃣Checkpoint Restoration Using CRIU
8⃣Dive into debugging distributed systems using Delve
9⃣Hardening Go Concurrency: using Formal methods to verify correctness
Please open Telegram to view this post
VIEW IN TELEGRAM
AdiTechSavvys Blogs on Golang
Gophercon India 2023
A blog highlighting my learnings from GCI2023. With details about the Talks that took place.
🔥9👍1
🔗Cокращатель ссылок на Go: с нуля до деплоя
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
📺 Смотреть
Go-разработчик Ильдар Карымов делится опытом разработки просто проекта на Go. Вы узнаете, как на практике использовать Echo и MongoDB, прикрутить GitHub-аутентификацию и задеплоить на Digital Ocean.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Forwarded from Библиотека Go для собеса | вопросы с собеседований
💬Что из себя представляет паттерн «Функциональные опции» в Go и как его реализовать?
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
👉 Сначала мы определяем функциональную опцию:
👉 и функцию, удовлетворяющую типу:
👉 изменяем нашу функцию NewServer:
👉 и теперь мы можем делать вот так:
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
▪️Паттерн «Функциональные опции» в Go предлагает гибкий способ настройки структур без раскрытия внутренних полей.
▪️Он особенно полезен, если вы хотите предоставить дополнительную конфигурацию, или в будущем могут появиться дополнительные параметры конфигурации. Он также отлично подходит для библиотек.
📌Базовый пример без функциональных опций:
type Server struct {
host string
port int
protocol string
}
func NewServer(host string, port int) *Server {
return &Server{
host: host,
port: port,
protocol: "http",
}
}
▪️Со временем наши требования меняются, и нам может понадобиться поддерживать больше вариантов конфигурации. Вместо изменения сигнатуры функции
NewServer
, что может быть проблематично и несовместимо с предыдущими версиями, мы можем использовать функциональные опции.👉 Сначала мы определяем функциональную опцию:
type ServerOption func(*Server)
👉 и функцию, удовлетворяющую типу:
func WithPort (port int) ServerOption {
return func(s *Server) {
s.port = port
}
👉 изменяем нашу функцию NewServer:
func NewServer(host string, opts ...ServerOption) *Server {
server : = &Server{
host: host,
port: 443,
protocol: "https"
}
for _, opt : = range opts {
opt (server)
}
return server
}
👉 и теперь мы можем делать вот так:
server1 := NewServer("localhost")
server2 := NewServer("localhost", WithPort(8080))
📌Этот паттерн позволяет нам гибко настраивать параметры, сохраняя при этом читабельность и не раскрывая внутренние поля.
❤37🔥21👍10🌚3😁1
Какие из перечисленных хард скиллов, по вашему мнению, наиболее важны для разработчика? Можно выбрать несколько вариантов.
Anonymous Poll
53%
Знание языков программирования
66%
Понимание алгоритмов и структур данных
51%
Работа с базами данных и SQL
35%
Опыт работы с системами контроля версий
26%
Опыт работы с фреймворками и библиотеками
18%
Понимание принципов DevOps
67%
Знание основных принципов проектирования и архитектуры ПО
23%
Опыт тестирования ПО
12%
Знание математики
4%
Свой вариант (напишу в комментарии)
🧠Решаем задачи по Go и практикуемся на квизах
Напоминаем, что у нас появился новый канал с задачами по Go, квизами и кодом. Подписывайтесь, чтобы практиковаться вместе с нами.
👉Перейти в канал
Напоминаем, что у нас появился новый канал с задачами по Go, квизами и кодом. Подписывайтесь, чтобы практиковаться вместе с нами.
👉Перейти в канал
👍3😁1
Go 1.21 включает предварительную версию изменения области видимости цикла for, которое команда Go планирует добавить в Go 1.22, устраняя одну из наиболее распространенных ошибок Go.
🤔 В чем сыр-бор?
• На первом скрине код должен вывести "a,b,c", верно?
• На самом деле мы получаем "c,c,c". Причины такого поведения описаны здесь.
• Эту проблему также можно воспроизвести без конкурентности (второй пример).
• Ошибка такого рода вызвала проблемы в проде у многих компаний, включая публично задокументированную проблему в Lets Encrypt.
📌В Go 1.22 команда Go планирует измененить циклы for, чтобы они имели область видимости для каждой итерации, а не для каждого цикла.
• Чтобы обеспечить обратную совместимость с существующим кодом, новая семантика будет применяться только в пакетах, содержащихся в модулях, которые объявляют go >= 1.22 в файлах go.mod.
• Go 1.21 включает предварительный просмотр изменения области видимости. Если вы скомпилируете свой код с переменной окружения GOEXPERIMENT=loopvarset, новая семантика будет применена ко всем циклам.
• На первом скрине код должен вывести "a,b,c", верно?
• На самом деле мы получаем "c,c,c". Причины такого поведения описаны здесь.
• Эту проблему также можно воспроизвести без конкурентности (второй пример).
• Ошибка такого рода вызвала проблемы в проде у многих компаний, включая публично задокументированную проблему в Lets Encrypt.
📌В Go 1.22 команда Go планирует измененить циклы for, чтобы они имели область видимости для каждой итерации, а не для каждого цикла.
• Чтобы обеспечить обратную совместимость с существующим кодом, новая семантика будет применяться только в пакетах, содержащихся в модулях, которые объявляют go >= 1.22 в файлах go.mod.
• Go 1.21 включает предварительный просмотр изменения области видимости. Если вы скомпилируете свой код с переменной окружения GOEXPERIMENT=loopvarset, новая семантика будет применена ко всем циклам.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💯20🤔8👍6🔥5
Go-разработчик Ильдар Карымов делится опытом разработки Telegram-бота, который автоматически достаёт свежие новости и статьи про Go из разных источников, генерирует для них саммари с помощью ChatGPT, после чего публикует их в Telegram-канал.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍2😁1
Таненбаум vs Торвальдс (микроядро vs монолит)
Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».
Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.
А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.
Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах
#холивар
Старый добрый профессиональный спор, который перерос в холивар. Первыми его начали известные разработчики Эндрю Таненбаум и Линус Торвальдс в начале 90-х в одной из новостных групп «Юзнета».
Таненбаум и Торвальдс холиварили из-за архитектуры ядра ОС. Первый утверждал, что лучше использовать микроядра, второй — монолитное ядро. И сколько раз они не возвращались к публичному обсуждению архитектуры ядра, каждый оставался при своём мнении.
А что сейчас? Да ничего не изменилось. Холивар разгорается при обсуждении абсолютно любой темы.
Любите холиварить?
👍 — конечно — в споре рождается истина
🤔 — ненавижу — только мешает работать
💯 — смотря где и при каких обстоятельствах
#холивар
💯70👍38🥱16🤔11
Profiling_Go_Applications_in_the_Right_Way_with_Examples_by_Abdulsamet.pdf
5.5 MB
Правильное профилирование приложений с примерами: гайд для Go-разработчика
Профилирование — важный метод анализа приложений и выявления узких мест, снижающих производительность приложения.
Узнайте, как определить, какие части кода выполняются слишком долго или потребляют слишком много ресурсов.
👀 Читать
Профилирование — важный метод анализа приложений и выявления узких мест, снижающих производительность приложения.
Узнайте, как определить, какие части кода выполняются слишком долго или потребляют слишком много ресурсов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
🤔 Конкурентность — это не параллелизм
Перед вами полное изложение доклада Роба Пайка Concurrency is Not Parallelism. Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.
🤩 Читать
Перед вами полное изложение доклада Роба Пайка Concurrency is Not Parallelism. Иллюстрации и диаграммы воссозданы, исходный код взят дословно со слайдов, за исключением комментариев, которые в некоторых местах были расширены.
🤩 Читать
👍15🔥4
Ловите плейлист с мини-лекциями от Go-разработчика Ильдара Карымова или смотрите интересующую тему отдельно:
🌐 Тесты: что нужно знать разработчику
🌐 Всё про конкурентность в Go
🌐 Туториал по дженериками Go
🌐 Golangci-lint: повышаем качество кода на Go
🌐 Туториал по интерфейсам в Go
🌐 Завершаем программы изящно: graceful shutdown в Go
🌐 Туториал по работе с пакетом Context в Go
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22💯2🌚1
Это не реклама, а обзор книги «Golang для профи: Создаем профессиональные утилиты, параллельные серверы и сервисы, 3-е изд.»
Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как конкурентность и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON и взаимодействие с базами данных.
Кроме того, книга дает дополнительные сведения о работе внутренних механизмов Go, знание которых позволит оптимизировать код на Go и использовать типы и структуры данных новыми и необычными способами.
👀 Читать
Третье издание «Golang для профи» исследует практические возможности Go и описывает такие продвинутые темы, как конкурентность и работа сборщика мусора Go, использование Go с Docker, разработка мощных утилит командной строки, обработка данных в формате JSON и взаимодействие с базами данных.
Кроме того, книга дает дополнительные сведения о работе внутренних механизмов Go, знание которых позволит оптимизировать код на Go и использовать типы и структуры данных новыми и необычными способами.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24❤2🌚1
python -m SimpleHTTPServer <port>
, только на Go.Развернуть статический файловый сервер на Go всегда было просто:
package main
import "net/http"
func main() {
port := ":8080"
handler := http.FileServer(http.Dir("."))
http.ListenAndServe(port, handler)
}
Но у Eli Bendersky есть другой способ. Стоит попробовать:
$
go run github.com/eliben/static-server@latest
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - eliben/static-server: A simple, zero-configuration HTTP server CLI for serving static files
A simple, zero-configuration HTTP server CLI for serving static files - eliben/static-server
👍19
Forwarded from Библиотека тестировщика | QA, тестирование, quality assurance, manual testing, autotesting, ручное тестирование, автотесты
🔝 Приоритизация задач по методу MoSCoW: как за 5 минут научиться грамотно расставлять приоритеты
Читать статью
#туториал
Читать статью
#туториал
👍3⚡1🔥1🤔1🥱1
📌Внутри следующие категории:
• Algorithms
• Data
• Drivers
• File systems
• Getting and/or Setting
• Implementation
• Membership
• Parsing
• Process control
• Protocols
• Reading and/or Writing
• Representation
• Subtypes
🔗 Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
Gist
Categorizing Go Interfaces from the StdLib.md
Categorizing Go Interfaces from the StdLib.md. GitHub Gist: instantly share code, notes, and snippets.
🔥13👍5