Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Движение по хрупкому дну / Сергей Караткевич (servers.ru)

392 views

Published on

Сегодня Интернет увлечен микросервисами, контейнерами и immutable-инфраструктурой. Очень сложно не поддаться искушению внедрить что-то подобное в компании, в которой вы работаете сейчас. Я попытаюсь отговорить вас использовать эти технологии во вред приложению, себе и бизнесу компании в целом. Я расскажу о типовом проекте, который был запущен в 20 странах за 4 месяца, проблемах, которые я встретил, и выводах, которые я сделал.

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

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

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

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

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Движение по хрупкому дну / Сергей Караткевич (servers.ru)

  1. 1. DevOps движение по хрупкому дну Сергей Караткевич
  2. 2. Про меня: Админю с 2003 Работаю с разработчиками с 2007 Решаю бизнес-задачи с 2010
  3. 3. «Сегодня я расскажу, как сэкономить на базах данных огромные деньги, например, миллион долларов, как это сделали мы.» Аникин Денис (Mail.Ru)
  4. 4. но мы не тратим миллион долларов. даже полмиллиона
  5. 5. О чем я буду рассказывать
  6. 6. О чем я буду рассказывать
  7. 7. О чем я буду рассказывать
  8. 8. Сервера Офисы
  9. 9. Сервера Офисы
  10. 10. Сервера Офисы
  11. 11. Сервера Офисы
  12. 12. Сервера Офисы
  13. 13. Сервера Офисы
  14. 14. Сервера Офисы
  15. 15. Сервера Офисы
  16. 16. все это произошло за 4 месяца — 90 рабочих дней
  17. 17. Почему вы используете Docker неправильно «Иногда мне кажется, что Docker придумали специально, чтобы оградить людей от NodeJS»
  18. 18. FROM php:7-fpm-alpine ENV DEBIAN_FRONTEND=noninteractive RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && apk update && apk upgrade && apk add git curl zlib-dev libmemcached-dev shadow@testing && git clone --branch php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached && cd /usr/src/php/ext/memcached && docker-php-ext-configure memcached --disable-memcached-sasl && docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && docker-php-ext-enable opcache && usermod -u 1000 www-data && rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/* ADD . /var/www/html/ WORKDIR /var/www/html RUN rm -rf ./docker && chown -R www-data.www-data . && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && mkdir -p ~/.ssh && echo -e "Host github.comntStrictHostKeyChecking non" >> ~/.ssh/config && composer install --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader EXPOSE 9000 CMD ["php-fpm"]
  19. 19. docker build .
  20. 20. FROM php:7-fpm-alpine ENV DEBIAN_FRONTEND=noninteractive RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && apk update && apk upgrade && apk add git curl zlib-dev libmemcached-dev shadow@testing && git clone --branch php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached && cd /usr/src/php/ext/memcached && docker-php-ext-configure memcached --disable-memcached-sasl && docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && docker-php-ext-enable opcache && usermod -u 1000 www-data && rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/* ADD . /var/www/html/ WORKDIR /var/www/html RUN rm -rf ./docker && chown -R www-data.www-data . && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && mkdir -p ~/.ssh && echo -e "Host github.comntStrictHostKeyChecking non" >> ~/.ssh/config && composer install --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader EXPOSE 9000 CMD ["php-fpm"] usermod -u 1000 www-data &&
  21. 21. FROM php:7-fpm-alpine ENV DEBIAN_FRONTEND=noninteractive RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && apk update && apk upgrade && apk add git curl zlib-dev libmemcached-dev shadow@testing && git clone --branch php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached && cd /usr/src/php/ext/memcached && docker-php-ext-configure memcached --disable-memcached-sasl && docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && docker-php-ext-enable opcache && usermod -u 1000 www-data && rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/* ADD . /var/www/html/ WORKDIR /var/www/html RUN rm -rf ./docker && chown -R www-data.www-data . && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && mkdir -p ~/.ssh && echo -e "Host github.comntStrictHostKeyChecking non" >> ~/.ssh/config && composer install --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader EXPOSE 9000 CMD ["php-fpm"] ADD . /var/www/html/
  22. 22. FROM php:7-fpm-alpine ENV DEBIAN_FRONTEND=noninteractive RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && apk update && apk upgrade && apk add git curl zlib-dev libmemcached-dev shadow@testing && git clone --branch php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached && cd /usr/src/php/ext/memcached && docker-php-ext-configure memcached --disable-memcached-sasl && docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && docker-php-ext-enable opcache && usermod -u 1000 www-data && rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/* ADD . /var/www/html/ WORKDIR /var/www/html RUN rm -rf ./docker && chown -R www-data.www-data . && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && mkdir -p ~/.ssh && echo -e "Host github.comntStrictHostKeyChecking non" >> ~/.ssh/config && composer install --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader EXPOSE 9000 CMD ["php-fpm"] ADD . /var/www/html/ •Используйте COPY •Помните о контексте
  23. 23. FROM php:7-fpm-alpine ENV DEBIAN_FRONTEND=noninteractive RUN echo '@testing http://nl.alpinelinux.org/alpine/edge/testing' >> /etc/apk/repositories && apk update && apk upgrade && apk add git curl zlib-dev libmemcached-dev shadow@testing && git clone --branch php7 https://github.com/php-memcached-dev/php-memcached /usr/src/php/ext/memcached && cd /usr/src/php/ext/memcached && docker-php-ext-configure memcached --disable-memcached-sasl && docker-php-ext-install bcmath zip pdo_mysql memcached pcntl && docker-php-ext-enable opcache && usermod -u 1000 www-data && rm -rf /usr/local/src/* /var/cache/apk/* /tmp/* /var/tmp/* ADD . /var/www/html/ WORKDIR /var/www/html RUN rm -rf ./docker && chown -R www-data.www-data . && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83fkx69331sdw5 && mkdir -p ~/.ssh && echo -e "Host github.comntStrictHostKeyChecking non" >> ~/.ssh/config && composer install --no-dev --no-interaction --no-progress --no-scripts --optimize-autoloader EXPOSE 9000 CMD ["php-fpm"] ENV DEBIAN_FRONTEND=noninteractive RUN composer config --global github-oauth.github.com osdc47a9835779cb32c0d06dafeb83f kx69331sdw5 &&
  24. 24. Docker очень хорош для тестов docker run -d --name DB_NAME postgres docker run --user jenkins -v $WORKSPACE:$APP_DIR -w $APP_DIR --link DB_NAME:database custom-node:0.10.28 bash -c 'npm install && npm test'
  25. 25. '
  26. 26. Почему immutable вас никуда не приведет
  27. 27. Почему immutable вас никуда не приведет
  28. 28. Почему immutable вас никуда не приведет
  29. 29. Почему immutable вас никуда не приведет • Runtime vs Buildtime (в какой-то момент время билда ПРЕВЫШАЕТ время работы контейнера) • в моей системе время сборки 40минут + время замены через терраформ • у Akamai деплой новой конфигурации порядка 50минут
  30. 30. Почему микросервисы похоронят вашу компанию Мы внедряем микросервисы, чтобы: • позволить распределенным командам разрабатывать части приложений • деплоить части приложений независимо друг от друга • деплоить без остановки приложения • масштабировать части приложения быстро и независимо
  31. 31. Alice Bob Mysql
  32. 32. Alice Bob Mysql Memcached
  33. 33. Alice Bob Mysql Memcached Worker
  34. 34. Alice Bob Mysql Memcached Worker Solr
  35. 35. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob
  36. 36. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API
  37. 37. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API API API Elasticsearch Elasticsearch
  38. 38. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API API API Elasticsearch Elasticsearch Balancer
  39. 39. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API API API Elasticsearch Elasticsearch Balancer CDN BI
  40. 40. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API API API Elasticsearch Elasticsearch Balancer CDN BI Solr
  41. 41. Почему микросервисы похоронят вашу компанию «В сложных системах поведение агентов приводит к неожиданным результатам для всей системы»* *Про сложность позже
  42. 42. 'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’, 'cloud.aws.region' => region,
  43. 43. 'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’, 'cloud.aws.access_key' 'cloud.aws.secret_key'
  44. 44. 'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’, 'discovery.ec2.groups' => sg
  45. 45. 'cluster.name' => 'escluster', 'cloud.aws.region' => region, 'http.port' => 9200, 'script.inline' => 'on', 'script.indexed' => 'on', 'discovery.type' => 'ec2', 'bootstrap.mlockall' => 'true', 'cloud.aws.access_key' => node["es-cluster"]["aws"]["access_key"], 'cloud.aws.secret_key' => node["es-cluster"]["aws"]["secret_key"], 'discovery.ec2.groups' => sg, 'discovery.zen.ping.multicast.enabled' => 'false', 'discovery.ec2.host_type' => 'private_ip', 'network.publish_host' => '_ec2:privateIpv4_', 'network.host' => '0.0.0.0’, 'discovery.ec2.host_type' 'network.publish_host'
  46. 46. Почему микросервисы похоронят вашу компанию
  47. 47. Почему микросервисы похоронят вашу компанию • 11 дней потребовалось C****F***e, чтобы достать IP-адрес из блеклиста • 41 день потребовался компании A****I, чтобы избавиться от двойного слеша в конце URL • 13дней потребовалось компании A****n, чтобы починить сеть в Сингапуре после выхода из строя кабеля
  48. 48. Почему микросервисы похоронят вашу компанию
  49. 49. Почему ваша система слишком сложна «Понимание происходящего может приходить не сразу, а работать должно было вчера» @bogdar
  50. 50. Alice Balancer Bob Balancer Memcached Mysql Solr Worker AliceAlice BobBob Elasticsearch API API API Elasticsearch Elasticsearch Balancer CDN BI Solr Как микросервисы взаимодействуют между собой
  51. 51. Почему ваша система слишком сложна
  52. 52. Почему ваша система слишком сложна
  53. 53. Почему ваша система слишком сложна
  54. 54. Почему ваша система слишком сложна • bogdar: понимание происходящего может приходить не сразу • bogdar: а работать должно было вчера • Среднее покрытие кода тестами на моих проектах 0.23% Каждый контейнер становится уникальным что вводит элемент неожиданности КАЖДАЯ КОМАНДА СБОРКИ МОЖЕТ ОТКАЗАТЬ ВЫ НИКОГДА НЕ ПРОВЕРЯЛИ ИХ ВСЕ
  55. 55. Agile, CI, CD и ChatOps не заработают
  56. 56. Деплой Но это работает просто отлично если работает
  57. 57. Деплой Новый скрипт максимум 16деплоев в день с 4 апреля по 3 мая 210деплоев на стейджинг И 230деплоев на продакшн! Старый скрипт 32деплоя (за февраль)
  58. 58. Деплой Основные проблемы: Запуск постскриптов Разница между nohup и & Лок-файлы Логгинг
  59. 59. Деплой Логгинг exec 3>&1 4>&2 trap 'exec 2>&4 1>&3' 0 1 2 3 exec 1> /var/log/deploy.log 2>&1
  60. 60. Деплой
  61. 61. Вопросы!

×