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

стр.

дежных распределенных систем и делают его более доступным  для начинающих разработчиков. Далее будет кратко описана  история  разработок,  приведших  к  современному  состоянию  отрасли.

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

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

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

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

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

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

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

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