37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 Pagoda — набор инструментов для быстрой и простой фуллстек-разработки на Go. Под капотом: echo, ent, Postgres, Redis, htmx, Alpine.js и Bulma.

git clone [email protected]:mikestefanello/pagoda.git
cd pagoda
make up


🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from DevOps
🖥 Введение в Docker для начинающих

Я помню свой третий demo-проект. После сборки и тестирования проекта всё работало. В тот момент я отправил его человеку, который должен был демонстрировать его вместо меня. И вот, не задача, во время запуска возникла ошибка...

Чтобы сохранить собственную репутацию, я начал производить отладку. Проект не запускался потому, что тому человеку нужно было обновить программное обеспечение, чтобы у него работали новые функции. Я помог ему в этом, и, о чудо, всё заработало!

А теперь представьте, если бы мне нужно было разослать данный проект не одному человеку, а десятерым. Тогда мне пришлось бы помогать каждому, перенастраивать их компьютеры, чтобы новые функции успешно работали. Думаю, я бы испытал огромный стресс…

Было бы отлично, если бы существовало такое ПО, с помощью которого можно было бы упаковать всё необходимое для работы приложения в одном месте, а потом поделиться этим файлов с коллегами. Они бы скачивали файл и запускали его, при этом не получая ошибку. Но ведь такая программа существует! И называется она Docker.

Docker помогает решать эти проблемы. В этой статье объясняются основные концепции Docker, а также показано то, как создавать контейнеры для ваших приложений.

➡️ Читать дальше

@DevOPSitsec
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 WebPty

Инструмент Go, который позволяет безопасно передавайть и отправлять что угодно между компьютерами с помощью TUI.

brew install abdfnx/tap/tran

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Разбираемся с работой шлюза API на Golang: на примере одного симпатичного платья

Какое чудесное платье! Стоит только поискать платья в веб-пространстве, как потом практически невозможно избежать интернет-рекламы с новыми моделями. Что же происходит при нажатии на такие коммерческие предложения? Мы попадаем на сайт магазина, где представлена подробная информация о товаре. Но вот вопрос: эти данные поступают из одного и того же сервиса или собираются из разных сервисов и отправляются пользователям? В статье мы рассмотрим второй вариант, а именно шлюз API.

➡️ Читать дальше

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Backend Clean Architecture

Пример 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


🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 cdule (pronounce as Schedule)

Библиотека планировщика заданий с поддержкой базы данных

go get github.com/deepaksinghvi/cdule

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
👣 Gh-prx

Расширение GitHub (gh) CLI для автоматизации повседневной работы с ветками, коммитами и запросами на GO.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🐳🚢 Docker-Kubernetes-101

Инструкция и подход к развертыванию проектов с использованием Docker и Kubernetes.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 webpty

WebPty - проект на Go, который позволяет запускать серверный терминал из браузера. Работает с любого Linux-сервера с любой программой.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Тестовое задание для Mail.Ru Group

Текст задания:
Процессу на 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
👣 Тестовое задание для GoLang-разработчика

Описание задания
Необходимо разработать приложение, предоставляющее 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
👣 GoReplay — это инструмент для мониторинга сети с открытым исходным кодом, который может записывать ваш трафик в реальном времени и использовать его для теневого копирования, нагрузочного тестирования, мониторинга и подробного анализа.

🖥 Github
📝 Документация

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задание на разработку сервиса "Анти-брутфорс"

Общее описание
Сервис предназначен для борьбы с подбором паролей при авторизации в какой-либо системе.

Сервис вызывается перед авторизацией пользователя и может либо разрешить, либо заблокировать попытку.

Предполагается, что сервис используется только для 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
This media is not supported in your browser
VIEW IN TELEGRAM
👣 ACP

Минималистичный инструмент командной строки на GO
для передачи файлов P2P.


🖥 Github
📝 Инструкция

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 CROC

Инструмент на Go, который, позволяет любым двум компьютерам просто и безопасно передавать файлы и папки.

обеспечивает сквозное шифрование 
обеспечивает простую межплатформенную передачу (Windows,Mac, Linux)
поддерживает прокси
позволяет передавать сразу несколько файлов
позволяет возобновить прерванные передачи
локальный сервер или перенаправление портов не требуется

#golang #go #shell

🖥 GitHub

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 VBalancer

VBalancer - это проект, направленный на создание гибкой и масштабируемой системы балансировки нагрузки.

Он реализует функциональность, поддерживающую на данный момент стратегию Round Robin. VBalancer является одной из свободно-распространяемых утилит, которые можно использовать, чтобы увеличить производительность, доступность, надежность и расширяемость работы сетевых служб.

Основные преимущества проекта:

удобно расширять сетевую инфраструктуру, через конфигурационный YMAL файл добавляя или удаляя конечные сетевые узлы

в проекте реализован Dockerfile что позволяет легко развернутьVBalancer в облаке

гибко настраиваемое логирование в CSV формате (может писать логи по времени или по объемы), а так же их архивировать

на сайте проекта уже есть готовые бинарные файлы под любую платформу: Linux/MacOS/Win

проект написан на GO

git clone https://github.com/microup/vbalancer.git

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 Задание на разработку демона, осуществляющего "Системный мониторинг"

Общее описание

Демон - программа, собирающая информацию о системе, на которой запущена, и отправляющая её своим клиентам по 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
👣 ChatGPT-bot

Реализация Telegram бота с ChatGPT на GO.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 116+ Coding Interview Problems with Detailed Solutions

Репозиторий для подготовки к собеседованию GO.

Здесь собраны практические задачи на позицию Go-разработчика. Код с алгоритмами и структуами данных на Go и анализ их эффективности.

🖥 Github

@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM