Что такое трекеры в браузере яндекс
Мы недавно опубликовали исследование «Конфиденциальность и вопросы безопасности в Веб 3.0» на сайте arXiv, и хотим вкратце описать наши выводы и рассказать, что они значат для пользователей Brave.
Децентрализованные финансы (DeFi) напоминают финансовый Дикий Запад: новые сайты появляются и исчезают каждый день, люди зарабатывают и теряют огромные деньги, а гарантии безопасности и вообще какой бы то ни было осмысленный контроль за происходящим отсутствуют. Какую роль безопасность и конфиденциальность играют во всём этом? Мы решили разобраться.
Трекеры повсюду
Мы начали с того, что собрали список из 78 сайтов, занимающихся децентрализованными финансами (DeFi), включая топ-50 по общей стоимости заблокированных активов (TVL), и написали краулер, который анализировал безопасность и конфиденциальность этих сайтов (полный список в конце поста).
Мы обнаружили, что, несмотря на их легковесные фронтэнды, некоторые DeFi-сайты пользуются сторонними скриптами и иногда даже передают им ваш Ethereum-адрес (в основном для API и провайдеров аналитики). Особенно опасной проблемой является передача вашего Ethereum-адреса Гуглу, так как он уже знает информацию, по которой может идентифицировать вас лично, а потому может соотнести её с вашим Ethereum-адресом, что может дать ему возможность узнать вашу историю транзакций в блокчейне. Гуглу, как рекламному монстру, выгодно монетизировать эту информацию.
Ещё мы обнаружили, что многие сайты включают сторонние скрипты, что всегда является угрозой безопасности, но эта угроза особенно сильна для DeFi, так как речь идёт о финансах, а сторонние скрипты могут обмануть пользователя (например, используя фишинг), инициировав мошенническую транзакцию, а манипулируя DOM DeFi-сайта повысить вероятность того, что пользователь примет эту мошенническую транзакцию. Из исследованных нами 78 DeFi-сайтов 48 (66%) содержали как минимум один сторонний скрипт (всего мы насчитали 34 провайдера внешних скриптов). Как и ожидалось, следы Гугла были повсюду: 41 DeFi-сайт (56%) содержал как минимум один скрипт, предоставленный Гуглом.
Детально ознакомиться с полученными данными можно в таблице под этим постом.
Что это значит для пользователей Brave?
Пользователи Brave защищены от присутствия Гугла на DeFi-сайтах, так как Brave блокирует Google Analytics по умолчанию. Это значит, что Гугл не узнает, какие DeFi-сайты вы посещаете, равно как и ваш Ethereum-адрес — по крайней мере, посредством скриптов. Это же касается и других трекеров (например, от Hotjar или Facebook), которые мы обнаружили на некоторых DeFi-сайтах.
Контрмеры
Наша защита от следящих скриптов — это отличное начало для конфиденциальной работы с DeFi-сайтами, но всё же это не панацея. К примеру, ваш Ethereum-адрес всё равно может утечь к третьим сторонам. Можно ли вообще пользоваться DeFi, сохраняя при этом полный контроль над своим Ethereum-адресом?
В рамках нашего проекта мы написали патч для MetaMask (мы выбрали именно его из-за его популярности), который доказывает принципиальную возможность именно этого. После того, как вы нажимаете на кнопку «подключить кошелёк», патч заменяет «реальный» Ethereum-адрес пользователя детерминированным и адаптированным под конкретный сайт адресом, который вычисляется на основе вашего реального адреса (если вам интересны детали, обратитесь к секции 5 оригинальной статьи).
Ваш реальный Ethereum-адрес может быть 0x123…def, но наш патч заставляет Uniswap видеть 0x321…789, а Compound, например, 0xabc…987. Это сильно мешает (хоть и не делает полностью невозможным!) DeFi-сайтам и третьим сторонам узнать ваш настоящий Ethereum-адрес или связать ваши действия в браузере с вашими действиями на DeFi-сайте.
Чтобы схема взлетела, её нужно доработать напильником. Например, если мы передадим подложные адреса DeFi-сайту, то он будет показывать неверные балансы, а транзакции будут невалидны. Наш патч обходит эту проблему, прозрачно заменяя балансы кошельков и Ethereum-адреса, что позволяет DeFi-сайтам нормально работать. Проиллюстрируем это картинкой: пользователь заходит на example.finance, и расширение MetaMask передаёт сайту производный Ethereum-адрес, но при этом показывает корректный баланс. Наш патч переписывает транзакции так, что они содержат настоящий Ethereum-адрес до того, как быть записанными в блокчейн.
Пока что наш патч — это прототип, который не готов к промышленному применению. Тем не менее, он показывает, что с точки зрения конфиденциальности DeFi ещё есть куда расти, а мы будем ставить себе ещё более жёсткие требования по конфиденциальности в Кошельке Brave, который уже готовится к выходу.
Выводы
Ethereum-адреса — это деликатная и конфиденциальная информация, вроде номеров кредитных карт и банковских счетов. DeFi-сайты должны относиться к ней соответствующим образом и никогда не передавать Ethereum-адреса третьим сторонам без веской на то причины. De в DeFi означает «децентрализованные», и важно, чтобы DeFi-сайты не забывали об этом и воздержались от использования централизованного API и услуг провайдеров аналитики.
Также мы хотим подчеркнуть, что такие устоявшиеся практики веб-разработки, как встраивание сторонних скриптов, крайне проблематичны в контексте DeFi, так как приводят к тому, что Гугл может провязывать переходы пользователей от сайта к сайту, и теоретически обладает возможностью слинковать их Ethereum-адреса с информацией, позволяющей идентифицировать человека, которой Гугл и так, скорее всего, уже обладает.
Приложение
Таблица ниже показывает подмножество из 53 DeFi-сайтов, которые включают в себя как минимум один внешний скрипт (второй столбец) или передают Ethereum-адрес как минимум одной третьей стороне (третий столбец). Данные были собраны 27 августа 2021 года. Обратите внимание, что эти цифры являются нижней границей возможной передачи информации, так как мы могли не заметить какие-нибудь утечки.
— это небольшие текстовые файлы, в которые браузер записывает данные с посещенных вами сайтов. Файлы cookie позволяют сайтам «запоминать» своих посетителей, например, чтобы каждый раз не переспрашивать их логин и пароль.
Владелец трекера может использовать эту информацию по-разному:
С помощью трекеров владелец сайта может оценивать, сколько читателей его посещает, из каких регионов, с каких устройств. Эти данные позволят ему оптимизировать сайт под нужды аудитории. Трекеры позволяют использовать на нескольких сайтах общий логин или виджет соцсети.Трекеры от сайтов, которые вы посещали самостоятельно (например, социальные сети), с большой вероятностью используются добросовестно.
Примеры недобросовестного использования
Недобросовестные владельцы трекеров могут передавать и перепродавать сторонним компаниям введенные на сайте личные данные, такие как номер телефона или адрес электронной почты. В результате вы можете получать письма с нежелательной рекламой или раздражающие звонки от рекламодателей, которым не оставляли свой телефон.
Мы считаем недобросовестное использование данных трекерами нарушением вашей приватности. Чтобы защитить ее, Яндекс.Браузер разработал специальную технологию YTP, входящую в систему активной защиты Protect.
Что такое YTP?
В основе YTP лежит простое правило — запускать трекеры разрешено только сайтам, которые вы уже посещали. Только эти сайты могут передавать от сайта к сайту ваши данные, показывать вам релевантные рекламные объявления и использовать другие возможности кросс-сайтового взаимодействия. Если вы не посещали сайт в течение 45 дней, то браузер начинает блокировать его трекеры.
Благодаря рекламе вам не нужно платить за сайты в интернете, поэтому Яндекс ищет баланс между бесплатностью сервисов и полезной, ненавязчивой рекламой.
Таким образом, для вас интернет остается удобным (например, вы можете использовать общий логин для нескольких сайтов), а сайты могут поддерживать свое существование, не раздражая посетителей нерелевантной рекламой.
Кроме того, технология YTP позволяет вам посмотреть, какие именно трекеры работают на странице, и заблокировать те из них, которым вы не доверяете.
Блокировка трекеров для отдельного сайта
При загрузке страницы в Умной строке отображается значок с числом заблокированных трекеров:
Справа от трекера нажмите → Отозвать разрешение .Трекер будет заблокирован до следующего посещения сайта, которому он принадлежит.
Справа от трекера нажмите → Заблокировать навсегда .Трекер будет заблокирован до момента, когда вы сами отмените блокировку.
Если сайт не работает
Некоторые сайты не могут нормально функционировать без использования сторонних cookie. Если\nсайт сломался, попробуйте полностью отключить блокировку трекеров:
В блоке Блокировка отслеживаний нажмите ссылку Сайт не работает? В открывшемся окне нажмите кнопку Разрешить файлы cookie .Чтобы включить защиту от трекеров обратно:
Если вы не нашли информацию в Справке или у вас возникает проблема в работе Яндекс.Браузера, опишите все свои действия по шагам. По возможности сделайте скриншот. Это поможет специалистам службы поддержки быстрее разобраться в ситуации.
Примечание. Для решения проблем в работе сервисов Яндекса обращайтесь в службу поддержки этих сервисов: О проблемах Яндекс.Браузера на компьютере пишите прямо из браузера: → Дополнительно → Сообщить о проблеме или через форму. О проблемах в работе приложения Яндекс — с Алисой пишите через форму. Если вопрос касается главной страницы Яндекса (изменить тему оформления, настроить блоки главной страницы или иконки сервисов и т. д.), пишите через форму. Выберите опцию Вопрос о главной странице Яндекса . По вопросам работы Почты (отключить рекламу, настроить сбор писем с других ящиков, восстановить удаленные письма, найти письма, попавшие в спам и т. д.) пишите через форму. По вопросам работы Поиска и выдачи (ранжирование сайта в результатах поиска, некорректные результаты поиска и т. д.) пишите через форму. ","lang":>,"extra_meta":[>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>],"title":"Блокировка трекеров - Яндекс.Браузер для планшетов с Android. Справка","productName":"Яндекс.Браузер для планшетов с Android","extra_js":[[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>],[,"mods":,"__func137":true,"tag":"script","bem":false,"attrs":,"__func67":true>]],"extra_css":[[],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>],[,"mods":,"__func69":true,"__func68":true,"bem":false,"tag":"link","attrs":>]],"csp":<"script-src":[]>,"lang":"ru">>>'>"current":"ru","available":["en","ru"]>Что такое трекеры?
— это небольшие текстовые файлы, в которые браузер записывает данные с посещенных вами сайтов. Файлы cookie позволяют сайтам «запоминать» своих посетителей, например, чтобы каждый раз не переспрашивать их логин и пароль.
Владелец трекера может использовать эту информацию по-разному:
С помощью трекеров владелец сайта может оценивать, сколько читателей его посещает, из каких регионов, с каких устройств. Эти данные позволят ему оптимизировать сайт под нужды аудитории. Трекеры позволяют использовать на нескольких сайтах общий логин или виджет соцсети.Трекеры от сайтов, которые вы посещали самостоятельно (например, социальные сети), с большой вероятностью используются добросовестно.
Примеры недобросовестного использования
Недобросовестные владельцы трекеров могут передавать и перепродавать сторонним компаниям введенные на сайте личные данные, такие как номер телефона или адрес электронной почты. В результате вы можете получать письма с нежелательной рекламой или раздражающие звонки от рекламодателей, которым не оставляли свой телефон.
Мы считаем недобросовестное использование данных трекерами нарушением вашей приватности. Чтобы защитить ее, Яндекс.Браузер разработал специальную технологию YTP, входящую в систему активной защиты Protect.
Что такое YTP?
В основе YTP лежит простое правило — запускать трекеры разрешено только сайтам, которые вы уже посещали. Только эти сайты могут передавать от сайта к сайту ваши данные, показывать вам релевантные рекламные объявления и использовать другие возможности кросс-сайтового взаимодействия. Если вы не посещали сайт в течение 45 дней, то браузер начинает блокировать его трекеры.
Благодаря рекламе вам не нужно платить за сайты в интернете, поэтому Яндекс ищет баланс между бесплатностью сервисов и полезной, ненавязчивой рекламой.
Таким образом, для вас интернет остается удобным (например, вы можете использовать общий логин для нескольких сайтов), а сайты могут поддерживать свое существование, не раздражая посетителей нерелевантной рекламой.
Кроме того, технология YTP позволяет вам посмотреть, какие именно трекеры работают на странице, и заблокировать те из них, которым вы не доверяете.
Блокировка трекеров для отдельного сайта
При загрузке страницы в Умной строке отображается значок с числом заблокированных трекеров:
Трекер будет заблокирован до следующего посещения сайта, которому он принадлежит.
Трекер будет заблокирован до момента, когда вы сами отмените блокировку.
Если сайт не работает
Некоторые сайты не могут нормально функционировать без использования сторонних cookie. Если сайт сломался, попробуйте полностью отключить блокировку трекеров:
Чтобы включить защиту от трекеров обратно:
Если вы не нашли информацию в Справке или у вас возникает проблема в работе Яндекс.Браузера, опишите все свои действия по шагам. По возможности сделайте скриншот. Это поможет специалистам службы поддержки быстрее разобраться в ситуации.
Примечание. Для решения проблем в работе сервисов Яндекса обращайтесь в службу поддержки этих сервисов:Яндекс заботится о пользователях и делает браузер и другие сервисы более доступными для людей с ограниченными возможностями.
Программы экранного доступа
Программы экранного доступа позволяют людям с ослабленным зрением считывать информацию с экрана компьютера с помощью тактильного или речевого управления. Они воспроизводят вслух всё, что находится на экране, а пользователь управляет процессом сенсорными жестами и сочетаниями клавиш.
В Яндекс.Браузер встроена поддержка программ экранного доступа:
Возможности горячей клавиши F6 расширены, используйте все функции боковой панели и Умной строки, переключайтесь на всплывающие окна.
Возможности Умной строки
Умная строка — это элемент браузера, который служит для ввода адреса и поиска информации. Также она дает возможность отображать адреса в виде «Домен > Заголовок» . Функция позволяет программе экранного доступа озвучить название страницы. Для этого:
В блоке Умная строка включите опцию Отображать адреса страниц в виде «домен > заголовок» .Нажмите клавишу F6 , чтобы перейти в Умную строку.
Для озвучивания страницы нажмите значок (Алиса, прочитай эту статью).
Алиса
Алиса — это голосовой помощник, который устанавливается в Яндекс.Браузер. Она поможет вам найти нужную информацию в интернете, расскажет о новостях и погоде, включит музыку, запустит программу, прочитает страницу вслух или просто поболтает с вами на произвольную тему.
Примечание. Алиса доступна только на русском языке на устройствах с Windows 7 и выше, а также на устройствах с Android и iOS.Озвучить страницу можно двумя способами:
- Голосовая команда
- Значок чтения вслух в Умной строке
Вы можете обратиться к Алисе с фразами:
Несколько раз нажмите клавишу F6 для перехода к значкам Умной строки. Нажмите Tab несколько раз, чтобы перейти к значку (Алиса, прочитай эту статью).Если значка нет в Умной строке:
В блоке Умная строка включите опцию Показывать кнопку чтения вслух . Примечание. Если значок чтения вслух не появился, то эту страницу нельзя озвучить голосом.Боковая панель
Примечание. Боковая панель доступна только в Windows.Боковая панель обеспечивает легкий доступ к сервисам Яндекса, уведомлениям, вкладкам и закладкам, а также позволяет управлять воспроизведением аудио и работать с заметками.
Теперь возможности боковой панели стали доступны пользователям с ослабленным зрением.
Перейдите к нужной функции, ориентируясь на подсказки программы экранного доступа:
Несколько раз нажмите клавишу F6 для перехода к боковой панели. Нажмите Tab несколько раз, чтобы перейти к значку нужной функции.Чтобы включить боковую панель:
В блоке Боковая панель включите опцию Показывать боковую панель и выберите в списке Всегда .Режим активного курсора
Режим активного курсора — это возможность использовать для навигации по странице не мышь, а клавиатуру, как в текстовых редакторах.
Включите режим клавишей F7 , нажмите в любом месте страницы левую кнопку мыши, и указатель превратится в курсор. Теперь можно перемещаться по сайту с помощью стрелок (влево, вправо, вверх и вниз), выделять фрагменты текста, удерживая Shift , или переходить по ссылкам, нажимая Enter .
Отключить Режим активного курсора можно двумя способами:
Нажмите → Настройки → Инструменты . В блоке Режим активного курсора оставьте неактивной опцию Включить .Горячие клавиши
В Яндекс.Браузере вы можете использовать следующие клавиатурные сочетания:
Более подробную информацию о горячих клавишах смотрите в разделе Справки.
Горячая клавиша F6
Используйте клавишу F6 , чтобы последовательно перемещаться между панелями браузера.
Совет. Включите программу экранного доступа для озвучивания элементов интерфейса.Значки Умной строки .
Используйте Tab , чтобы переключаться между кнопками (Protect) , Отзывы , (Алиса, прочитай эту статью) , (Перейти в режим чтения) и т. д.
Другие значки в Умной строке .
Панель закладок (если включена).
Используйте Tab , чтобы переключаться между закладками.
Информационная панель (если отображается).
Используйте Tab для перемещения между элементами панели.
Боковая панель (если включена).
Используйте Tab , чтобы переключаться между кнопками Уведомления , История и т. д.
Окно (если отображается).
Используйте Tab для перемещения между элементами окна.
Размер страницы и шрифта
Размер страницы и шрифта в браузере можно сделать крупнее, чтобы слабовидящие люди могли читать с экрана.
Изменить масштаб страницы браузера можно с помощью горячих клавиш.Изменить на сайтах размер шрифта, не трогая картинки:
На странице Настройки шрифтов в блоке Размер шрифта передвиньте ползунок вправо. ">,"extra_meta":[>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>,>],"title":"Специальные возможности. Справка","canonical":"https://browser.yandex.ru/help/about/accessibility.html","productName":"Яндекс.Браузер","extra_js":[[],[,"mods":<>,"__func134":true,"tag":"script","bem":false,"attrs":,"__func61":true>],[,"mods":<>,"__func134":true,"tag":"script","bem":false,"attrs":,"__func61":true>]],"extra_css":[[],[,"mods":<>,"__func63":true,"__func62":true,"bem":false,"tag":"link","attrs":>],[,"mods":<>,"__func63":true,"__func62":true,"bem":false,"tag":"link","attrs":>]],"csp":<"script-src":[]>,"documentPath":"/help/about/accessibility.html","isBreadcrumbsEnabled":true,"lang":"ru","params":<>>>>'>"tag":"meta","attrs":Яндекс заботится о пользователях и делает браузер и другие сервисы более доступными для людей с ограниченными возможностями.
Программы экранного доступа
Программы экранного доступа позволяют людям с ослабленным зрением считывать информацию с экрана компьютера с помощью тактильного или речевого управления. Они воспроизводят вслух всё, что находится на экране, а пользователь управляет процессом сенсорными жестами и сочетаниями клавиш.
В Яндекс.Браузер встроена поддержка программ экранного доступа:
Возможности горячей клавиши F6 расширены, используйте все функции боковой панели и Умной строки, переключайтесь на всплывающие окна.
Возможности Умной строки
Умная строка — это элемент браузера, который служит для ввода адреса и поиска информации. Также она дает возможность отображать адреса в виде «Домен > Заголовок» . Функция позволяет программе экранного доступа озвучить название страницы. Для этого:
Нажмите клавишу F6 , чтобы перейти в Умную строку.
Для озвучивания страницы нажмите значок (Алиса, прочитай эту статью).
Алиса
Алиса — это голосовой помощник, который устанавливается в Яндекс.Браузер. Она поможет вам найти нужную информацию в интернете, расскажет о новостях и погоде, включит музыку, запустит программу, прочитает страницу вслух или просто поболтает с вами на произвольную тему.
Примечание. Алиса доступна только на русском языке на устройствах с Windows 7 и выше, а также на устройствах с Android и iOS.Озвучить страницу можно двумя способами:
- Голосовая команда
- Значок чтения вслух в Умной строке
Вы можете обратиться к Алисе с фразами:
Несколько раз нажмите клавишу F6 для перехода к значкам Умной строки.Если значка нет в Умной строке:
Боковая панель
Примечание. Боковая панель доступна только в Windows.Боковая панель обеспечивает легкий доступ к сервисам Яндекса, уведомлениям, вкладкам и закладкам, а также позволяет управлять воспроизведением аудио и работать с заметками.
Теперь возможности боковой панели стали доступны пользователям с ослабленным зрением.
Перейдите к нужной функции, ориентируясь на подсказки программы экранного доступа:
Несколько раз нажмите клавишу F6 для перехода к боковой панели. Нажмите Tab несколько раз, чтобы перейти к значку нужной функции.Чтобы включить боковую панель:
Режим активного курсора
Режим активного курсора — это возможность использовать для навигации по странице не мышь, а клавиатуру, как в текстовых редакторах.
Включите режим клавишей F7 , нажмите в любом месте страницы левую кнопку мыши, и указатель превратится в курсор. Теперь можно перемещаться по сайту с помощью стрелок (влево, вправо, вверх и вниз), выделять фрагменты текста, удерживая Shift , или переходить по ссылкам, нажимая Enter .
Отключить Режим активного курсора можно двумя способами:
Горячие клавиши
В Яндекс.Браузере вы можете использовать следующие клавиатурные сочетания:
Более подробную информацию о горячих клавишах смотрите в разделе Справки.
Горячая клавиша F6
Используйте клавишу F6 , чтобы последовательно перемещаться между панелями браузера.
Совет. Включите программу экранного доступа для озвучивания элементов интерфейса.Значки Умной строки .
Используйте Tab , чтобы переключаться между кнопками (Protect) , Отзывы , (Алиса, прочитай эту статью) , (Перейти в режим чтения) и т. д.
Другие значки в Умной строке .
Панель закладок (если включена).
Используйте Tab , чтобы переключаться между закладками.
Информационная панель (если отображается).
Используйте Tab для перемещения между элементами панели.
Боковая панель (если включена).
Используйте Tab , чтобы переключаться между кнопками Уведомления , История и т. д.
Окно (если отображается).
Используйте Tab для перемещения между элементами окна.
Размер страницы и шрифта
Размер страницы и шрифта в браузере можно сделать крупнее, чтобы слабовидящие люди могли читать с экрана.
Изменить масштаб страницы браузера можно с помощью горячих клавиш.Изменить на сайтах размер шрифта, не трогая картинки:
Недавно мы открыли для внешних пользователей Яндекс.Трекер – нашу систему управления задачами и процессами. В Яндексе его используют не только для создания сервисов, но даже для закупки печенья на кухни.
Как известно, чем меньше компания, тем более простые инструменты она может использовать. Если с утра вы можете поздороваться с каждым сотрудником лично, то вам хватит для работы даже чата в Telegram. Когда появляются отдельные команды, не только поприветствовать каждого лично не получится, но и в статусах задач можно запутаться.
Облако из слов в заголовках тикетов во внутреннем Яндекс.Трекере
На таком этапе важно сохранять прозрачность процессов: все стороны должны иметь возможность в любой момент узнать о ходе работы над задачей или, например, оставить свой комментарий, который не пропадёт в потоке рабочего чата. Для небольших команд трекер – это и вовсе своего рода новостная лента с последними новостями из жизни их компании.
Сегодня мы расскажем читателям Хабрахабра, почему Яндекс решил создать свой трекер, как он устроен внутри, и с какими сложностями нам пришлось столкнуться, открывая его наружу.
В Яндексе сейчас работает больше шести тысяч человек. Несмотря на то, что многие его части устроены как независимые стартапы со своими командами разного размера, необходимость понимать, что происходит у людей на соседнем этаже всегда есть – их работа может пересекаться с вашей, их улучшения могут помочь вам, а какие-то процессы наоборот могут негативно повлиять на ваши. В такой ситуации сложно, например, призывать коллегу из другого рабочего пространства в Slack. Особенно, когда прозрачность задачи важна для множества людей из разных направлений.
В какой-то момент мы начали использовать известную всем Джиру. Это хороший инструмент, функциональность которого в принципе всех устраивала, но его было сложно интегрировать с нашими внутренними сервисами. Кроме того, на масштабе в тысячи человек, которым нужно единое пространство, где каждый сможет сориентироваться без фонарика, Джиры переставало хватать. Случалось и такое, что она ложилась под нагрузкой, даже при том, что работала на наших серверах. Яндекс рос, количество тикетов также увеличивалось, а обновления на новые версии занимали всё больше времени (последний апгрейд занял полгода). Нужно было что-то менять.
В конце 2011 года у нас было несколько вариантов решения проблемы:
- Увеличить производительность старого трекера. Отбросили идею, т.к. переделывать архитектуру чужого продукта самим – плохо. Это значило бы как минимум поставить крест на обновлениях.
- Распилить трекер на несколько независимых копий (инстансов), чтобы снизить нагрузку на каждую. Идея не новая, её используют большие компании в аналогичных случаях. В итоге не работали бы сквозные отчеты, фильтрация, линковка и перенос задач между копиями. Всё это было критично для компании.
- Приобрести другой инструмент. Рассмотрели возможные варианты трекеров. Большинство из них не позволяют легко масштабироваться, то есть стоимость инфраструктурных доработок и последующих изменений под наши нужды получилась бы выше, чем стоимость собственной разработки..
- Написать свой трекер. Рискованный вариант. Дает больше всего свободы и возможностей в случае успеха. В случае неуспеха имеем проблемы с одним из ключевых инструментов разработки и планирования. Как вы уже догадались, мы рискнули и выбрали именно этот вариант. Ожидаемые плюсы перевесили минусы и риски.
Разработка собственного трекера началась в январе 2012 года. Первой свои задачи в новый сервис перевезла сама команда трекера через несколько месяцев после начала работы над проектом. Дальше начался процесс переезда остальных команд. Каждая команда выдвигала свои требования к функциональности, их прорабатывали, трекер обрастал новыми фичами, затем перевозили команду. На полный переезд всех команд и закрытие Джиры понадобилось два года.
Но давайте вернемся немного назад и посмотрим на список требований, который был составлен для нового сервиса:
- Отказоустойчивость. Как вы возможно слышали, в компании регулярно проводятся учения с отключением одного из ДЦ. Сервис должен переживать их незаметно как для пользователя, так и для команды, без необходимости выполнять ручные действия при начале учений.
- Масштабируемость. У задач в трекере нет срока давности. Разработчику или менеджеру может понадобиться как посмотреть на сегодняшнюю задачу, так и на ту, которая была закрыта ещё 7 лет назад. А это значит, что удалять или архивировать старые данные мы не можем.
- Интеграция с внутренними сервисами компании. Тесная провязка с нашими многочисленными сервисами требовалась большинству команд Яндекса: интеграции с сервисами по долгосрочному планированию, системами контроля версий, каталогом сотрудников и т.д.
А ещё в момент сбора требований мы определились с теми технологиями, которые будем использовать для создания трекера:
Как и для любых других публичных и внутренних сервисов Яндекса, нам пришлось также задуматься о требованиях к запасу производительности и масштабируемости сервиса. Пример для понимания ситуации. На момент начала проектирования системы у нас было порядка 1 млн задач и 3 тыс. пользователей. На сегодняшний день в сервисе почти 9 млн задач и более 6 тыс. пользователей.
Кстати, несмотря на довольно приличное количество пользователей во внутреннем Трекере, бОльшая часть запросов приходит в трекер, через API от сервисов Яндекса, интегрированных с ним. Именно они и создают основную нагрузку:
Мы стараемся регулярно оценивать будущую нагрузку на сервис. Строим прогноз на 1-2 года, затем с помощью Лунапарка проверяем, что сервис ее выдержит:
На этом графике видно, что API поиска задач начинает отдавать заметное число ошибок лишь после 500-600 rps. Это позволило оценить, что с учетом роста нагрузки от внутренних клиентов и роста количества данных мы выдержим нагрузку через 2 года.
Кроме высокой нагрузки с сервисом могут случаться и другие неприятные истории, с которыми надо уметь обращаться так, чтобы пользователи этого не замечали. Перечислим некоторые из них.
Отказ датацентра.
Весьма неприятная ситуация, которая тем не менее регулярно происходит благодаря учениям. Что происходит при этом? Худший случай, это когда мастер монги был в отключенном ДЦ. Но даже в этом случае не требуется вмешательство разработчика или админа благодаря автоматическому failover. В эластике ситуация немного иная: часть данных оказалась в единственном экземпляре т.к. фактор репликации у нас 1. Поэтому он создает новые шарды на уцелевших нодах, чтобы у всех шардов снова была резервная копия. Тем временем балансер над бекендом получает таймаут соединений в тех запросах, которые выполнялись на инстансах в отключенном ДЦ, либо ошибку от работающего бекенда, чей запрос ушел в пропавший ДЦ и не вернулся. В зависимости от обстоятельств, балансер может попытаться повторить запрос или вернуть ошибку пользователю. Но в итоге балансер поймет, что инстансы из отключенного ДЦ ему недоступны и перестанет отправлять туда запросы, проверяя в фоне, не заработал ли все-таки ДЦ и не пора ли возвращать туда нагрузку.
Потеря связности между бекендом и базой/индексом из-за проблем с сетью.
Чуть более простая ситуация на первый взгляд. Так как балансер над бекендом регулярно проверяет его состояние, то ситуация, когда бекенд не может достучаться до базы всплывает весьма быстро. И балансер опять уводит нагрузку с этого бекенда. Есть опасность, что если все бекенды потеряют связь с базой, то их всех же закроют, что в итоге повлияет на 100% запросов.
Высокая нагрузка запросов в поиск трекера.
Поиск по задачам, их фильтрация, сортировка и агрегация – весьма трудозатратные операции. Поэтому именно эта часть API имеет самые строгие лимиты по нагрузке. Раньше мы находили вручную тех, кто заваливал нас запросами и просили их сбавить нагрузку. Сейчас такое происходит всё чаще, поэтому включение rate limits позволило не замечать излишне активного клиента API.
Яндекс.Трекер – для всех
Нашими сервисом не раз интересовались другие компании – они узнавали о нашем внутреннем инструменте от тех, кто покидал Яндекс, но не мог забыть Трекер. И вот в прошлом году внутри мы решили готовить Трекер к выходу в мир – делать из него продукт для других компаний.
Мы сразу начали прорабатывать архитектуру. Перед нами встала большая задача по масштабированию сервиса до сотен тысяч организаций. До этого сервис годами разрабатывался для одной нашей компании, учитывал только её потребности и нюансы. Стало ясно, что текущая архитектура потребует сильных доработок.
В итоге у нас было два варианта решения.
- Минимальное количество изменений в уже написанном коде
- Дорогие ресурсы
- Сложный мониторинг
- Сложность выкладки и миграций
- Разумное использование ресурсов
- Быстрый деплой и относительно быстрые миграции
- Простой мониторинг
- Трудоемкость
Очевидно, что стабильность сервиса для внешних пользователей не менее важна, чем для внутренних, поэтому необходимо дублировать базы, поиск, бэкенд и фронтенд в нескольких датацентрах. Это делало первый вариант гораздо более сложным в обслуживании – получалось много точек отказа. Поэтому конечным вариантом мы выбрали второй.
Переписывание основной части проекта у нас заняло два месяца, для такой задачи это были рекордные сроки. Тем не менее, чтобы не ждать, мы подняли несколько копий трекера на выделенном железе, чтобы было на чём тестировать фронтенд и взаимодействие со смежными сервисами.
Отдельно стоит отметить, что еще на этапе проектирования, мы приняли принципиальное решение сохранить одну кодовую базу для обоих Трекеров: внутреннего и внешнего. Это позволяет не заниматься копированием кода из одного проекта в другой, не снижать скорость релизов и выпускать возможности наружу почти сразу после их появления в нашем внутреннем Трекере.
Но как выяснилось, мало было добавить ещё один параметр во все методы приложения, мы также столкнулись со следующими проблемами:
- Нерезиновость монги и эластика. Нельзя было сложить данные в один инстанс, эластик плохо относится к большому количеству индексов, монга также не могла бы вместить все организации. Поэтому бекенд разделили на несколько больших инстансов, каждый из которых может обслуживать закрепленные за ним организации. Каждый инстанс отказоустойчив. При этом есть возможность перетащить организацию между ними.
- Необходимость выполнять cron задачи для каждой организации. Тут нам пришлось решать вопрос с каждой задачей индивидуально. Где-то заменили pull данных на push. Где-то одна cron задача генерировала по отдельной задаче на каждую организацию.
- Разный набор полей задач в каждой организации. Из-за наличия оптимизаций работы с ними нам пришлось написать отдельный кеш для них.
- Обновление маппинга индекса. Достаточно распространенная операция, случающаяся при апдейте трекера на новую версию. Добавили механизм поэтапного обновления маппинга.
- Открытие API на внешних пользователей. Пришлось добавить рейт лимитер, закрыть доступ к служебному API.
- Наличие службы поддержки для редких действий. Наши саппорты и разработчики не имеют право заглядывать в пользовательские данные организаций, а значит все действия должны производить администраторы компаний. Добавили для них ряд админок в интерфейсе.
Отдельный момент – оценка производительности. Из-за множества переделок необходимо было оценить скорость работы, количество организаций, которое бы вместилось в инстанс, а также поддерживаемый rps. Поэтому мы провели очередные стрельбы, предварительно заселив в наш тестовый трекер большое количество организаций. По итогам определили границу нагрузки, после которой новые организации надо будет размещать в новом инстансе.
Еще один специальный выделенный инстанс Трекера мы сделали, чтобы разместить в нем демоверсию. Чтобы попасть в нее достаточно иметь просто аккаунт на Яндексе. В ней заблокированы некоторые возможности (например, загрузка файлов), но зато можно познакомиться с настоящим интерфейсом Трекера.
Читайте также: