SlideShare a Scribd company logo
Кілька банальних рецептів успішного веб-
                проекту
            Андрій Корнілов




                Тернопіль
              Березень 2013
Про мене

                        Зараз
             Technical Lead @Rebbix, Lviv
        VNU Vacature media (Netherlands/Belgium)

                         В минулому
  bitternet.ua, stelex.com (General Electric), markplaats.nl
(eBay classified group), lofty.com, знову markplaats.nl (eBay
              classified group), modnakasta.ua

                         Інтереси
           php, python, software engineering stuff
Про презентацію

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

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

Хоча, можуть і не допомогти - якщо проблеми
   лежать за межами software engineering
Про дивну назву

На практиці всі підходи та архітектурні рішення
              для вебу статичні.

   Для більшості проблем давно знайдено
            прийнятні рішення.

 Девелоперу залишається лише визначити з
  проблемою якого саме виду він зіткнувся і
вибрати рішення, яке дозволить вирішити цю
                 проблему
Про дивну назву

При чому рішення це, як правило, не
   міститиме ніякого рокет-сайнс
?!???>>!!!...
Високо навантажений проект

  Таким чином поняття high loaded проекту коже може
           трактувати на власний розсуд :-)

 В побутовому сенсі - це ресурс, який має високу (wut?)
                     відвідуваність

Як правило, high loaded проект, з технічної точки зору,
 це апаратно-програмний комплекс, який складається з
  багатьох взаємодіючих підсистем - тобто розподілена
  система, при чому ця система перебуває під впливом
             високо конкурентного доступу.
Високо навантажений проект


  Для ресурсів, які активно використовуються (іншими
словами - високо навантажених), нема поняття "це мало
    імовірно, для цього потрібен надзвичайний збіг
       обставин, тому це ніколи не станеться"

  Підходи до обробки запитів в високо-навантажених
  проектах співпадають з підходами теорії масового
  обслуговування (звичайні черги, аеропортні черги,
            паралельне обслуговування)
Часткова коректність

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

Шукайте можливість бути частково доступними -
повертайте якісь результати, навіть якшо ваша система
дає частковий збій.
● Поверніть хоч якісь результати пошуку, якщо не
   можете повернути детальні.
● Якщо не можете отримати підтвердження оплати в
   банку, позначте замовлення як частково підтверджене і
   переходьте до наступного кроку.
Часткова цілісність

           Маленький чіт - стан системи такий,
             яким його бачить користувач.

Якщо користувач не може побачити порушення цілісності
даних - її нема.

Приклад. Якщо ви написали коментар до сторінки і,
практично в той самий момент, хтось її відкрив - не
важливо, щоб він побачив ваш коментар, важливо щоб ви
його побачили. Таке саме можна сказати, наприклад, про
відображення резервації товару в каталозі інтернет
магазину. Часто саме це забезпечує кешування (але не
завжди кеш мість не актуальні дані - залежить від політики
інвалідації)
Успішність / Не успішність



    Успішність чи не успішність проекту (з точки зору
 інженера) залежить від того, які фактори ризику можуть
впливати на цей проект і чи ці фактори (в достатній мірі)
                     зкомпенсовані
Деякі важливі фактори ризику

● людські фактори - загальний рівень команди, помилки
  в силу психо-фізичного стану

● технічні фактори
  ○ адекватна інфраструктура навколо проекту -
    документація, тести, метрики коду
  ○ складність проекту - чим складніша система тим
    більша імовірність помилки
  ○ технічні несподіванки

● фактори залежності і контролю
  ○ залежність від коду, який ви не контролюєте
  ○ залежність від систем, які ви не контролюєте
Людський фактор

                     Всі люди - люди*




І, в силу цього, час від часу, роблять помилки. Через хибні
    припущення на основі не достатньої інформації. При
    написанні коду. При виконанні певних дій (особливо
                          рутинних)
                         * (с) моя дружина
Людський фактор

                  Запобіжні підходи

● детальна (і головне - актуальна) документація
● тести (юніт, функціональні etc)
● використання певних практик (кодревью, парне
  програмування)
● формальні процедури (регламенти, git-flow)
● автоматизація дій (білд, деплоймент)
Технічні фактори

З технічною складністю дозволяє боротися декомпозиція
            системи на простіші компоненти

                      Типові компоненти:
●    медіа сервери (media, assets)
●    бекінг сервіси (db, cache, queues, search)
●    апп-сервери
●    бекграунд воркери

        Про технічні несподіванки і фактори залежності
    поговоримо в одному з наступних розділів презентації -
                    twelve factor application
Shared nothing

  Shared nothing архітектура це концепція розподіленого
        компьютінгу в які кожна нода є незалежною і
 самодостатньою (в плані обчислювальних активностей).
  Або більш конкретно - ноди не використовують спільно
                пам'ять чи дисковий розділ.
Концепція зараз широко використовується, в основному, в
  вебі (хоча започаткована була в середині 80-х для баз
    даних) і практично безлімітно скейлиться (що довів
   Google). Для веб-додатків стан при цьому зберігають
           спеціально призначені backing сервіси
  Для баз даних SN знаходить відображення в концепції
                          шардінгу.
Feature flags

 Feature flags - реальний спосіб зменшення ризиків при
 розгортанні нової функціональності в умовах великого
                      навантаження
 Цю концепцію часто помилково асоціюють лише з A/B
  тестуванням. Але, поряд з цим, використання флагів
   дозволяє запускати нову функціональність (часто з
непрогнозованим performans ефектом) лише для певної
             групи чи відсотку користувачів.
Таким чином можна навіть проводити поступову міграцію
       користувачів з однієї платформи на іншу.
"Правильні інструменти"

Використовуйте правильні інструменти для кожної із своїх
задач
● З пошуком у великому масиві даних краще справиться
    спеціалізований сервер пошуку (SOLR, ElasticSearch,
    Sphinx) ніж реляційна база даних
●   В якості медіа сервера краще виступить легкий веб
    сервер ніж apache
●   Мільйон інших прикладів...
Метрики

Єдиний спосіб переконатися, що робота зроблена добре і
        взагалі все іде добре (в плані тенденцій)

● метрики коду - sonar
● системний моніторинг - munin, zabbix, new relic
● метрики бізнесу (транзакції певного типу) - new relic,
  graphite, google analytics
● rum (performance monitoring) - new relic

         І навіть передбачити майбутні проблеми
         (Навчіться прогнозувати запас ресурсів)
Метрики

 Збір метрий єдиний спосіб подолати розрив між вашими
уявленнями про те, як ваша система працює в продакшен
              і між тим як вона працює насправді.
  Розуміння різниці між тим, як поводила себе система до
    релізу і після релізу відрізняє успішний інженіринг від
                           шаманства.
Звичайно, самих метрик часто не достатньо для розуміння
   того, що саме потрібно робити з проблемою, але вони
 необхідні для розуміння того, що робити таки щось треба
                         (або не треба).
12-Factors App

     12-factor app це набір правил, які дозволяють:

● Використовувати декларативні формати
  конфігурування;

● Мати чіткий "контракт" з операційною системою, за
  рахунок чого досягається максимальна портабельність
  між середовищами, легке розгортання в клауд;

● Мінімізувати відмінності між розробницьким і
  продакшен середовищем;

● Дозволяє масштабувати проект без суттєвих змін
  інструментів, архітектури коду і процесу розробки.
12-Factors App

Ця методологія може бути застосована до веб додатків,
      написаних з використанням будь-якої мови
 програмування, і з використанням будь-якої комбінації
     backing services (база даних, черга, кеш тощо)
12-Factors App

Єдина codebase, яка знаходить в системі
          контролю версій -
багато регулярних розгортань (deploys)
12-Factors App

● Якщо система складається з кількох
  codebases, це не додаток – це розподілена
  система. Кожен компонент розподіленої
  системи це окремий додаток і має
  інтивідуально задовольянти вимогам 12-
  factor app.
● Кілька додатків, які використовують
  спільний код порушують ці принципи.
  Спільний код має бути виділено в
  бібліотеку, яка має бути включена в систему
  як будь-яка інша залежність.
12-Factors App

Розгортання (deploy) це примірник додатка,
який виконується. Це може бути продакшен
сайт, один чи кілька тестових сайтів, сайт в
    робочому середовищі розробника.

Код має бути спільним для всіх розготань, за
виключенням того, що розгорнуті версії коду
             можуть різнитися.
12-Factors App

● Додаток ніколи не має робити припущень про систему,
  на якій буде виконуватись з точки зору своїх
  залежностей, декларує залежності явно і в повній мірі
  через dependency declaration manifest.

● Уникайте випадків, коли залежності одного додатку
  можуть впливати на інший додаток або на інше
  розгортання цього самого додатку. Для цого
  використовуйте ізоляцію залежностей.

● Це правило має бути чинним для будь-яких типів
  середовищ
12-Factors App

В ruby для декларації залежностей використовуються
Gemfile, для ізоляції залежностей - bundle exec.

В python для декларації залежностей використовуються
pip + requirements.txt, virtualenv - для ізоляції залежностей.

В java-sctipt - bower.

В php - Composer
12-Factors App
12-Factors App

     Розробники маніфесту про 12-factor додатки також
     наполягають на тому, що не варто покладатися на
  наявність в системі будь-яких залежностей. Наприклад
ImageMagick чи curl. Аргументуючи це тим, що не можливо
   гарантувати їх наявності взагалі чи наявності сумісної
                          версії.

   На мою думку, такий підхід є перебільшенням, адже
такого роду залежності можна задовільняти з допомогою
 таких інструментів як Chef і Puppet (хоча, мушу визнати,
  при цьому опускаються вимоги ізоляції залежностей)
12-Factors App

     Граф залежностей і конфлікти залежностей

Досить часто залежності можуть перетворитися в коштар.
  Особливо, якщо у ваших залежностей є свої, не відомі
 вам, і , при цьому, все це знаходиться за межами ваших
                  можливостей контролю.

Якщо бібліотека, яку ви маєте намір використати,
реалізує якусь просту функціональність - це привід
  задуматися, чи потрібна вашому проекту зайва
 залежність. Не ставайте залежними від когось, без
                 достатніх підстав.
12-Factors App

         Зберігайте конфігурацію в змінних оточення
     Конфігурація додатку це будь-що, що відрізняє одне
    розгортання від іншого (за винятком версії коду). Вона
                       може включати:

● Параметри конекту до backing services (бази даних,
    Memcached)
●   Параметри конекту до зовнішніх сервісів (Amazon S3,
    Twitter API)
●   Ім'я хоста тощо
12-Factors App

● Інколи конфігурацію включають в код у вигляді
    констант - це не припустимо з точки зору додатку,
    який відповідає вимогам 12-Factors App. Адже
    конфігурація це єдине, що має відрізняти різні
    розгортання додатку. І в жодному разі не код.
●   Інший підхід - зберігати конфігурацію в окремих
    файлах, за медами коду теж не вітається, оскільки
    легко можна припустися помилки і додати їх в
    репозиторій, або складно забезпечити ізоляцію
    конфігурацій
●   Групування конфігурацій по типам середовища -
    досить легко може перетворитися в некерований
    процес.
12-Factors App

Чітко розділяйте етапи зборки, розгортання і виконання
                         коду
12-Factors App

 Збірка це етап на якому створюється певний артефакт-
набір коду, залежностей, асетів (при потребі компілюється
                     бінарний файл)
  Розгортання об'єднує артефакт, ориманий на етапі
  зборки, з відповідним конфігами. Результат - сутність,
        готова до виконання в певному середовищі
 Виконання - запуск коду в середовищі у вигляді процесу
                   або набору процесів.

   Заборонено вносити зміни в код, який виконується
12-Factors App

   Завжди виконуйте свій додаток в середовищі як один
  (частіше всього на девелоперському середовищі) або
 кілька (частіше всього на продакшен) stateless процесів.

      Будь-які дані, які вимагають збереження, мають
 зберігатися на stateful backing сервісі - найчастіше в базі
                            даних.
      Локальна пам'ять або файлова система можуть
    розцінюватися виключно як короткотерміновий кеш
(наприклад для зкомпільованих темплейтів, завантажених
  файлів), при цьому ніколи не робиться припущення що
     дані в цьому кеші завжди доступні для наступного
  реквеста - адже він може потрапити на інший сервер чи
                           процес.
12-Factors App

  Масштабування через процеси - в twelve-
      factor app архітектурі процеси це
         основоположний елемент.
   З використанням цієї простої концепції
програміст може забезпечити масштабування
   в широких межах поділяючи певні типи
 навантаження між відповідними процесами.
Наприклад одні типи процесів відповідають за
 обробку http запитів, інший тип відповідає за
   виконання "довгих" задач в бекграунді.
12-Factors App

Таким чином, щоб проскейлити певний тип навантаження
(у відповідності до концепції shared nothing) треба просто
            добавити ще процеси певного типу
12-Factors App

              Crash only design

  Дизайн процесів має передбачати випадок
того, що процес може раптово припинити сво
 є виконання - при цьому всі ресурси, які він
 використовував мають бути звільнені, дані з
  бекінг сервісів в жодному разі не має бути
    пошкоджено, для воркер процесів - не
   виконана задача має бути повернута на
          виконання іншим процесом
12-Factors App

         Розглядайте логи як потік подій

Логи додають візуалізацію поведінки додатка. При
  цьому, додаток, розроблений у відповідності з
       правилами 12-factor не займаються
    обслуговуванням інфраструктури логів (не
 відкривають спеціальний лог файл тощо) вони
       просто пишуть потік подій в stdout.

Під час локальної розробки програміст бачить цей
  потік в терміналі і таким чином спостерігає за
               поведінкою додатка.
12-Factors App


На стейджінг і продакшен середовищах кожен
  такий потік перехоплюється середовищем,
  агрегується з іншими потоками і може бути
   відісланий для подальшого зберігання чи
 перегляду. Ці подальші дії жодним чином не
            відомі самому додатку
12-Factors App

Детальне логування success кейсів - надмірне
   Error кейси потрібно логувати якомога
                детальніше
12-Factors App

Ваші середовища для розробки, тестування та
    продакшен мають бути максимально
               уніфіковані

      Це дозволить уникнути технічних
 несподіванок, про які ми починали говорити
                   раніше
12-Factors App

Розриви в часі: Розробник може писати код
дні, тижні і навіть місяці перед тим, як код
потрапить на продакшен.

Розриви у відповідальності: Розробник
пише код, DevOps інженер розгортає його.

Розриви в інструментах: Для розробки
використовується Nginx+SQLite+OS X, а на
продакшені - Apache+MySQL+Linux.
12-Factors App

  Сучасні інструменти менеджменту пакетів
    (homebrew, apt, yum), декларативні
 інструменти провіженінгу (Chef і Puppet) в
  сукупності з легкими система управління
віртуальними середовищами (Vagrant, kvm)
дозволяють розробнику запускати локально
 середовище, яке максимально близьке до
                 продакшен
Адміністративні задачі

   Виконуйте адміністративні задачі як специфічний
                    процес додатка
Адміністративні задачі це задачі, які необхідно виконувати
поряд з основною - обслуговування web запитів. Такі, як:
● міграція схеми бази даних (manage.py syncdb в Django,
   rake db:migrate в Rails)
● виконання REPL shell
● виконання одноразових скриптів
Адміністративні функції мають виконуватися з усіма тими
самими обмеженнями, що і звичайний 12-factor додаток - з
тими самим кодом, залежностями, ізоляцією.
Адміністративний код має включатися в код додатку для
уникнення проблем синхронізації версій коду.
Посилання
●   The Twelve-Factor App - http://www.12factor.net/
●   http://devopsreactions.tumblr.com/
●   http://www.perfplanet.com/
●   http://www.vagrantup.com/
Q&A
Дякую за увагу!

Андрій Корнілов

Копанія:
Rebbix

Email:
andriy.kornilov@gmail.com

More Related Content

Similar to Корнілов Андрій

Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Lviv Startup Club
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...
Andrii Podanenko
 
Informatyka-9-klas-Ryvkind-2022 (1).pdf
Informatyka-9-klas-Ryvkind-2022 (1).pdfInformatyka-9-klas-Ryvkind-2022 (1).pdf
Informatyka-9-klas-Ryvkind-2022 (1).pdf
ssuser59c0a2
 
Computers and Computing Works lecture №7
Computers and Computing Works lecture №7Computers and Computing Works lecture №7
Computers and Computing Works lecture №7
Lesia Sobolevska
 
Case технології
Case технології Case технології
Case технології
Irina Semenova
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
GlobalLogic Ukraine
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
Pavlo Iuriichuk
 
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Lviv Startup Club
 
Введення в програмну інженерію
Введення в програмну інженеріюВведення в програмну інженерію
Введення в програмну інженерію
Oleg Nazarevych
 
Agile (IF PM Group) v2
Agile (IF PM Group) v2Agile (IF PM Group) v2
Agile (IF PM Group) v2
Anatoliy Okhotnikov
 
Shaping future of internal audit with IT
Shaping future of internal audit with ITShaping future of internal audit with IT
Shaping future of internal audit with IT
Anastasiia Konoplova
 
m-9-10.pptx
m-9-10.pptxm-9-10.pptx
m-9-10.pptx
AlexanderSmidt
 
Тема 1 Введення в програмну інженерію
Тема 1 Введення в програмну інженеріюТема 1 Введення в програмну інженерію
Тема 1 Введення в програмну інженерію
Oleg Nazarevych
 
Nikita Zahurdaiev: PMO Tools and Technologies (UA)
Nikita Zahurdaiev: PMO Tools and Technologies (UA)Nikita Zahurdaiev: PMO Tools and Technologies (UA)
Nikita Zahurdaiev: PMO Tools and Technologies (UA)
Lviv Startup Club
 
урок 6
урок 6урок 6
урок 6
School5uman
 
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
Drupaltour
 
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшеніЛюбов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
Lviv Startup Club
 
Стандарт верифікації безпеки веб-додатків ASVS 3.0
Стандарт верифікації безпеки веб-додатків ASVS 3.0Стандарт верифікації безпеки веб-додатків ASVS 3.0
Стандарт верифікації безпеки веб-додатків ASVS 3.0
uisgslide
 
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
Dakiry
 
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
Drupaltour
 

Similar to Корнілов Андрій (20)

Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
Artem Ternov: Побудова платформи під DataEngineering та DataScience в ентерпр...
 
природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...природна і економна дорожня карта для переходу команди розробки на тест центр...
природна і економна дорожня карта для переходу команди розробки на тест центр...
 
Informatyka-9-klas-Ryvkind-2022 (1).pdf
Informatyka-9-klas-Ryvkind-2022 (1).pdfInformatyka-9-klas-Ryvkind-2022 (1).pdf
Informatyka-9-klas-Ryvkind-2022 (1).pdf
 
Computers and Computing Works lecture №7
Computers and Computing Works lecture №7Computers and Computing Works lecture №7
Computers and Computing Works lecture №7
 
Case технології
Case технології Case технології
Case технології
 
Павло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. HowtoПавло Юрійчук — Перехід на Angular.js. Howto
Павло Юрійчук — Перехід на Angular.js. Howto
 
Global logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.jsGlobal logic tech talk switching to Angular.js
Global logic tech talk switching to Angular.js
 
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
Alexander Gritsenko: Як нетехнічному менеджеру команди вибрати правильне ріше...
 
Введення в програмну інженерію
Введення в програмну інженеріюВведення в програмну інженерію
Введення в програмну інженерію
 
Agile (IF PM Group) v2
Agile (IF PM Group) v2Agile (IF PM Group) v2
Agile (IF PM Group) v2
 
Shaping future of internal audit with IT
Shaping future of internal audit with ITShaping future of internal audit with IT
Shaping future of internal audit with IT
 
m-9-10.pptx
m-9-10.pptxm-9-10.pptx
m-9-10.pptx
 
Тема 1 Введення в програмну інженерію
Тема 1 Введення в програмну інженеріюТема 1 Введення в програмну інженерію
Тема 1 Введення в програмну інженерію
 
Nikita Zahurdaiev: PMO Tools and Technologies (UA)
Nikita Zahurdaiev: PMO Tools and Technologies (UA)Nikita Zahurdaiev: PMO Tools and Technologies (UA)
Nikita Zahurdaiev: PMO Tools and Technologies (UA)
 
урок 6
урок 6урок 6
урок 6
 
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
DrupalTour. Zhytomyr — Drupal Optimization (Dmitry Kinakh, InternetDevels)
 
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшеніЛюбов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
Любов Самойлова - Чутки про смерть PMBoK Guide сильно перебільшені
 
Стандарт верифікації безпеки веб-додатків ASVS 3.0
Стандарт верифікації безпеки веб-додатків ASVS 3.0Стандарт верифікації безпеки веб-додатків ASVS 3.0
Стандарт верифікації безпеки веб-додатків ASVS 3.0
 
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...Anna Podolynna, BAQ  "How not to loose a QA focus and organize testing proces...
Anna Podolynna, BAQ "How not to loose a QA focus and organize testing proces...
 
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
DrupalTour. Khmelnytskyi — Ember (Timur Bolotyuh, stfalcon.com)
 

More from Oleg Nazarevych

Етикет службового листування
Етикет службового листуванняЕтикет службового листування
Етикет службового листування
Oleg Nazarevych
 
Оцінка трудомісткості і термінів проекту
Оцінка трудомісткості і термінів проектуОцінка трудомісткості і термінів проекту
Оцінка трудомісткості і термінів проекту
Oleg Nazarevych
 
5 Управління ризиками (2016)
5 Управління ризиками (2016)5 Управління ризиками (2016)
5 Управління ризиками (2016)
Oleg Nazarevych
 
Л2 Управління проектами. Визначення та концепції
Л2 Управління проектами. Визначення та концепціїЛ2 Управління проектами. Визначення та концепції
Л2 Управління проектами. Визначення та концепції
Oleg Nazarevych
 
Л1 Введення в програмну інженерію
Л1 Введення в програмну інженеріюЛ1 Введення в програмну інженерію
Л1 Введення в програмну інженерію
Oleg Nazarevych
 
Ініціація проекту
Ініціація проектуІніціація проекту
Ініціація проекту
Oleg Nazarevych
 
4 Планування проекту (2018)
4 Планування проекту (2018)4 Планування проекту (2018)
4 Планування проекту (2018)
Oleg Nazarevych
 
Введення в програмну інженерію. Моделі розробки проектів
Введення в програмну інженерію. Моделі розробки проектівВведення в програмну інженерію. Моделі розробки проектів
Введення в програмну інженерію. Моделі розробки проектів
Oleg Nazarevych
 
Відеоскрайбінг
ВідеоскрайбінгВідеоскрайбінг
Відеоскрайбінг
Oleg Nazarevych
 
3D графіка
3D графіка3D графіка
3D графіка
Oleg Nazarevych
 
Основи графічного дизайну
Основи графічного дизайнуОснови графічного дизайну
Основи графічного дизайну
Oleg Nazarevych
 
Тема 1 Основні терміни і поняття
Тема 1 Основні терміни і поняттяТема 1 Основні терміни і поняття
Тема 1 Основні терміни і поняття
Oleg Nazarevych
 
Дебетові системи електронних платежів
Дебетові системи електронних платежівДебетові системи електронних платежів
Дебетові системи електронних платежів
Oleg Nazarevych
 
Тема 15 Банерна реклама
Тема 15 Банерна рекламаТема 15 Банерна реклама
Тема 15 Банерна реклама
Oleg Nazarevych
 
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерціїТема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
Oleg Nazarevych
 
Тема 14 Пошукова оптимізація. SEO оптимізація
Тема 14 Пошукова оптимізація. SEO оптимізаціяТема 14 Пошукова оптимізація. SEO оптимізація
Тема 14 Пошукова оптимізація. SEO оптимізація
Oleg Nazarevych
 
Тема № 12. Дебетові системи електронних платежів
Тема № 12. Дебетові системи електронних платежівТема № 12. Дебетові системи електронних платежів
Тема № 12. Дебетові системи електронних платежів
Oleg Nazarevych
 
Тема 5 Системи електронної комерції B2C
Тема 5 Системи електронної комерції B2CТема 5 Системи електронної комерції B2C
Тема 5 Системи електронної комерції B2C
Oleg Nazarevych
 
Тема 7 (2) Послуги в електронній комерції
Тема 7 (2) Послуги в електронній комерціїТема 7 (2) Послуги в електронній комерції
Тема 7 (2) Послуги в електронній комерції
Oleg Nazarevych
 
Тема 18 Методи аналізу ефективності інтернет реклами
Тема 18 Методи аналізу ефективності інтернет рекламиТема 18 Методи аналізу ефективності інтернет реклами
Тема 18 Методи аналізу ефективності інтернет реклами
Oleg Nazarevych
 

More from Oleg Nazarevych (20)

Етикет службового листування
Етикет службового листуванняЕтикет службового листування
Етикет службового листування
 
Оцінка трудомісткості і термінів проекту
Оцінка трудомісткості і термінів проектуОцінка трудомісткості і термінів проекту
Оцінка трудомісткості і термінів проекту
 
5 Управління ризиками (2016)
5 Управління ризиками (2016)5 Управління ризиками (2016)
5 Управління ризиками (2016)
 
Л2 Управління проектами. Визначення та концепції
Л2 Управління проектами. Визначення та концепціїЛ2 Управління проектами. Визначення та концепції
Л2 Управління проектами. Визначення та концепції
 
Л1 Введення в програмну інженерію
Л1 Введення в програмну інженеріюЛ1 Введення в програмну інженерію
Л1 Введення в програмну інженерію
 
Ініціація проекту
Ініціація проектуІніціація проекту
Ініціація проекту
 
4 Планування проекту (2018)
4 Планування проекту (2018)4 Планування проекту (2018)
4 Планування проекту (2018)
 
Введення в програмну інженерію. Моделі розробки проектів
Введення в програмну інженерію. Моделі розробки проектівВведення в програмну інженерію. Моделі розробки проектів
Введення в програмну інженерію. Моделі розробки проектів
 
Відеоскрайбінг
ВідеоскрайбінгВідеоскрайбінг
Відеоскрайбінг
 
3D графіка
3D графіка3D графіка
3D графіка
 
Основи графічного дизайну
Основи графічного дизайнуОснови графічного дизайну
Основи графічного дизайну
 
Тема 1 Основні терміни і поняття
Тема 1 Основні терміни і поняттяТема 1 Основні терміни і поняття
Тема 1 Основні терміни і поняття
 
Дебетові системи електронних платежів
Дебетові системи електронних платежівДебетові системи електронних платежів
Дебетові системи електронних платежів
 
Тема 15 Банерна реклама
Тема 15 Банерна рекламаТема 15 Банерна реклама
Тема 15 Банерна реклама
 
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерціїТема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
Тема 3 (2) Основні принципи функціонування та роботи систем електронної комерції
 
Тема 14 Пошукова оптимізація. SEO оптимізація
Тема 14 Пошукова оптимізація. SEO оптимізаціяТема 14 Пошукова оптимізація. SEO оптимізація
Тема 14 Пошукова оптимізація. SEO оптимізація
 
Тема № 12. Дебетові системи електронних платежів
Тема № 12. Дебетові системи електронних платежівТема № 12. Дебетові системи електронних платежів
Тема № 12. Дебетові системи електронних платежів
 
Тема 5 Системи електронної комерції B2C
Тема 5 Системи електронної комерції B2CТема 5 Системи електронної комерції B2C
Тема 5 Системи електронної комерції B2C
 
Тема 7 (2) Послуги в електронній комерції
Тема 7 (2) Послуги в електронній комерціїТема 7 (2) Послуги в електронній комерції
Тема 7 (2) Послуги в електронній комерції
 
Тема 18 Методи аналізу ефективності інтернет реклами
Тема 18 Методи аналізу ефективності інтернет рекламиТема 18 Методи аналізу ефективності інтернет реклами
Тема 18 Методи аналізу ефективності інтернет реклами
 

Корнілов Андрій

  • 1. Кілька банальних рецептів успішного веб- проекту Андрій Корнілов Тернопіль Березень 2013
  • 2. Про мене Зараз Technical Lead @Rebbix, Lviv VNU Vacature media (Netherlands/Belgium) В минулому bitternet.ua, stelex.com (General Electric), markplaats.nl (eBay classified group), lofty.com, знову markplaats.nl (eBay classified group), modnakasta.ua Інтереси php, python, software engineering stuff
  • 3. Про презентацію Коротенький огляд специфіки проектів з високою відвідуваністю та корисних підходів, які можуть допомогти таким проектам бути успішнішими
  • 4. Про презентацію Коротенький огляд специфіки проектів з високою відвідуваністю та корисних підходів, які можуть допомогти таким проектам бути успішнішими Хоча, можуть і не допомогти - якщо проблеми лежать за межами software engineering
  • 5. Про дивну назву На практиці всі підходи та архітектурні рішення для вебу статичні. Для більшості проблем давно знайдено прийнятні рішення. Девелоперу залишається лише визначити з проблемою якого саме виду він зіткнувся і вибрати рішення, яке дозволить вирішити цю проблему
  • 6. Про дивну назву При чому рішення це, як правило, не міститиме ніякого рокет-сайнс
  • 8. Високо навантажений проект Таким чином поняття high loaded проекту коже може трактувати на власний розсуд :-) В побутовому сенсі - це ресурс, який має високу (wut?) відвідуваність Як правило, high loaded проект, з технічної точки зору, це апаратно-програмний комплекс, який складається з багатьох взаємодіючих підсистем - тобто розподілена система, при чому ця система перебуває під впливом високо конкурентного доступу.
  • 9. Високо навантажений проект Для ресурсів, які активно використовуються (іншими словами - високо навантажених), нема поняття "це мало імовірно, для цього потрібен надзвичайний збіг обставин, тому це ніколи не станеться" Підходи до обробки запитів в високо-навантажених проектах співпадають з підходами теорії масового обслуговування (звичайні черги, аеропортні черги, паралельне обслуговування)
  • 10. Часткова коректність В високо навантаженій системі з багатьма компонентами в даний момент, швидше за все, є компонент з яким в даний момент щось не так - не працює реплікація, певний відсоток даних є не коректним тощо. Шукайте можливість бути частково доступними - повертайте якісь результати, навіть якшо ваша система дає частковий збій. ● Поверніть хоч якісь результати пошуку, якщо не можете повернути детальні. ● Якщо не можете отримати підтвердження оплати в банку, позначте замовлення як частково підтверджене і переходьте до наступного кроку.
  • 11. Часткова цілісність Маленький чіт - стан системи такий, яким його бачить користувач. Якщо користувач не може побачити порушення цілісності даних - її нема. Приклад. Якщо ви написали коментар до сторінки і, практично в той самий момент, хтось її відкрив - не важливо, щоб він побачив ваш коментар, важливо щоб ви його побачили. Таке саме можна сказати, наприклад, про відображення резервації товару в каталозі інтернет магазину. Часто саме це забезпечує кешування (але не завжди кеш мість не актуальні дані - залежить від політики інвалідації)
  • 12. Успішність / Не успішність Успішність чи не успішність проекту (з точки зору інженера) залежить від того, які фактори ризику можуть впливати на цей проект і чи ці фактори (в достатній мірі) зкомпенсовані
  • 13. Деякі важливі фактори ризику ● людські фактори - загальний рівень команди, помилки в силу психо-фізичного стану ● технічні фактори ○ адекватна інфраструктура навколо проекту - документація, тести, метрики коду ○ складність проекту - чим складніша система тим більша імовірність помилки ○ технічні несподіванки ● фактори залежності і контролю ○ залежність від коду, який ви не контролюєте ○ залежність від систем, які ви не контролюєте
  • 14. Людський фактор Всі люди - люди* І, в силу цього, час від часу, роблять помилки. Через хибні припущення на основі не достатньої інформації. При написанні коду. При виконанні певних дій (особливо рутинних) * (с) моя дружина
  • 15. Людський фактор Запобіжні підходи ● детальна (і головне - актуальна) документація ● тести (юніт, функціональні etc) ● використання певних практик (кодревью, парне програмування) ● формальні процедури (регламенти, git-flow) ● автоматизація дій (білд, деплоймент)
  • 16. Технічні фактори З технічною складністю дозволяє боротися декомпозиція системи на простіші компоненти Типові компоненти: ● медіа сервери (media, assets) ● бекінг сервіси (db, cache, queues, search) ● апп-сервери ● бекграунд воркери Про технічні несподіванки і фактори залежності поговоримо в одному з наступних розділів презентації - twelve factor application
  • 17. Shared nothing Shared nothing архітектура це концепція розподіленого компьютінгу в які кожна нода є незалежною і самодостатньою (в плані обчислювальних активностей). Або більш конкретно - ноди не використовують спільно пам'ять чи дисковий розділ. Концепція зараз широко використовується, в основному, в вебі (хоча започаткована була в середині 80-х для баз даних) і практично безлімітно скейлиться (що довів Google). Для веб-додатків стан при цьому зберігають спеціально призначені backing сервіси Для баз даних SN знаходить відображення в концепції шардінгу.
  • 18. Feature flags Feature flags - реальний спосіб зменшення ризиків при розгортанні нової функціональності в умовах великого навантаження Цю концепцію часто помилково асоціюють лише з A/B тестуванням. Але, поряд з цим, використання флагів дозволяє запускати нову функціональність (часто з непрогнозованим performans ефектом) лише для певної групи чи відсотку користувачів. Таким чином можна навіть проводити поступову міграцію користувачів з однієї платформи на іншу.
  • 19. "Правильні інструменти" Використовуйте правильні інструменти для кожної із своїх задач ● З пошуком у великому масиві даних краще справиться спеціалізований сервер пошуку (SOLR, ElasticSearch, Sphinx) ніж реляційна база даних ● В якості медіа сервера краще виступить легкий веб сервер ніж apache ● Мільйон інших прикладів...
  • 20. Метрики Єдиний спосіб переконатися, що робота зроблена добре і взагалі все іде добре (в плані тенденцій) ● метрики коду - sonar ● системний моніторинг - munin, zabbix, new relic ● метрики бізнесу (транзакції певного типу) - new relic, graphite, google analytics ● rum (performance monitoring) - new relic І навіть передбачити майбутні проблеми (Навчіться прогнозувати запас ресурсів)
  • 21. Метрики Збір метрий єдиний спосіб подолати розрив між вашими уявленнями про те, як ваша система працює в продакшен і між тим як вона працює насправді. Розуміння різниці між тим, як поводила себе система до релізу і після релізу відрізняє успішний інженіринг від шаманства. Звичайно, самих метрик часто не достатньо для розуміння того, що саме потрібно робити з проблемою, але вони необхідні для розуміння того, що робити таки щось треба (або не треба).
  • 22. 12-Factors App 12-factor app це набір правил, які дозволяють: ● Використовувати декларативні формати конфігурування; ● Мати чіткий "контракт" з операційною системою, за рахунок чого досягається максимальна портабельність між середовищами, легке розгортання в клауд; ● Мінімізувати відмінності між розробницьким і продакшен середовищем; ● Дозволяє масштабувати проект без суттєвих змін інструментів, архітектури коду і процесу розробки.
  • 23. 12-Factors App Ця методологія може бути застосована до веб додатків, написаних з використанням будь-якої мови програмування, і з використанням будь-якої комбінації backing services (база даних, черга, кеш тощо)
  • 24. 12-Factors App Єдина codebase, яка знаходить в системі контролю версій - багато регулярних розгортань (deploys)
  • 25. 12-Factors App ● Якщо система складається з кількох codebases, це не додаток – це розподілена система. Кожен компонент розподіленої системи це окремий додаток і має інтивідуально задовольянти вимогам 12- factor app. ● Кілька додатків, які використовують спільний код порушують ці принципи. Спільний код має бути виділено в бібліотеку, яка має бути включена в систему як будь-яка інша залежність.
  • 26. 12-Factors App Розгортання (deploy) це примірник додатка, який виконується. Це може бути продакшен сайт, один чи кілька тестових сайтів, сайт в робочому середовищі розробника. Код має бути спільним для всіх розготань, за виключенням того, що розгорнуті версії коду можуть різнитися.
  • 27. 12-Factors App ● Додаток ніколи не має робити припущень про систему, на якій буде виконуватись з точки зору своїх залежностей, декларує залежності явно і в повній мірі через dependency declaration manifest. ● Уникайте випадків, коли залежності одного додатку можуть впливати на інший додаток або на інше розгортання цього самого додатку. Для цого використовуйте ізоляцію залежностей. ● Це правило має бути чинним для будь-яких типів середовищ
  • 28. 12-Factors App В ruby для декларації залежностей використовуються Gemfile, для ізоляції залежностей - bundle exec. В python для декларації залежностей використовуються pip + requirements.txt, virtualenv - для ізоляції залежностей. В java-sctipt - bower. В php - Composer
  • 30. 12-Factors App Розробники маніфесту про 12-factor додатки також наполягають на тому, що не варто покладатися на наявність в системі будь-яких залежностей. Наприклад ImageMagick чи curl. Аргументуючи це тим, що не можливо гарантувати їх наявності взагалі чи наявності сумісної версії. На мою думку, такий підхід є перебільшенням, адже такого роду залежності можна задовільняти з допомогою таких інструментів як Chef і Puppet (хоча, мушу визнати, при цьому опускаються вимоги ізоляції залежностей)
  • 31. 12-Factors App Граф залежностей і конфлікти залежностей Досить часто залежності можуть перетворитися в коштар. Особливо, якщо у ваших залежностей є свої, не відомі вам, і , при цьому, все це знаходиться за межами ваших можливостей контролю. Якщо бібліотека, яку ви маєте намір використати, реалізує якусь просту функціональність - це привід задуматися, чи потрібна вашому проекту зайва залежність. Не ставайте залежними від когось, без достатніх підстав.
  • 32. 12-Factors App Зберігайте конфігурацію в змінних оточення Конфігурація додатку це будь-що, що відрізняє одне розгортання від іншого (за винятком версії коду). Вона може включати: ● Параметри конекту до backing services (бази даних, Memcached) ● Параметри конекту до зовнішніх сервісів (Amazon S3, Twitter API) ● Ім'я хоста тощо
  • 33. 12-Factors App ● Інколи конфігурацію включають в код у вигляді констант - це не припустимо з точки зору додатку, який відповідає вимогам 12-Factors App. Адже конфігурація це єдине, що має відрізняти різні розгортання додатку. І в жодному разі не код. ● Інший підхід - зберігати конфігурацію в окремих файлах, за медами коду теж не вітається, оскільки легко можна припустися помилки і додати їх в репозиторій, або складно забезпечити ізоляцію конфігурацій ● Групування конфігурацій по типам середовища - досить легко може перетворитися в некерований процес.
  • 34. 12-Factors App Чітко розділяйте етапи зборки, розгортання і виконання коду
  • 35. 12-Factors App Збірка це етап на якому створюється певний артефакт- набір коду, залежностей, асетів (при потребі компілюється бінарний файл) Розгортання об'єднує артефакт, ориманий на етапі зборки, з відповідним конфігами. Результат - сутність, готова до виконання в певному середовищі Виконання - запуск коду в середовищі у вигляді процесу або набору процесів. Заборонено вносити зміни в код, який виконується
  • 36. 12-Factors App Завжди виконуйте свій додаток в середовищі як один (частіше всього на девелоперському середовищі) або кілька (частіше всього на продакшен) stateless процесів. Будь-які дані, які вимагають збереження, мають зберігатися на stateful backing сервісі - найчастіше в базі даних. Локальна пам'ять або файлова система можуть розцінюватися виключно як короткотерміновий кеш (наприклад для зкомпільованих темплейтів, завантажених файлів), при цьому ніколи не робиться припущення що дані в цьому кеші завжди доступні для наступного реквеста - адже він може потрапити на інший сервер чи процес.
  • 37. 12-Factors App Масштабування через процеси - в twelve- factor app архітектурі процеси це основоположний елемент. З використанням цієї простої концепції програміст може забезпечити масштабування в широких межах поділяючи певні типи навантаження між відповідними процесами. Наприклад одні типи процесів відповідають за обробку http запитів, інший тип відповідає за виконання "довгих" задач в бекграунді.
  • 38. 12-Factors App Таким чином, щоб проскейлити певний тип навантаження (у відповідності до концепції shared nothing) треба просто добавити ще процеси певного типу
  • 39. 12-Factors App Crash only design Дизайн процесів має передбачати випадок того, що процес може раптово припинити сво є виконання - при цьому всі ресурси, які він використовував мають бути звільнені, дані з бекінг сервісів в жодному разі не має бути пошкоджено, для воркер процесів - не виконана задача має бути повернута на виконання іншим процесом
  • 40. 12-Factors App Розглядайте логи як потік подій Логи додають візуалізацію поведінки додатка. При цьому, додаток, розроблений у відповідності з правилами 12-factor не займаються обслуговуванням інфраструктури логів (не відкривають спеціальний лог файл тощо) вони просто пишуть потік подій в stdout. Під час локальної розробки програміст бачить цей потік в терміналі і таким чином спостерігає за поведінкою додатка.
  • 41. 12-Factors App На стейджінг і продакшен середовищах кожен такий потік перехоплюється середовищем, агрегується з іншими потоками і може бути відісланий для подальшого зберігання чи перегляду. Ці подальші дії жодним чином не відомі самому додатку
  • 42. 12-Factors App Детальне логування success кейсів - надмірне Error кейси потрібно логувати якомога детальніше
  • 43. 12-Factors App Ваші середовища для розробки, тестування та продакшен мають бути максимально уніфіковані Це дозволить уникнути технічних несподіванок, про які ми починали говорити раніше
  • 44. 12-Factors App Розриви в часі: Розробник може писати код дні, тижні і навіть місяці перед тим, як код потрапить на продакшен. Розриви у відповідальності: Розробник пише код, DevOps інженер розгортає його. Розриви в інструментах: Для розробки використовується Nginx+SQLite+OS X, а на продакшені - Apache+MySQL+Linux.
  • 45. 12-Factors App Сучасні інструменти менеджменту пакетів (homebrew, apt, yum), декларативні інструменти провіженінгу (Chef і Puppet) в сукупності з легкими система управління віртуальними середовищами (Vagrant, kvm) дозволяють розробнику запускати локально середовище, яке максимально близьке до продакшен
  • 46. Адміністративні задачі Виконуйте адміністративні задачі як специфічний процес додатка Адміністративні задачі це задачі, які необхідно виконувати поряд з основною - обслуговування web запитів. Такі, як: ● міграція схеми бази даних (manage.py syncdb в Django, rake db:migrate в Rails) ● виконання REPL shell ● виконання одноразових скриптів Адміністративні функції мають виконуватися з усіма тими самими обмеженнями, що і звичайний 12-factor додаток - з тими самим кодом, залежностями, ізоляцією. Адміністративний код має включатися в код додатку для уникнення проблем синхронізації версій коду.
  • 47. Посилання ● The Twelve-Factor App - http://www.12factor.net/ ● http://devopsreactions.tumblr.com/ ● http://www.perfplanet.com/ ● http://www.vagrantup.com/
  • 48. Q&A
  • 49. Дякую за увагу! Андрій Корнілов Копанія: Rebbix Email: andriy.kornilov@gmail.com