Почему не работает приложение Облако Mail.ru сегодня Май 2023
Перейти к содержаниюSearch for:
На чтение 2 мин Просмотров 673
Сегодня есть сбои в работе приложения облачного хранилища Облако Mail.ru на компьютере, андроиде и айфоне May 26, 2023
Почему не работает Облако Майл.ру? Где выявлены сбои?
В некоторых регионах России выявлены сбои в работе облачного приложения хранилища Облако Mail.ru на различных устройствах:
| Камчатский край (г. Петропавловск-Камчатский) | Челябинская область (г. Челябинск) |
| Республика Алтай (г. Горно-Алтайск) | Магаданская область (г. Магадан) |
Красноярский край (г. Красноярск) | Республика Калмыкия (г. Элиста) |
| Тюменская область (г. Тюмень) | Орловская область (г. Орёл) |
| Нижегородская область (г. Нижний Новгород) | Забайкальский край (г. Чита) |
| Ивановская область (г. Иваново) | Ненецкий автономный округ (г. Нарьян-Мар) |
| Амурская область (г. Благовещенск) | Ульяновская область (г. Ульяновск) |
| Республика Дагестан (г. Махачкала) | Тульская область (г. Тула) |
| Белгородская область (г. Белгород) | Липецкая область (г. Липецк) |
| Кемеровская область (г. Кемерово) | Республика Карелия (г. Петрозаводск) |
| Брянская область (г. Брянск) | Республика Северная Осетия — Алания (г. Владикавказ) |
Ставропольский край (г. Ставрополь) | Чукотский автономный округ (г. Анадырь) |
| город Москва | Ростовская область (г. Ростов-на-Дону) |
| Курганская область (г. Курган) | Республика Марий Эл (г. Йошкар-Ола) |
| Сахалинская область (г. Южно-Сахалинск) | Алтайский край (г. Барнаул) |
| Омская область (г. Омск) | Смоленская область (г. Смоленск) |
| Республика Тыва (г. Кызыл) | Псковская область (г. Псков) |
| Хабаровский край (г. Хабаровск) | Республика Адыгея (г. Майкоп) |
| Кировская область (г. Киров) | Иркутская область (г. Иркутск) |
| Курская область (г. Курск) | Ямало-Ненецкий автономный округ (г. Салехард) |
| Приморский край (г. Владивосток) | Томская область (г. Томск) |
Ханты-Мансийский автономный округ — Югра (г. Ханты-Мансийск) | Республика Мордовия (г. Саранск) |
| Республика Башкортостан (г. Уфа) | Московская область (г. Москва) |
Узнать почему Облако Mail.ru не работает сегодня
Узнать о причинах сбоя можно написав в службу поддержки Облако Mail.ru на сайте: https://help.mail.ru/cloud_web
Базы данных платформы IIoT — Как Mail.ru Cloud Solutions работает …
Здравствуйте, меня зовут Андрей Сергеев, я работаю руководителем отдела разработки IoT-решений в Mail.ru Cloud Solutions. Все мы знаем, что универсальной базы данных не существует. Особенно, когда стоит задача построить IoT-платформу, способную обрабатывать миллионы событий с различных датчиков в режиме, близком к реальному времени.
Наш продукт Mail.ru IoT Platform начинался как прототип на базе Tarantool. Я собираюсь рассказать вам о нашем путешествии, проблемах, с которыми мы столкнулись, и решениях, которые мы нашли.
Я также покажу вам текущую архитектуру современной платформы промышленного Интернета вещей. В этой статье мы рассмотрим:
- наши требования к базе данных, универсальные решения и теорема CAP
- является ли база данных + сервер приложений в одном подходе панацеей
- эволюция платформы и используемых в ней баз данных
- количество Tarantools мы используем и как мы к этому пришли
Mail.ru IoT Platform сегодня
Наш продукт Mail.ru IoT Platform — масштабируемая и аппаратно-независимая платформа для построения решений промышленного интернета вещей. Это позволяет нам собирать данные с сотен тысяч устройств и обрабатывать этот поток почти в режиме реального времени, используя определяемые пользователем правила (скрипты на Python и Lua) среди других инструментов.
Платформа может хранить неограниченное количество необработанных данных из источников. Он также имеет набор готовых компонентов для визуализации и анализа данных, а также встроенные инструменты для предиктивного анализа и разработки приложений на основе платформы.
локальная установка на объектах заказчика. В 2020 году мы планируем его выпуск в виде общедоступного облачного сервиса.
Прототип на базе Tarantool: как мы начинали
Наша платформа стартовала как пилотный проект — прототип с одним экземпляром Tarantool. Его основными функциями были прием потока данных с OPC-сервера, обработка событий Lua-скриптами в режиме реального времени, мониторинг ключевых показателей на его основе, генерация событий и оповещений для вышестоящих систем.
Блок-схема прототипа на базе Tarantool[/caption] Этот прототип даже показал себя в полевых условиях многоскважинной площадки в Ираке. Он работал на нефтяной платформе в Персидском заливе, отслеживая ключевые показатели и отправляя данные в систему визуализации и журнал событий. Пилот был признан успешным, но затем, как это часто бывает с прототипами, его отправили в холодное хранилище, пока мы не получили его в свои руки.
Наши цели в разработке платформы IoT
Вместе с прототипом мы поставили перед собой задачу создать полнофункциональную, масштабируемую и отказоустойчивую платформу IoT, которую затем можно было бы выпустить в качестве общедоступной облачной службы.
Нам нужно было построить платформу со следующими характеристиками:
- Одновременное подключение сотен тысяч устройств
- Получение миллионов событий каждую секунду
- Обработка потока данных в режиме, близком к реальному
- Хранение необработанных данных за несколько лет
- Инструменты аналитики как для потоковой передачи, так и для исторических данных
- Поддержка развертывания в нескольких центрах обработки данных для обеспечения максимальной устойчивости к стихийным бедствиям
Плюсы и минусы прототипа платформы
В начале активной разработки прототип имел следующую структуру:
- Tarantool, который использовался как база данных + Application Server
- все данные хранились в памяти Tarantool
- в этом Tarantool было Lua-приложение, которое выполняло прием и обработку данных и вызывало пользовательские скрипты с поступающими данными
Такой тип структуры приложения имеет свои преимущества:
- Код и данные хранятся в одном месте – что позволяет манипулировать данными прямо в памяти приложения и избавиться от лишних сетевых манипуляций, характерных для традиционных приложений
- Tarantool использует JIT (Just in Time Compiler) для Lua.
Он компилирует код Lua в машинный код, позволяя выполнять простые скрипты Lua со скоростью, подобной C (40 000 RPS на ядро и даже выше!) - Tarantool основан на совместной многозадачности. Это означает, что каждый вызов хранимой процедуры выполняется в собственном волокне, похожем на сопрограмму. Это дает дополнительный прирост производительности для задач с операциями ввода-вывода, например. сетевые манипуляции
- Эффективное использование ресурсов: инструменты, способные обрабатывать 40 000 RPS на ядро, довольно редки
Имеются и существенные недостатки:
- у меня есть сотни петабайт для Tarantool
- Этот предмет является прямым следствием преимущества №1. Весь код платформы состоит из процедур, хранящихся в базе данных, а это означает, что любое обновление кодовой базы — это, по сути, обновление базы данных, а это отстой
- Динамическое масштабирование затруднено, поскольку производительность всей системы зависит от используемой памяти.
Короче говоря, вы не можете просто добавить еще один Tarantool для увеличения пропускной способности, не теряя при этом 24–32 Гб памяти (при запуске Tarantool выделяет всю память под данные) и не перераспределяя существующие данные. Кроме того, при шардинге мы теряем преимущество №1 — данные и код могут храниться не в одном Tarantool 9.0008 - Производительность снижается по мере усложнения кода по мере развития платформы. Это происходит не только потому, что Tarantool выполняет весь код Lua в одном системном потоке, но и потому, что LuaJIT переходит в режим интерпретации вместо компиляции при работе со сложным кодом
Вывод: Tarantool — хороший выбор для создания MVP , но он не подходит для полнофункциональной, простой в обслуживании и отказоустойчивой платформы IoT, способной получать, обрабатывать и хранить данные с сотен тысяч устройств.
Две основные проблемы, которые мы хотели решить
Прежде всего, мы хотели решить две основные проблемы:
- Отказ от концепции базы данных + сервера приложений.
Мы хотели обновить код приложения независимо от базы данных. - Упрощение динамического масштабирования в условиях стресса. Мы хотели иметь легкое независимое горизонтальное масштабирование максимально возможного количества функций
Для решения этих проблем мы применили инновационный подход, который не был хорошо протестирован — микросервисная архитектура, разделенная на Stateless (приложения) и Stateful (база данных). ).
Чтобы сделать обслуживание и масштабирование сервисов без сохранения состояния еще проще, мы контейнеризировали их и внедрили Kubernetes.
Теперь, когда мы разобрались со службами без сохранения состояния, нам нужно решить, что делать с данными.
Основные требования к базе данных IoT-платформы
Сначала мы старались не усложнять — мы хотели хранить все данные платформы в одной универсальной базе данных. Проанализировав наши цели, мы пришли к следующему списку требований к универсальной базе данных:
- ACID-транзакции — клиенты будут вести учет своих устройств на платформе, поэтому мы не хотим потерять некоторые из них при изменении данных
- Строгая согласованность — мы должны получить одинаковые ответы от все узлы базы данных
- Горизонтальное масштабирование для записи и чтения — устройства отправляют огромный поток данных, которые необходимо обрабатывать и сохранять почти в режиме реального времени
- Отказоустойчивость — платформа должна быть способна управление данными из нескольких центров обработки данных для обеспечения максимальной отказоустойчивости
- Доступность — никто не будет использовать облачную платформу, которая отключается при отказе одного из узлов
- Объем хранилища и хорошее сжатие — нам нужно хранить несколько лет (петабайты!) необработанных данных, которые также необходимо сжатый.

- Производительность — быстрый доступ к необработанным данным и инструментам для потоковой аналитики, включая доступ из пользовательских скриптов (десятки тысяч запросов на чтение в секунду!)
- SQL — мы хотим, чтобы наши клиенты знакомый язык
Проверка наших требований с помощью САР-теоремы
Прежде чем мы начали проверять все доступные базы данных на предмет их соответствия нашим требованиям, мы решили проверить, адекватны ли наши требования, используя хорошо известный инструмент — САР-теорему.
Теорема CAP утверждает , что распределенная система не может одновременно обладать более чем двумя из следующих качеств:
- Непротиворечивость – данные во всех узлах не имеют противоречий в любой момент времени
- Доступность — любой запрос к распределенной системе приводит к правильному ответу, однако без гарантии совпадения ответов всех узлов системы
- Допуск на разделение — даже когда узлы не связаны, они продолжают работать независимо
Например, кластер Master-Slave PostgreSQL с синхронной репликацией является классическим примером системы CA, а Cassandra — классической системой AP.
Вернемся к нашим требованиям и классифицируем их по теореме CAP:
- ACID-транзакции и строгая (или, по крайней мере, невозможная) согласованность — это C.
- Горизонтальное масштабирование для записи и чтения + доступность — это A (multi-master) .
- Отказоустойчивость P: если один центр обработки данных отключается, система должна работать.
Вывод: универсальная база данных, которая нам нужна, должна предлагать все качества теоремы CAP, а это означает, что ни одна из существующих баз данных не может удовлетворить все наши потребности.
Выбор базы данных на основе данных, с которыми работает платформа IoT
Не имея возможности выбрать универсальную базу данных, мы решили разделить данные на два типа и выбрать базу данных для каждого типа, с которым будет работать база данных.
В первом приближении мы разделили данные на два типа:
- Метаданные – модель мира, устройства, правила, настройки.
Практически все данные кроме данных с конечных устройств - Необработанные данные с устройств – показания датчиков, телеметрия и техническая информация с устройств. Это временные ряды сообщений, содержащие значение и метку времени
Выбор базы данных для метаданных
Наши требования
Метаданные по своей сути являются реляционными. Обычно эти данные имеют небольшой объем и редко изменяются, но метаданные весьма важны. Мы не можем его потерять, поэтому важна согласованность — по крайней мере, с точки зрения асинхронной репликации, а также ACID-транзакций и горизонтального масштабирования чтения.
Этих данных сравнительно немного и они будут меняться довольно редко, поэтому можно обойтись без горизонтального масштабирования чтения, а также возможной недоступности читаемой базы в случае сбоя. Вот почему, говоря языком теоремы CAP, нам нужна система CA.
Что обычно работает. Если мы зададим такой вопрос, нам подойдет любая классическая реляционная база данных с поддержкой кластера асинхронной репликации, т.
е. PostgreSQL или MySQL.
Аспекты нашей платформы. Нам также требовалась поддержка деревьев с особыми требованиями. В прототипе была фича, взятая из систем класса RTDB (базы данных реального времени) — моделирование мира с помощью дерева тегов. Они позволяют нам объединить все клиентские устройства в одну древовидную структуру, что значительно упрощает управление и отображение большого количества устройств.
Так выглядит дерево устройств
Это дерево позволяет связать конечные устройства со средой. Например, мы можем поместить устройства, физически находящиеся в одной комнате, в одно поддерево, что облегчит работу с ними в дальнейшем. Эта функция очень удобна, к тому же мы хотели работать с RTDB в будущем, и этот функционал там в основном является отраслевым стандартом.
Для полной реализации деревьев тегов потенциальная база данных должна соответствовать следующим требованиям:
- Поддержка деревьев произвольной ширины и глубины.

- Модификация элементов дерева в транзакциях ACID.
- Высокая производительность при обходе дерева.
Классические реляционные базы данных могут довольно хорошо работать с небольшими деревьями, но они хуже справляются с произвольными деревьями.
Возможное решение. Использование двух баз данных: графовой для дерева и реляционной для всех остальных метаданных.
Этот подход имеет серьезные недостатки:
- Для обеспечения согласованности между двумя базами данных необходимо добавить внешний координатор транзакций.
- Эта конструкция сложна в обслуживании и не так надежна.
- В результате мы получаем две базы данных вместо одной, а графовая база данных нужна только для поддержки ограниченного функционала.
Возможное, но не идеальное решение с двумя базами данных
Наше решение для хранения метаданных. Мы немного подумали и вспомнили, что этот функционал изначально был реализован в прототипе на базе Tarantool и получилось очень хорошо.
Прежде чем продолжить, я хотел бы дать неортодоксальное определение Tarantool: Tarantool — это не база данных, а набор примитивов для построения базы данных для вашего конкретного случая.
Доступные примитивы из коробки:
- Пробелы — аналог таблиц для хранения данных в базах данных.
- Полноценные транзакции ACID.
- Асинхронная репликация с использованием журналов WAL.
- Инструмент для сегментирования, поддерживающий автоматическое повторное разделение.
- Сверхбыстрый LuaJIT для хранимых процедур.
- Большая стандартная библиотека.
- Менеджер пакетов LuaRocks с еще большим количеством пакетов.
Наше решение CA представляло собой реляционную + графовую базу данных на базе Tarantool. С помощью примитивов Tarantool мы собрали идеальное хранилище метаданных:
- Пространства для хранения.
- Транзакции ACID — уже на месте.
- Асинхронная репликация — уже есть.

- Отношения — мы построили их на хранимых процедурах.
- Деревья — тоже построены на хранимых процедурах.
Наша кластерная установка является классической для таких систем — один Master для записи и несколько Slave с асинхронными репликациями для масштабирования чтения.
В результате мы имеем быстрый масштабируемый гибрид реляционной и графовой баз данных.
Один экземпляр Tarantool способен обработать тысячи запросов на чтение, в том числе с активным обходом дерева.
Выбор базы данных для хранения данных с устройств
Наши требования
Этот тип данных характеризуется частой записью и большим объемом данных: миллионы устройств, несколько лет хранения, петабайты обоих входящих сообщений и сохраненные данные. Его высокая доступность очень важна, поскольку показания датчиков важны для пользовательских правил и наших внутренних служб.
Важно, чтобы база данных предлагала горизонтальное масштабирование на чтение и запись, доступность и отказоустойчивость, а также готовые аналитические инструменты для работы с этим массивом данных, желательно на базе SQL.
Мы можем пожертвовать согласованностью и ACID-транзакциями, поэтому с точки зрения теоремы CAP нам нужна система AP.
Дополнительные требования. У нас было несколько дополнительных требований к решению для хранения гигантских объемов данных:
- Time Series — данные датчиков, которые мы хотели сохранить в специализированной базе.
- Открытый исходный код – преимущества открытого исходного кода очевидны.
- Свободный кластер — распространенная проблема среди современных баз данных.
- Хорошее сжатие — учитывая объем данных и их однородность, мы хотели эффективно сжать сохраненные данные.
- Успешное обслуживание — чтобы минимизировать риски, мы хотели начать с базы данных, которую кто-то уже активно эксплуатировал при нагрузках, подобных нашим.
Наше решение. Единственной базой данных, удовлетворяющей нашим требованиям, была ClickHouse — столбцовая база данных временных рядов с репликацией, мультимастером, шардингом, поддержкой SQL и бесплатным кластером.
Более того, Mail.ru имеет многолетний успешный опыт эксплуатации одного из крупнейших кластеров ClickHouse.
Но ClickHouse, каким бы хорошим он ни был, у нас не сработал.
Проблемы с базой данных устройства и их решение
Проблема с производительностью записи. У нас сразу возникла проблема с производительностью записи большого потока данных. Его нужно как можно быстрее доставить в аналитическую базу, чтобы правила, анализирующие поток событий в режиме реального времени, могли посмотреть историю конкретного устройства и решить, поднимать оповещение или нет.
Раствор. ClickHouse плохо работает с несколькими одиночными вставками, но хорошо работает с большими пакетами данных, легко справляясь с пакетной записью миллионов строк. Мы решили буферизовать входящий поток данных, а затем вставлять эти данные пачками.
Вот как мы справились с плохой производительностью записи
Проблемы с записью были решены, но это стоило нам нескольких секунд задержки между поступлением данных в систему и их появлением в нашей базе данных.
Критично для различных алгоритмов, которые реагируют на показания датчиков в режиме реального времени.
Проблема с производительностью чтения. Потоковой аналитике для обработки данных в режиме реального времени постоянно требуется информация из базы данных — десятки тысяч мелких запросов. В среднем одна нода ClickHouse одновременно обрабатывает около сотни аналитических запросов. Он был создан для нечастой обработки тяжелых аналитических запросов с большими объемами данных. Конечно, это не подходит для расчета трендов в потоке данных от сотен тысяч датчиков.
ClickHouse плохо обрабатывает большое количество запросов
Решение. Мы решили разместить тайник перед Clickhouse. Кэш предназначался для хранения горячих данных, которые чаще всего запрашивались за последние 24 часа.
24 часа данных — это не год, но все же достаточно много — поэтому нам нужна система AP с горизонтальным масштабированием для чтения и записи и акцентом на производительность при записи одиночных событий и многочисленных чтений.
Нам также нужна высокая доступность, аналитические инструменты для временных рядов, постоянство и встроенный TTL. Итак, нам нужен был быстрый ClickHouse, который мог хранить все в памяти. Не найдя подходящих решений, мы решили построить его на основе примитивов Tarantool:
- Постоянство – проверить (WAL-логи + снимки).
- Производительность – проверка; все данные в памяти.
- Масштабирование – проверка; репликация + шардинг.
- Высокая доступность — проверить.
- Аналитические инструменты для временных рядов (группировка, агрегация и т. д.) — мы построили их на хранимых процедурах.
- TTL — построен на хранимых процедурах с одним фоновым файбером (сопрограммой).
Решение оказалось мощным и простым в использовании. Один экземпляр обрабатывал 10 000 считывающих RPC, включая аналитические.
Вот какая архитектура у нас получилась:
Окончательная архитектура: ClickHouse в качестве аналитической базы данных и кеш Tarantool, хранящий данные за 24 часа.
Для каждого типа данных мы нашли свою базу данных, но по мере развития платформы появилась еще одна — статус. Статус состоит из текущих статусов датчиков и устройств, а также некоторых глобальных переменных для правил потоковой аналитики.
Допустим, у нас есть лампочка. Свет может быть как включен, так и выключен, и нам всегда нужно иметь доступ к его текущему состоянию, в том числе и в правилах. Другой пример — переменная в правилах потока — например, какой-то счетчик.
Этот тип данных требует частой записи и быстрого доступа, но не занимает много места.
Хранилище метаданных плохо подходит для такого типа данных, так как статус может меняться довольно часто и у нас есть только один Мастер для записи. Долговечное и оперативное хранилище тоже не работает, потому что последний раз статус менялся три года назад, и нам нужен быстрый доступ для чтения.
Это означает, что база данных состояния должна иметь горизонтальное масштабирование для чтения и записи, высокую доступность, отказоустойчивость и согласованность на уровне значений/документов.
Мы можем пожертвовать глобальной согласованностью и ACID-транзакциями.
Должна работать любая база данных Key-Value или документная база данных: сегментирующий кластер Redis, MongoDB или, опять же, Tarantool.
Преимущества Tarantool:
- Самый популярный способ использования Tarantool.
- Горизонтальное масштабирование – проверить; асинхронная репликация + шардинг.
- Согласованность на уровне документа – проверить.
В итоге у нас есть три Tarantool’а, которые используются по-разному: один для хранения метаданных, кэш для быстрого чтения с устройств и один для хранения статусных данных.
Как выбрать базу данных для вашей платформы IoT
- Универсальной базы данных не существует.
- Для каждого типа данных должна быть своя база данных, наиболее подходящая.
- Возможно, вы не найдете на рынке подходящей базы данных.
- Tarantool может работать как основа для специализированной базы данных
Mail.
ru Group — Средства автоматизации GetSalesКлючевые показатели проекта:
- Более 12 месяцев использования GetSales.io
- 6 000 подключений отправлено в 2021 г.
- 2000 одобренных подключений (33% скорость)
- 900 ведет диалог (45% доля ответов)
- 200 демонстрационных встреч (22% MQL)
Очки | До | После |
Формализованный процесс информирования | Все менеджеры, использующие предварительно утвержденные потоки, целевые списки охвата и шаблоны сообщений | |
Работа в команде | Нет, менеджеры использовали только личные учетные записи LinkedIn без процесса совместной работы | Менеджеры используют командное рабочее пространство, чтобы использовать передовой опыт друг друга и шаблоны. |
Ресурсы | Все операции менеджеры по продажам выполняли вручную: отправка сообщений, отслеживание, добавление лидов в CRM, пополнение данных электронными письмами. Всю работу выполнили 4 менеджера по продажам | GetSales автоматизировала 80% рутинных операций (отправка сообщений, последующие действия, добавление лидов в CRM, обогащение данных электронными письмами) Сокращение FTE на 50%: 2 менеджера по продажам, ориентированные на MQL, рутинные операции, в т.ч. Генерацией MQL управляет GetSales.io |
О компании
Mail.ru Group — крупнейшая интернет-компания в России, принадлежащая Вконтакте, одной из самых популярных российских социальных сетей. . Он объединяет главную страницу сайта и тематические проекты и служит единой точкой входа для интернет-сервисов компании — почты, поиска, социальной сети «Мой мир», облачного сервиса, Агента Mail.
Задача
Mail.ru Group, как крупному предприятию, необходимо выстроить определенные процессы, чтобы поддерживать удаленный отдел продаж и собирать необходимую аналитику. Отделу продаж приходилось выполнять много ручной работы, которая отнимала время, поэтому Mail.ru искала эффективный инструмент, который мог бы сэкономить свои ресурсы, автоматизировать задачи исходящих продаж и предоставить качественную аналитику.
Как мы помогли
Как у крупной компании, у Mail.ru Group были опасения по поводу безопасности использования инструментов обработки LeadGen. Getsales стал для них лучшим выбором на рынке как надежный поставщик ПО для автоматизации продаж и удобная платформа с глубокой аналитикой. Инструмент Getsales позволил Mail.ru охватить большое количество людей с помощью различных потоков сообщений, в то время как отдел продаж мог сосредоточиться на других задачах. Вот основные шаги, которые были предприняты для улучшения процесса работы с Mail.

Красноярск)
Ставрополь)
Ханты-Мансийск)
Он компилирует код Lua в машинный код, позволяя выполнять простые скрипты Lua со скоростью, подобной C (40 000 RPS на ядро и даже выше!)
Короче говоря, вы не можете просто добавить еще один Tarantool для увеличения пропускной способности, не теряя при этом 24–32 Гб памяти (при запуске Tarantool выделяет всю память под данные) и не перераспределяя существующие данные. Кроме того, при шардинге мы теряем преимущество №1 — данные и код могут храниться не в одном Tarantool 9.0008
Мы хотели обновить код приложения независимо от базы данных.
Практически все данные кроме данных с конечных устройств

Доступна статистика команды