Roadmap для DevOps инженеров
                        
                    В этой статье рассмотрим дорожную карту, как развиваться и что учить для тех, кто хочет стать DevOpsами/Site Reliability Engineerами.

📖 Общие полезные статьи
- 8 best practices по использованию Docker в продакшине
 - Выбор стратегии деплоя микросервисов
 - Blue-Green Deployment паттерн
 - CI/CD
 - Архитектура ПО
 - Статьи по микросервисам
 - Статьи про DevOps практики
 - Статьи про паттерны проектирования
 - Статьи по дата структурам
 
🗺️ Изучите язык программирования
Начать стоит с изучения одного из предложенных на дорожной карте языков программирования: Python, Ruby, Go, Rust, C, C++, и т.д. Главным будет базовое понимание какого-то Cи-подобного языка. это вам поможет в будущем читать код верхнеуровнево любого Си-подобного языка.
Что касается Go – это статически типизированный язык программирования, который был разработан внутри компании Google. В отличие от динамически типизированного языка, код проверяется перед запуском, а не после.
Go считается одним из простейших языков программирования для начинающих. Google создали быстро изучаемый язык для того, чтобы быстрее вводить новые команды программистов в работу. Простой синтаксис Go помогает быстро понять чужой код без дополнительных обозначений или комментариев.
Но доминирующим языком для бэкенда остается Python. Roadmap по питону можно найти тут.
📈 Agile DevOps процесc
Стоит так же выучить и Agile процессы. У вас должно быть глубокое понимание когда, как и каким образом встраивать DevOps процесс в вашу разработку.
Так же стоит обратить внимание на следующие статьи:
- Continuous integration vs. continuous delivery vs. continuous deployment
 - Статьи по менеджменту
 - Статьи по Agile процессам и практикам
 

💾 Big data решения
Часто девопсам нужно поддерживать BigData решения, схемы ниже описывают основные подходы к распределенным системам
Распределенная файловая система
Существует 3 основных подхода как организовать распределенную файловую систему:
- Один CPU к одному диску
 - Параллельное считіваение - Один CPU и много дисков
 - Распределенное считывание. Сет серверов из пункта №1
 

Distributed Database
Существует 2 основных подхода как организовать распределенную базу данных:
- Master-Slave(follower) репликация. В этом случае на Slave (follower) используется для чтения, а мастер для записи.
 - Мульти мастер репликация
 

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

🔧 Навыки администрирования серверов
Инженеру DevOps необходимо управлять всеми типами серверов. Часто речь идет о целом парке: их может быть больше ста и состоят они из экземпляров ОС Linux (очень редко из экземпляров других ОС).
Поэтому для начала советую уделить особое внимание Linux. Если у вас мало опыта работы с данной ОС, начните с Ubuntu. Изучите основные команды, инструменты для мониторинга, настройки и разберитесь с работой терминала.
Список ОС которые нужно уметь администрировать
- Windows server
 - Ubuntu
 - CentOS
 - RHEL
 - FreeBSD
 - OpenBSD
 - NetBSD
 - Fedora
 - Debian
 - SuseLinux
 
Понимать следующие аспекты ОС
- Управление процессами
 - Потоки и параллелизм
 - Сокеты
 - Основы POSIX
 - Основы компьютерных сетей
 - Управление вводом/выводом
 - Виртуализация
 - Память/Диски
 - Файловые системы
 - Управление инициализацией (initd)
 - Управление сервисами (systemd)
 
🕸️ Сети, безопасность и протоколы
Знание сетей, безопасности и базовых протоколов необходимо инженеру DevOps, так как он должен настраивать VPC и группы безопасности/брандмауэры, а также использовать различные протоколы.
- HTTP (протокол передачи гипертекста);
 - SSL (обеспечивает защищенный обмен данными);
 - SSH (сетевой протокол, позволяющий производить удаленное управление операционной системой);
 - FTP (протокол передачи файлов);
 - SMTP (простой протокол передачи почты)
 - IMAPS
 - POP38
 - DMARC
 - SPF
 - Doman Keys
 - Перенаправление портов
 - IPSec & VPN
 - AT-TLS
 - OSPF Authentication
 - SNMP
 - Firewall
 - Proxy
 
🏢 Веб серверы
🏘️ Инфраструктура как код
Инфраструктура как код (IaC) – это по сути настройка и подъем всей инфраструктуры в виде конфигурационных файлов, с помощью которых легко подымать новые серверы и масштабировать старые.
Контейнеры
- Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает ПО в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения. Благодаря Docker можно быстро развертывать и масштабировать приложения в любой среде и сохранять уверенность в том, что код будет работать.
 - LXC – Linux containers система виртуализации на уровне операционной системы для запуска нескольких изолированных экземпляров операционной системы
 
Управление конфигурацией
- Ansible – ПО с открытым исходным кодом, которое автоматизирует поставку программного обеспечения, управление конфигурацией и развёртывание приложений. Ansible помогает DevOps-специалистам автоматизировать сложные задачи
 - Salt
 - Chef
 - Puppet
 
Оркестрирование контейнеров
Управление инфраструктурой
Service mesh
- Istio – Open Source-проект, разработанный при сотрудничестве команд из Google, IBM и Lyft. Он решает сложности, возникающие в приложениях, основанных на микросервисах, например: управление трафиком, безопасность, трассировка, мониторинг, логи.
 - Consul – это децентрализованный отказоустойчивый discovery-сервис от компании HashiCorp
 - Envoy
 - Linkerd
 
🏄♂️ CI/CD инструменты
🕵️ Мониторинг инфраструктуры и приложений
Мониторинг инфраструктуры
- Prometheus – мониторинг систем таких как: серверы, базы данных, отдельные виртуальные машины, приложение и другое.
 - Grafana – платформа с открытым исходным кодом для визуализации, мониторинга и анализа данных.
 - Nagios
 - Zabbix
 - Monit
 - DataDog
 
Мониторинг приложений
- Jaeger – tracing приложений
 - New Relic
 - AppDynamic
 - Instana
 - OpenTracing
 
☁️ Облачные платформы
📝 Командная строка
Ниже приведен список утилит которые должен знать и использовать продвинутый DevOps.
Утилиты для работы с текстом
awksedgrepsortuniqcatcutechofmttrnlegrepfgrepwc
Мониторинг процессов
pstophtopatopIsof
Сети
nmaptgpdumppungmtrtraceroutedlgalrmanalrodumpdlgiptablesnetstat
Написание bash скриптов
Консоли
- Vim
 - Nano
 - PowerShell
 - Emacs
 
Производительность системы
nmaniostatsarvmstat
Другие
stracedtracesystemtapunamedfhistory