Кластеры
Топология:
Еще есть куб, гиперкуб n-й степени. Полносвязная топология – минимальный диаметр, но сложно и дорого.
Кластер – набор компьютеров, соединенных высокоскоростной локальной сетью.
Предназначены для решения вычислительных задач.
Задача разбивается на параллельные процессы.
Т=Т1+…+Тn, N<<n, где N – кол-во компьютеров в кластере.
Наша задача – построить высокоскоростную сеть. Основные используемые топологии – решетка, двойной тор, n-мерный гиперкуб.
Нужно организовать передачу данных между компьютерами (выбор пути и т.п.). Время передачи – O(kt), k – макс. количество связей между компьютерами, t – время передачи по одной связи.
Чтобы ускорить – используют коммутацию пакетов (строят заранее путь, потом быстро проталкивают пакет), wormhole – начинают строить путь и проталкивают одновременно.
Для связи используются специальные интерфейсные карты.
П
амять
нужна как свой буфер для синхронизации
с сетью и т.п. На самом деле трафик
копируется 5 раз (память → драйвер →
инт. карта → инт. карта → драйвер →
память). Хорошего решения этой проблемы
нет.
Логично было бы использовать DMA для ускорения, но не используют чаще всего, т.к. возникают проблемы с вирт. физической памятью.
OS кластера должна иметь в API ф-ии send и receive
send(addr,pmsg); receive(addr,pmsg);
Синхронный (блокирующий) send – дожидается выхода пакета из карты, асинхронный – не дожидается. Пакеты ходят без подтверждения, аналог UDP.
При асинхронном выводе используются дополнительные буферы в памяти ядра, механизм прерываний, copy-on-write (копирование буфера передачи, который можно заполнять снова, при этом старый буфер будет по-прежнему передаваться. Все это решает проблему синхронизации буфера передачи – нельзя испортить старый). Зато быстрее синхронного.
Другой подход – RPC (Remote Procedure Call). Мы хотим с машины A вызывать функцию f(a,b,c) на машине B, чтобы параметры и результат передавались неявно. Удобно с точки зрения программиста.
int f(int x,int y) {return x+y;}
int x=B.f(1,2)
П
роблемы:
формат передаваемых данных, тип.
Маршализация – упаковка параметров
согласованным образом.
Еще проблема: нельзя передавать адрес массива, т.к. разная память. Приходится передавать массивы целиком.
RPC – один из центральных механизмов обработки данных в кластере (не считая общения с БД).
Распределенные системы
Отличия от кластеров: к сети подключены полноценные компьютеры; топология уже реализована; сеть глобальная (медленнее); обилие протоколов прикладного уровня (вместо RPC/send-receive); неоднородность характеристик машин (OS, CPU).
Распределенная система всегда использует некий middleware – еще один слой абстракции.
П
рикл.
прогр. middleware
OS, протоколы, …
Middleware
Абстрактные файловые системы (AFS)
Компоненты Компонент – более абстрактная вещь, чем объект, черный ящик с интерфейсом.
CORBA – разработка OMG. В нем есть IDL – Interface Description Language.
COM – разработка Microsoft. Почти все в Windows написано с использованием COM.
Виртуальные машины
J
Java
байткод
JVM
ava (1995), разраб. Sun. Раньше назыв. Oak. Впервые стала использоваться в браузере (Netscape).
Преимущества
JVM – кроссплатформенность
и сборка мусора..NET, разраб. Microsoft, очень похож на Java Отличия:
можно писать на любом языке. CLI – common language interface. Ассемблер машины .NET очень высокого уровня. От MS есть компиляторы для VB.NET, C#, C++ managed, J#, JScript.NET и еще множество сторонних компиляторов.
JIT-компиляция (just in time – прямо перед выполнением байткод компилируется в нормальный код). На самом деле переводится в нормальный код только арифметика (~40%). На счетных программах .NET работает как C++, в остальных случаях – медленнее Java. Вообще, Java обычно медленнее C++ примерно в 5 раз.
В .NET единицей хранения dll является не имя, а assembly (имя, версия, язык, …). .NET потихоньку вытесняет COM. Вообще, производительность теряет значение.
В виртуальных машинах есть такое понятие, как Sandbox – можно ограничивать доступ виртуальной машины к ресурсам реальной машины. Очень важная для безопасности вещь, реализована и в JVM и в .NET
H
слой данных
бизнес-логика
UI
TTP/XML
three-tier
model
многослойность
дает безопасность: веб-сервер (UI)
ничего не знает о БД, поэтому ничего не
может сообщить злоумышленнику.
