Недавно компания “ОНЛАНТА” приобрела для своего корпоративного облака Oncloud.ru систему InfiniBox F2230 компании Infinidat. В интернете практически нет обзоров этой системы, поэтому мы решили устранить пробел. Сегодня мы постараемся максимально подробно рассказать вам об этой СХД.


Infinidat — молодая израильская компания. Она была основана в 2011 году Моше Янаем, который в своё время руководил разработкой EMC Symmetrix, а в последствии основал компанию XIV и был главным архитектором этой системы. К слову, XIV в 2008 году приобрела компания IBM. Так что опыта Infinidat в производстве СХД уровня Enterprise не занимать. Один из ключевых факторов систем Infinidat — их высокая надёжность (99,99999%). Компания Infinidat — лидер среди визионеров дисковых массивов, по мнению аналитиков Gartner.

Система серии F2230 занимает всего 18U. При этом пиковое энергопотребление составляет всего 3,5 кВт, что при полезной ёмкости в 250ТБ достаточно экономично. Данная система в полной мере поддерживает компрессию, что может увеличить эффективный объём до 1ПБ.

Главная разработка компании — операционная система, которая позволяет качественно управлять оборудованием. По сути, это Software Defined Storage (SDS). Эти системы, которые сейчас активно борются за рынок со своими «классическими» конкурентами. Поставляется Infinidat как готовая система со всеми аппаратными компонентами и собственной стойкой.

Выгружаем и распаковываем

Сердце системы — три сервера, работающие в режиме Active — Active — Active.


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

Контроллеры и BBU

Общий объём оперативной памяти всех контроллеров составляет 384ГБ. Также в нашей системе установлено 24ТБ флэш-кэша и две дисковых полки, по 60 NL-SAS дисков.

Устанавливаем диски в полки

Дисковые полки, вид спереди

Дисковые полки, вид сзади

Каждый из узлов в системе оснащен несколькими накопителями SSD, которые действуют как глобальный кэш для всех узлов (блок данных не кэшируется дважды). Адресное пространство тома бьется на куски, куски распределяются по контроллерам, каждый контроллер обслуживает свои куски и их же кэширует. Когда на контроллер приходит запрос не на его кусок, он его берет по InfiniBand у другого контроллера.

Соединение между нодами осуществляется при помощи InfiniBand. Дисковые полки подключены к контроллерам посредством SAS. Доступ к данным может быть организован как по FC, так и при помощи Ethernet.

InfiniRAID — логическая архитектура Infinidat использует небольшие блоки (64к) дисков в качестве элементов RAID (вместо всего диска). Это минимизирует дисковое соперничество и позволяет каждому из узлов в системе постоянно использовать все диски для максимальной производительности.

По мере поступления данных в систему они помещаются в RAM (для быстрого доступа), вместе с полем DIF (Data Integrity Field — полем целостности данных), которое остается с данными на всех уровнях хранения и обработки, для предотвращения логических ошибок и потерянных записей. DIF считывается вместе с данными во время каждой операции чтения и сверяется, чтобы обнаружить все не детектируемые ошибки (Silent-Data Corruption), которые потом корректируются с использованием RAID.

Когда алгоритм по распределению данных решает записать данные из памяти на постоянные носители, он выбирает блоки для записи и оптимизирует их перед этим. Это включает в себя организацию блоков в группы по 14 секций (вместе с DIF) + 2 блока четности.


Алгоритм распределяет эти группы (stripes) по всем дискам в InfiniBox, одновременно проверяя, что:

  • каждая секция на другом диске,
  • секции равномерно распределены между полками (для защиты от проблем с полкой),
  • секции равномерно распределены между всеми дисками (для оптимального распределения емкости и производительности).


Такое распределение данных, где каждая виртуальная RAID группа включает партиции от различных групп дисков, позволяет использовать при восстановлении данных все диски системы одновременно. Поэтому InfiniBox может восстановить большие диски за минуты вместо дней. Благодаря достаточному пространству, выделенному для защиты от сбоя дисков (12 дисков в старшей модели), и используя возможность брать незанятое пространство для защиты, система может выдержать от 12 сломанных дисков и больше.


Большая часть операций чтения происходит из кэша, расположенного на SSD дисках. Это позволяет минимизировать нагрузку на NL-SAS диски, обращаясь к ним лишь за небольшим количеством данных, которые не попали в кэш.

Операции записи попадают в защищённый DRAM кэш, который содержит все изменения блоков до того, как они «остынут», после чего они уже отправляются на диски. Когда блоки данных отправляются на диски, они записываются на все диски одновременно, что дает системе возможность записывать их на высокой скорости. Блоки данных, которые система посчитает наиболее вероятными для последующего чтения, записываются не только на NL-SAS диски, но и на SSD кэш для ускорения чтения.


Эта уникальная компоновка данных позволяет InfiniBox избегать использования SAS дисков и вместо этого использовать комбинацию дисков SSD и NL-SAS для достижения высокой производительности и низких задержек IO.

Установленная, подключенная и настроенная система готова к эксплуатации

Стоит отметить, что это система, которая делает большое количество задач за пользователей: она не дает доступ к дискам — RAID уже сделаны заранее, балансировка нагрузок по дискам и между контроллерами делается автоматически, прошивку контроллеров обновляет поддержка и т.д.


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

Эффективность хранения


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

Чтобы сжатие данных не влияло на производительность системы, Infinibox производит их компрессию в момент переноса данных из кэша на диски. На текущий момент система использует алгоритм сжатия LZ4, но архитектура системы хранения построена таким образом, что в будущем его будет можно заменить на какой-то более новый и эффективный. Не стоит также забывать, что сжатие данных — это процессорозависимая операция и даже при использовании современных процессоров она может сказываться на общей производительности системы. Компрессия производится блоками в 64KB, что позволяет достичь более высокой степени сжатия.

Компрессия работает как с толстыми, так и с тонкими томами, но её работа в этих случаях отличается.

  • Тонкие тома — экономия пространства от сжатия данных остается доступной в физической емкости пула.
  • Толстые тома — освобожденное таким образом пространство недоступно для повторного выделения.

Итак, как InfiniBox позволяет экономить дисковое пространство без влияния на производительность: данные находятся в RAM-кэше в несжатом виде. Сжатие происходит в момент записи данных на диск. Но именно запись на HDD, т.к. то, что попадает на SSD-кэш, находится там также в несжатом виде. Infinidat предполагает, что большая часть данных, с которыми вы работаете, — находится в кэше, поэтому компрессия не увеличит время отклика. На самом же деле, мы понимаем, что это далеко не всегда так, но, если посмотреть на общую архитектуру, которая предполагает хранение данных на большом количестве дисков малыми блоками, это позволяет избежать сильного повышения отклика.

Если вам интересно узнать подробнее о работе данной системы, предлагаю обратиться к статье “Архитектура хранения для цифрового предприятия” Василия Кострюкова, технического директора Infinidat Россия.

Репликация


InfiniBox поддерживает как синхронную, так и асинхронную репликацию. Асинхронная репликация осуществляется на базе снэпшотов. Синхронная репликация отправляет I/O на обе системы (основную и резервную) и это увеличивает время отклика, т.к. хост получает подтверждение о записи данных только после записи на обе системы. Чтение же происходит только из локальной системы.

Асинхронная репликация

  1. Хост отправляет I/O для записи на source InfiniBox
  2. Source InfiniBox подтверждает запись I/O хосту
  3. Source InfiniBox реплицирует данные на target InfiniBox
  4. Target InfiniBox подтверждает репликацию на source InfiniBox

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

Асинхронная репликация поддерживается на:

  • томах,
  • файловых системах,
  • группах консистентности.

Синхронная репликация на:

  • томах.

Операции, которые не поддерживаются на реплицируемых сущностях:

  • удаление,
  • восстановление,
  • изменение размера,
  • отключение write-protect,
  • экспорт файловой системы.


В режиме синхронной репликации поддерживается изменение направления репликации.

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

Интеграция с приложениями


Infinidat Host PowerTools для VMware позволяет дать возможность администраторам виртуальной среды самостоятельно управлять выделением дисковых ресурсов. Это облегчает и экономит затраченное время на базовые операции. Host PowerTools также поддерживает VASA (vStorage APIs for Storage Awareness).

Буквально 1-го марта на сайте компании Veeam появился плагин интеграции данной системы резервного копирования с массивами Infinibox, разработкой которого компания Infinidat занималась в сотрудничестве с Veeam, что позволяет надеяться на высокое качество данного продукта. Этот плагин позволит использовать консистентные снепшоты СХД для увеличения скорости резервного копирования и снижения влияние бекапов на продуктивную среду

Интерфейс, RESTful API и SDK


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


Системы InfiniBox прекрасно вольются в любую систему управления облачной инфраструктурой благодаря своему API, которое позволяет быстро и удобно работать с системой. Не важно, предоставляете ли вы услуги и выделение ресурсов производится с помощью панели управления или система обслуживает только вашу собственную инфраструктуру и вам необходимо быстро и удобно добавить большое количество элементов. Всё это прекрасно реализуется при помощи API. Также существует InfiniSDK для Python.

Добавить 1000 хостов? Не проблема!

#!/usr/bin/python
#! -*- coding: utf-8 -*-

from infinisdk import InfiniBox
from infi.dtypes.iqn import make_iscsi_name

datastring = '''
iqn.1990-06.vmware:host1
…
iqn.1991-06.vmware:host1000
'''

system = InfiniBox('infinidat_ip', auth=('infinidat_login', 'infinidat_password')) 
system.login() 

datastring = datastring.splitlines()
for i, iqn in enumerate(datastring):
    host_name = 'host-' + str(i)
    host = system.hosts.create(name=host_name)
    address = make_iscsi_name(iqn)
    host.add_port(address)


На днях даже появился портал code.infinidat.com, на котором можно найти различные скрипты для интеграции со сторонними системами (Openstack и Saltstack), модули для Ansible и ещё много чего интересного. Так что если перед вами стоит задача интеграции данного массива не просто как часть физической инфраструктуры, а удобное управление, биллинг и т.д., вы найдёте много полезного на данном портале.

Учитывая, что облако Oncloud.ru компании “ОНЛАНТА” предоставляет мощности для корпоративных заказчиков под высокие нагрузки (такие, как ERP, CRM, базы данных и т.д.), имеет развитую архитектуру и развивает средства управления собственными мощностями, система InfiniBox F2230 прекрасно подошла для нашей инфраструктуры.

Комментарии (42)


  1. NoOne
    06.03.2018 13:34
    +2

    Спасибо, интересно смотреть на разнообразные системы.


  1. mikkisse
    06.03.2018 13:55
    +2

    Отличное описание системы, спасибо :)


    1. KorP Автор
      06.03.2018 13:55
      +1

      Спасибо, стараюсь :)


  1. ximik13
    06.03.2018 15:28
    +1

    Спасибо за обзор. Интересно было бы увидеть мнение людей, работающих с системой, хотя бы через полгода (или год) ее эксплуатации в продуктиве.


    А тесты производительности документировали? Статью планируете?


    1. KorP Автор
      06.03.2018 15:31
      +1

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

      Что будет через год — покажет время, может и будет что интересного рассказать, а может и нет :)


      1. ximik13
        06.03.2018 15:51
        +1

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


        Интересно еще поведение системы в случае выхода из строя двух контроллеров. А то доступные данные разнятся. Система продолжит работать, но отключит write cache? Или все же уйдет в некий сервисный read only режим до исправления ситуации?


        По поводу выхода из строя одного контроллера. Я правильно понимаю, что IP адреса и port WWN-ы (для FC) переезжают в этом случае на другой контроллер? Что касается FC, на портах используется NPIV? И если да, то как обстоят дела с возможностью прямого подключения хостов к портам Infinibox без использования FC свитчей?


        Есть прогнозы по появлению не просто репликации (синхронной\асинхронной), а функционала metro кластера между двумя массивами Infinibox?


        1. KorP Автор
          06.03.2018 15:59
          +1

          полностью устроила

          Бизнес — устроила, инженеры хотят NVMe :)

          в случае выхода из строя двух контроллеров

          Система переходит в сервисный режим

          переезжают в этом случае на другой контроллер?

          Нет

          на портах используется NPIV

          Нет

          прямого подключения хостов к портам Infinibox

          Тут не подскажу, не пробовал.

          metro кластера между двумя массивами Infinibox

          Про это, к сожалению, ничего не говорят.


          1. ximik13
            06.03.2018 16:06

            По поводу переезда wwn есть упоминание в статье Василия Кострюкова (“Архитектура хранения для цифрового предприятия”), на которую вы сослались в данной статье. Т.е. все таки в случае выхода из строя одного контроллера часть путей от хоста теряется?


            1. KorP Автор
              06.03.2018 16:13
              +1

              Честно признать, не знаю о какой настройке виртуального WWN для физического говорит Василий, при возможность уточню у него. По факту настроек для FC никаких и нет, есть лишь одна красивая картинка со схематичным представлением FC сети, из которой можно или узнать подробности о портал или их отключить. Но уточню, что имелось ввиду. Опять-таки — могли быть какие то изменения в ПО по этой части, всё-таки его статье почти 2 года.


              1. ximik13
                06.03.2018 16:18

                Возможно отдельной настройки и нет. А вот как отрабатывается авария одного контроллера на front-е я думаю интересно было бы узнать. И не только по FC, но и по IP (на массиве же и NAS функционал есть).


                1. KorP Автор
                  06.03.2018 16:28
                  +1

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


          1. mickvav
            06.03.2018 21:16

            А клиенты к этой железке могут по Infiniband приходить? Или только Ethernet?


            1. KorP Автор
              06.03.2018 21:18

              Нет


              1. mickvav
                07.03.2018 06:37

                А что помешало? Infiniband-овское железо внутри всяк есть, почему не сделать (как опцию, ок) возможность подцепляться к железке и снаружи быстрым интерконнектом?


                1. KorP Автор
                  07.03.2018 07:09
                  +1

                  Наверное это уже не совсем по адресу вопрос :)
                  Попробуйте ниже у Odondon_Labama спросить, он всё-таки Storage guy @ INFINIDAT :)


                1. ximik13
                  07.03.2018 08:30

                  упс, и снова мимо


                1. ximik13
                  07.03.2018 08:31

                  Это уже скорее из разряда религиозных войн :). Но если вы плотно работаете с Infiniband, то может объясните (с вашей точки зрения) в чем его "серебряная пуля" по сравнению со старым добрым Fiber Channel Protocol, давно прижившимся и ставшим стандартом де-факто в сетях хранения данных? И почему компания Infinidat должна срочно все бросить и добавить в новую прошивку поддержку подключения хостов по Infiniband?


                  1. mickvav
                    08.03.2018 10:39

                    Ну, можете сходить вот сюда — www.snia.org/sites/default/files/SDC15_presentations/datacenter_infra/RupinMohan_NextGeneration_Low_Latency_SAN_SHARE_FINAL.pdf и посмотреть, что пишут ребята из HP. Содержательно — на infiniband-подключенном железе они видели задержку в 25 микросекунд. А на fiber channel — 50. По моим тестам, сам по себе инфинибанд имеет задержку в 1.5 — 2.5 микросекунды. Как следствие — быстрый кеш (NVMe) за инфинибанд с локальной машины может быть вынесен, а за FC — нет, он уже перестанет быть таким отзывчивым.


                1. vkostr
                  07.03.2018 12:02
                  +1

                  есть ряд причин, например, 1) соединение между контроллерами реализовано по IB без коммутаторов, напрямую каждый с каждым. Если делать внешнее подключение, то либо коммутатор, либо ставить еще карты. То есть будет нужен другой формфактор контроллера, дополнительное место в стойке. 2) любую дополнительную опцию надо тестировать, то есть выше стоимость системы (кроме железа) и дольше тестирование и разработка 3) реальный спрос на IB подключение на Enterprise рынке мал, да и в облаках тоже, вот HPC другое дело


                  1. mickvav
                    08.03.2018 10:29

                    Я как раз с HPC-колокольни и поглядывал на эту тему. Отсутствие коммутатора многое объясняет, да. Хотя на мой (субъективный) вкус — экономия тут исключительно на спичках — сексодром с драйверами инфинибанда командой уже, вероятно, пройден, а вот из разделения рынка по потребностям следует предложение — выпустите отдельный вариант стораджа для HPC-сегмента. Или по крайней мере анонсируйте и посмотрите, найдутся ли под это потенциальные клиенты.


                    1. vkostr
                      08.03.2018 15:35

                      Обычно разработка работает от обратного, оценивается возможный рост продаж от реализации фичи/интерфейса/продукта, оценивается время и сложность разработки и выбирается то, что можно быстро разработать и максимально увеличить объем продаж.
                      У HPC, как правило, нет требований к продвинутым фичам массива, основные критерии это производительность на поток+цена. Есть сектора HPC, где и функционал нужен получше и надежность (например медицина), но там и IB реже бывает.


        1. Odondon_Labama
          06.03.2018 16:55
          +1

          Я правильно понимаю, что IP адреса и port WWN-ы (для FC) переезжают в этом случае на другой контроллер?

          В случае отказа одного контроллера (или конкретных сервисов на нём)
          IP адреса переедут довольно быстро
          FC порты — нет
          функционала metro кластера между двумя массивами Infinibox?

          В версии 5.0 — ETA — 2018-2019. Любые апгрейды бесплатны и недеструктивны.

          *INFINIDAT employee here, но лучше призвать Василия


          1. vkostr
            07.03.2018 12:06

            Я думаю, что метро и быстрее появится, Алексей, звони, расскажу :)


    1. vkostr
      07.03.2018 11:55

      насчет мнения людей, работающих больше года с сиcтемой, из тех кто точно есть на хабре, можно пригласить msolovyev в каменты :)


  1. ximik13
    06.03.2018 16:06

    упс, ошибся веткой.


  1. w1g
    06.03.2018 17:51
    +1

    Большое спасибо за обзор, но могли бы Вы рассказать и о схеме подключения SAS полок к storage nodes?


    1. KorP Автор
      06.03.2018 18:41

      Вас что то конкретное интересует? SAS-коммутаторы уже встроены в сами полки, от каждой полке к каждому серверу идёт линк. Все серверы соединены со всеми полками. Собственно всё :)


      1. w1g
        08.03.2018 00:52

        В таком случае, правильно я понимаю, что в storage node предусмотрено 12 SAS портов для подключения дисковых полок (кажется, максимально число в стойке 6)?


        1. KorP Автор
          08.03.2018 06:15

          В наших нодах по 4 порта


        1. KorP Автор
          08.03.2018 06:19

          Максимальный полезный объём F2000 серии — 330Тб в 18U, так что к ней 6 полок точно не подключается, возможно у F4000/F6000 и больше портов на хостах.


    1. vkostr
      07.03.2018 12:11

      вот картинка на эту тему
      youtu.be/XHaseBDzmWs?t=1530


      1. w1g
        08.03.2018 00:41

        Спасибо, но, к сожалению, ясности не появилось (


        1. vkostr
          08.03.2018 15:25

          ок, там для F6000, что несколько сложнее.
          В случае F2000, как у Онланты, просто от каждого контроллера SAS кабель идет к каждой полке, собственно все!


  1. printf
    06.03.2018 18:01
    +1

    Добавить 1000 хостов
    Можно еще посредством Infinishell это сделать, там очень простой скриптовый неязык вида:

    host.create name=NAME
    host.add_port host=NAME port=PORT


    1. KorP Автор
      06.03.2018 18:44

      Про Infinishell я упоминал в видео, но на мой взгляд это всё-таки средство управления для любителей, в противовес GUI.
      На самом деле даже не смотрел на его возможности в плане обработки строк, циклов, регулярных выражений и тд, именно те средства, которые позволяют упростить работу с большими объёмами хостов/лунов и т.д. Тем более, API всё-таки позволяет производить это удалённо, а не из интерфейса массива. Но да, шел удобный и приятный для выполнения простых и рутинных задач, если вы конечно любите консоль :)


      1. printf
        06.03.2018 23:56

        А, нет, там нету возможностей, которые вы упомянули — это ненастоящий скриптовый язык.

        Мы его используем таким способом: на баше / питоне / любом удобном языке генерируем текстовый файл, в котором требуемые инфинишелловые команды, например тысяча команд по созданию хоста, как в вашем примере. И потом infinishell -c FILE.

        Она тоже удаленно запускается, кстати, это вполне такой standalone клиент. Мы даже инсталлятор под ОС виндовс сделали. (Или можно прицепиться к нашему PyPI и pip install infinishell, в любой ОС, CI даже на Солярисе настроен.)

        Профит наступает для тех пользователей, которым нужно делать много повторяющихся действий (например, работникам QA), а программировать на питоне они не умеют или не хотят.


        1. KorP Автор
          07.03.2018 07:08

          Ну что ж, то же интересный вариант


  1. ol27th
    07.03.2018 10:30
    +1

    Система действительно интересная, синтетические тесты для Инфинидат скорее будут некорректны, т.к. будут нагружать 22Тб кеш а как его "пробьют" — а за ним уже нлсас, но "пробить" его проблематично. Основная нагрузка по латенси (до 20-25мс) у нас происходит при резервном копировании, что логично, т.к. данные качаются минуя кеш, но при этом системы все работают стабильно и без просадок. Мы довольны. Есть некоторые минусы самой операционной системы (нельзя погасить из веб морды отдельные порты, допустим 10GE) и ещё не полная интеграция с забиксом, но это некритично. Тот же ИнфиниМетрик даёт историю по нагрузке- что удобно.


    1. vkostr
      07.03.2018 12:20

      При резервном копировании размер блока как правило в районе 1МБ, обычно задержки выше именно поэтому. Насчет Zabbix, я и темплейт сделал и скрипты для discovery и population, так что зовите в гости и все сделаем в лучшем виде. Потом можно будет все это и на GitHub запилить


  1. pogorzhelskiy
    07.03.2018 11:35

    Тестировал это решение 2 года назад. На сколько я понял, там обычные сервера DELL используются. По факту это ceph допиленный и разработан интерфейс управления СХД. Работая с этим решением, ты получаешь сразу одно общее дисковое пространство и не можешь распределять нагрузку, т.е. получать гарантированные IOPS на конкретный объём.

    Интересно было бы получить результат теста в разнородной среде запросов к СХД. Т.е. типичное состояние хранилки для хостеров.

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


    1. vkostr
      07.03.2018 12:15
      +1

      Станислав, там внутри точно не ceph :) Но OpenStack поддерживает, да


  1. mickvav
    08.03.2018 10:47

    Коллеги, вопрос немного не в тему — хочется занедорого(с) хранилище с растущим raid-ом (чтобы можно было на лету добавлять дисков), запросом на последовательную запись непрерывного потока данных (до 500 мегабайт в секунду, в несколько потоков), и редкое и квазислучайное чтение (раз в несколько суток вычитать по 10-20 гигов). На какие решения и технологии кто бы предложил посмотреть внимательно?