Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Ontico
РИТ++ 2017, RootConf
Зал Конгресс-Холл, 5 июня, 17:00
Тезисы:
http://rootconf.ru/2017/abstracts/2799.html
Я расскажу об удачной попытке сделать современную распределённую экосистему для эксплуатации софта на базе Docker-контейнеров, которая собрана из базовых и довольно простых компонентов, без переусложнённости Kubernetes или Mesos+Marathon.
Мы обсудим, как можно упростить сетевой слой, как без особых проблем работать с Docker Swarm, как построить service discovery, мониторинг, rolling updates и прочие красивые слова, максимально отдав это на уровень разработчиков.
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»FDConf
Доклад о том, зачем нужен CI, как он интегрируется в процесс разработки. В докладе есть небольшое демо о весьма известном cloud-based CI сервисе Travis-CI. В процессе демо будет «поломан» билд и затем сразу же починен. Весьма показательно в том плане, что это доказывает простоту всей технологии.
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Ontico
РИТ++ 2017, Root Conf
Зал Пекин + Шанхай, 5 июня, 16:00
Тезисы:
http://rootconf.ru/2017/abstracts/2826.html
Благодаря Docker'у, контейнеры стали доступны каждому. Однако, чтобы развернуть production-систему на Docker'е, нужно решить ряд инфраструктурных задач: логи, мониторинг, бэкапы, отказоустойчивость, апдейты, безопасность. Решить эти задачи "для себя" не сложно, но при попытке превратить свое контейнерное решение в программный продукт возникают проблемы: "глупые" пользователи, нестабильный хостинг, коварные конкуренты и неясное будущее продукта. Эти трудности - системные, и лучше о них знать заранее. Я расскажу о них на примере проекта dockhero.io.
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
Доклад - https://www.youtube.com/watch?v=lJsqRwULRVA
Какие проблемы решаем?
быстрый вход нового разработчика в проект
стандартизация настроек разработчиков
переключение между проектами - разные версии ПО и библиотек (mysql 5.6/5.7, node 0.12/7.2)
приучаем разработчиков к сетевому взаимодействию компонентов
Microservice - масштабирование/разделения разработки
Делим ресурсы staging среды между проектами
У нас было 500 страниц спецификаций, 40000 строк кода, 2 офиса, полдюжины разработчиков, а также целое множество андроидов всех сортов и расцветок. Не то, чтобы это был необходимый запас для приложения крупной торговой сети. Но если начал собирать софт, становится трудно остановиться. Единственное, что вызвало у меня опасение — это сетевая библиотека. Нет ничего более беспомощного, безответственного и испорченного, чем писать AsyncTask на каждый вызов. Я знал, что рано или поздно мы перейдём на Event Bus.
Август 2014, DevDay, Новосибирск
Олег Годовых «Страх и ненависть в Event Bus»DevDay
У нас было 500 страниц спецификаций, 40000 строк кода, 2 офиса, полдюжины разработчиков, а также целое множество андроидов всех сортов и расцветок. Не то, чтобы это был необходимый запас для приложения крупной торговой сети. Но если начал собирать софт, становится трудно остановиться. Единственное, что вызвало у меня опасение — это сетевая библиотека. Нет ничего более беспомощного, безответственного и испорченного, чем писать AsyncTask на каждый вызов. Я знал, что рано или поздно мы перейдём на Event Bus.
* Почему Angular 2 такой быстрый и как его ускорить еще сильнее?
* Как работает Change Detection механизм и как им управлять?
* Зачем нам Zone.js и Функциональное Реактивное Программирование?
* Как работать с Redux и Mobx в Angular 2 и что можно от этого выиграть?
Об этом и ряде других вещей вы узнаете из этого доклада.
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
Доклад о новинках нового релиза PostgreSQL можно сделать экстремально скучным: взять release-notes и зачитать вслух. Но 9.5 обещает быть очень интересным релизом как с точки зрения улучшения производительности, так и функциональности - было бы жалко сделать о нем плохой доклад. Поэтому я выбрал несколько важных и нужных фич и расскажу про каждую - как она устроена, на что влияет и, главное, как ей разумно воспользоваться - максимум практических аспектов, минимум маркетинга. Без этого минимума нельзя, иначе мне никак не поделиться своим взглядом на то, как сейчас развивается PostgreSQL, и как жить пользователям Postgres'а при такой стратегии развития.
Сетевые аномалии – рано или поздно с ними сталкиваются все, кто так или иначе связан с созданием и эксплуатацией сетевых сервисов.
Природа сетевых аномалий и их проявления могут значительно варьироваться: потери пакетов, увеличение задержек, разрывы TCP-соединений. Но вне зависимости от своей природы сетевые аномалии требуют корректной и зачастую крайне оперативной диагностики.
В рамках доклада будут рассмотрены стандартные утилиты, такие как ping, traceroute, mtr, hping, а также области их применения. Самым значительным ограничением при использовании данных утилит является невозможность определения обратного пути пакета, что может значительно усложнить диагностику.
Также в докладе будут рассмотрены активные методы диагностики сетевых аномалий (Looking glass, RIPE Atlas, NLNOG RING, PlanetLab) и разработанный командой Qrator механизм определения обратного маршрута от любой заданной сети с использованием математического моделирования.
The document summarizes the results of performance tests run on PostgreSQL using different operating systems and file systems. DragonFly BSD had installation issues. FreeBSD was very "elite" but slower. SmartOS with ZFS performed well with compression enabled. Ubuntu with XFS achieved the best performance for asynchronous commits. In conclusions, Hammer file systems were too slow, FreeBSD was very "elite" but ZFS on SmartOS and XFS on Ubuntu had the best performance overall.
Alex Chistyakov gives a presentation on performance engineering. He discusses using profiling tools like the Poor Man's Profiler and flamegraphs to analyze the performance of a Python program. He profiles a Deluge BitTorrent client running in Docker and finds that it spends most of its time in the libtorrent C++ library with about 30% overhead from Python. The profiling helped identify areas for potential optimization.
Развитие DevOps/NoOps инструментов. Что было, что есть, что будет.Ivan Evtukhovich
Доклад для конференции SQADays 20, обзорно рассказывает про DevOps, переход к NoOps и микросервисной архитектуре, а также почему ручное тестирование умрет.
The document discusses a web application called Project Kaldur that collects and visualizes flamegraphs in real-time on Linux. It evaluates programming languages for the project, selecting Nim due to its static typing, macros, templates, and ability to compile to small binaries. Project Kaldur, written in Nim, collects flamegraphs and displays them live at a specific URL for performance analysis of Linux systems.
Service Discovery using etcd, Consul and KubernetesSreenivas Makam
Overview of Service Discovery and Service Discovery using etcd, Consul, Kubernetes and Docker. Presented at Open source meetup, Bangalore(http://www.meetup.com/Bangalore-Open-Source-Meetup/events/229763724/)
Семинар по Node.js в КПИ 20 октября 2014. Докладчики: Тимур Шемсединов, Никита Савченко, Максим Петренко. Краткое содержание:
* Что такое Node.js и как работает JavaScript в V8
* Профессионалы расскажут, почему они выбрали Node.js
* Вы узнаете его сильные и слабые стороны и где его лучше применять
* Будет полный обзор особеностей и внутреннего строения Node.js
* Примеры внедрения и Highload-проекты
* Вопросы развертывания, хостинг, тестирования, и отладки
* Где и что учить, что читать, как осваивать
Леонид Васильев "Python в инфраструктуре поиска"Yandex
2 июля 2011, Я.Субботник в Екатеринбурге
Леонид Васильев "Python в инфраструктуре поиска"
О докладе:
Описание архитектуры и реализации внутренних инструментов для управления поисковым кластером.
Что такое инфраструктура поиска? Какие задачи приходится решать? Какие инструменты для управления кластером используются в поиске? Как они устроены изнутри? Что можно посоветовать проектам с большой инфраструктурой? Какие существуют open-source аналоги?
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
РИТ++ 2017
Зал Сан-Паулу, 5 июня, 15:00
Тезисы:
http://ritfest.ru/2017/abstracts/2653.html
Новые микросервисы появляются, но монолит никуда не исчезает. Мы в Avito разрабатываем и деплоим сервисы с помощью связки Docker и Kubernetes. Зачастую интегрировать монолит с сервисами довольно проблематично. А что, если монолит тоже завернуть в Docker+Kubernetes и применять те же практики, что и для микросервисов?
В докладе речь пойдёт о том, как изменилась Dev-среда в Avito в связи с переходом на микросервисную архитектуру. В частности, поговорим про:
- подход "legacy in a box";
- то, как мы решали проблемы с базами и sphinxsearch;
- то, как Docker и Kubernetes помогли нам сократить различия между окружениями;
- Developer Experience.
Доклад будет полезен как командам, планирующим или переживающим распил монолита, так и всем тем, кому приходится работать со сторонними legacy-системами.
«DevOps — это о передаче смысла» — Александр Титов, Express 42DevDay
Текущим определением DevOps является аббревиатура CAMS:
— культура;
— автоматизация;
— измерения;
— распространение знаний.
Для меня это недостаточно понятно, я дополнил эти пункты тем, что DevOps это впервую очередь о передаче смысла без искажений. Я расскажу, как эти мысли соотносятся с методиками прошлого (ITIL, etc), как, используя такой подход, создать набор правил для работы и почему автоматизация — это не всегда хорошо.
Мы посмотрим как инструменты автоматизации помогают передавать смысл изменений между окружениями на примере реальных компонентов и кукбуков и рассмотрим на практике почему bash скрипты более слабый инструмент, чем Opscode Chef.
Совместно разберемся к требованиям к системе мониторинга. Что в системах мониторинга вредит передаче смысла, а что, наоборот, помогает. Какую систему мониторинга выбрать для вашего проекта?
Важность честности и открытости в команде для передачи смысла. Честные публичные пост-мортемы — это не проявление слабости, а проявление уважения к своим пользователям. Как научится делиться информацией друг с другом и не скрывать важного.
DevOps или исскуство ухода за Интернет-проектомAlexander Titov
Половина дела - создать интернет-проект, другая половина - позволить
ему работать и зарабатывать для вас деньги при любом количестве
пользователей и переменчивых погодных условиях вплоть до атаки инопланетян.
Жизнь есть жизнь, и она наполнена рисками - пренебрежение
эксплуатацией может оставить вас без бизнеса. Совсем.
http://devconf.ru/offers/81
Доклад будет о правильном и бережном уходе за интернет-проектами. О применении культуры DevOps на практике, о путях внедрениях и сложностях на пути технического директора, который осознанно встал на путь DevOps.
Методология DevOps - новое течение в управлении разработкой и эксплуатацией. DevOps дает возможность бизнесу быстрее добиваться своих целей, активнее меняться и постоянно пробовать новое.
Основные направления DevOps:
- новая инженерная культура, построенная на взаимной - ответственности коллектива;
- автоматизация и инструменты;
- управление изменениями и мониторинг;
- распространение знаний между всеми участниками технической команды.
«Масштабируемый DevOps» Александр КолесеньIT Share
Типичные подходы к развертыванию приложений: как правильные, так и неправильные, но повсеместно применяемые.
Как сделать так, чтобы развертывание не стало проблемой с линейным ростом количества поддерживаемых окружений.
Методы обновления проекта с нулевым временем простоя: когда это уместно и принципиально возможно.
Vagrant - поднимаем проект на рабочей машине
Vagrant может быть еще проще (Vagrant plugins)
Как Ansible упрощает разворачивание проекта в Vagrant
А вы пробовали Docker?
3. Клиент
Сервер как произведение искусства
Утеря знаний вместе с админом
Два вечера, чтобы узнать почему ничего не работает
Еще два вечера, чтобы понять как с этим дальше жить
Мониторинг присылает 100 email в день
4. Управление
конфигурацией
Весь опыт системного администратора
в git репо
Вся информация о компонентах есть в git репо
Мониторинг как код =)
Без рук!
5. Chef Workflow
1 клиент – 1 git репозиторий
Логическое деление кукбуков на слои
Chef-solo для локального развертывания
1 окружение – 1
chef server
Развертывание
проекта
локально
–
три
команды:
bundle install, librarian-chef install, vagrant up
7. Слой base
lvm, sysctl, apt, ssh ...
Выполняется на всех серверах
Сожержит кукбук с chef libraries
# Add express42 public web repository
apt_repository "express42-web" do
action :add
uri "http://repos.express42.com/web/precise/ ./"
key "http://repos.express42.com/web/precise/Release.key"
end
8. Слой service
redis, postgresql, nginx ...
Содержит кукбуки сервиcов, которые
нужны для приложения
LWRP вызывается из кукбуков приложений
# Setup redis main database
redis "main" do
configuration(
:bind => "0.0.0.0",
:maxclients => 256
)
end
9. Слой Application
app::redis, app::backend ...
# Add express42 public web repository
apt_repository "express42-web" do
action :add
uri "http://repos.express42.com/web/precise/ ./"
key "http://repos.express42.com/web/precise/Release.key"
end
#Create partition for rails application
partition redis_lvolume_name do
group lvm_group
size lvolume_size
filesystem 'ext4'
mount_point railsapp_application_directory
end
listen_address = net_get_private_ip()
# Setup redis main database
redis "main" do
configuration(
:bind => listen_address,
:maxclients => 256
)
end
...
10. Репозиторий
Cheffile <-- используемые в проекте кукбуки
Cheffile.lock
Gemfile <-- гемы для запуска проекта
Gemfile.lock
Vagrantfile
cookbooks <-- результат работы librarian
data_bags
environments
inhouse-cookbooks <-- кукбуки проекта
roles
11. Управление
репозиторием
Librarian Berkshelf
Могут интегрироваться с vagrant
Управляют зависимостями like a pro bundler
Результатом работы является директория с Самостоятельно заливает кукбуки на chef-
актуальными версиями кукбуков. server
Что и когда заливать решаете вы управляет только кукбуками
13. Chef Solo
Развертывание проекта локально занимает
минимум времени и усилий
Клиент может поднять свой проект без боли
Приходится тестировать проект в
chef-client и chef-solo
14. Chef Solo
Node search in solo mode
if Chef::Config[:solo]
Chef::Log.warn("This recipe uses search. Chef Solo does not support search. I will return current node")
postgresql_master_node = [ node ]
backend_node = [ node ]
else
postgresql_master_node = search(:node, "role:postgresql-master AND chef_environment:#{node.chef_environment}")
backend_node = search(:node, "role:application-backend AND chef_environment:#{node.chef_environment}")
end
Databag search in solo mode
https://github.com/edelight/chef-solo-search
16. Роли это боль
Не версионируются,
неотделимы от кукбука
Проблемы с распространением кукбуков
Боль почти не чувствуется, если в одном chef сервере
одно окружение
Альтернативный путь: role cookbooks
17. Role cookbooks
roles/rails-backend.rb:
name "rails-backend"
description "Rails application backend"
run_list("recipe[client::rails-backend]")
cookbooks/client/metadata.rb:
name "client"
description "Sets up applications for client"
version "1.0.0"
...
depends "runit"
depends "rvm"
depends "lvm"
depends "postgresql"
depends "redis"
cookbooks/client/recipes/rails-backend.rb:
include_recipe "rvm"
node.override['rvm']['rubies'] = [ 'ruby-1.9.3-p392' ]
...
18. Окружения
chef-run в vagrant дожен проходить с аттрибутами,
которые прописаны в кукбуках
переопределение аттрибутов в файле окружения
environments/production.rb:
name "production"
description "Production environment"
default_attributes(
"postgresql" => {
"volume_size" => "500G",
"private_network" => "172.20.1.0/24",
"databases" => {
"main" => {
"shared_buffers" => "3GB",
"wal_keep_segments" => 128
}
}
}
)
19. Мониторинг
Собираются базовые(io,net,os) метрики
Графики по всем метрикам
Приложение присылает данные через zabbix trapper
Сервер добавляется в мониторинг после первого
chef-run
20. Мониторинг::Пример
zabbix_connect "connect to zabbix" do
apiurl "http://<zabbix-server>/api_jsonrpc.php"
databag "zabbix"
end
zabbix_host node.fqdn do <-- добавление хоста в мониторинг
host_group "Rails-backend"
use_ip true
ip_address net_get_private_ip(node)
end
zabbix_template 'Linux_Template' <-- zabbix шаблон с базовыми проверками
zabbix_screen node.fqdn do <-- создание screen
screen_item "System: Load Average" do
resource_type :graph
width 900
height 200
y 0
end
screen_item "System: CPU Utilization" do
resource_type :graph
width 900
height 200
y 1
end
screen_item "Memory: Triggers" do
resource_type :graph
width 900
height 200
y 2
end
end