Forwarded from DevOps
Я помню свой третий demo-проект. После сборки и тестирования проекта всё работало. В тот момент я отправил его человеку, который должен был демонстрировать его вместо меня. И вот, не задача, во время запуска возникла ошибка...
Чтобы сохранить собственную репутацию, я начал производить отладку. Проект не запускался потому, что тому человеку нужно было обновить программное обеспечение, чтобы у него работали новые функции. Я помог ему в этом, и, о чудо, всё заработало!
А теперь представьте, если бы мне нужно было разослать данный проект не одному человеку, а десятерым. Тогда мне пришлось бы помогать каждому, перенастраивать их компьютеры, чтобы новые функции успешно работали. Думаю, я бы испытал огромный стресс…
Было бы отлично, если бы существовало такое ПО, с помощью которого можно было бы упаковать всё необходимое для работы приложения в одном месте, а потом поделиться этим файлов с коллегами. Они бы скачивали файл и запускали его, при этом не получая ошибку. Но ведь такая программа существует! И называется она Docker.
Docker помогает решать эти проблемы. В этой статье объясняются основные концепции Docker, а также показано то, как создавать контейнеры для ваших приложений.
➡️ Читать дальше
@DevOPSitsec
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3❤1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Инструмент Go, который позволяет безопасно передавайть и отправлять что угодно между компьютерами с помощью TUI.
brew install abdfnx/tap/tran
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍2❤1
Какое чудесное платье! Стоит только поискать платья в веб-пространстве, как потом практически невозможно избежать интернет-рекламы с новыми моделями. Что же происходит при нажатии на такие коммерческие предложения? Мы попадаем на сайт магазина, где представлена подробная информация о товаре. Но вот вопрос: эти данные поступают из одного и того же сервиса или собираются из разных сервисов и отправляются пользователям? В статье мы рассмотрим второй вариант, а именно шлюз API.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9👍4❤1
Пример Go проекта с чистой архитектурой на базе Gin, mongo go driver, JWT viper, bcrypt, testify, mockery и других пакетов.
Вы можете использовать этот проект в качестве шаблона для создания вашего проекта на Go.
$ cd your-workspace
# Clone this project into your workspace
$ git clone https://github.com/amitshekhariitbhu/go-backend-clean-architecture.git
# Move to the project root directory
$ cd go-backend-clean-architecture
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18👎16❤2🔥2
https://groups.google.com/g/golang-announce/c/7SPnPbP2DTU?pli=1
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10❤2👍1
Библиотека планировщика заданий с поддержкой базы данных
go get github.com/deepaksinghvi/cdule
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
Расширение GitHub (gh) CLI для автоматизации повседневной работы с ветками, коммитами и запросами на GO.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤1
🐳🚢 Docker-Kubernetes-101
Инструкция и подход к развертыванию проектов с использованием Docker и Kubernetes.
🖥 Github
@Golang_google
Инструкция и подход к развертыванию проектов с использованием Docker и Kubernetes.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤1
WebPty - проект на Go, который позволяет запускать серверный терминал из браузера. Работает с любого Linux-сервера с любой программой.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1🔥1
Текст задания:
Процессу на stdin приходят строки, содержащие интересующие нас URL. Каждый такой URL нужно дернуть и посчитать кол-во вхождений строки "Go". В конце работы приложение выводит на экран общее кол-во найденных строк "Go" во всех переданных URL, например:
$ echo -e 'https://golang.org\nhttps://golang.org\nhttps://golang.org' | go run 1.go
Count for https://golang.org: 9
Count for https://golang.org: 9
Count for https://golang.org: 9
Total: 27
Введенный URL должен начать обрабатываться сразу после вычитывания и параллельно с вычитыванием следующего. URL должны обрабатываться параллельно, но не более k=5 одновременно.
Обработчики url-ов не должны порождать лишних горутин, т.е. если k=1000 а обрабатываемых URL-ов нет, не должно создаваться 1000 горутин.
Нужно обойтись без глобальных переменных и использовать только стандартные библиотеки.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥5❤1
Описание задания
Необходимо разработать приложение, предоставляющее HTTP API для получения данных о парковках такси в г. Москва. Данные необходимо брать с этой страницы ("Актуальная версия").
Описание необходимого функционала
Приложение должно реализовывать:
▪Функционал загрузки данных из файла (локального и/или по ссылке) в хранилище данных (данные на источнике могут как удаляться, так и добавляться);
▪Обслуживание HTTP запросов к API-endpoints, которые реализуют поиск по хранимым данным;
Обслуживание HTTP запросов к роуту, возвращающему метрические данные (в формате prometheus) работы приложения.
▪Обновление данных в хранилище должно происходить без остановки обслуживания HTTP запросов к API с учетом того, что их объем может быть очень большим (и маппинг данных на источнике может изменяться).
Методы HTTP API должны возвращать ответ в формате json. Время обработки одного запроса к HTTP API (не загрузка данных в хранилище) - не более 2 мс. до первого байта HTTP ответа (TTFB). Проектирование самих методов API - на ваше усмотрение (минимально необходимый функционал - это поиск по global_id, id и mode).
Метрические данные должны включать в себя как минимум следующие метрики:
Общее количество обработанных запросов к API-endpoints;
Количество ошибок обработки HTTP запросов к API-endpoints (плюсом будет "разведение" по различным кодам ответов);
Данные по времени обработки HTTP запросов к API-endpoint;
Дополнительные метрики, на ваше усмотрение.
Требования к реализации
▪В качестве хранилища данных необходимо использовать Redis;
▪Все функции (экспортируемые и не экспортируемые) должны сопровождаться понятным комментарием (если возможно - на английском языке);
▪Не стоит излишне сокращать имена переменных и констант - код пишется для людей, и он должен быть максимально простым и понятным;
▪Можно использовать любые сторонние пакеты, но не использовать какой-либо фреймворк;
▪Весь ключевой функционал должен быть зафиксирован unit-тестами;
▪После завершения работы над заданием необходимо написать сопроводительную документацию по работе с приложением в файле README.md в корне репозитория;
▪Конфигурация параметров подключения к хранилищу данных должна иметь возможность управляться как флагами запуска, так и переменными окружения. Возможности конфигурирования должны быть описаны в файле README.md вашего репозитория.
Плюсами будут являться
▪Настройка CI (силами GitHub actions, TravisCI, etc) выполняющая запуск тестов и сборки на каждый коммит;
▪Автоматическая сборка Docker-образа с приложением;
▪Интуитивно-понятное разбитие коммитов - одной конкретной задаче - один коммит или PR (её правки - отдельный коммит или PR);
Написание всех текстов коммитов - на английском языке.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍3❤2🤯2😱1
📝 Документация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1🔥1
Общее описание
Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.
Сервис вызывается перед авторизацией пользователя и может либо разрешить, либо заблокировать попытку.
Предполагается, что сервис используется только для
server-server,т.е
. скрыт от конечного пользователя.Алгоритм работы
Сервис ограничивает частоту попыток авторизации для различных комбинаций параметров, например:
▪не более N = 10 попыток в минуту для данного логина.
▪не более M = 100 попыток в минуту для данного пароля (защита от обратного brute-force).
▪не более K = 1000 попыток в минуту для данного IP (число большое, т.к. NAT).
Для подсчета и ограничения частоты запросов, можно использовать например алгоритм leaky bucket. Или иные аналогичные: https://en.wikipedia.org/wiki/Rate_limiting
Причем сервис будет поддерживать множество bucket-ов, по одному на каждый логин/пароль/ip.
Bucket-ы можно хранить:
▪в памяти (в таком случае нужно продумать удаление неактивных bucket-ов, чтобы избежать утечек памяти).
▪во внешнем хранилище (например redis или СУБД, в таком случае нужно продумать производительность).
White/black листы содержат списки адресов сетей, которые обрабатываются более простым способом:
▪Если входящий IP в whitelist, то сервис безусловно разрешает авторизацию (ok=true);
▪Если - в blacklist, то отклоняет (ok=false).
Архитектура
Микросервис состоит из API, базы данных для хранения настроек и black/white списков. Опционально - хранилище для bucket'ов. Сервис должен предоставлять GRPC или REST API.
Описание методов API
Попытка авторизации
Запрос:
▪login
▪password
▪ip
Ответ:
▪ok (true/false) - сервис должен возвращать ok=true, если считает что запрос нормальный и ok=false, если считает что происходит bruteforce.
Сброс bucket
Должен очистить bucket-ы соответствующие переданным login и ip.
▪login
▪ip
Добавление IP в blacklist
подсеть (IP + маска)
Удаление IP из blacklist
подсеть (IP + маска)
Добавление IP в whitelist
подсеть (IP + маска)
Удаление IP из whitelist
подсеть (IP + маска)
▪Достаточно IPv4
▪Пример подсети: 192.1.1.0/25 - представляет собой адрес 192.1.1.0 с маской 255.255.255.128
▪Во время работы сервиса при поступлении очередного IP мы проходимся по подсетям в черных и белых списках и вычисляем, принадлежит ли IP одной из них.
Конфигурация
Основные параметры конфигурации:
N, M, K
- лимиты по достижению которых, сервис считает попытку брутфорсом.Command-Line интерфейс
Необходимо так же разработать command-line интерфейс для ручного администрирования сервиса. Через CLI должна быть возможность вызвать сброс бакета и управлять whitelist/blacklist-ом. CLI может работать через GRPC/HTTP интерфейс.
Развертывание
Развертывание микросервиса должно осуществляться командой make run (внутри docker compose up) в директории с проектом.
Тестирование
Рекомендуется выделить модуль обработки одного bucket и протестировать его с помощью unit-тестов.
Так же необходимо написать интеграционные тесты, проверяющие все вызовы API.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24🔥4❤1👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Минималистичный инструмент командной строки на GO
для передачи файлов P2P.
📝 Инструкция
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍6❤1🤔1
Инструмент на Go, который, позволяет любым двум компьютерам просто и безопасно передавать файлы и папки.
▪ обеспечивает сквозное шифрование
▪ обеспечивает простую межплатформенную передачу (Windows,Mac, Linux)
▪ поддерживает прокси
▪ позволяет передавать сразу несколько файлов
▪ позволяет возобновить прерванные передачи
▪ локальный сервер или перенаправление портов не требуется
#golang #go #shell
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍7👎3❤2
VBalancer - это проект, направленный на создание гибкой и масштабируемой системы балансировки нагрузки.
Он реализует функциональность, поддерживающую на данный момент стратегию Round Robin. VBalancer является одной из свободно-распространяемых утилит, которые можно использовать, чтобы увеличить производительность, доступность, надежность и расширяемость работы сетевых служб.
Основные преимущества проекта:
▪ удобно расширять сетевую инфраструктуру, через конфигурационный YMAL файл добавляя или удаляя конечные сетевые узлы
▪в проекте реализован Dockerfile что позволяет легко развернутьVBalancer в облаке
▪гибко настраиваемое логирование в CSV формате (может писать логи по времени или по объемы), а так же их архивировать
▪на сайте проекта уже есть готовые бинарные файлы под любую платформу: Linux/MacOS/Win
▪проект написан на GO
git clone https://github.com/microup/vbalancer.git
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16😁2❤1👎1🔥1
Общее описание
Демон - программа, собирающая информацию о системе, на которой запущена, и отправляющая её своим клиентам по GRPC.
Архитектура
▪GRPC сервер;
▪допускается использование временных (/tmp) файлов;
▪статистика хранится в памяти, долговременное хранение не предусмотрено.
Требования
Необходимо каждые N секунд выдавать информацию, усредненную за последние M секунд.
Например, N = 5с, а M = 15с, тогда демон "молчит" первые 15 секунд, затем выдает снапшот за 0-15с; через 5с (в 20с) выдает снапшот за 5-20с; через 5с (в 25с) выдает снапшот за 10-25с и т.д.
N и M указывает клиент в запросе на получение статистики.
Что необходимо собирать:
▪Средняя загрузка системы (load average).
▪Средняя загрузка CPU (%user_mode, %system_mode, %idle).
▪Загрузка дисков:
-tps (transfers per second);
-KB/s (kilobytes (read+write) per second);
▪Информация о дисках по каждой файловой системе:
-использовано мегабайт, % от доступного количества;
-использовано inode, % от доступного количества.
▪Top talkers по сети:
- по протоколам: protocol (TCP, UDP, ICMP, etc), bytes, % от sum(bytes) за последние M), сортируем по убыванию процента;
-по трафику: source ip:port, destination ip:port, protocol, bytes per second (bps), сортируем по убыванию bps.
▪Статистика по сетевым соединениям:
- слушающие TCP & UDP сокеты: command, pid, user, protocol, port;
-количество TCP соединений, находящихся в разных состояниях (ESTAB, FIN_WAIT, SYN_RCV и пр.).
Разрешено использовать только стандартную библиотеку языка Go!
Команды, которые могут пригодиться:
$ top -b -n1
$ df -k
$ df -i
$ iostat -d -k
$ cat /proc/net/dev
$ sudo netstat -lntup
$ ss -ta
$ tcpdump -ntq -i any -P inout -l
$ tcpdump -nt -i any -P inout -ttt -l
Статистика представляет собой объекты, описанные в формате Protobuf.
Информацию необходимо выдавать всем подключенным по GRPC клиентам с использованием однонаправленного потока.
Выдавать "снапшот" системы можно как отдельными сообщениями, так и одним жирным объектом.
Сбор информации, её парсинг и пр. должен осуществляться как можно более конкурентно.
Конфигурация
▪Через аргументы командной строки можно указать, на каком порту стартует сервер.
▪Через файл можно указать, какие из подсистем сбора включены/выключены.
Тестирование
Юнит-тесты
▪по возможности мок интерфейсов и проверка вызовов конкретных методов;
▪тесты вспомогательных функций и пр.
Интеграционные тесты
▪потестировать факт потока статистики, можно без конкретных цифр;
▪можно посоздавать файлы, пооткрывать сокеты и посмотреть на изменение снапшота.
Клиент
Необходимо реализовать простой клиент, который в реальном времени получает и выводит в STDOUT статистику по одному из пунктов (например, сетевую информацию) в читаемом формате (например, в виде таблицы).
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥8❤2👎1
Репозиторий для подготовки к собеседованию GO.
Здесь собраны практические задачи на позицию Go-разработчика. Код с алгоритмами и структуами данных на Go и анализ их эффективности.
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥6❤2👎1👏1
Данная книга научит вас надежным, проверенным методам, используемым Docker, таким как замена виртуальных машин, использование архитектуры микросервисов, эффективное моделирование сети, производительность в автономном режиме и создание процесса непрерывной доставки на базе контейнеров. Следуя формату «проблема/решение» в стиле
поваренной книги, вы изучите реальные варианты использования Docker и узнаете, как применить их к собственным проектам.
Издание предназначено разработчикам, использующим Docker в своем рабочем окружении.
📚 Книга
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1🔥1
Инструмент для проверки уязвимостей Go.
go install golang.org/x/vuln/cmd/govulncheck@latest
🛠 Инструменты Go для проверки уязвимостей
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤2