Выбор стека технологий в сфере DevOps. Стек технологий что это.

Выбор маркетинговых инструментов всегда зависит от вашего бизнеса: его специфики, его целей, его воронки продаж и т.д. Тем не менее, существуют принципы, которые помогут вам объединить все инструменты e в единую систему — а также организовать и отладить ваш стек.

Выбор технологий для большого и не очень большого веб-проекта

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

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

Как сейчас выбирается технология:
  1. Мне это нравится.
  2. Друг порекомендовал мне его.
  3. Я прочитал это в интернете.
  4. Похожий веб-сайт основан на этой технологии
В чем здесь проблема?
  1. Мне это нравится. Очень субъективно. А если он не соответствует требованиям? Или им пользуются очень дорогие и редкие специалисты? Или она вообще умирает?
  2. Знакомый. Обычно это знакомый, который «немного лучше» разбирается в ИТ, чем тот, кого он консультирует. И даже если он опытный программист, он может не знать всех решений на всех распространенных языках. Ведь никто не спрашивает, по каким критериям выбирали этого знакомого. Если ваш знакомый не является техническим директором Google, я бы не стал так легко доверять такой рекомендации.
  3. Я читал его. Теперь стало лучше: вы можете найти различные сравнения и аргументы. Тем не менее, даже если человек обладает глубокими знаниями в области развития, требуется время, чтобы понять все решения. А без знаний в области разработки все технические отчеты, которые вы читали, ничего не стоят.
  4. Аналогия. Большинство популярных сайтов написаны на той или иной технологии, потому что так сложилось «исторически». Если бы Facebook сейчас выбирал технологию для себя, я сомневаюсь, что он взял бы за основу PHP. Также может быть, что технология уже устарела, что она была продвинута на основе трех вышеуказанных пунктов, что была выбрана разрекламированная технология вместо действительно эффективной и т.д. Трудно узнать истинные причины выбора технологии в других проектах. Лучшие технологии очень редко используются в аналогичных проектах.

Важные критерии для выбора технологии:

  1. Размер и характер проекта
  2. Размер и сложность проекта
  3. Размер проекта Размер и сложность проекта
  4. Стоимость специалистов
  5. Наличие специалистов
  6. Наличие инструментов разработки
  7. Наличие готовых решений
  8. Гибкость
  9. Большое сообщество
  10. Отказоустойчивость
  11. Тенденция развития
  12. Обширная документация
  13. Стоимость поддержки
  14. Требования к нагрузке
  15. Требования к безопасности
  16. Кросс-платформа
  17. Возможность интеграции с другими решениями
  Эмоциональное выгорание: как помочь другу. Как справиться с эмоциональным выгоранием
Какие проекты доступны?

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

Сегодня существует множество технологий, сред и инструментов, которые разработчики объединяют для создания надежных, легко масштабируемых веб-приложений. Facebook, например, разрабатывается с использованием комбинации фреймворков и языков, включая JavaScript, React, HTML, CSS и PHP.

Система версионирования

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

Средства разработки ПО

Отслеживание задач

Безопасность и конфиденциальность

Система CI\CD

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

*В этой статье намеренно не рассматриваются TFS, SVN и подобные системы, поскольку их назначение и функциональность трудно приравнять к чистой системе VCS.

Система сборки и доставки кода

Конечно, существует множество систем CI\CD (сборки и доставки), и мы не будем говорить обо всех из них, а лишь выделим наиболее распространенные и популярные: Jenkins, GitlabCi* (не включая мобильную разработку и CircleCi и TFS для Microsoft).

В результате сравнения этих двух систем получается следующая сравнительная таблица:

Как видно из сравнительной таблицы, оба решения отвечают целям CI\CD. Оба поддерживают возможность написания сложных сценариев для создания кода, распространения его среди пользователей и внесения в него изменений. Как упоминалось ранее, решение должно быть принято относительно системы выпуска и системы CI\CD в целом. Поэтому если проект уже был создан на GitHub и первоначально скомпилирован и развернут вручную или с помощью скрипта, имеет смысл использовать Jenkins и не переносить репозитории на Gitlab. Чисто субъективное мнение — для более простых, линейных проектов лучше использовать Gitlab, а там, где требуется сложная логика компиляции и развертывания кода, лучше использовать Jenkins, который с его большим количеством плагинов может покрыть практически любую задачу DevOps инженера или команды разработчиков.

Процесс разработки

Этот аспект является одним из самых важных для планирования использования инструментов DevOps и их применения в жизненном цикле программного продукта. Она также называется GitFlow, Git (система выпуска кода), которая организует работу команд разработчиков с этой системой разработки. Этот процесс повлияет на механизмы и инструменты для создания кода и его развертывания в различных средах, в которых используется программный код. В целом, процесс разработки или GitFlow должен определять, в каких средах кода должна вестись разработка, в каких ветвях системы версий должен находиться код, как разработчики должны создавать новые функции приложения и исправлять проблемы в существующем коде.

  Китайцы» по цене «немцев»: знакомимся с автоновинками лета 2022 года. Сколько время в корее сейчас

Пример этого процесса показан на рисунке ниже:

Рисунок 2 — Процесс разработки

Этот же процесс управляет версиями приложения.

Выбор этого процесса зависит от многих факторов:

  • Выбор модели разработки (Waterflow, Agile),
  • Продолжительность спринта,
  • Время тестирования RC,
  • Время тестирования пользователями,
  • время для внесения изменений в уже выпущенный продукт,
  • и многое другое.

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

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

Некоторые эксперты считают, что уровень OSI 1 гораздо шире и охватывает больше тем. Некоторые исследователи даже включают ранние уровни OSI в модель TCP/IP, потому что их можно найти в современных стандартах. Однако в большинстве случаев канальный уровень TCP/IP соответствует канальному уровню и физическому уровню в OSI.

Назначение протокола TCP/IP

tcp картинка

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

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

Эта процедура уменьшает количество информации, которое может быть передано в единицу времени, но обеспечивает надежную передачу.

Модель TCP/IP считается наиболее совершенной, поскольку позволяет настраивать взаимодействие с компьютером и подключать к нему различные сетевые устройства. В принципе, основная цель TCP/IP — обеспечить трафик для больших сетей и поддерживать работу всего интернета.

Форматы протоколов

Давайте теперь поговорим о том, что представляет собой протокол IP. Как упоминалось ранее, этот протокол Internetwork используется в стеке для определения адресации сетевого уровня. Существует два основных формата протоколов, используемых для IP-адресов:

  • IPv4. IPv4. Представление адресов в этом формате довольно практично — это 4 группы десятичных чисел (но строго от 0 до 255), разделенных точками. Например: 188.227.9.194.
  • 188 188.9.9.9.9.9. Этот формат требует использования 128-битных чисел. Адреса формируются в 8 групп по 4 шестнадцатеричных цифры в каждой. Группы разделяются двоеточием. Например: 2001:0058:0db8:0074:1c60:2c18:1025:2b5f.
  Людмила Сарычева: Пиши, сокращай. Пиши сокращай как создавать?

Уровневая модель протоколов

Рассматривая модель TCP/IP, мы не должны игнорировать уровни, на которые она разделена. Интересно, что количество уровней регулируется RFC. В этом стандарте различают 4 уровня (или фазы):

  • Уровень подключения,
  • сеть (или кросс-сеть),
  • транспорт,
  • прикладной уровень.

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

1. Канальный.

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

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

2. Межсетевой.

Этот уровень стека протоколов TCP/IP касается соединения существующих локальных сетей с глобальной сетью. В данном случае под локальными сетями понимаются отдельные сети на каждом устройстве. Уровень Интернета регулирует передачу данных в нескольких сетях и обеспечивает взаимодействие между различными системами.

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

3. Транспортный.

На этом этапе работают протоколы TCP и UDP, которые отвечают за отправку и передачу данных.

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

Однако UDP, который используется на транспортном уровне, менее надежен. Он самостоятельно отправляет дейтаграммы, но не гарантирует 100% прием. Данные могут быть потеряны или доставлены в неправильном порядке. По этой причине UDP не используется, когда требуется надежная передача данных. Использование этого протокола допустимо только в том случае, если потеря данных не является критичной для работы приложения. UDP также необходим, если по какой-то причине невозможно повторно запросить данные.

4. Прикладной.

Последним уровнем в таком протоколе, как TCP/IP, является прикладной уровень. В отличие от самой системы OSI, здесь нет промежуточных уровней (например, сеансового уровня), поэтому форматирование и анализ данных выполняется интерфейсом прикладного программирования. Приложение обращается к API и получает набор действий или команд для выполнения в ответ.

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

Оцените статью
Бизнес блог