📦 Основные проблемы распределенных систем (и способы их решения)
Распределенные системы являются основой высоконагруженных веб-приложений, обеспечивая их масштабируемость, отказоустойчивость и высокую производительность. Однако их разработка связана с рядом сложностей, включая сетевые сбои, трудности координации, угрозы безопасности и проблемы масштабирования.
➡️ В этой статье мы рассмотрим четыре ключевых вызова в разработке таких систем и эффективные методы их преодоления.
🐸 Библиотека программиста
Распределенные системы являются основой высоконагруженных веб-приложений, обеспечивая их масштабируемость, отказоустойчивость и высокую производительность. Однако их разработка связана с рядом сложностей, включая сетевые сбои, трудности координации, угрозы безопасности и проблемы масштабирования.
➡️ В этой статье мы рассмотрим четыре ключевых вызова в разработке таких систем и эффективные методы их преодоления.
🐸 Библиотека программиста
❓ Что такое SLI?
👻 — Это показатель, который оценивает качество услуги, например, время отклика или доступность сервиса.
🌚 — Он помогает компаниям следить за тем, насколько их сервисы соответствуют ожиданиям пользователей.
⚡️ — Этот показатель используется для мониторинга и повышения производительности и надежности сервисов.
🎉 — Это метрика, способствующая достижению целей, установленных в рамках SLO и SLA.
🐸 Библиотека задач по Go
👻 — Это показатель, который оценивает качество услуги, например, время отклика или доступность сервиса.
🌚 — Он помогает компаниям следить за тем, насколько их сервисы соответствуют ожиданиям пользователей.
⚡️ — Этот показатель используется для мониторинга и повышения производительности и надежности сервисов.
🎉 — Это метрика, способствующая достижению целей, установленных в рамках SLO и SLA.
🐸 Библиотека задач по Go
⭐️ Что означает звёздочка у ресивера в Go
Anonymous Poll
1%
Метод может быть вызван только для переменных типа string
2%
Звёздочка у ресивера указывает на то, что переменная является глобальной
97%
Метод работает с указателем на объект, а не с его копией
0%
Позволяет методу работать только с константами
❓ Что делают процессоры в планировщике Go
Anonymous Poll
4%
Ожидают завершения горутины на одном процессе
74%
Управляют очередью готовых к выполнению горутин и передают их на выполнение
17%
Работают только на одном ядре процессора и не могут переключаться
15%
Ответственны за синхронизацию всех горутин и машин
❓ Что происходит при склеивании строк в Go
Anonymous Poll
1%
Изменяются на месте, и склеивание строк происходит без выделения новой памяти
97%
Создается новая строка, т.к. строки неизменяемы (immutable) → выделяется новая память для результата
2%
Склеиваются напрямую, память не используется для создания новой строки
1%
Использует сжатие данных, чтобы уменьшить использование памяти и ускорить процесс
❓ Что делает очередь ожидания в планировщике Go
Anonymous Poll
65%
Хранит горутины, которые готовы к выполнению на процессоре
12%
Выполняет горутины, когда они готовы, и распределяет их между машинами
17%
Переключает горутины между различными ядрами, ожидая их завершения
14%
Обрабатывает блокировки и синхронизирует горутины в очереди
❓ Как нельзя оперировать строками в Go
Anonymous Poll
8%
Слайсами байт для более низкоуровневой работы
2%
Использовать пакет strings
86%
Напрямую изменять символы через индекс, как в массиве
7%
Конкатенация с использованием «+»
❓ Что делает синхронизация в планировщике Go
Anonymous Poll
35%
Обеспечивает координацию между горутинами и предотвращает блокировки
27%
Использует каналы и мьютексы для синхронизации выполнения горутин
10%
Управляет таймерами и задержками выполнения горутин
38%
Контролирует распределение горутин между процессами
❓ Что выведет код
Anonymous Poll
18%
map[a:1]
23%
map[]
23%
panic во время выполнения
64%
Ошибка компиляции
❓ Что происходит, когда переменная выходит за пределы области видимости
Anonymous Poll
4%
Её данные немедленно удаляются
6%
Её адрес автоматически обнуляется
87%
Чистит GC, если на неё больше нет ссылок
7%
Go вызывает finalize()
❓ Когда вызываются init() функции
Anonymous Poll
59%
До main(), в порядке импорта
5%
После main()
36%
При первом обращении к пакету
3%
Только вручную через runtime.Init()
❓ Что произойдет, если собрать Go-программу с CGO_ENABLED=1
Anonymous Poll
18%
Программа обязательно будет полностью статической
74%
Программа может зависеть от системных динамических библиотек
8%
Программа не сможет использовать сторонние библиотеки
4%
Программа будет работать только под Windows
❓ Какая основная цель использования индексов в базах данных
Anonymous Poll
4%
Упростить структуру базы данных
7%
Повысить скорость записи данных
92%
Уменьшить время ответа на запросы
1%
Сжать данные для экономии места на диске
❓ Как можно реализовать принцип DRY в коде
Anonymous Poll
2%
Повторять один и тот же код в разных местах.
95%
Вынести повторяющийся код в функции или методы.
6%
Использовать глобальные переменные для общего доступа.
2%
Увеличить количество комментариев в коде.
❓ Можно ли напрямую взять ссылку на значение в map в Go
Anonymous Poll
28%
Да, можно
65%
Нет, нельзя
3%
Можно, но только внутри функции
5%
Да, но только если значение изменяемое
❓ Какой тип каналов по умолчанию в Go
Anonymous Poll
6%
Буферизованный
85%
Небуферизованный
5%
Синхронный
10%
Однонаправленный