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

Для связи: @orby_tech
Download Telegram
Channel created
Channel photo updated
Контейнеризация и виртуализация - это два различных подхода к разделению и управлению ресурсами в компьютерной среде.

Что есть что?

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

Виртуализация, с другой стороны, предоставляет среду, в которой может быть создано несколько виртуальных машин на одном физическом сервере. Каждая виртуальная машина (ВМ) является независимой виртуальной копией полной операционной системы и имеет свои собственные сетевые интерфейсы, процессы и ресурсы. Виртуализация позволяет запускать несколько операционных систем на одном физическом сервере, что упрощает управление и разделение ресурсов.



В чем же разница?

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

2. Гранулярность: Виртуализация позволяет виртуализировать все аппаратные ресурсы физического сервера, включая процессор, память и хранение. Каждая виртуальная машина имеет свои выделенные ресурсы. С другой стороны, контейнеры используют общие ресурсы операционной системы, такие как ядро, файловая система и сеть. Контейнеры могут быть созданы и уничтожены более быстро и требуют меньше ресурсов сервера, чем виртуальные машины.

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

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



С чего начать изучение?

Если вы хотите начать изучение контейнеризации и виртуализации, вот несколько рекомендаций о том, с чего можно начать:

1. Понимание основных концепций: Начните с освоения основных концепций контейнеризации и виртуализации. Изучите разницу между контейнеризацией и виртуализацией, понимание изоляции и разделения ресурсов, а также роли гипервизоров и контейнерных оркестраторов.

2. Исследование инструментов: Ознакомьтесь с популярными инструментами контейнеризации и виртуализации, такими как Docker, Kubernetes, VMware, Hyper-V и другими. Изучите их функциональность, возможности, синтаксис и способы работы с ними.

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


Какие инструменты подходят для старта?
👍2💩1
В случае контейнеризации очень рекомендую начать с docker-compose. Это простой инструмент, который позволяет вам запускать несколько контейнеров одновременно из одного файла. Вот пример docker-compose.yml:

version: '3.3'
services:
web:
image: nginx:alpine
ports:
- "80:80"
redis:
image: redis:alpine
ports:
- "6379:6379"


Тут мы запускаем два контейнера: nginx и redis. Первый будет доступен на порту 80, а второй - на порту 6379. Все это можно запустить командой docker-compose up. После этого можно будет зайти на localhost и увидеть страницу nginx. Также можно будет подключиться к redis через localhost:6379.


В случае виртуализации можно начать с VirtualBox. Это простой инструмент, который позволяет запускать виртуальные машины. У него есть графический интерфейс, который позволяет создавать и управлять виртуальными машинами.
Картинок прикладывать не буду ввиду того что для начала это не нужно, а для углубления в тему VirtualBox уже не подходит и нужно использовать что-то более продвинутое, например Vagrant или libvirt.
👍2💩1
Что хотите почитать?)
Final Results
40%
Vagrant
80%
Фреймворки и библиотеки
60%
VPN
(1/5) Фреймворки и библиотеки
Что такое фреймворки и библиотеки?

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

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

Библиотека: Это коллекция предварительно написанного кода, который разработчик может использовать в своих проектах. Библиотека обычно содержит готовые функции, классы и методы, которые решают определенные задачи. Разработчик может подключать и использовать библиотеку в своем коде для получения доступа к этим функциям и использования готовых решений, что помогает ускорить процесс разработки и повысить качество программы без необходимости писать код с нуля.

В обоих случаях фреймворк и библиотека представляют собой некоторую абстракцию, которая предоставляет готовые решения и помощь разработчикам. Однако основное различие между ними заключается в способе их использования: фреймворк предоставляет структуру, по которой вы строите свое приложение, а библиотека оказывает поддержку и добавляет функциональность к вашему уже существующему коду.
1👍1🔥1
(2/5) Фреймворки и библиотеки
Какие критерии следует учитывать при выборе конкретного фреймворка или библиотеки для разработки проекта?

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

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

2. Совместимость: Убедитесь, что фреймворк или библиотека совместимы с используемыми вами инструментами, языками программирования, операционной системой и другими компонентами вашего проекта.

3. Расширяемость и гибкость: Исследуйте, насколько легко фреймворк или библиотека могут быть расширены или настроены под ваши потребности.

4. Производительность: Использование фреймворка или библиотеки может влиять на производительность вашего проекта.

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

6. Лицензия и стоимость: Убедитесь, что лицензия фреймворка или библиотеки соответствует требованиям вашего проекта и вашим бизнес-потребностям. Если инструмент является коммерческим, также уточните его стоимость и условия использования.
1🔥1
(3/5) Фреймворки и библиотеки
Какие популярные фреймворки или библиотеки существуют в разных областях разработки, таких как веб, мобильная разработка, машинное обучение и другие?

Существует множество популярных фреймворков и библиотек в разных областях разработки. Вот несколько примеров:

1. Веб-разработка:

- Django: фреймворк для разработки веб-приложений на языке Python.
- Ruby on Rails: фреймворк для разработки веб-приложений на языке Ruby.
- React: JavaScript-библиотека для создания пользовательских интерфейсов.
- Angular: фреймворк JavaScript для разработки одностраничных приложений.

2. Мобильная разработка:

- React Native: фреймворк для разработки мобильных приложений на базе React.
- Flutter: фреймворк для создания кросс-платформенных мобильных приложений на языке Dart.
- Xamarin: платформа для разработки кросс-платформенных мобильных приложений.

3. Машинное обучение и искусственный интеллект:

- TensorFlow: библиотека машинного обучения с открытым исходным кодом, разработанная Google.
- PyTorch: библиотека машинного обучения с открытым исходным кодом, разработанная Facebook.
- scikit-learn: библиотека машинного обучения для Python, предоставляющая инструменты для классификации, регрессии, кластеризации и др.

4. Разработка игр:
- Godot: популярный фреймворк для разработки 2D и 3D игр.
- Unreal Engine: мощный инструмент для разработки компьютерных игр и визуализации.

Кроме этих примеров, существует еще множество других фреймворков и библиотек в каждой области разработки, и выбор зависит от конкретных потребностей и предпочтений разработчика.
2🔥1
(4/5) Фреймворки и библиотеки
Как влияют фреймворки и библиотеки на производительность и эффективность разработки программного обеспечения?

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

1. Ускорение разработки: Фреймворки и библиотеки предоставляют готовые решения и функциональность, которые способствуют ускорению разработки. Они предоставляют набор инструментов, шаблонов и компонентов, которые помогают разработчикам создавать приложения быстрее, поскольку многие типовые задачи уже реализованы.

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

3. Улучшение качества кода: Фреймворки и библиотеки прошли тщательное тестирование и используют передовые методы разработки. Это помогает повысить качество кода, уменьшить количество ошибок и проблем, связанных с безопасностью и совместимостью.

4. Повышение переносимости: Использование фреймворков и библиотек может облегчить переносимость приложений на разные платформы или операционные системы. Многие фреймворки и библиотеки предоставляют абстракцию и инструменты, которые помогают разработчику создавать приложение один раз и запускать его на разных платформах.

5. Расширяемость и гибкость: Фреймворки и библиотеки могут предложить механизмы для расширения и настройки функциональности под конкретные потребности проекта. Благодаря этим возможностям, разработчики могут легко адаптировать инструменты под свои требования и дополнять их новыми функциями.

6. Производительность: Фреймворки и библиотеки могут повысить производительность разработки, что в конечном итоге приводит к сокращению времени разработки и снижению затрат на разработку. Они также могут повысить производительность приложения, поскольку многие из них оптимизированы для эффективного использования ресурсов. Но в некоторых случаях использование фреймворков и библиотек может привести к снижению производительности, поскольку они могут добавлять дополнительные слои абстракции и накладные расходы. Например, использование фреймворка Django для создания простого приложения может быть неоправданно, поскольку фреймворк может добавить дополнительные сложности и накладные расходы, которые могут снизить производительность.
👍21
(5/5) Фреймворки и библиотеки
Как определить, когда целесообразно использовать готовый фреймворк или библиотеку, а когда целесообразно создать индивидуальное решение?

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

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

2. Ограничения по времени: Если у вас есть ограниченные сроки для выполнения проекта, использование готового фреймворка или библиотеки может сэкономить время и ускорить разработку. Создание индивидуального решения может потребовать больше времени на проектирование, разработку и тестирование.

3. Навыки и опыт разработчиков: Оцените навыки и опыт вашей команды разработчиков. Если у вас есть разработчики, хорошо знакомые с определенным фреймворком или библиотекой, использование их может быть более эффективным. Однако, если у вас нет специалистов или если специфические требования проекта требуют экспертизы, создание индивидуального решения может быть предпочтительным.
👍31
#интеграция

Сегодня я дам ссылочки на другие интересные статьи

1) Какие бывают юрлица - https://t.me/+Jin_etwu-I9mYzJi


2) Делегирование - https://t.me/+6y_vVyLl7jhjYjVi


3) Почему важны естественные спутники планет - https://t.me/+OAwzK0mOoJw4MDg6


4) Как устроено ядро планеты - https://t.me/+BaDups8kqCA5ZDg6
🔥1
Привет, я Вася, Python-разработчик с примерно четырьмя годами коммерческого опыта в разных областях, от приборостроения до финтеха. Как и многие здесь, я полон энтузиазма, постоянно пилю небольшие проекты, от веб-сервисов и ботов до программ под Linux и пакетов процедурной генерации.

В разработку я пришел из науки. Я с отличием закончил физфак МГУ, занимался ядерными процессами в звездах, писал сложные численные модели, в основном на C++. Некоторые из моих симуляций крутились на компе неделями, в течение которых рассчитывались миллионы лет звездной эволюции. Потом наши с физикой дорожки разошлись: хоть я и был на хорошем счету, много публиковался и даже преподавал, особых перспектив видно не было. Ну и по гражданской позиции были трения с руководством. К концу маги я решил, что в IT у меня больше возможностей, а интересных задач там тоже завались. Так я решил полностью посвятить себя коммерческой разработке.

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

Как и многие молодые разрабы, я страдаю от синдрома самозванца. Тем не менее у меня объективно есть экспертиза, как в разработке, так и в связанных с нею софт-скиллах. Я могу помочь новичкам с Python, SQL (очень много работаю с БД в последние два года), моим любимым Linux, некоторыми инструментами разработчика вроде git и Docker. Готов подсказать с личными проектами -- как развернуть и админить свой сервис, какую БД выбрать, как настроить CI/CD.

Если вы только вкатываетесь в IT, горите энтузиазмом и хотите создавать крутые штуки, дам совет: рефлексируйте. В каждом большом предприятии, будь то рабочая задача, личный проект или весь ваш карьерный трек, очень полезно оглядываться назад и делать выводы. Еще круче, если вы можете подкрепить рефлексию чистыми данными. Ищете работу -- анализируйте процент конверсии, найдите ему объяснение. Выполнили таску -- получите какую-то численную метрику: насколько вы повысили надежность системы, сколько запросов ваша фича обрабатывает в единицу времени (а потом с понтом вставьте чиселку в резюме). Возможно, во мне говорит ученый, но ей богу, с числами все проще, чем с ощущениями.

Да, а еще отдыхайте. Найдите маленькую радость, которую вы можете подарить себе каждый день и которая будет стабильно давать вам немного ресурса, сил двигаться дальше. Это будет ваша безусловная награда самим себе, приз за ежедневный труд, который у вас никто не отнимет ни при каких условиях. Даже вы сами. Помните: загнанная лошадь далеко не увезет.

Со мной можно связаться в телеге: @kot_tolstij. Еще у меня есть кринж-канал. У него нет узкой специализации, там все мои интересы в кучу: разработка, НРИ, походы и много всего прочего. Сейчас я ищу работу на западном рынке и планирую писать в канал про мои успехи на этом поприще. Возможно, вам будет интересно.

——————

#python #проекты #web #боты #linux #наука #физфакМГУ #SQL #git #docker #рефлексия #отдых #карьера
👍1
(1/6) Простой CI CD для пет проекта
Введение

Давайте определимся с тем, что такое CI/CD и зачем он нужен. CI/CD - это практика разработки программного обеспечения, которая объединяет в себе непрерывную интеграцию (Continuous Integration) и непрерывное развертывание (Continuous Deployment). Это позволяет автоматизировать процесс сборки, тестирования и развертывания приложения. CI/CD позволяет ускорить процесс разработки, уменьшить количество ошибок и упростить процесс развертывания приложения. В этой статье мы рассмотрим, как настроить простой CI/CD для пет проекта с использованием GitHub Actions.

И так, что нам понадобится для настройки CI/CD:

- GitHub репозиторий с проектом
- Docker
- GitHub Actions
- VPS сервер для развертывания приложения (2 ГБ оперативной памяти будет достаточно)

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

Можно обратить внимание на то, что в репозитории уже есть файлы Dockerfile и docker-compose.yml, что упростит настройку CI/CD.
Также, не смотря на простое название, там уже несколько сервисов, которые нужно развернуть, что позволит нам познакомиться с различными ситуациями и даст возможность попрактиковаться в разборе говнокода.
👀2
(2/6) Простой CI CD для пет проекта
docker-compose.yml

Не будем тратить время на разбор проекта, а сразу перейдем к файлу docker-compose.yml, который описывает сервисы, которые нужно развернуть. В данном случае это landing_roll_over, minio и другие, на которые мы пока не будем обращать внимания.

---
landing_mongo:
image: mongo
container_name: landing_mongo
restart: unless-stopped
env_file:
- .env
volumes:
- "./data:/data/db"
---
landing_roll_over:
build: ./landing
container_name: landing_roll_over
working_dir: /frontend
command: node build
restart: unless-stopped
ports:
- "3011:3000"
env_file:
- .env
depends_on:
- landing_mongo
environment:
- DEV_MODE=false
---
minio:
image: quay.io/minio/minio
container_name: minio
command: server /data --console-address ":9900"
restart: unless-stopped
ports:
- "127.0.0.1:9900:9900"
- "127.0.0.1:9001:9001"
volumes:
- "./minio_data:/data"
environment:
- MINIO_ROOT_USER=your_username
- MINIO_ROOT_PASSWORD=your_pasword
- MINIO_DEFAULT_BUCKETS=femida,landing,denta


Давайте немного разберемся с этим файлом. (Я рассчитываю на то что вы уже знакомы с Docker и Docker Compose, если нет, то рекомендую ознакомиться с этими технологиями, так как они очень удобны и позволяют упростить развертывание приложений.)

В данном файле описаны 3 сервиса: landing_mongo, landing_roll_over и minio.

Там и там мы указываем имя контейнера, который будет создан при развертывании сервиса. Также мы указываем порты, которые будут проброшены из контейнера на хост. В случае с landing_roll_over это порт 3011, в случае с minio это порты 9900 и 9001, а для монги мы вообще не указываем порт (что говорит о том что контейнер будет доступен только внутри виртуальной сети docker-compose). Также мы указываем, что сервисы должны перезапускаться в случае ошибки.
Есть еще ряд переменных, которые мы указываем для сервиса minio.

Обратите внимание на то, что в сервисе landing_roll_over мы указываем, что он зависит от сервиса landing_mongo. Это означает, что перед тем как запустить сервис landing_roll_over, нужно дождаться пока сервис landing_mongo будет запущен и готов к работе.

Так же стоит отметить, что в сервисе minio мы указываем, что контейнер будет доступен только на localhost, что означает, что он будет доступен только на сервере, на котором мы его развернем.
🤯1