Распределенные системы. Паттерны проектирования - [6]
Краткая история разработки систем Первое время машины создавались для какой-то одной цели: расчета артиллерийских таблиц, прогнозирования приливов и отливов, взлома шифров и других точных, сложных, но рутинных математических вычислений. Спустя годы специ-ализированные машины превратились в программируемые компьютеры общего назначения. Те со временем перешли от выполнения одной программы на одной машине к парал-лельному выполнению многих программ на одной машине с помощью операционных систем с разделением времени. Эти машины все еще были разъединены друг с другом. Постепенно машины стали объединяться в сети, в результате чего появились клиент-серверные архитектуры. Относительно маломощные компьютеры на рабочих местах получили доступ к вычислительным ресурсам мощных мейнфреймов, находя-щихся в других помещениях или даже зданиях. И хотя такой вид клиент-серверного программирования был несколько сложнее написания программы для одного компьютера, он все 20 Глава 1. Введение
еще был относительно прост для понимания. Клиент (-ы) делал (-и) запросы, а сервер (-ы) их обслуживал (-и). Рост Интернета и появление в начале 2000-х крупных центров обработки данных (ЦОД), состоящих из тысяч относительно недорогих массово производимых компьютеров, которые объ-единялись в сеть, привели к широкому распространению рас-пределенных систем . В отличие от клиент-серверных архитек-тур распределенные приложения состоят либо из нескольких разных приложений, либо из нескольких копий одного при-ложения, работающих на разных машинах. Взаимодействуя, они реализуют некоторый сервис, например веб-поисковик или систему розничных продаж.
В силу своего распределенного характера такие системы при грамотной их структуризации более надежны по определению. А при грамотно спроектированной архитектуре системы мас-штабируемой становится и ее команда разработчиков. К сожале-нию, за эти преимущества приходится платить. Распределенные системы существенно сложнее в проектировании, построении и отладке. При построении надежной распределенной системы к инженерно-техническим навыкам специалистов предъявляют-ся существенно более высокие требования, чем при построении локальных приложений. Так или иначе, потребность в надеж-ных распределенных системах продолжает расти. Следователь-но, возникает необходимость в соответствующих инструментах, паттернах и практиках их построения.
К счастью, современные технологии упрощают разработку рас-пределенных систем. В последние годы контейнеры, их образы и оркестраторы стали популярными в силу того, что являются неотъемлемыми составными частями надежных распределен-
ных систем. Взяв за основу контейнеры и оркестраторы кон-тейнеров, мы можем создать набор повторно используемых Глава 1. Введение 21
компонентов и паттернов проектирования. Такие паттерны и компоненты составляют инструментарий, необходимый для разработки более эффективных надежных систем. Краткая история паттернов проектирования в разработке ПО Чтобы лучше понять, как паттерны, практики и повторно ис-пользуемые компоненты изменили разработку систем, имеет смысл взглянуть на то, как подобные трансформации проис-ходили в прошлом.
Формализация алгоритмического программирования
Люди писали программы задолго до опубликования Дональдом Кнутом сборника «Искусство программирования»> 1 . Тем не ме-нее это событие стало важной вехой в развитии информатики. В частности, описанные в книгах Кнута алгоритмы не ориенти-рованы на какой-либо компьютер, а предназначены для обуче-ния читателя алгоритмическому мышлению. Эти алгоритмы могут быть адаптированы к конкретной компьютерной архи-тектуре или к конкретной задаче, решаемой читателем. Такая формализация была важна не только потому, что предоставляла разработчикам общий инструментарий для написания про-грамм, но и потому, что демонстрировала существование уни-версальных идей, которые можно применять в разнообразных контекстах. Понимание алгоритмов имеет ценность само по себе, безотносительно к какой-либо решаемой с их помощью задаче. 22 Глава 1. Введение
Паттерны в объектно-ориентированном программировании
Если появление книг Кнута стало важной вехой в теории ком-пьютерного программирования, то алгоритмы — ключевой составляющей его развития. Однако по мере роста сложности компьютерных программ и увеличения численного состава раз-
рабатывающих их команд с единиц до сотен и тысяч стало ясно, что языков процедурного программирования и алгоритмов уже недостаточно для решения насущных задач. Эти изменения привели к появлению и развитию объектно-ориентированных языков программирования, которые уравняли в правах с алго-ритмами данные, повторное использование и расширяемость. В ответ на эти изменения в компьютерном программирова-нии изменениям подверглись также паттерны и практики программирования. В начале и середине 1990-х годов про-изошел взрывной рост количества книг об объектно-ориен-тированном программировании. Наиболее известна из них книга «банды четырех» «Приемы объектно-ориентированного проектирования»