7/4/2011 4:01:43 PM

Курс по SOA с Udi Dahan понравился с первого дня, хотя, собственно, до самого SOA ещё совершенно не добрались.

Первый день – back to basics. Половину дня говорили, в частности, о проблемах, стоящих перед современными распределёнными системами.

Udi привёл несколько заблуждений, которые приводят к ошибкам. Заблуждения эти описаны много-много лет назад, но разработчики до сих пор часто забывают о них подумать.
Вот некоторые из них с заметками, которые я сделал:

  • Сетевые соединения надёжны.
    А случиться может что угодно: сгорит свитч, случайно перережут кабель, у провайдера будет накладка и т.д.
  • Задержки, связанные с передачей по сети – не проблема.
    Разработчики тестируют приложения локально, тестеры – на тестлабах. Скорости там могут быть до 1000 раз выше, чем в реальной жизни. Использование lazy loading может быть бомбой замедленного действия с точки зрения производительности.
  • Ширина канала – не проблема.
    Эффективная скорость, доступная на гигабитном канале – порядка 40 мегабайт в секунду. Это звучит не так круто, как “гигабит”.
    Если существуют столкновения между lazy loading и eagerly loading, то, возможно, речь должна идти о разных объектах?
  • Сеть хорошо защищена.
    Нет принципиально полностью защищённых систем. Если мы обещаем полностью защищённую систему заказчику – мы врём.
    В основном проблема не столько в сети/архитектуре/инфраструктуре, сколько в людях.
    Мы мало что можем с этим сделать.
    Направления куда смотреть: периодическая смена сертификатов/ключей, моральная готовность к тому, что рано или поздно что-то случится. Бизнес должен иметь a threat model analysis, legal plan, public relations plan, стейкхолдеры должны быть в курсе такой возможности.
  • Топология системы не изменится.
    Серверы умирают и добавляются, баллансировщики нагрузки – тоже, что-то уходит в облако, что-то переезжает в другую сеть.
    Клиенты меняют расположение и тип подключения (WiFi, 3G, LAN, WAN), могут появляться новые типы клиентов.
    Направления куда копать: не хардкодить адреса, делать конфигурацию максимально простой, автоконфигурирование/автонахождение.
  • Админ знает, что делать в случае чего.
    Сложные конфигурационные файлы в каждом углу не лучший помощник админа. Запланированный (upgrade) и незапланированный (rollback, errors) downtime. Количество девяток в availability: 5 девяток (99.999%) – это примерно 5 минут в год. 4 девятки – это час в год. Честно планировать и документировать availability.
    Успешно применяемое решение: непрерывное обновление без downtime’а. Пример: ebay, flickr, amazon и т.д. Flickr: обновление версии на продакшне в среднем каждые 8 минут.
    Условия такого решения: обратная совместимость.
    Проблема: дольше итерация разработки –> больше проблем с обратной совместимостью –> сложнее делать апгрейд без даунтайма –> бизнес откладывает апгрейд (важные кампании, презентации, клиенты, тендеры) –> дольше итерация разработки.
    И наоборот: короткая итерация –> меньше кода –> меньше проблем с обратной совместимостью –> проще апгрейд без даунтайма –> короче итерация.
  • Транспорт – не проблема.
    Сеть и CPU – это стоимость. Пример: сериализация/десериализация – это трата CPU. Использование “облачных” решений часто заставляет платить за CPU и тут отлично выплывает, насколько это влияет на стоимость.
    Решение: нет решения. Сеть и CPU всегда стоят денег.
  • Система атомарна и монолитна.
    Часто говорят: stateless сервера – это путь к scalability. На практике это часто может привести к тому, что всё состояние смещается в одно место – в базу данных. И уже база данных становится узким местом. А база данных – это то, что очень сложно масштабировать вширь. Stateless серверы – отличное решение, предлагаемое производителями огромных дорогих серверов БД и гридов вроде Кохеренса :)
    От себя: представитель Кохеренса на прошлогодней YOW говорил то же самое: чем больше вы фанатично делаете stateless логики, тем больше мы имеем денег на продаже серверов БД и грида. Сам слышал. Дословно: “Самый лучший способ сделать что-то немасштабируемым – сделать это stateless”.
  • Система закончена.
    Система никогда не заканчивается, пока жив бизнес, её использующий. Затраты на поддержку системы постоянны.
    Опытные разработчики создают новые фичи, джуниоры занимаются доработкой имеющегося кода и его поддержкой. Есть вопросы, почему многие системы со временем превращаются в один большой месс? :)
  • Бизнес-логика может и должна быть централизована.
    Бизнес-требования не одинаковы в смысле частоты и вероятности изменения.
    Повторное использование: термин, придуманный много лет назад, не работает. Больше повторного использования –> больше зависимостей –> сильнее связанность –> сложнее изменять/поддерживать систему –> риск сломать.
    Куда копать: Бизнес-логика часто понимается “в лоб”. Объект “Customer”, имеющий поля “Name” и “Status” вовсе не обязательно является целиковым объектом с точки зрения требований. Действительно ли нам нужно одновременно управлять именем и статусом? Или это совершенно разные операции с точки зрения бизнеса? Более того, даже в реальной жизни “клиент” не имеет “статуса”, “статус” – это какая-то информация О клиенте, которая хранится и управляется отдельно.
    Вопрос: почему мы пихаем это всё в один объект и потом пытаемся пользовать его везде, создавая лишние зависимости?
    Решение: Разделять бизнес-требования по смыслу и по частоте изменения оных. Получатся “вертикальные” “независимые” срезы системы: в одном мы управляем именем клиента, в другом – статусом.
    Изменения требований, связанных с одним “срезом” не влияют на поведение других.
    Такой “срез” можно называть “design package”, в идеале он может содержать в себе все те же слои: UI, BL, DB, etc.
    Такие “срезы” можно (это не обязательно делать) размещать на отдельных серверах, развёртывать и апгрейдить отдельно, без остановки всей системы. Все блокировки и транзакции – внутри одного “среза”, избегаем распределённых транзакций!
    Ответ на вопрос: Какие данные должны изменяться согласованно (consistently, я никогда не знаю, как перевести на русский!), вместо вопроса “какие объекты у нас есть чтобы их изменить?”

Потом ещё говорили о том, что такое coupled code, как это измеряется, что значат эти метрики, как их применять… Потом говорили о разных видах распределённости и взаимодейтвии…

Я плохо рассказываю, потому, что было гораздо интереснее и полезнее, чем я рассказываю :) Хотя это просто заметки, 2% от того, что и о чём говорилось…
В перерывах (коих у нас три: два по 15 минут и один часовой) люди очень активно обсуждают то, что говорится на тренинге, между собой, для кого-то это совсем новые концепты, кто-то имел дело, но сейчас представилось под другим углом и т.д. Люди очень обдумывают, высказывают, анализируют. Значит отдача есть.

Я, наверное, больше не буду писать таких постов, про то, что было. Много слишком, плотность большая.

А завтра будет ещё интереснее :)

P.S. А Udi действительно замечательный докладчик.

P.P.S. В субботу Udi делает ещё один концерт (полный день), в каком-то виде это сжатый вариант его трёхдневного курса по NServiceBus. Стоимость билета - $100. Многие задумались, а не пойти ли и туда ещё. Я тоже думаю. Завтра спросим его, насколько сильно то, что будет там, перекликается с тем, что будет за неделю у нас. Может и схожу, не так уж и дорого.

P.P.P.S. А завтра – вечерний концерт Udi от YOW! Nights. Стоимость $10. Туда многие наши пойдут :)

Comments (3) -

7/5/2011 9:27:56 PM

Евгений

"Сетевые соединения надёжны.
Задержки, связанные с передачей по сети – не проблема.
Ширина канала – не проблема.
...
Бизнес-логика может и должна быть централизована.
"
.... и т.д. и т.д. по пунктам.
Блин, Алексей, такое дежавю нахлынуло читая это, как будто бы читаешь статью десятилетней давности. Smile Мир меняется, но проблемы остаются всё теже. Smile

Евгений Russia

7/8/2011 3:45:00 PM

Alexey Raga

Так и есть.
Проблемы описаны десятилетия назад.
Фишка только в том, что они не уходят в историю, а становятся всё более актуальными Smile

А вот заблуждение о том, что "бизнес логика должна быть централизована" - это новое.
Раньше это было не заблуждением, а best practice и всячески рекомендовалось.

Alexey Raga Australia

7/8/2011 5:17:45 PM

Евгений

Может быть. Хотя в некоторых бизнес процессах, я не представляю себе централизованной модели бизнес логики, не сейчас, не 10 лет назад, лишний гимор, как говорят - "зачем огород городить?", и пофиг, что это "best practice и всячески рекомендовалось".

Евгений Russia

Comments are closed

Powered by BlogEngine.NET 2.5.0.6

About the author

Alexey Raga Alexey Raga
.NET software developer.

E-mail me Send mail

Twitter

Widget Twitter not found.

Root element is missing.X


Recent posts

Archive

Disclaimer

The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2012

Sign in