Русский
Русский
English
Статистика
Реклама

Масштабирование

Особенности масштабирования WebGL-карты

22.12.2020 08:17:45 | Автор: admin
Мывыпустили редактор стилей. Подробно о том, как сним можно настроить карту под задачи сервиса, можно почитать наvc.ru. НаХабреже хотим рассказать оконцепции StyleZoom, которую мыиспользуем втом числе ивредакторе стилей.

Под катом небольшой рассказ озум-левелах: почему встандартном виде они неподходят для больших территорий икак масштаб влияет назагрузку тайлов ивнешний вид карты.




Зум-левел


Для обозначения масштаба вWebGL-карте 2ГИС, как ивомногих других картах, используется число зум-левел или просто зум. Зум, равный нулю, соответствует масштабу карты, при котором весь мир помещается вквадрат размером 256256px.


Карта мира при zoom = 0

Увеличение зума наединицу соответствует растяжению карты вдва раза. Напервом зуме весь мир будет размером 256 2 = 512px. Начетвёртом получаем размер 256 2 2 2 2 = 4096px.

Такая система позволяет обозначать диапазон масштабов удобными для понимания числами. Например, zoom = 11 примерно один крупный город наэкране, zoom = 19позволяет детально рассмотреть здания ипроходы между ними.

Проекция Меркатора


Вкартах 2ГИС используется картографическая проекция Меркатора. Картографическая проекция способ отобразить сферическую поверхность Земли наплоской карте.

Так как плоскость ишар неодно итоже, любая картографическая проекция искажает форму или размеры объектов. Впроекции Меркатора объекты набольших широтах накарте выглядят больше, чем объекты наэкваторе. Поэтому натаких картах Гренландия выглядит размером сАфрику, хотя фактически еёплощадь меньше площади Африки в14раз. Здесь можно рассмотреть, как проекция искажает размеры стран.


Если Россию приблизить к экватору, её размер на карте значительно уменьшается

Растяжение объектов пропорционально 1 / cos(lat), где lat широта объекта. Из этой формулы следует, что объекты на широте Санкт-Петербурга (lat = 60) на карте будут растянуты в два раза. А объекты на Северном или Южном полюсах (lat = 90) и вовсе растянутся до бесконечности. Именно поэтому на картах в проекции Меркатора никогда не рисуются полюса на них обрезается всё севернее и южнее 85 широты.

Подробнее о проекции Меркатора можно почитать в этом наглядном и увлекательном материале.

Проблемы сзумом ипроекцией Меркатора


Изсвойств проекции Меркатора вытекает главная проблема сзумами: один итотже зум-левел наразных широтах соответствует разным фактическим масштабам карты.

Сравним скриншоты карты на14-м зуме вМурманске (широта69) иТашкенте (широта41).


15-й зум в Мурманске


15-й зум в Ташкенте

Видно, насколько сильно отличаются поразмеру дома. ВМурманске они крупные, вТашкентеже карта мельчит.

При создании стилей карты мыхотим придать ейопределённый внешний вид. Для этого задаём ширину дорог впикселях взависимости отзума или зум, скоторого начинаем показывать дома. Стили, написанные для одной широты, надругой будут выглядеть совсем иначе. Смысл, заложенный вних, исказится, так как зумы будут означать уже другой фактический масштаб.

Решение


Для решения этой проблемы мыввели понятие styleZoom, который может отличаться отобычного zoom.
Обычный zoom StyleZoom
Определяет масштабирование объектов Определяет, какие тайлы грузить
Записывается в url Определяет, для какого масштаба применять стили
Используется в привычных методах getZoom / setZoom Используется в методах getStyleZoom / setStyleZoom
Совпадает с растровыми тайлами

styleZoom вычисляется изzoom ишироты посдедующей формуле: styleZoom = zoom + log2(1/ (2 * cos(lat)).

Изформулы вытекают следующие свойства styleZoom:
  • Нашироте 60styleZoom = zoom. Так как стили изначально писались наНовосибирск иМоскву, решили взять эту широту забазовую.
  • Наширотах <60styleZoom < zoom. Наэкваторе styleZoom = zoom 1.
  • Наширотах >60 styleZoom > zoom.

Посмотрим теперь, как будут выглядеть Ташкент и Мурманск при styleZoom = 15.


Ташкент, styleZoom = 15 (zoom 15.59)


Мурманск, styleZoom = 15 (zoom 14.53)

Хорошо видно, что styleZoom соответствует реальному масштабу карты вне зависимости отшироты: дома визуально неотличаются поразмеру, карта вдвух разных городах выглядит одинаково.

Ограничения


Умеханизма коррекции есть недостатки, которые проявляются вдвух сценариях работы скартой.

zoom < 9
Нанебольших зумах, когда наэкране виден весь мир или его бльшая часть, перетаскивание карты вверх-вниз приводит кбольшим изменениям широтыи, соответственно, styleZoom.

Вовремя перетаскивания это может привести кзагрузке новых тайлов, переключению стилей, появлению или исчезновению объектов ит.п. Чтобы избежать этого эффекта, приzoom<9коррекция отключается, иstyleZoom приравнивается кzoom.

lat > 60
Наочень больших широтах styleZoom становится сильно больше zoom. Так как styleZoom отвечает зато, какие тайлы грузить, может оказаться, например, что на14-м зуме мызагрузим иотобразим тайлы 16-го зума. Тайл 16-го зума в16раз меньше поплощади, чем тайл 14-го зума. Иесли обычно наэкран попадает 30тайлов, товэтом случае ихбудет 480. Аколичество тайлов сильно влияет напроизводительность. Чтобы незагружать видеокарту наэтих широтах, при lat > 60коррекция отключается, иstyleZoom также приравнивается кzoom.

Вместо вывода


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

Запост отдельное спасибо Лёше Федосову. Лёха, привет!
Подробнее..

Микросервисы не способ масштабироваться

28.05.2021 00:20:41 | Автор: admin

В большом количестве статей, источников микросервисы, помимо всего прочего, представляются как способ построить масштабируемое решение. Рассмотрим на примерах, почему это не так. А так же попытаемся внести свою лепту в извечный вопрос:

Что лучше: монолит или микросервис?

Рассмотрим пример.

Допустим, у нас есть микросервис A, выполняющий авторизационные запросы "имеет ли право пользователь выполнить операцию?".

Поскольку изолированно такой микросервис существовать не может, то в паре с ним существует другой микросервис B, который сохраняет в хранилище список соответствий пользователи-права (Фактически это структура одного микросервиса, разделённого на два, чтоб распределить нагрузку по логическим подмодулям. То есть деление даже более мелкое, нежели обычные микросервисы).

Примерная схема микросервисов показана на рисунке:

Рисунок 1Рисунок 1

В результате изменений в пользовательских данных (регистрация новых пользователей, ограничения на существующих и т.п.) микросервис B "следит" за актуальностью данных в хранилище, которое использует микросервис A для выполнения авторизационных запросов.

Простая схема. Просто устроена, надёжно работает.

Предположим, что количество пользователей, подключающихся к нашей системе, растёт. Каковы "узкие" места в этой архитектуре?

  • нагрузка на CPU в микросервисе A

  • нагрузка io-read/select в БД

  • нагрузка на CPU в микросервисе B

  • нагрузка io-write в БД

Вопросы с CPU в микросервисах решаются просто добавлением экземпляров в игру. Здесь масштабирование простое, и не стоит его обсуждать:

Рисунок 2Рисунок 2

Давайте посмотрим, что будет с ростом нагрузки на микросервис A и B?

В определённый момент времени БД перестанет справляться с потоком запросов на чтение от микросервиса A. При наступлении этих проблем обычно вводят в игру RO-реплики БД:

Рисунок 3Рисунок 3

Поскольку микросервис A не модифицирует записи в БД, то добавлением реплик к БД можно решить практически все вопросы масштабирования этого микросервиса.

Но вот вопрос: а что делать, когда микросервис B приведёт master-БД к лимиту, определённому максимумом нагрузки на запись (io-write)?

Вариантов решения этих проблем довольно немного. Все они сводятся к тому, чтоб распределить запись в БД по нескольким хостам. Используем схему шардинга или иной масштабируемый multi-master:

Рисунок 4Рисунок 4

Вместо одной БД у нас имеется X шардов БД, позволяющих масштабировать нагрузку на запись, и к каждому шарду - реплики (всего - Y), позволяющие масштабировать нагрузку на чтение.

Итого:

По мере роста нагрузки в нашем примере сами микросервисы претерпели немного изменений. Большинство изменений при масштабировании было в хранилище данных.

Если рассмотреть более обобщённо, то при масштабировании микросервисная архитектура сталкивается со следующими проблемами масштабирования:

  1. Ограничения CPU на хостах

  2. Ограничения IO в хранилищах данных

  3. Ограничения пропускной способности сети между хостами

Способы преодоления этих проблем масштабирования ничем не отличаются от способов, применяемых в немикросервисных архитектурах. Мало того, третья проблема встречается в основном именно в микросервисной архитектуре.

Выводы

  1. Микросервисная архитектура не является способом масштабирования проекта. Микросервисная архитектура - это способ разделения проекта на модули и инкапсуляции кода (и данных).

  2. Основу масштабирования практически любого большого проекта следует искать в области хранения и обработки хранящихся данных.

Монолиты и микросервисы: граница

Если рассмотреть развитие аналогичного монолитного сервиса примерно в таком же ключе, как мы рассматривали выше развитие микросервиса, то в результате его развития будут пройдены те же стадии преодоления проблем. В итоге структура монолита будет включать в себя те же самые компоненты. А если взглянуть на серверное разделение, то будут включать в себя выделенный сервер (кластер серверов) авторизации и сервер регистрации пользователей. Однако, эта структура будет оставаться монолитной.

В чём же отличие? Почему монолит, разделённый на сервисы, остаётся монолитом? Потому что во всех его сервисах используется единая кодовая база.

Если один и тот же код, не будучи выделен в библиотеку, работает во множестве микросервисов, то это - монолитная архитектура.

Построение проектов с нуля: Монолит vs микросервис

Если не рассматривать вновь запускаемые проекты на лямбдах/FaaS, то можно отметить одну чуть ли не во всех проектах встречающуюся особенность:

Как правило, проект на стадии запуска реализации и на стадии запуска MVP отличается довольно сильно. Видение бизнес-развития проекта в стадии после MVP отличается от стартового ещё сильнее. И, чем больше времени проект развивается, тем сильнее эти отличия.

Бизнес-требования к стартующему проекту обычно меняются прямо в процессе реализации его MVP. Да, это не для всех случаев так, но для огромного пула стартапов это именно так.

Что из этого следует? Из этого следует эмпирическое правило: для запуска стартапов необходимо выбирать технологии, исходя из критериев:

  • в дальнейшем понятно, как масштабировать (в основном, это относится к хранилищу)

  • сравнительно просто рефакторить (это относится к выбору технологии построения кода)

  • простое покрытие автоматическими тестами

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

И, исходя из написанного, энергию вечного спора "монолит vs микросервис" на стадии запуска проекта надо направить в русло проработки хранилища данных с изначальной ориентацией на масштабирование. А в процессе развития монолит и микросервис будут иметь весьма похожую архитектуру. Настолько похожую, что отличить их друг от друга будет сложно.

Подробнее..

Выбор хэш-функции в задаче шардирования данных

28.12.2020 02:07:52 | Автор: admin

Введение

Мы в Miro работаем над процессом шардирования баз Postgres и используем разные подходы в зависимости от бизнес-требований. Недавно перед нами встала задача шардирования новых баз, в ходе неё мы выбрали новый для нас подход к шардированию, основанный на согласованном хешировании (consistent hashing).

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

Oб архитектурном подходе

Есть много продуктов (mongo, redis, и т.д.), использующих согласованное хеширование для шардинга, и наша реализация будет сильно похожа на них.

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

Плюсами данного подхода являются:

  • равномерное распределение сущностей по шардам;

  • определение соответствия сущностей и шардов без дополнительного хранилища с минимум ресурсо-затрат;

  • возможность добавления новых шардов в кластер.

Из минусов:

  • неэффективность некоторых операций поиска, в которых необходимо делать запросы на все шарды;

  • достаточно сложный процесс решардинга.

Требования

Центральным местом решения является выбор java-реализации хэш-функции.

Функция принимает на вход ключ - объект строки, размером до 256 символов, и выдает хэш-код - беззнаковое целое число, размером до 4 байт. На самом деле мы будем сравнивать реализации которые генерируют хэш-коды размером 2 и 4 байта.

Критерии сравнения

Рассмотрим четыре распространенных критерия сравнения реализаций хэш-функций:

  1. Скорость, функция должна работать быстро, на любых входных данных;

  2. Вид распределения результатов. Очень важно, чтобы функция на выходе генерировала хэши, которые соответствуют равномерному распределению;

  3. Устойчивость к коллизиям (первого и второго рода);

  4. Соответствие лавинному эффекту. Отражает зависимость всех выходных битов от каждого входного бита, на любых входных данных.

Для нашей задачи нам будут важны только первые два критерия: первый - поскольку операция расчета хэша будет очень частой; и второй - поскольку крайне важно, чтобы данные распределялись по шардам равномерно.

Отсутствие возможности атаки на характеристики функции делает для нас неважным третий критерий.

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

Реализации

Мы будем рассматривать самые популярные java-реализации не-криптографических хэш-функций:

  1. DJB2 (32-бита);

  2. SDBM (32-бита);

  3. LoseLose (32-бита);

  4. FNV-1 / FNV-1a (32-бита);

  5. CRC16 (16-бит) ;

  6. Murmur2/Murmur3 (32-бита).

Тестирование

Входные данные

В качестве входных данных мы будем использовать следующие наборы данных

  1. Набор реальных данных, составленный из 216,553 английских слов;

  2. Набор синтетических данных, составленный из рандомно сгенерированных символов в кодировке UTF-8.

В обоих тестовых наборах мы будем иметь группы строк с определенными длинами (кол-во символов) - "2", "4", "8", "16", "32", "64", "128", "256".

Метрики

Для сравнения различных критериев мы будем использовать следующие метрики:

  1. Для первого критерия, скорости - ops/ms (кол-во операций в миллисекунду работы);

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

Инструменты

Оценка скорости работы

Для оценки скорости работы мы воспользуемся нагрузочными тестами и библиотекой JMH. Общая схема тестовой итерации выглядит следующим образом:

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

Для бэнчмарков мы будем использовать следующие настройки

  • Кол-во warmup-итераций - 50;

  • Кол-во measurement-итераций - 100;

  • Режим - throughput

  • Добавим ограничение по памяти -Xms1G, -Xmx8G

  • Для оценки расхода памяти добавим GCProfiler

Полный код тестов можно посмотреть здесь.

Оценка распределения результатов

Для проверки соответствия выходных значений функции нашим ожиданиям проверим гипотезу о том, что выборка результатов при уровне значимости =0,05, распределена по равномерному закону. Для проверки мы будем использовать критерий согласия Пирсона.

Алгоритм для проверки гипотезы следующий:

  1. Разобьем выборку на частичные интервалы, число которых найдем по формуле Стерджеса, а их длину найдем по правилу равноинтервальной группировки;

  2. Для каждого интервала подсчитаем его характеристики - среднее значение, частоты, относительные частоты;

  3. Подсчитаем выборочное среднее \overline{x_{b}} , среднеквадратическое отклонение \sigma_{b} = \sqrt{D_{b}} и теоретические частоты

    \hat{n_{i}}=np_{i},

    где n число элементов в выборке, а p_{i} вероятность попадания случайной величины в частичные интервалы, в нашем случае она равна -

    p_{i} = \frac{x_{length}}{b - a},

    где x_{length} - одинаковая длина интервалов, a параметры a и b - a = \overline{x_{b}} - \sqrt{3\sigma_{b}} , b = \overline{x_{b}} + \sqrt{3\sigma_{b}} ;

  4. Можем приступить к расчёту критерия согласия, по формуле

    \chi_{набл}^2 = \sum\frac{n_{i}-\hat{n_{i}}}{\hat{n_{i}}},

    где n_{i} - эмпирические частоты, полученные из выборки, \hat{n_{i}} - теоретические частоты, найденные по формулам выше;

  5. Определяем по таблице критических точек распределения \chi_{кр}^2(\alpha, k) , по заданному уровню значимости и числу степеней свободы k ;

  6. Если \chi_{набл}^2<\chi_{кр}^2 , то принимаем гипотезу, если же данное условие не выполняется отвергаем.

Код для расчёта критерия согласия и вероятностных характеристик выборок здесь.

Общая схема тестовой итерации похожа на схему в предыдущем разделе и выглядит следующим образом:

Слова из каждого тестового набора мы сгруппируем по длине, при максимальном значении символов в 256. Затем создадим входные тестовые выборки разных размеров в диапазоне 16384, 8192, 4096, 2048, 1024, в выборки поместим слова из каждой группы, с одинаковой вероятностью.

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

Полный код тестов можно посмотреть здесь.

Результаты

Оценка скорости работы

Рассмотрим скорость работы (количество операций в миллисекунду) для различных имплементаций в зависимости от длины входных строк.

В диапазоне от двух до восьми символов:

ДиаграммаДиаграмма

Видно, что в этом диапазоне практически все алгоритмы работают с одинаковой скоростью, незначительно опережает всех loseLose, а очевидными аутсайдерами выглядят только crc16 и sdbm.

В диапазоне от 16 до 256 символов:

ДиаграммаДиаграмма

Функция murmur2 явный фаворит, ей немного уступает murmur; crc16 и sdbm остались в аутсайдерах и на этой выборке.

Оценка распределения результатов

Рассмотрим таблицу результатов соответствия критерию Пирсона

Видно, что имплементации crc16, murmur2, murmur3 удовлетворяют критерию Пирсона о равномерном распределении практически на всех выборках.

Рассмотрим гистограммы относительных частот, в разрезе разных выборок.

На гистограммах ниже, для loseLose, Djb2, Sdbm, не прошедших тест, видно, что распределение далеко от равномерного и больше похоже на геометрическое:

ДиаграммаДиаграммаДиаграммаДиаграммаДиаграммаДиаграмма

Для проваливших тест Fnv1 и Fnv1a ситуация похожа, распределения отдалённо напоминают нормальное:

.

ДиаграммаДиаграммаДиаграммаДиаграмма

Смотрим на тройку победителей:

ДиаграммаДиаграммаДиаграммаДиаграммаДиаграммаДиаграмма

За исключением некоторых всплесков, crc16, murmur2, murmur3 удовлетворяют критерию Пирсона, что согласуется с характеристиками их гистограмм относительных частот.

Выводы

Рассмотрим выбор наиболее подходящей реализации, которую мы оцениваем по двум выбранным критериям: скорость работы и удовлетворение гипотезы о равномерном распределении.

Скорость работы. Функции murmur2/murmur3 имеют лучшее время работы для входных строк длиной больше 8 символов.

Удовлетворение гипотезы о равномерном распределении. Можем выделить три функции, для которых гипотеза принимается для большинства наборов данных: crc16, murmur2/murmur3. Графики распределения гистограмм относительных частот подтверждают вид равномерного распределения для функций crc16, murmur2/murmur3.

Таким образом, исходя из двух критериев, лучшим выбором являются реализации murmur2/murmur3.

Подробнее..

Серия мастер-классов по MySQL 1517 декабря

04.12.2020 08:08:46 | Автор: admin


Приглашаем на мастер-классы Тюнинг и масштабирование проекта на MySQL 1517 декабря 2020. Расскажем, что именно настроить, чтобы база не тормозила и не падала, а данные не терялись. Поможем найти медленные запросы и сделать их быстрыми.


Мастер-классы ведет Владимир Федорков, специалист по настройке и эксплуатации СУБД MySQL, эксперт в сфере производительности MySQL, постоянный спикер конференций в России, Европе и США.


Программа


День 1 15 декабря, вторник


  • Ставим и тюним MySQL для работы с высокими нагрузками
  • Версии MySQL и форки
  • Как настраивать MySQL? Важные аспекты при установке и первоначальной настройке
  • Как работает MySQL? Архитектура и настройки InnoDB
  • Другие подсистемы хранения
  • Что не нужно настраивать никогда
  • MySQL tuner и другие скрипты автоматической настройки

День 2 16 декабря, среда


  • Учимся писать самые быстрые в мире запросы для MySQL
  • Запросы в MySQL: что влияет на производительность?
  • Как оптимизировать SELECT?
  • Оптимизатор MySQL
  • Selectivity и Cardinality главные слова, которых никто не знает
  • Кэш запросов в MySQL
  • Оптимизация записи
  • Работа с изменениями схемы

День 3 17 декабря, четверг


  • Строим отказоустойчивую инфраструктуру для MySQL
  • Работа MySQL под высокими нагрузками
  • Масштабирование MySQL
  • Функциональное шардирование
  • Горизонтальное шардирование
  • Репликация в MySQL
  • Master-Master репликация
  • Инструменты объединения MySQL в кластеры (Galera, Group Replication)
  • Маршрутизация запросов и ProxySQL
  • Управление репликацией: MHA и Orchestrator
  • Бэкап и восстановление

Продолжительность каждого мастер-класса 1 час, в конце занятия будет выделено время для ответов на вопросы участников.


Стоимость участия: 3 000


Записаться на мастер-классы

Подробнее..

Автоматизация в центрах обработки данных

17.05.2021 12:14:39 | Автор: admin

В большинстве серверов HPE имеется встроенный контроллер управления Integrated Lights Out (iLO). Его первоначальное назначение удаленное управление сервером:
включение/выключение, перехват графической консоли, подключение медиа-устройств что и иллюстрирует название Lights-Out Свет выключен в ЦОД, где трудятся серверы HPE, администратору нет необходимости быть рядом. Все действия с серверами можно выполнить из любой точки мира. Функционал iLO постоянно расширялся и сейчас его можно назвать центром управления полетом сервера, фактически это мини-компьютер внутри большого компьютера. У iLO есть процессор, оперативная и флэш-память, Ethernet порт и, естественно, интерфейс управления: веб-браузер, командная строка, скрипты и программируемые интерфейсы REST API. Через REST API и осуществляется автоматизированное управление серверами HPE в соответствии со стандартом Redfish, пришедшим на смену устаревшему IPMI.

Следующий уровень управления инфраструктурой HPE программный продукт HPE OneView. Для стоечных и блейд-серверов c-Class это виртуальная машина (поддерживаются все основные гипервизоры), для платформы HPE Synergy это аппаратный модуль Composer. Управляется HPE OneView аналогично iLO: веб-интерфейс, скрипты и команды RESTful API / Redfish.

HPE OneView обеспечивает полное низкоуровневое управление серверной инфраструктурой: настройка BIOS, конфигурирование сетевых интерфейсов, подключение к SAN, создание томов на внешних системах хранения (HPE Primera, HPE Nimble, HPE 3PAR), контроль и обновление драйверов и микропрограмм. Все эти действия можно выполнять для одного или нескольких серверов, как используя консоль браузера, так и с помощью скриптов PowerShell или Python. Но самых интересных результатов можно достичь путем интеграции OneView со средствами развертывания операционных систем и приложений. В этом случае администратору вообще не нужно обращаться к OneView, все необходимые действия выполняются в вышестоящей консоли управления. Например, для среды VMware единой консолью служит vCenter, для Microsoft Windows Admin Center.

REST и Redfish

Если говорить о REST (Representational State Transfer), то он представляет собой обычный HTTP(s) запрос, передавая необходимые данные в качестве параметров запроса. В отличие от Redfish (более современной версии REST), REST никак не стандартизирован, он лишь является архитектурным стилем, позволяющим придерживаться определенных последовательностей, таких как запрос, тело запроса и параметры запроса. При этом какое дерево запроса, по какому стандарту передается тело запроса (JSON, XML или другой), каждый производитель решает на свое усмотрение. В итоге это привело к тому, что если пользователь работал с REST-интерфейсами от нескольких вендоров, то к ним требовался разный подход, а часто и разный набор кода, что не позволяло масштабировать решения основанные на REST-запросах.

В отличие от REST, Redfish является стандартизированным интерфейсом и позволяет работать пользователю с разными производителями с одинаковым подходом и тем самым, обеспечивать масштабируемость решения. В решениях HPE стандарт Redfish появился в ILO4 (v2.30) и более поздних продуктах.

Решение HPE по автоматизации (Deployment Automation Solution)

При преодолении определенной численности информационных систем и нарастании запросов со стороны бизнеса, сотрудники отдела сопровождения часто приходят к целесообразности автоматизации ежедневных, рутинных операций. Это помогает вводить и обслуживать информационные системы быстрее, а сотрудникам сконцентрироваться на более важных задачах. Обычно администраторы пытаются автоматизировать задачи собственными силами и привычными им средствами. В этом им помогает широкий набор инструментов (https://github.com/hewlettpackard/), таких как Ansible, Python, Puppet и других. При этом, как правило самостоятельно написанные скрипты приходится часто править, особенно при масштабировании решения в условиях продуктивной среды.

Deployment Automation Solution представляет собой услугу по настройке решения автоматизации ежедневных операций, построенного на открытом исходном коде, либо их коммерческих аналогов, которые уже используются на предприятии. Таким образом потребители решения смогут вносить правки, как в само решение, делая его более заточенным под конкретную организацию, так и добавлять в решение собственные наработки, тем самым расширяя функционал базового решения. Deployment Automation Solution основан на стандартных программных компонентах, таких как Ansible, для автоматизации и оркестрации, Nginx для предоставления библиотеки образов микрокодов, операционных систем и файлов конфигураций и GitLab как способ централизованной доставки скриптов и Ansible playbooks. Таким образом, использование стандартных отраслевых инструментов с помощью сценариев Ansible, связанных с базовым репозиторием кода и инфраструктурным конвейером DevOps с помощью GitLab делает подход системным, а масштабирование удобным. Большинство компонент работает в контейнерах, что дает возможность быстро развертывать и обновлять само решение.

Весь процесс взаимодействия построен на программно-определяемой инфраструктуре посредством использования существующих богатых функций OneView Ansible collection / REST API, предназначенных для среды управления HPE OneView, или Redfish / iLO для управляемых сред, без OneView, а также API-интерфейсов хранилищ данных. Также используются API конкретного программного производителя, например:

  • Ansible Playbooks от RHEL могут связываться с серверами Linux через SSH;

  • Подключение к VMware может осуществляться через REST API или SSH;

  • Связь с Windows может быть через WinRM.

Для удобства оркестрации решения и построения сложных рабочих процессов автоматизации используется AWX (https://github.com/ansible/awx, upstream project для Ansible Tower) или Ansible Automation Platform (https://www.ansible.com/integrations/infrastructure/hpe), для объединения и инкапсуляции атомарной инфраструктуры в виде базовых операций кода в рабочие процессы автоматизации для реализации задач выделения ресурсов и управления жизненным циклом. Этот модульный подход позволяет гибко настраивать интеграцию аппаратных и программных элементов решения. При этом AWX, или Ansible Automation Platform не является обязательным атрибутом. Все рабочие процессы доступны через REST API и могут быть вызваны из любого существующего решения, такого как HPE ServiceNow или Morpheus. решение достаточно гибкое, чтобы интегрироваться с порталом управления, выбранным каждым клиентом, и обеспечивает интеграцию с любым сторонним решением.

В базовом варианте решения HPE предоставляет два основных сценария использования:

  • Установка операционных систем, включая настройку аппаратных компонент: презентация томов СХД, настройка зонинга для SAN и т.д, а также программных компонент, включая настройки безопасности и манипуляции с ПО;

  • Обновление микрокодов, в том числе и без прерывания работы серверов.

При этом заказчик получит доступ к репозиторию с обновлениями playbooks для поддержки новых сценариев и компонент. Из коробки решение заточено под аппаратную платформу HPE, включая новейшие аппаратные ресурсы: DL Gen10, Synergy, Apollo и 3PAR / Primera / Nimble, однако открытый исходный код и поддержка разнообразных API позволит пользователям интегрировать решения сторонних производителей.

Заключение

Инфраструктура Hewlett Packard Enterprise предоставляет широкие возможности по автоматизации ежедневных ИТ-операций: подготовка и развертывание новых серверов, подключение к сетям передачи данных и системам хранения, установка операционных систем, контроль и обновление драйверов и firmware, реконфигурирование систем под изменяющиеся требования приложений. Заказчики сами выбирают уровень автоматизации: от простых сценариев групповых операций с iLO до решений Инфраструктура как код с HPE OneView и Ansible AWX / Automation Platform.

Подробнее..

Перевод Масштабирование кристалла как Intel уменьшала масштаб процессора 8086

21.07.2020 18:12:25 | Автор: admin
8 июня 1978 года исполнилось 42 года с того момента, как первые появились революционные микропроцессоры Intel 8086. В честь этого я изучал кристаллы 8086. Мне попались два кристалла 8086 разного размера, и на их примере видно, как работает масштабирование кристалла. Концепция масштабирования кристалла состоит в том, что с улучшением технологий производители могли уменьшать размер кремниевого кристалла, снижая стоимость и увеличивая быстродействие. Однако тут дело заключается не только в масштабировании кристалла целиком. Хотя все внутренние цепи можно уменьшить, внешние характеристики так легко не уменьшаются. К примеру, площадки для припаивания должны быть определённого размера, чтобы к ним можно было подвести проводники, а дорожки распределения питания должны быть достаточно большими для того, чтобы проводить необходимый ток. В итоге в Intel масштабировали внутреннюю часть 8086 без изменений, а цепи и площадки по краям чипа переделали.

Примечательно, что МОП-структуры всё ещё работают, будучи сильно уменьшенными, в то время, как большинство вещей нельзя просто так уменьшить. К примеру, нельзя масштабировать двигатель в 10 раз и ожидать, что он будет работать. Большинство физических объектов страдают от закона квадрата куба: площадь объекта растёт как квадрат линейного размера, а объём как куб. Однако в случае МОП-структур большинство составляющих при масштабировании либо остаётся без изменений, либо улучшается (к примеру, частота и энергопотребление). Больше деталей по масштабированию ищите в книге Мида и Конвея Introduction to VLSI Systems. Забавно, что в книге 1978 года утверждается, что у масштабирования есть фундаментальное ограничение в четверть микрона (250 нм) для длины канала из-за физических свойств материи. Это ограничение оказалось неимоверно ошибочным сейчас транзисторы переходят на характерный размер 5 нм, благодаря таким технологиям, как FinFET.

На фото ниже показан чип 8086 из 1979 года, а также его версия с явно меньшим по размеру кристаллом от 1986. С чипов сняты керамические крышки, чтобы было видно кристаллы. В обновлённом 8086-м внутренние цепи уменьшили на 64% по длине по сравнению с оригиналом, поэтому он занимает 40% от первоначальной площади. Сам кристалл не очень сильно уменьшен; он занимает 54% от первоначальной площади. Корпус процессора не изменялся, DIP с 40 выводами в то время часто использовали для микропроцессоров.

На старом чипе написано '78, '79 на корпусе и 1979 на кристалле, а снизу проставлен код даты 7947 (47-я неделя 1979 года). На корпусе нового чипа написано 1978, а на кристалле 1986, кода даты нет. Поэтому он должен быть изготовлен в 1986 или чуть позже. Непонятно, почему у нового чипа на корпусе стоит более старая дата.


Сравнение двух чипов 8086. У нового чипа снизу кристалл значительно меньше. Прямоугольник в правом верхнем углу это ROM с микрокодом.

8086 один из наиболее влиятельных чипов из всех, когда-либо созданных. Он положил начало архитектуре х86, которая до сих пор доминирует как в настольных, так и в серверных компьютерах. В отличие от современных КМОП-процессоров, 8086 был построен на N-МОП транзисторах, как 6502, Z-80, и другие первые процессоры. Первый чип сделали по технологии HMOS, как называли этот процесс в Intel. В 79 году Intel представила продвинутую его версию, HMOS-II, а в 82-м перешла на HMOS-III процесс, использовавшийся при изготовлении более нового из двух моих чипов. Каждая следующая версия HMOS ужимала размер компонентов чипа и повышала эффективность.

N-канальная МОП-структура это определённый тип МОП-транзистора. Их эффективность значительно превосходит P-канальный МОП-структуру, использовавшийся в ранних микропроцессорах, таких, как Intel 4004. Современные процессоры используют N-канальные и P-канальные транзисторы совместно для понижения энергопотребления это называется КМОП. Вентилям, созданным из N-канальных МОП, требуется притягивающий резистор, роль которого играет транзистор. Depletion load-транзисторы это тип транзисторов, представленный в середине 1970-х. Транзисторы этого типа лучше подходят на роль притягивающих резисторов и им не нужно дополнительное напряжение питания. Наконец, МОП-транзисторы изначально использовали металл для создания вентилей (буква М в МОП). Однако в конце 1960-х в Fairchild разработали поликремний, которым можно заменить металл. В итоге эффективность чипов повысилась, а производить их стало проще. В итоге, с конца 1960-х до середины 1970-х в производстве МОП-структур произошло несколько радикальных изменений, приведших к успеху 6502, Z-80, 8085, 8086 и других ранних процессоров. В 1980-е их место заняли КМОП- процессоры, поскольку они работали быстрее, а потребляли меньше энергии.

Странно, но что именно означает буква H в акрониме HMOS, не совсем ясно. Я не нашёл расшифровки этого акронима от Intel. В спецификациях пишут передовой процесс изготовления кремниевых N-канальных вентилей HMOS от Intel, или говорят " HMOS это высокоэффективный n-канальный МОП-процесс". Позднее Intel описывала CHMOS как Complementary High Speed Metal Oxide Semiconductor [комплементарный высокоскоростной метал-оксидный полупроводник]. Motorola определила HMOS как High-density MOS [МОП высокой плотности]. В других источниках её описывают, как высокоскоростную МОП или МОП высокой плотности с короткими каналами. У Intel есть патент на МОП-процесс и устройство высокой плотности и высокой скорости, так что, возможно, H обозначает одновременно и high density и high speed.

Интересно, что Intel использовала статическое ОЗУ на 4К для разработки каждого из HMOS-процессов до того, как начала использовать этот процесс для микропроцессоров и других чипов. Она использовала чип ОЗУ, вероятно, потому, что у него цепи расположены очень плотно, но при этом его относительно легко разрабатывать, поскольку там снова и снова повторяется одна и та же ячейка памяти. Как только она разработала все правила компоновки схем, она смогла начать создание гораздо более сложных процессоров.


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

На фото выше показаны две версии кристалла 8086 в одинаковом масштабе. У двух чипов идентичная схема расположения компонентов внутри, хотя на первый взгляд они могут показаться разными. У чипа справа в середине есть много тёмных линий, которых нет у чипа слева, но это просто артефакт съёмки. Эти линии слой поликремния, расположенного под металлом. У кристалла слева все проводники расположены точно так же, только на фото они очень бледные. Думаю, что у нового чипа металлический слой тоньше, из-за чего поликремний видно лучше.

Я масштабировал фотографии двух чипов, сделанные в высоком разрешении, чтобы сравнить их, и оказалось, что основные части у чипов полностью совпадают, за исключением некоторых тривиальных отличий. Вопрос только в том, были ли изменения в микрокоде. Снаружи они выглядят идентично, но побитово я их не сравнивал.

На увеличенном фото ниже показаны одинаковые цепи двух кристаллов. Видно точное соответствие между компонентами, что доказывает, что схему только уменьшили в размере, и не переделывали. На фото металлический слой находится сверху чипа. На правом фото видно немного поликремния.


Один и тот же участок на двух разных чипах, в одном масштабе

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


Контактная площадка и сопутствующие транзисторы на старом чипе (слева) и новом (справа). У цифры 6 в дате копирайта верхняя часть необычно плоская такое впечатление, что это 5, исправленная на 6.

На фото выше показана контактная площадка с припаянным соединительным проводником. Транзисторы находятся над площадкой. Площадка нового чипа имеет почти такой же размер, однако транзисторы уменьшены и переделаны. Обратите внимание на гораздо более толстые металлические проводники у нового чипа. Логотип Intel передвинули справа налево, возможно, потому, что там было свободное место.

Приглядимся к кристаллам поближе


Сначала немного истории о производстве n-канальных МОП, использовавшихся в 8086 и других чипах той эпохи. Эти чипы состояли из кремниевой подложки, к которой добавляли примеси мышьяка или бора, формировавшие транзисторы. Находящийся сверху слой поликремния создаёт вентили для транзисторов и даёт возможность соединять компоненты проводниками. Наконец, один металлический слой наверху связывает все компоненты.

У процесса производства полупроводников (к примеру, HMOS-III) есть определённые правила по минимальному размеру и расстоянию между компонентами кремнием, поликремнием и металлическими слоями. Если тщательно рассмотреть чипы, то станет видно, как эти параметры различались для HMOS I и HMOS III. В табличке (взятой из документа HMOS III Technology) сведены характеристики различных процессов HMOS. С каждой версией характерные размеры уменьшались, а быстродействие увеличивалось. При переходе от HMOS-II к HMOS-III Intel достигла улучшения быстродействия на 40%.

HMOS I HMOS II HMOS III
Шаг диффузии () 8.0 6.4 5.0
Шаг поликремния () 7.0 5.6 4.0
Шаг металла () 11.0 8.0 6.4
Толщина оксида вентиля () 700 400 250
Длина канала () 3.0 2.0 1.5
Idsat (mA) 8.0 14.0 27.0
Минимальная задержка вентиля (ps) 1000 400 200
Задержка вентиля на рассеивание тепла (pJ) 1.0 0.5 0.25
Степень линейного уменьшения 1.0 0.8 0.64


На фото ниже, сделанном через микроскоп, видно сложное расположение транзисторов в старом 8086 чипе. Тёмные участки это кремний с примесями, светлые прямоугольники вентили транзисторов. На фото показано около 21 транзистора. Ключевой размер длина канала, длина вентиля от истока до стока (это меньшая сторона светлых прямоугольников). Для них я измерил длину в 3 мкм, что соответствует опубликованным характеристикам HMOS I. Это говорит о том, что чип был произведён по техпроцессу 3 мкм; для сравнения, сегодня процессоры переходят на размеры в 5 нм, что в 600 раз меньше.

Вы могли заметить, что у трёх транзисторов на фото вентили гораздо больше. Эти транзисторы работают притягивающими резисторами, что типично для NMOS. Увеличение их размера ослабляет транзистор, поэтому подтягивающий ток получается слабым.


Транзисторы на старом чипе 8086. Для получения фото поликремний и металл были удалены. Кружочки это сквозные проводники, соединяющие их с металлическим слоем.

На фото ниже показаны транзисторы в более новом 8086 в том же масштабе; видно, что транзисторы уже гораздо меньше по размеру. Линейные размеры составляют 64% от первоначальных, поэтому транзисторы занимают 40% площади по сравнению с предыдущими. Этот кристалл я обрабатывал по-другому, поэтому на нём остался поликремний это желтоватые линии. Кремний с примесями выглядит розоватым, и его видно хуже, чем на предыдущем фото. Длину вентиля я определил в 1,9 мкм, что составляет 64% от предыдущих 3 мкм. Заметьте, что HMOS-III поддерживает значительно меньшую длину канала в 1,5 мкм, однако поскольку всё уменьшается в одно и то же количество раз, длина канала оказывается больше необходимой. Это показывает, что однородное уменьшение приводит к потере определённых преимуществ нового процесса, однако это делать гораздо проще, чем проектировать новый чип с нуля.


Транзисторы в новом чипе 8086. Между кремнием или поликремнием и металлическим слоем (здесь он убран) есть множество сквозных проводников.

Также я изучил шаг между шинами на металлическом слое. На фото ниже показаны горизонтальные и вертикальные металлические проводники старого чипа. Шаг металлических шин я определил в 11 мкм, что совпадает с опубликованными характеристиками HMOS I. Уменьшение до 64% даёт шаг в 7 мкм на новом чипе, хотя процесс HMOS III поддерживал и 6,4 мкм. Как и ранее, одинаковый коэффициент уменьшения не даёт пользоваться всеми преимуществами нового процесса.


Металлический слой старого чипа 8086. Под металлом видны красноватые проводники из поликремния.

Наконец, я изучил шаг поликремниевых проводников. На фото ниже показан старый 8086; поликремний удалён, и видны только бледные белые дорожки. Эти параллельные поликремниевые линии, вероятно, формировали шину, направляющую сигналы от одной части чипа к другой. Для поликремния я измерил шаг в 7 мкм, что совпадает с документацией. Интересно, что из-за свойств HMOS проводники из поликремния могут располагаться плотнее, чем металлические проводники. У нового чипа шаг составляет 4,5 мкм, хотя есть возможность делать его размером в 4 мкм.


Поликремниевые дорожки на старом 8086 чипе

Заключения


Масштабирование кристалла даёт возможность увеличить быстродействие процессора и уменьшить его стоимость, не тратя усилий на проектирование с нуля. Однако сравнение двух чипов показывает, что масштабирование кристалла это более сложный процесс, чем простое уменьшение всего кристалла целиком. Большая часть схемы просто уменьшается, однако контактные площадки уменьшаются не так сильно, как всё остальное, поэтому их приходится переставлять. Изменено и распределение питания, вокруг чипа добавлено больше проводников для питания.

Современные микропроцессоры всё ещё используют технологию масштабирования кристалла. В 2007 году Intel перешла на модель тик-так, в которой масштабирование существующих чипов (тик) чередуется с выпуском новой микроархитектуры (так).
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru