Распределенные системы. Паттерны проектирования - [6]

Шрифт
Интервал

Краткая история разработки систем Первое время машины создавались для какой-то одной цели:  расчета артиллерийских таблиц, прогнозирования приливов  и  отливов,  взлома  шифров  и  других  точных,  сложных,  но  рутинных  математических  вычислений.  Спустя  годы  специ-ализированные  машины  превратились  в  программируемые  компьютеры  общего  назначения.  Те  со  временем  перешли  от  выполнения  одной  программы  на  одной  машине  к  парал-лельному  выполнению  многих  программ  на  одной  машине  с помощью операционных систем с разделением времени. Эти  машины все еще были разъединены друг с другом. Постепенно  машины  стали  объединяться  в  сети,  в  результате  чего появились клиент-серверные архитектуры. Относительно  маломощные  компьютеры  на  рабочих  местах  получили  доступ  к  вычислительным  ресурсам  мощных  мейнфреймов,  находя-щихся  в  других  помещениях  или  даже  зданиях.  И  хотя  такой  вид  клиент-серверного  программирования  был  несколько  сложнее написания программы для одного компьютера, он все  20 Глава 1. Введение

еще был относительно прост для понимания. Клиент (-ы) делал  (-и) запросы, а сервер (-ы) их обслуживал (-и). Рост Интернета и появление в начале 2000-х крупных центров  обработки  данных  (ЦОД),  состоящих  из  тысяч  относительно  недорогих  массово  производимых  компьютеров,  которые  объ-единялись  в  сеть,  привели  к  широкому  распространению  рас-пределенных систем . В отличие от клиент-серверных архитек-тур  распределенные  приложения  состоят  либо  из  нескольких  разных  приложений,  либо  из  нескольких  копий  одного  при-ложения,  работающих  на  разных  машинах.  Взаимодействуя,  они реализуют некоторый сервис, например веб-поисковик или  систему розничных продаж.

В  силу  своего  распределенного  характера  такие  системы  при  грамотной их структуризации более надежны по определению.  А  при  грамотно  спроектированной  архитектуре  системы  мас-штабируемой становится и ее команда разработчиков. К сожале-нию, за эти преимущества приходится платить. Распределенные  системы  существенно  сложнее  в  проектировании,  построении  и отладке. При построении надежной распределенной системы  к инженерно-техническим навыкам специалистов предъявляют-ся существенно более высокие требования, чем при построении  локальных  приложений.  Так  или  иначе,  потребность  в  надеж-ных распределенных системах продолжает расти. Следователь-но, возникает необходимость в соответствующих инструментах,  паттернах и практиках их построения.

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

ных  систем.  Взяв  за  основу  контейнеры  и  оркестраторы  кон-тейнеров,  мы  можем  создать  набор  повторно  используемых  Глава 1. Введение 21

компонентов  и  паттернов  проектирования.  Такие  паттерны  и  компоненты  составляют  инструментарий,  необходимый  для  разработки более эффективных надежных систем. Краткая история паттернов проектирования в разработке ПО Чтобы  лучше  понять,  как  паттерны,  практики  и  повторно  ис-пользуемые  компоненты  изменили  разработку  систем,  имеет  смысл  взглянуть  на  то,  как  подобные  трансформации  проис-ходили в прошлом.

Формализация алгоритмического программирования

Люди писали программы задолго до опубликования Дональдом  Кнутом сборника «Искусство программирования»> 1 . Тем не ме-нее  это  событие  стало  важной  вехой  в  развитии  информатики.  В частности, описанные в книгах Кнута алгоритмы не ориенти-рованы на какой-либо компьютер, а предназначены для обуче-ния  читателя  алгоритмическому  мышлению.  Эти  алгоритмы  могут  быть  адаптированы  к  конкретной  компьютерной  архи-тектуре  или  к  конкретной  задаче,  решаемой  читателем.  Такая  формализация была важна не только потому, что предоставляла  разработчикам  общий  инструментарий  для  написания  про-грамм,  но  и  потому,  что  демонстрировала  существование  уни-версальных  идей,  которые  можно  применять  в  разнообразных  контекстах. Понимание алгоритмов имеет ценность само по себе,  безотносительно к какой-либо решаемой с их помощью задаче. 22 Глава 1. Введение

Паттерны в объектно-ориентированном программировании

Если появление книг Кнута стало важной вехой в теории ком-пьютерного  программирования, то  алгоритмы  —  ключевой  составляющей  его  развития.  Однако  по  мере  роста  сложности  компьютерных программ и увеличения численного состава раз-

рабатывающих их команд с единиц до сотен и тысяч стало ясно,  что языков процедурного программирования и алгоритмов уже  недостаточно  для  решения  насущных  задач.  Эти  изменения  привели  к  появлению  и  развитию  объектно-ориентированных  языков  программирования, которые  уравняли  в  правах  с  алго-ритмами данные, повторное использование и расширяемость. В  ответ  на  эти  изменения  в  компьютерном программирова-нии  изменениям  подверглись  также  паттерны  и  практики  программирования.  В  начале  и  середине  1990-х  годов  про-изошел  взрывной  рост  количества  книг  об  объектно-ориен-тированном  программировании.  Наиболее  известна  из  них  книга «банды четырех» «Приемы объектно-ориентированного  проектирования»