Разработка веб-сервисов осень 2013 лекция 5

31
Разработка веб-сервисов Беседа 5: Этапы построения архитектуры веб-сервиса

Transcript of Разработка веб-сервисов осень 2013 лекция 5

Page 1: Разработка веб-сервисов осень 2013 лекция 5

Разработкавеб-сервисов

Беседа 5: Этапы построения архитектуры веб-сервиса

Page 2: Разработка веб-сервисов осень 2013 лекция 5

План занятия

Проектирование: от системы к компонентам

Борьба со сложностью на всех этапах проектирования

Программирование: от компонентов к коду модулей

Эксплуатация: выбор инструментария

2

Page 3: Разработка веб-сервисов осень 2013 лекция 5

Этапы создания проекта

Этапы:

1. Анализ предметной области и постановка задачи

2. Проектирование, уточнение ТЗ

3. Разработка

4. Анализ разработанного продукта (ревью, тесты)

5. Ввод в эксплуатацию

3

Page 4: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Перевод ТЗ от слов к делу

Закладка фундамента сервиса, подсистемы

Уточнение ТЗ по итогам проектирования

4

Page 5: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Цель проектирования

1. Создание работоспособной системы, удовлетворяющей требованиям

2. Создание системы наименьшей сложности

5

Page 6: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Проектирование — один из важнейших этапов

Многие ограничения (или ошибки) закладываются на этапе проектирования

Исправление ошибок проще всего на этом этапе

6

Page 7: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Что влияет на сложность?

Технологии — архитектура системы

Реализация решения — архитектура кода

Эксплуатация решения — железо + системное ПО

7

Page 8: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

Общие принципы

K.I.S.S

Keep it simple, stupid!

Преждевременная оптимизация — корень всех бед

8

Page 9: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При проектировании

Используйте знакомые технологии

Большую часть веб-проектов можно сделать на LAMP

Используйте минимальный набор технологий

Чем меньше разных компонентов, тем надежнее система

9

Page 10: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При проектировании. Примеры:

Как писать в несколько баз одновременно?

Как обрабатывать ошибки?

10

Page 11: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

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

Чем проще код, тем проще поддерживать

Не злоупотребляйте парадигмами

Не используйте сложные инструменты для простых вещей

11

Page 12: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При разработке. Парадигмы

Не злоупотребляйте парадигмами

Классовая борьба — это не Маркс,

это страшный сон программиста

12

Page 13: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При разработке. Инструменты

use XML::LibXML;

sub make_xml{

my ( $mod, $data ) = @_;

my $doc = XML::LibXML->createDocument( $mod->{xml}->{version}, $mod->{xml}->{encoding} );

my $reestr = $doc->createElement( 'reestr' );

for my $payment ( @{ $data->{reestr} } ){

my $payment_element = $doc->createElement( ‘payment’ );

$reestr->appendChild( $payment_element );

_add_element( $doc, $reestr, ‘currency', 643);

_add_element( $doc, $reestr, ‘amount', $payment->{pay_amount} );

}

$doc->setDocumentElement( $reestr );

return $doc->toString( 1 );

}

13

Page 14: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При разработке. Инструменты

<?xml version="1.0" encoding="windows-1251"?>

<reestr>

<tmpl_loop payments>

<payment id="<tmpl_var payment_id>">

<currency="643” amount="<tmpl_var amount>“ />

</payment>

</tmpl_loop>

</reestr>

14

Page 15: Разработка веб-сервисов осень 2013 лекция 5

Борьба со сложностью

При эксплуатации

Выбирайте инструменты, соответствующие уровню

Разные инструменты на разных этапах

Советуйтесь с отделом эксплуатации

15

Page 16: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Этапы проектирования

1. Обобщение требований и перевод абстракций в формализованную систему

2. Разбиение системы на части (компоненты)

3. Выбор инструментов для реализации компонентов

16

Page 17: Разработка веб-сервисов осень 2013 лекция 5

Проектирование

Поступательный переход от общего к частному —

нисходящее проектирование

17

Page 18: Разработка веб-сервисов осень 2013 лекция 5

Проектирование кода

От проектирования архитектуры

к проектированию кода:

От абстракции к системе

От целой системы к компонентам

От компонентов к проектированию модулей

От проектирования модулей к реализации методов

18

Page 19: Разработка веб-сервисов осень 2013 лекция 5

Проектирование кода

Принципы модульного программирования во многом

сходны с принципами нисходящего проектирования:

Сначала определяются состав и взаимосвязи функций,

а затем — набор программных модулей,

реализующих эти функции.

19

Page 20: Разработка веб-сервисов осень 2013 лекция 5

Модульное программирование

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

20

Page 21: Разработка веб-сервисов осень 2013 лекция 5

Модульное программирование

Объем модулей

Маленькие модули приводят к громоздкой структуре

Большие модули неудобны для изучения и изменения

21

Page 22: Разработка веб-сервисов осень 2013 лекция 5

Модульное программирование

Достоинства модульной разработки

Легче составлять и отлаживать

Легче сопровождать и модифицировать

Легче управлять разработкой

22

Page 23: Разработка веб-сервисов осень 2013 лекция 5

Модульное программирование

Недостатки модульной разработки

Высокий уровень абстракции

Высокие требования к дисциплине

Риск закопаться в деталях

23

Page 24: Разработка веб-сервисов осень 2013 лекция 5

Модульное программирование

Восходящее и нисходящее программирование

Восходящее:

для каждого модуля запрограммированы все модули, к которым он может обращаться

Нисходящее:программируется с главного модуля, нижние представляются в виде вызовов (заглушки)

24

Page 25: Разработка веб-сервисов осень 2013 лекция 5

Эксплуатация

Выбор «железа»

Диски — количество, объем, тип

Память — объем памяти

Процессор — количество ядер

Сеть — пропускная способность

Операционная — инфраструктура

система

25

Page 26: Разработка веб-сервисов осень 2013 лекция 5

Эксплуатация

Выбор «железа»: сколько вешать в граммах?

Ответы: 1 фронтенд на 1 млн. хитов в сутки

Деньги: 1 сервер очередей на 300 процессов

Рассылки: 1 рассыльщик на 5 млн. писем

26

Page 27: Разработка веб-сервисов осень 2013 лекция 5

Эксплуатация

Выбор «железа»: выводы

Разные ресурсы нужны

разным системам

разным компонентам одной системы

27

Page 28: Разработка веб-сервисов осень 2013 лекция 5

Эксплуатация

Погоня за «аптаймом»

Чем выше требуется отказоустойчивость, тем большие ресурсы нужны

28

Page 29: Разработка веб-сервисов осень 2013 лекция 5

Эксплуатация

Погоня за «аптаймом»

100% аптайма — редко достижимый результат

Ресурсами железа не обойтись

Допустимый уровень аптайма

В разных системах и компонентах — разный

29

Page 30: Разработка веб-сервисов осень 2013 лекция 5

Резюме

Проектирование — один из самых важных этапов

Чем проще, тем лучше

Нисходящее проектирование систем снижает сложность

Разные системы — разные подходы к инструментам

Идеалы недостижимы, но стремиться можно

30

Page 31: Разработка веб-сервисов осень 2013 лекция 5

Вопросы?

Максим Бабич

[email protected]

+7 916 9415275