21 августа 2019 г.

Как мы добавили в CryptoCRM всю планету

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

CryptoCRM имеет следующую архитектуру:

  1. Серверы смарт-контрактов, которые выдают ключи лицензионным версиям системы.
  2. Push-серверы для рассылки уведомлений пользователям мобильных приложений.
  3. Сервер обновлений.
  4. Сервер сбора ошибок и аналитики.
  5. Сервер обучения алгоритмов безопасности.

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

Версия CryptoCRM

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

Система состоит из двух больших компонентов:

Эти компоненты также могут быть разделены по желанию клиента и размещены в разных точках планеты. Допустим, база данных расположена на Кипре, а ядро в США. 

Ядро включает в себя общую логику работы системы, микросервисы обработки данных, отправку Push, планировщики событий и так далее. Фактически это многослойная плата, каждый слой которой отвечает за различные действия и передает информацию главным серверам CryptoCRM.

Как отправляется Push-уведомление CryptoCRM

Допустим, необходимо отправить Push пользователю. Для этого микросервис версии CryptoCRM, используя сквозное шифрование, передает данные на Push-сервер CryptoCRM, который затем добавляет задачу в очередь и с максимально возможным приоритетом отправляет уведомление на мобильное устройство (iOS или Android), которое также шифруется между Push-сервером CryptoCRM и мобильным приложением. Это исключает перехват и расшифровку данных третьими лицами.

Поведенческие факторы CryptoCRM

CryptoCRM в режиме реального времени анализирует все действия пользователя и составляет «карту поведения». Мы научились определять нетиповые действия, которые система может расценить как попытку получения и выгрузки данных. Такие действия аккумулируются с местоположением пользователя, браузером, ключами сессий, учетом рабочего времени, постоянной проверкой статуса пользователя и прочее. Мы получаем на выходе целый массив активностей, который шифруем и передаем на главный «Сервер обучения алгоритмов безопасности». Данный сервер, используя нейросеть, анализирует «входные нейроны», после чего передает результаты обратно, тем самым формируя поведенческую модель пользователя. Благодаря тому, что у нас есть отдельный сервер обучения, мы можем вносить в него коррективы, тем самым продолжая обучать/переучивать сеть выявлять злоумышленников. 

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

База данных CryptoCRM

Во-первых, мы можем предложить пользователю на выбор драйвер базы данных: PostgreSQL, Oracle, MySQL и другие. Некоторые модули системы (CryptoBot, Журнал событий и прочие) используют NoSQL. Как сообщалось ранее, сервер базы данных может быть расположен где угодно, в том числе и на внутреннем сервере пользователя.

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

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

Резервное копирование данных CryptoCRM

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

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

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

Как вы поняли, доступ к данным происходит по следующему алгоритму (в упрощенном виде):

Если хоть одно из условий будет нарушено, то по системе «весов критичности» пользователь может быть даже заблокирован. Следовательно, даже имея пароль доступа, злоумышленник с большой долей вероятности будет заблокирован в системе.

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

Технические требования CryptoCRM

Для запуска CryptoCRM необходимо всего 2 клаудлета (1 клаудлет – 128 мегабайт ОЗУ и 400 МГц процессора). Один – на ядро, второй – на базу данных, в которой спокойно могут работать порядка тысячи пользователей! Кладулеты взяты для простоты понимания.

Как вы поняли, система оптимизирована очень хорошо, что позволяет ее запускать даже на слабых серверах. Правда, тут пользователям мы даем не два клаудлета, а выделенный под них сервер с 6-ю ядрами, 12-ю потоками, 64 ГБ оперативной памяти, 2 SSD-диска серверного класса по 480 Гб каждый – и это в базовом тарифном плане!

Дальше – больше. Мы часто проводим нагрузочное тестирование системы. Последний тест мы назвали «Планета» и создали семь миллиардов (!!!) учетных записей. У каждого пользователя создали по 100 000 контрагентов и по 200 000 контактов. Все это «упаковали» в 100 000 проектов на каждого пользователя и оставили роботам на проверку. Реальные цифры сначала огорчали из-за того, что до этого мы тестировали систему на 10 миллионов записей, а тут сразу «взрыв». Пришлось переписать жадные запросы к базе данных и увеличить память для кеширования, поэтому увеличились требования к железу. 

После повторного тестирования результаты работы системы были гораздо лучше. Скорость работы CryptoCRM при больших объемах данных возросла. Одной из задач было сохранение скорости работы на мобильных браузерах. В то же время выросло количество данных от пользователей: журнал событий, поведенческие факторы. Сервер начал очень быстро «съедать» все полезные ресурсы и память на диске. Пришлось вновь возвращаться к оптимизации. Были переписаны подсказки, CryptoBot. Пришлось полностью переписать сквозной поиск, ведь при таком объеме простой запрос занимал около 5 секунд, а сейчас – считанные миллисекунды. Данные пришлось сжимать в новый формат и переписывать сервер с анализом поведенческих факторов.

Результаты показали, что при количестве до 10 миллионов пользователей расхождений в производительности нет.

50 миллионов – 1 миллиард пользователей наблюдается задержка порядка 30-50%.

Свыше 1 миллиарда ­– 50% и порой до 250%.

Звучит ужасно, но если подумать, что страница проектов со всеми зависимостями, расшифровкой данных, визуализацией и прочим открывается за 0,05 секунды, то статистика не пугает. И можно смело сказать, что CryptoCRM успешно прошла нагрузочные тесты. Тесты проводились на СУБД PostgreSQL 11.5, на MySQL 5.7 показатели больше на 20-50%.

CryptoCRM – очень мощное ядро, которое позволяет использовать его в качестве REST-сервера с очень высокой нагрузкой. Так ядро CryptoCRM используется в мобильном приложении «Ударения!», где нагрузка достигает нескольких миллионов запросов в сутки. Ну и конечно же, ядро CryptoCRM используется в серверах CryptoCRM, которые были описаны в самом начале статьи.

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

CryptoCRM – окрыляем бизнес!

Остались вопросы? Обращайтесь в службу поддержки по адресу электронной почты s@CryptoCrm.ru