Новости Evernote

Обеспечиваем Evernote надежным фундаментом на будущее

Прежде чем перейти к последним новостям продукта, коротко прокомментирую другие новости Evernote.

За последние семь месяцев произошло много изменений, из-чего некоторые пользователи выражают неуверенность по поводу наших долгосрочных планов на Evernote. Хочу прояснить: Bending Spoons встала у руля, чтобы улучшить положение дел Evernote, а не быстро заработать. К сожалению, наши долгосрочные планы требовали болезненных решений на короткой дистанции. Без них было не обойтись, иначе Evernote бы просто не выжил, не говоря уже об успехе. Еще пару месяцев назад будущее продукта выглядело мрачно, но уже сейчас мы смотрим в него с неподдельным оптимизмом.

Наша главная цель — сделать Evernote надежным вторым мозгом. Базой данных со всей вашей самой важной информацией, к которой вы можете быстро и без сбоев получить доступ в любой момент и из любой точки. Цель не новая — именно она заложена в фундаменте Evernote, который был построен почти 20 лет назад. Теперь мы отвечаем за компанию, и в первую очередь, мы хотим укрепить этот фундамент, и на его основе, реализовать цель, которая была поставлена пару десятилетий назад.

В этом свете встает вопрос: как нам обеспечить бесперебойную и надежную работу продукта? Ответить на него просто и коротко не выйдет, но я постараюсь все объяснить в этом посте и в будущих сообщениях.

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

Первый важный шаг: скорость и синхронизация

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

Амбициозный проект потребовал введения новой структуры данных (Conflict-free replicated data type, или CRDT — «бесконфликтные реплицированные типы данных», а точнее ее разновидности Yjs). Это позволило мгновенно синхронизировать содержимое ваших заметок сразу на всех устройствах, что было невозможно, когда для заметок использовался HTML.

Я рад поделиться, что мы закончили выкатывать новую структуру данных и новую систему заметок. Во время переходного периода мы столкнулись с трудностями, но, когда внедряешь что-то столь фундаментальное как функция редактирования в режиме реального времени, не получится избежать сбоев, даже после тщательной подготовки и предварительной работы с возможными ошибками. Мы были готовы к тому, что что-то может пойти не так, и уверены в том, что сможем справиться. Мы многому научились. Теперь для большинство пользователей могут рассчитывать на значительные улучшения в пользовательском опыте и более надежную работу Evernote.

Скорость: финальные доработки

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

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

Как только мы установили причину, мы оперативно внедрили необходимые решения. Для этого понадобилось устранить три ошибки в бэкенде, связанные с производительностью — обновления вышли 15 июня, 27 июня и 20 июля. Потом мы загрузили наши находки в библиотеку Yjs и поделились ими с сообществом. Почти сразу скорость загрузки вернулась к норме в тех аккаунтах, которые столкнулись с этой проблемой. Если вы до сих пор испытываете какие-то проблемы с загрузкой заметок, обязательно скачайте последнюю версию Evernote и свяжитесь с поддержкой, если это не поможет.

Навигация: важные внутренние изменения

Некоторые вещи, над которыми мы работаем, не попадают в поле зрения пользователей, которые в основном имеют дело с редактором заметок. Наверное, самая важная из таких вещей — это полная переработка навигации в десктопной и браузерной версиях Evernote, которая произошла в конце июля и вошла в релиз 10.59. Примерно в то же время мы значительно обновили навигацию и в мобильной версии (релиз 10.52). Навигация определяет как разные компоненты приложения соотносятся друг с другом. В мобильной версии перемены практически незаметны, хотя навигация теперь использует родные API, что означает более высокую производительность. Единственное, что выдает перемены, это новая структура URL в компьютерной версии:

www.evernote.com?b=<notebookID>&n=<noteID> →

www.evernote.com/notebook/<notebookID>/note/<noteID>

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

Миграция монолита

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

Статус-кво

Монолит — это старое приложение на Java Enterprise Edition (JEE), которое обрабатывает основную часть бизнес-логики Evernote на бэкенде. Таким образом, он обеспечивает хранение и синхронизацию нескольких сущностей, включая заметки.

До того, как мы взялись за дело, база данных работала на той же машине, что и слой приложения (JEE для приложения, MySQL для базы данных). Машины становились тяжеловесными и ими было трудно управлять. Кодовая база и инфраструктура, которая за ней стояла, накопили значительный технический долг. К счастью благодаря микросервисам, вроде того, что отвечает за редактирование в режиме реального времени, помогают нам отойти от этого подхода.

Что дальше

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

Пока переписывали, разделили приложение и базу данных. База данных сейчас в процессе переноса на новую и гораздо более современную инфраструктуру, что позволит значительно повысить безопасность и надежность сервиса. Ранее конфигурация управлялась с помощью Puppet. Теперь всё упаковано как Docker-контейнер. Новый прод похож на среду разработки, что очень облегчает жизнь разработчикам, так как нам гораздо проще добиться нужного эффекта от изменений, которые мы внедряем. Проще говоря, мы сокращаем число возможных ошибок и время на исправление тех, что возникли.

Работа продолжается

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

На сегодняшний день наш главный приоритет — это основные функции продукта и пользовательский опыт, но это не значит, что мы не уделяем внимания инновациям. Небольшая группа пользователей (сотрудники и эксперты Evernote) уже тестируют ИИ-поиск, и пока мы получаем отзывы, полные энтузиазма и поддержки. Но я хочу еще раз подчеркнуть, что всем нашим амбициозным планам предшествует работа над фундаментом, потому что мы хотим убедиться, что в основе все работает идеально. А дальше нашим возможностям нет предела.

До новых встреч,

Федерико

Организуйте работу и наведите порядок в повседневных делах с Evernote.

Зарегистрируйтесь бесплатно