Разработка веб-сервисов осень 2013 лекция 5
TRANSCRIPT
![Page 1: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/1.jpg)
Разработкавеб-сервисов
Беседа 5: Этапы построения архитектуры веб-сервиса
![Page 2: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/2.jpg)
План занятия
Проектирование: от системы к компонентам
Борьба со сложностью на всех этапах проектирования
Программирование: от компонентов к коду модулей
Эксплуатация: выбор инструментария
2
![Page 3: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/3.jpg)
Этапы создания проекта
Этапы:
1. Анализ предметной области и постановка задачи
2. Проектирование, уточнение ТЗ
3. Разработка
4. Анализ разработанного продукта (ревью, тесты)
5. Ввод в эксплуатацию
3
![Page 4: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/4.jpg)
Проектирование
Перевод ТЗ от слов к делу
Закладка фундамента сервиса, подсистемы
Уточнение ТЗ по итогам проектирования
4
![Page 5: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/5.jpg)
Проектирование
Цель проектирования
1. Создание работоспособной системы, удовлетворяющей требованиям
2. Создание системы наименьшей сложности
5
![Page 6: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/6.jpg)
Проектирование
Проектирование — один из важнейших этапов
Многие ограничения (или ошибки) закладываются на этапе проектирования
Исправление ошибок проще всего на этом этапе
6
![Page 7: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/7.jpg)
Проектирование
Что влияет на сложность?
Технологии — архитектура системы
Реализация решения — архитектура кода
Эксплуатация решения — железо + системное ПО
7
![Page 8: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/8.jpg)
Борьба со сложностью
Общие принципы
K.I.S.S
Keep it simple, stupid!
Преждевременная оптимизация — корень всех бед
8
![Page 9: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/9.jpg)
Борьба со сложностью
При проектировании
Используйте знакомые технологии
Большую часть веб-проектов можно сделать на LAMP
Используйте минимальный набор технологий
Чем меньше разных компонентов, тем надежнее система
9
![Page 10: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/10.jpg)
Борьба со сложностью
При проектировании. Примеры:
Как писать в несколько баз одновременно?
Как обрабатывать ошибки?
10
![Page 11: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/11.jpg)
Борьба со сложностью
При разработке
Чем проще код, тем проще поддерживать
Не злоупотребляйте парадигмами
Не используйте сложные инструменты для простых вещей
11
![Page 12: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/12.jpg)
Борьба со сложностью
При разработке. Парадигмы
Не злоупотребляйте парадигмами
Классовая борьба — это не Маркс,
это страшный сон программиста
12
![Page 13: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/13.jpg)
Борьба со сложностью
При разработке. Инструменты
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](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/14.jpg)
Борьба со сложностью
При разработке. Инструменты
<?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](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/15.jpg)
Борьба со сложностью
При эксплуатации
Выбирайте инструменты, соответствующие уровню
Разные инструменты на разных этапах
Советуйтесь с отделом эксплуатации
15
![Page 16: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/16.jpg)
Проектирование
Этапы проектирования
1. Обобщение требований и перевод абстракций в формализованную систему
2. Разбиение системы на части (компоненты)
3. Выбор инструментов для реализации компонентов
16
![Page 17: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/17.jpg)
Проектирование
Поступательный переход от общего к частному —
нисходящее проектирование
17
![Page 18: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/18.jpg)
Проектирование кода
От проектирования архитектуры
к проектированию кода:
От абстракции к системе
От целой системы к компонентам
От компонентов к проектированию модулей
От проектирования модулей к реализации методов
18
![Page 19: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/19.jpg)
Проектирование кода
Принципы модульного программирования во многом
сходны с принципами нисходящего проектирования:
Сначала определяются состав и взаимосвязи функций,
а затем — набор программных модулей,
реализующих эти функции.
19
![Page 20: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/20.jpg)
Модульное программирование
Модуль — это самостоятельная часть программы, имеющая определенное назначение и обеспечивающая заданные функции обработки автономно от других частей
20
![Page 21: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/21.jpg)
Модульное программирование
Объем модулей
Маленькие модули приводят к громоздкой структуре
Большие модули неудобны для изучения и изменения
21
![Page 22: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/22.jpg)
Модульное программирование
Достоинства модульной разработки
Легче составлять и отлаживать
Легче сопровождать и модифицировать
Легче управлять разработкой
22
![Page 23: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/23.jpg)
Модульное программирование
Недостатки модульной разработки
Высокий уровень абстракции
Высокие требования к дисциплине
Риск закопаться в деталях
23
![Page 24: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/24.jpg)
Модульное программирование
Восходящее и нисходящее программирование
Восходящее:
для каждого модуля запрограммированы все модули, к которым он может обращаться
Нисходящее:программируется с главного модуля, нижние представляются в виде вызовов (заглушки)
24
![Page 25: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/25.jpg)
Эксплуатация
Выбор «железа»
Диски — количество, объем, тип
Память — объем памяти
Процессор — количество ядер
Сеть — пропускная способность
Операционная — инфраструктура
система
25
![Page 26: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/26.jpg)
Эксплуатация
Выбор «железа»: сколько вешать в граммах?
Ответы: 1 фронтенд на 1 млн. хитов в сутки
Деньги: 1 сервер очередей на 300 процессов
Рассылки: 1 рассыльщик на 5 млн. писем
26
![Page 27: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/27.jpg)
Эксплуатация
Выбор «железа»: выводы
Разные ресурсы нужны
разным системам
разным компонентам одной системы
27
![Page 28: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/28.jpg)
Эксплуатация
Погоня за «аптаймом»
Чем выше требуется отказоустойчивость, тем большие ресурсы нужны
28
![Page 29: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/29.jpg)
Эксплуатация
Погоня за «аптаймом»
100% аптайма — редко достижимый результат
Ресурсами железа не обойтись
Допустимый уровень аптайма
В разных системах и компонентах — разный
29
![Page 30: Разработка веб-сервисов осень 2013 лекция 5](https://reader033.vdocuments.pub/reader033/viewer/2022060121/5594a6c51a28ab5e348b4620/html5/thumbnails/30.jpg)
Резюме
Проектирование — один из самых важных этапов
Чем проще, тем лучше
Нисходящее проектирование систем снижает сложность
Разные системы — разные подходы к инструментам
Идеалы недостижимы, но стремиться можно
30