orby dev
84 subscribers
2 photos
14 links
Делюсь своими мыслями по разработке ПО и всяким штукам около разработки

Для связи: @orby_tech
Download Telegram
Ого, 50 подписчиков!

Рад вас видеть ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
8
Принёс вам очень недооценный доклад про AWS для фронта

Пожалуй это лучшее выступление, для того чтобы начать разбираться с авсом именно с фронтовой стороны

https://youtu.be/9GQmPlcf8Fc?si=lvm3OvKv5ZGkpXxY

P.S. Статья будет, но чуть позже=)
🔥1
(1/4) Простейшая дубликация при деплое пет-проекта
Что такое дубликация и зачем она нужна при деплое пет-проекта?

Дубликация - это копирование или повторное воспроизведение какого-либо объекта, текста или данных с целью создания его точной копии. Когда речь идет о деплое пет-проекта, дубликация может использоваться для создания резервной копии проекта или для передачи его другим участникам команды.

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

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

Но является ли эта проблема актуальной для пет-проекта? Ведь пет-проекты обычно не используются в коммерческих целях и не несут в себе большой ответственности и чаще всего нагрузки смешные. Однако, в случае пет-проекта, я хотел бы иметь бесшовное обновление сервиса.

Тут каждому нужно определиться с тем, важна ли ему эта бесшовность или нет.
Ну, а я хочу, чтобы мой пет-проект был доступен 24/7, и чтобы я мог обновлять его без простоя.
(2/4) Простейшая дубликация при деплое пет-проекта
Классификация нод

В зависимости от того, какие задачи они выполняют, ноды могут быть разделены на несколько типов:

- Имеющие свой стейт (например, базы данных, кэши, очереди, не приятно собранные микросервисы)
- Не имеющие свой стейт (например, веб-серверы, прокси, балансировщики нагрузки, микросервисы, которые не хранят данные)

В случае простейшей дубликации, мы можем развернуть несколько нод, которые не имеют своего стейта, и использовать балансировщик нагрузки для распределения трафика между ними.
Ну, а если нода имеет свой стейт, то нам нужно будет использовать другие методы дубликации, такие как репликация, шардинг, кластеризация и т.д. (но это уже другая история).
(3/4) Простейшая дубликация при деплое пет-проекта
Как реализовать простейшую дубликацию при деплое пет-проекта?

Тут я буду использвать все тот же репозиторий с моим пет-проектом, который я использовал в предыдущей статье.
https://github.com/roll-over/landing

Сразу долго не думая залетаем в репозиторий и смотрим файлик docker-compose.yml. Вот интересная нам часть:

services:
cosmo_roll_over:
build: ./cosmo
container_name: cosmo_roll_over
working_dir: /frontend
command: node build
restart: unless-stopped
ports:
- "3001:3000"
env_file:
- .env
depends_on:
- landing_mongo
environment:
- DEV_MODE=false
cosmo_roll_over_1:
build: ./cosmo
container_name: cosmo_roll_over_1
working_dir: /frontend
command: node build
restart: unless-stopped
ports:
- "3002:3000"
env_file:
- .env
depends_on:
- landing_mongo
environment:
- DEV_MODE=false


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

Эти ноды опираются на одну и тоже часть кода в репозитории. Да и вообще, они одинаковые. Единственное, что их отличает - это порт, на котором они слушают.
(4/4) Простейшая дубликация при деплое пет-проекта
Как реализовать балансировку нагрузки между нодами?

Для балансировки нагрузки между нодами, я буду использовать nginx. Вот часть конфигурации, которую я буду использовать:

Тут я создаю upstream, в котором я перечисляю все ноды, которые я хочу балансировать. В данном случае, у меня есть две ноды, которые слушают на портах 3001 и 3002.

upstream cosmo {
ip_hash;
server 104.248.21.81:3001;
server 104.248.21.81:3002;
}


Далее, я создаю location, в котором я указываю, что все запросы, которые приходят на порт 80, должны быть перенаправлены на upstream cosmo.

server {
listen 80;
server_name cosmo.roll-over.dev;
location / {
proxy_pass http://cosmo;
}
}


Естественно, это только часть конфигурации, и в реальной жизни, тут могут быть другие настройки, такие как ssl, gzip, rate limiting, http2, и т.д.

---

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


----------------
Ставьте реакции, это поможет мне понять, что вам интересно и что нужно улучшить.

Если вам понравилась статья, то поделитесь ей с друзьями, это поможет мне развиваться и писать еще больше интересных статей.
Ссылка для того чтобы поделиться статьей: https://t.me/+bhtDL1JNSGM2YTMy
👍4🔥2
В этот раз без голосовашки, потому что мне последнее время ствли очень интересны облака и я хотел бы сделать достаточно большой цикл статей на этот счет☁️

Если есть какие то интересные штуки, про которые хотелось бы прочитать, подскажите в комментариях;)
👍2😁1
(1/4) Введение в облака
Что такое облака?

Это обзорная статья, как начало серии статей о том, как использовать облачные технологии для петпроектов.

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

Секундочку, а в чем разница между облаком и обычным сервером?
В облаке ресурсы предоставляются по требованию, а в случае с сервером, их нужно покупать и настраивать самостоятельно.

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

Чисто тетехнически, облако - это множество серверов, объединенных в единую сеть, которые предоставляют вычислительные ресурсы по требованию.
3👍2🔥1
(2/4) Введение в облака
Какие основные провайдеры облачных сервисов существуют?

Существует множество провайдеров облачных сервисов, но основные из них:

1. Amazon Web Services (AWS)
2. Microsoft Azure
3. Google Cloud Platform (GCP)
4. IBM Cloud
5. Oracle Cloud

Для себя я выбрал AWS, так как это самый популярный провайдер облачных сервисов. И, как следствие, большинство документации и обучающих материалов написаны именно для него.
Стоит отметить, что у AWS есть спектор условно бесплатных услуг, которые можно использовать для петпроектов.

Я убежден, что нет большой разницы с чего начать, так как все облачные сервисы предоставляют схожие услуги и будут отличаться только названия. Поэтому, если вы хотите начать изучать облачные технологии, то выберите тот сервис, который вам больше нравится.
👍3👌31
(3/4) Введение в облака
Каковы основные особенности использования облачных технологий?

Преимущества использования облачных технологий:

1. Гибкость и масштабируемость. (Вы можете арендовать ресурсы на время, когда они вам нужны, и при этом дополнительные ресурсы могут быть предоставлены автоматичемски, если нагрузка на сайт возрастет)
2. Автоматическое обновление программного обеспечения. (Вам не нужно заботиться о том, чтобы обновить программное обеспечение, так как это делает провайдер)

А в случае петпроекта, например, можно использовать бесплатные облачные сервисы, такие как GitHub Pages, Netlify, Vercel или тот же AWS

Не стоит забывать и о недостатках:

1. Зависимость от провайдера облачных сервисов. (Vendor lock-in, единыжды написанный код может быть сложно перенести на другой сервис)
2. Безопасность данных. (Вам придется особенно заботиться о безопасности данных, так как они будут храниться не у вас, а у провайдера)
👍2🔥2👌2
(4/4) Введение в облака
Какие основные сервисы предоставляют облачные провайдеры?

Основные сервисы, которые предоставляют облачные провайдеры:

1. Вычислительные мощности (виртуальные машины, контейнеры, серверы)
2. Хранение данных (базы данных, файловое хранилище)
3. Сетевые сервисы (балансировка нагрузки, DNS, CDN)
4. Инструменты разработки (CI/CD, мониторинг, логирование)

По сути, облачные провайдеры предоставляют все, что вам нужно для разработки и поддержки приложений.

В следующих статьях я расскажу о том, как можно начать использовать облака для петпроектов и какие сервисы для этого можно использовать.


----------------
Ставьте реакции, это поможет мне понять, что вам интересно и что нужно улучшить.

Если вам понравилась статья, то поделитесь ей с друзьями, это поможет мне развиваться и писать еще больше интересных статей.
Ссылка для того чтобы поделиться статьей: https://t.me/+bhtDL1JNSGM2YTMy
🔥4👍31
* Введение в облака

Решил немного добавить про облака и почему они для петпроекта очень хорошее решение, особенно если нет опыта с серверами

1) Вам не нужно париться за настройки — у нормальных облачных систем хороший графический интерфейс
2) Ваша статическая страница будет грузиться гораздо быстрее чем с сервера за счёт того что сервера подбираются ближе к пользователю
3) Вы естественно познакомитесь с технологиями, которыми можно флексить в резюме



И важная отметка была в твиттере о безопасности вашего кошелька из-за автоскейлинга и ддос атаки
С этим я разберусь в следующих статьях, но если в кратце - лимиты наше всё, выставляя их вы защитите себе от экстра трат + у облаков есть системы защит от ddos и прочего, которые включаются одной кнопкой
👏32🔥1
(1/5) S3 для самых маленьких
Введение

Это вторая статья в цикле об облаках и на мой взгляд самая простая для знакомства с облачными технологиями. В ней я расскажу о том, как создать бакет в облаке и загрузить в него файлы, на примере тестового задания или простенького превью.
🌚1
(2/5) S3 для самых маленьких
Что такое бакет?

Бакет — это просто папка в облаке. В ней можно хранить файлы, делиться ими с другими пользователями, настраивать доступ к ним и многое другое. В облаке бакеты используются для хранения данных, а также для размещения статических сайтов.

S3 — это сервис хранения данных в облаке от Amazon. В некотором смысле, это первопроходец в области облачных хранилищ, но похожие сервисы есть и у других облачных провайдеров. В этой статье я буду использовать именно S3, но если у вас есть аккаунт в другом облаке, то принципы работы с бакетами будут похожи.

Кстати, есть и не облачные аналоги S3, например, Minio. Это открытая реализация S3, которую можно установить на своем сервере или в своей локальной сети.

Мне кажется самая удобная аналогия для понимания S3 - это Google Drive. Только вместо папок и файлов у вас будут бакеты и объекты.
(3/5) S3 для самых маленьких
Настройка демо для фронтенда на S3

1. Для начала нам нужно создать бакет. Для этого переходим в консоль S3 и нажимаем на кнопку "Создать бакет". (S3 Можно найти по поиску по сервисам)

2. Далее вводим имя бакета и выбираем регион. Все остальные настройки оставляем по умолчанию.

3. После создания бакета в нем появится вкладка "Объекты". Нажимаем на нее и затем на кнопку "Загрузить".

4. Выбираем файл, который хотим загрузить в бакет. В моем случае я подготовил простенький index.html, который я и загружу. https://github.com/orby-tech/s3-example

5. Теперь давайте займемся доступами. Мы можем видеть таб со свойствами ("Properties"), в котором откроем блок "Хостинг статического веб-сайта" ("Static website hosting"). Включим его и введем имя файла индекса. В моем случае это index.html.

6. Нажимаем "Сохранить" и теперь у нас есть доступ к нашему файлу по адресу, который указан в поле "Конечная точка". У меня это - http://s3-example.s3-website.eu-north-1.amazonaws.com/

7. Но, что же мы видим? 403! Это потому что у нас нет прав на просмотр файла. Давайте это исправим.

8. Переходим во вкладку "Разрешения" ("Permissions") и находим блок "Блокировка публичного доступа" ("Block public access (bucket settings)"). Отключаем все блокировки и нажимаем "Сохранить". (Пока не будем говорить о том, хорошо это или плохо)

9. И там же в "Разрешениях" ("Permissions") находим блок "Владелец объекта" ("Object Ownership") и выбираем ACLs enabeld. Нажимаем "Сохранить".

10. Возваращаемся в бакет, находим кнопку "Действия" и выбираем "Cделать публичным используя ACL" ("Make public using ACL"). Нажимаем "Сохранить".

11. Теперь мы можем посмотреть наш сайт по адресу, который мы видели ранее. Ура! Мы создали бакет, загрузили в него файл и настроили доступ к нему.
👍1
(4/5) S3 для самых маленьких
А что еще интересного можно сделать с бакетами?

1. Естественно, S3 создан для работы с ним из сервисов или лямбд. В случае сервисов, я начал работать с бакетами в Minio, который я установил на своем сервере. В случае лямбд, можно создать функцию, которая будет обрабатывать файлы в бакете. Например, сжимать изображения или конвертировать их в другой формат.

2. Можно настроить жизненный цикл объектов. Например, если файл не используется более 30 дней, то он будет перенесен в холодное хранилище, где его хранение будет дешевле.

3. Можно настроить версионирование. Если вам важно сохранить историю изменений файлов, то вы можете включить версионирование и восстанавливать предыдущие версии файлов.

4. Ну и мы видим, что у нашей ссылки на сайт нет SSL. Можно настроить CloudFront, который будет работать с S3 и предоставлять SSL. А еще и будет иметь симпатичный домен. (Этим займемся в следующих статьях)
(5/5) S3 для самых маленьких
Заключение

В этой статье я рассказал о том, что такое бакеты в S3 и как создать бакет, загрузить в него файл и настроить доступ к нему. Надеюсь, что вам стало понятно, что такое бакеты и как с ними можно начать работать.


----------------
Ставьте реакции, это поможет мне понять, что вам интересно и что нужно улучшить.

Если вам понравилась статья, то поделитесь ей с друзьями, это поможет мне развиваться и писать еще больше интересных статей.
Ссылка для того чтобы поделиться статьей: https://t.me/+bhtDL1JNSGM2YTMy
🔥4😁1
Я затянул с публикацией постов и прошу меня извинить, но у меня для вас накопилось нечто интересное. Хочу поделиться накопленным опытом и пониманием роли AQA (Automated Quality Assurance) за время работы над долгосрочным проектом.

1. Преимущества и влияние автотестов:
- Как и при ручном тестировании, автотесты могут замедлить процесс доставки на ранних этапах проекта. Однако, когда проект достигает определенного размера и стабилизируется первый функционал, автотесты значительно улучшают качество новых коммитов и уменьшают время, затрачиваемое на ручное тестирование.

2. Дополнимость ручного тестирования:
- Автотесты не могут полностью заменить ручное тестирование, но значительное сокращение объема рутинных задач возможно. Они должны рассматриваться как дополнительный инструмент, позволяющий ручному тестированию стать более аналитическим, а не механическим процессом.

3. Разнообразие методов автоматизации:
- Не стоит считать, что один вид автоматизации лучше другого. Все они имеют свои сильные и слабые стороны. E2E тесты охватывают весь пользовательский процесс, но медлительны и требовательны к ресурсам. Юнит-тесты быстры и охватывают большой объем кода, но не покрывают взаимодействия компонентов. API тесты отлично проверяют бэкэнд, но не всю систему в целом. Только сочетая все эти подходы, можно достичь максимального покрытия и уверенности в качестве продукта.

4. Адаптация существующих процессов:
- Если на проекте хорошо выстроено ручное тестирование, автоматизация пройдет быстрее и чётче. Однако, потребуется время на перевод тестов в автоматизацию и создание соответствия между ручными и автоматизированными тестами, возможно, разработка собственных инструментов.

5. Работа с командой:
- Команда может быть не готова к автоматизации и, возможно, ей потребуется обучение. Это необходимо для демонстрации преимуществ и вовлечения команды в процесс автоматизации.

6. Почему Java популярна для AQA:
- Популярность Java объясняется структурой кода — java с первых строк заставляет писать в виде классов, а это очень хорошо ложится на e2e тестирование, потому что ты можешь сделать "цифровую" копию приложения и работать через компактные абстракции.

Это сильно уменьшает количество кода и сильно его же упрощает.

7. Регулярный рефакторинг:
- Не стоит забывать про рефакторинг автотестов — это важно для поддержания их актуальности и пользы.

8. Ранняя интеграция:
- Не откладывайте интеграцию автотестов в процесс разработки. Чем раньше, тем лучше. Начать стоит как только проект стабилизируется, даже если не с первого коммита.

9. Интеграция с CI/CD:
- Важна своевременная интеграция автотестов в CI/CD, что сэкономит время на адаптацию.

10. Мониторинг:
- Мониторинг автотестов так же важен, как мониторинг самого приложения. Алерты, например, через вебхуки, могут быть полезны на начальных этапах.

11. "Дикий запад" автоматизации:
- Автоматизация тестирования до сих пор поднимает много вопросов в компании — это не редкость. Возможно, вам придется внедрять свои решения и объяснять их ценность.

12. Документация:
- Документация столь же важна, как и для обычного кода. Возможно, вам потребуется писать собственные стандарты для автотестов.

13. Классификация тестов:
- Разбивайте автотесты на группы по типу и скорости для оптимизации процесса тестирования.

14. Фича-флаги:
- Интегрируйте фича-флаги в автотесты, чтобы эффективно управлять функциями и багами, которые не фиксятся сразу.

Эти мысли только начало обсуждения, и я могу вернуться к этой теме в будущем. Большое спасибо всем, кто прочитал этот пост и поддержал меня в этом проекте.

Спасибо за внимание, удачи вам в автоматизации тестирования!
🔥11