Рубрика «Блог компании Miro»

В начале ноября мы объявили об открытой бете платформы Miro, провели конференцию о платформенной разработке с JetBrains, Stripe и другими компаниями (видео всех докладов), а также запустили онлайн-конкурс для разработчиков по созданию плагинов.

Конкурс завершился! В нём приняли участие инженеры из Польши, Швейцарии, Словакии, Белоруссии, Литвы, России и других стран.

Победители Miro Platform Contest - 1

Мы готовы объявить победителей!

Читать полностью »

Привет! Если вам не хватило мест на Platform Developers Conference, которая пройдёт в субботу, 9 ноября, не расстраивайтесь: мы организовали веб-трансляцию.

Конференция посвящена созданию платформ для разработчиков. В качестве спикеров — техлиды и ведущие инженеры из Stripe, Intercom, JetBrains, Miro и других компаний.

Platform Developers Conf by Miro: онлайн-трансляция - 1

Трансляция начнётся в субботу в 9:00 по московскому времени. Чтобы подключиться, просто зайдите на страницу конференции.
Читать полностью »

В прошлой статье я рассказал про нашу инфраструктуру большого нагрузочного теста. В среднем мы создаём порядка 100 серверов для подачи нагрузки и порядка 150 серверов для работы нашего сервиса. Все эти сервера нужно создавать, удалять, конфигурировать и запускать. Мы используем для этого те же инструменты, что и на проде, чтобы уменьшить количество ручной работы:

  • Для создания и удаления тестового окружения — Terraform скрипты;
  • Для конфигурирования, обновления и запуска — Ansible скрипты;
  • Для динамического масштабирования в зависимости от нагрузки — самописные Python-скрипты.

Благодаря скриптам Terraform и Ansible, все операции от создания инстансов до запуска сервера выполняются всего шестью командами:

#запускаем нужные инстансы в консоли aws
ansible-playbook deploy-config.yml  #обновляем версии серверов
ansible-playbook start-application.yml  #запускаем наше приложение на этих серверах
ansible-playbook update-test-scenario.yml --ask-vault-pass #обновляем Jmeter сценарий, если в нём были изменения
infrastructure-aws-cluster/jmeter_clients:~# terraform apply #создаем jmeter сервера для подачи нагрузки
ansible-playbook start-jmeter-server-cluster.yml #запускаем jmeter кластер
ansible-playbook start-stress-test.yml #запускаем тест

Читать полностью »

Мы задумались о построении инфраструктуры больших нагрузочных тестов год назад, когда достигли отметки в 12K онлайн-пользователей, работающих в нашем сервисе одновременно. За 3 месяца мы сделали первую версию теста, которая показала лимиты сервиса.

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

Достоверный нагрузочный тест с учётом непредвиденных нюансов - 1
Читать полностью »

Мы разрабатываем платформу для визуальной коллаборации. Для отображения контента мы используем Canvas: на нём рисуется всё, в том числе тексты. Готового решения для отображения текстов на Canvas один в один как в html не существует. За несколько лет работы с отрисовкой текстов мы изучили разные варианты реализации, набили много шишек и, кажется, нашли хорошее решение. Расскажу в статье, как мы переезжали с Flash на Canvas и почему отказались от SVG foreignObject.

Как мы учились рисовать тексты на Canvas - 1

Переезд с Flash

Мы создавали продукт в 2015 году на Flash. Внутри Flash есть текстовый редактор, умеющий хорошо работать с текстами, поэтому нам не нужно было делать ничего дополнительного для работы с текстами. Но в то время Flash уже умирал, поэтому мы переехали с него на HTML/Canvas. И перед нами встала задача — отображать текст на Canvas как в html-редакторе, при этом не сломать при переезде тексты, созданные во Flash-версии.Читать полностью »

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

У нас высоконагруженный сервис: 2,5 млн пользователей по всему миру, 50К+ активных пользователей каждый день. Сервера находятся в Amazone в одном регионе Ирландии: в работе постоянно 100+ различных серверов, из них почти 50 — с базами данных.

Весь backend — большое монолитное stateful-приложение на Java, которое держит постоянное websocket соединение с клиентом. При одновременной работе нескольких пользователей на одной доске все они видят изменения в режиме реального времени, потому что каждое изменение мы записываем в базу. У нас примерно 10К запросов в секунду к нашим базам. В пиковой нагрузке в Redis мы пишем по 80-100К запросов в секунду.
Отказоустойчивый кластер PostgreSQL + Patroni. Опыт внедрения - 1
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js