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