Основные понятия
Понятие «Вертикальное масштабирование» (Scale-Up) соответствует традиционной архитектуре, поддерживающей вертикальное расширение. Оно реализуется путем добавления устройств хранения данных в существующие системы хранения по мере увеличения объемов данных. Понятие «Горизонтальное масштабирование» (Scale-Out) соответствует архитектуре, поддерживающей горизонтальное расширение. Оно реализуется путем добавления контроллеров по мере увеличения объемов данных на одном узле.
Горизонтальное PCIe-масштабирование и горизонтальное IP-масштабирование
Горизонтальное PCIe-масштабирование основано на протоколе PCIe, а горизонтальное IP-масштабирование – на протоколе IP.
Передача данных PCIe имеет более высокую пропускную способность и меньшую задержку по сравнению с IP-передачей. Таким образом, для наращивания ресурсов систем хранения критически важных данных компании Huawei (18500 V3/18800 V3) используется горизонтальное PCIe-масштабирование, а для систем хранения Huawei начального и среднего уровней (5300 V3/5500 V3/5600 V3/5800 V3/6800 V3) используется горизонтальное IP-масштабирование.
Технологии горизонтального масштабирования, используемые в системах хранения данных Huawei
Горизонтальное PCIe-масштабирование: основано на протоколе PCIe, отличается большой пропускной способностью и низкой задержкой и применяется для высокопроизводительных продуктов.
Горизонтальное IP-масштабирование: основано на стандартных технологиях и инфраструктуре для центров обработки данных, включая ETH, TCP/IP и iWARP, отличается широкой технологической совместимостью и хорошей экологичностью и применяется для продуктов среднего и начального уровней. Однако его пропускная способность уступает пропускной способности горизонтального PCIe-масштабирования.
Процесс записи на локальный диск
Локальная запись означает, что LUN, на который хост записывает данные, принадлежит Engine, которому хост передает данные ввода-вывода на запись. Процесс выглядит следующим образом:
- Хост передает данные ввода-вывода на запись в Engine 0.
- Engine 0 записывает данные в локальный кэш, выполняет зеркалирование и отправляет сообщение об успешной записи данных.
- Engine 0 переносит «грязные» данные на диск. Если целевой диск является локальным, то Engine 0 напрямую передает данные ввода-вывода на запись.
- Если целевой диск не является локальным диском, Engine 0 передает данные ввода-вывода в Engine (Engine 1), в котором расположен диск.
- Engine 1 записывает «грязные» данные на диск.
Процесс записи на нелокальный диск
- Хост передает данные ввода-вывода на запись в Engine 2.
- После того, как Engine 2 обнаруживает, что LUN принадлежит Engine 0, он передает данные ввода-вывода на запись в Engine 0.
- Engine 0 записывает данные в локальный кэш, выполняет зеркалирование и отправляет сообщение об успешной записи данных.
- Engine 2 отправляет хосту сообщение об успешной записи.
- Engine 0 переносит «грязные» данные на диск. Если целевой диск является локальным, то Engine 0 напрямую передает данные ввода-вывода на запись.
- Если целевой диск не является локальным диском, Engine 0 передает данные ввода-вывода в Engine (Engine 1), в котором расположен диск.
- Engine 1 записывает «грязные» данные на диск.
Процесс чтения с локального диска
- Хост направляет данные ввода-вывода на чтение в Engine 0.
- Если данные ввода-вывода на чтение попадают в кэш Engine 0, то Engine 0 возвращает данные на хост.
- Если данные ввода-вывода на чтение не попадают в кэш Engine 0, то Engine 0 считывает данные с диска. Если целевой диск является локальным, то Engine 0 считывает данные с диска.
- После считывания данных с диска Engine 0 возвращает данные на хост.
- Если целевой диск не является локальным диском, Engine 0 передает данные ввода-вывода в Engine (Engine 1), в котором расположен диск.
- Engine 1 считывает данные с диска.
- Engine 1 завершает считывание данных.
- Engine 1 возвращает данные в Engine 0, а Engine 0 возвращает данные на хост.
Процесс чтения с нелокального диска
- LUN, с которого хост считывает данные, не принадлежит Engine, которому хост передает данные ввода-вывода на чтение. Поэтому хост передает данные ввода-вывода на чтение в Engine 2.
- После того, как Engine 2 обнаруживает, что LUN принадлежит Engine 0, он передает данные ввода-вывода на чтение в Engine 0.
- Если данные ввода-вывода на чтение попадают в кэш Engine 0, то Engine 0 возвращает данные в Engine 2.
- Engine 2 возвращает данные на хост.
- Если данные ввода-вывода на чтение не попадают в кэш Engine 0, то Engine 0 считывает данные с диска. Если целевой диск является локальным, то Engine 0 считывает данные с диска.
- После считывания данных с диска Engine 0 возвращает данные в Engine 2, а Engine 2 возвращает данные на хост.
- Если целевой диск не является локальным, Engine 0 передает данные ввода-вывода в Engine 1, в котором расположен диск.
- Engine 1 считывает данные с диска.
- Engine 1 завершает считывание данных.
- Engine 1 возвращает данные в Engine 0, Engine 0 возвращает данные в Engine 2, а Engine 2 возвращает данные на хост.