С наступающим новым годом, Хабр! Чтобы не быть занудами, постараемся подвести короткие итоги 2021 года, потому что без них никуда :)
Вот несколько главных событий, которыми гордится вся наша команда:
Создали low-code/no-code платформу, которая позволяет автоматизировать обработку документов и применять машинное обучение даже сотрудникам без навыков программирования. Микросервисная архитектура, Kubernetes, Docker-контейнеры, облако – в общем, классный и сложный продукт, который сделает жизнь для тех, кто много работает с информацией, чуточку проще.
Создали уникальную технологию FastML, которая в связке с алгоритмом кластеризации позволяет гораздо точнее определять классы документов, даже если у вас их очень-очень много. Это принципиально новый подход, и мы считаем, что за ним – будущее. Пока об этом можно почитать в патенте, а вообще планируем об этом большой пост сразу после того, как все закончат есть оливье и выйдут из праздничного анабиоза.
Обновили библиотеку машинного обучения NeoML – теперь она работает до 10 раз быстрее и поддерживает Python. Приглашаем всех питонистов (и не только) оценить всю мощь обновленной NeoML!
А еще мы попросили руководителей направлений поделиться, что самое важное их команды сделали в 2021 году, какие события в своей профессиональной области им запомнились и какие планы у них на следующий год. Вот что они рассказали.
DevOps. Построили отказоустойчивую инфраструктуру на базе Kubernetes в облаке для нового low-code продукта
Павел, руководитель DevOps-направления ABBYY:
«В 2021 году команда DevOps создала инфраструктуру новой low-code/no-code платформы ABBYY для автоматической обработки документов. Важной задачей в этом проекте было обеспечить горизонтальное масштабирование различных компонентов системы независимо. Эту задачу в том числе решает микросервисная архитектура на базе Kubernetes. Эта платформа предлагает возможности по масштабированию отдельных частей системы. Кроме того, мы обеспечиваем отказоустойчивость за счет того, что каждый микросервис работает в нескольких экземплярах, которые распределены по разным воркер-нодам в кластере. Если одна или даже несколько нод, которые держат нагрузку, упадут, продукт все равно останется «на плаву» и сервис продолжит работать.
Если говорить о том, что «под капотом», то инфраструктурный слой решения базируется на Kubernetes как платформе оркестрации контейнеров. Мы использовали Consul как service discovery и хранилище конфигурации всего продукта. Кроме того, в инфраструктуре задействован Nginx Ingress Controller. Этот компонент позволяет создать единую точку входа для трафика и выполняет одновременно роль прокси и балансировщика нагрузки. Также мы используем такие компоненты, как Keda и Cluster Overprovisioner для масштабирования подов и нод соответственно. В качестве баз данных используем PostgreSQL и MSSQL, а для брокера очередей – Redis Streams. Такая конфигурация позволила создать масштабируемый и отказоустойчивый сервис, который может обрабатывать больше тысячи страниц документов в минуту.
В 2021 году мы также много сил и времени вложили в автоматизацию процессов разработки, тестирования и доставки. Это добавляет прозрачности, простоты и уменьшает время на все эти процессы. Условно говоря, если необходимо развернуть стенд с продуктом, необходимо запустить три пайплайна. Первый создаст инфраструктуру и настроит ее, второй и третий доставят продукт на стенд. Единственное, что требуется от оператора, нажимающего кнопку, – это задать несколько переменных пайплайна.
Если говорить о мировых трендах, то в 2021 году много компаний стали переходить на GitOps подход как метод имплементации непрерывной поставки. Мы в ABBYY – не исключение. О GitOps могу посоветовать почитать GitOps and Kubernetes. Continuous Deployment with Argo CD, Jenkins X, and Flux. С ее помощью вы сможете понять, как ускорить процессы доставки их продукта с помощью конкретных инструментов».
Backend. Развитие платформы для low-code продукта ABBYY
Владимир, руководитель направления облачной разработки ABBYY:
«В 2021 году моя команда занималась развитием платформы для нового облачного low-code продукта ABBYY. Платформа предоставляет набор базовых сервисов, таких как аутентификация, хранение документов, отправка почты, а также отвечает за исполнение определенной последовательности действий (workflow).
В ходе разработки платформы мы столкнулись с многими технологическими вызовами, новыми для компании. У ABBYY уже существовали облачные проекты до этого, но они были построены поверх уже существовавших в ABBYY on-prem решений. Новый проект Cloud-native, но при этом использует технологии ABBYY – OCR, NLP, машинное обучение – в качестве подключаемых компонентов.
Одним из ключевых преимуществ нового продукта стала простота настройки системы. Каждая из функций, выполняющихся при помощи технологий ABBYY, оборачивается в самостоятельный компонент (worker). Например, есть worker-ы распознавания, классификации, импорта, экспорта данных и другие. В определении workflow указывается последовательность вызова компонентов (шагов) и перечень передаваемых им данных.
Все это отдельные технологические сервисы, и система тратит определенное время на то, чтобы передать задачу от одного сервиса к другому. Нам удалось обеспечить высокую производительность системы, уменьшая время на выполнение отдельных workflow и увеличивая количество заданий, обрабатываемых одновременно. Мы стремимся оптимизировать работу workflow так, чтобы задержки платформы не превышали десятки-сотни миллисекунд – в зависимости от процесса и общей нагрузки системы.
Конечно, это далеко не все, что нам еще предстоит сделать. В 2022 году мы планируем и дальше совершенствовать платформу, оптимизировать алгоритмы распределения задач и улучшать производительность подсистемы хранения документов».
Frontend. React 17, Webpack 5, CI/CD и Error Tracking
Константин, руководитель Frontend группы:
«Как и вся команда, мы очень рады выходу новой версии нашей облачной low-code платформы для обработки документов. Мы многое сделали для того, чтобы продукт был удобным, понятным и быстрым для наших клиентов. Вот кое-что из значимых событий для Frontend ABBYY в 2021 году:
Переход на React 17 и Webpack 5. Это позволило не только идти в ногу со временем, но и улучшить DX разработчиков. Если говорить о цифрах, то сборочные конвейеры ускорились в три раза – с 30 минут до 10. Холодная сборка стала в два раза быстрее, время сократилось до одной минуты. Кроме того, переход позволил ужать размер приложения в два раза – огромный плюс для наших пользователей.
Внедрение error tracking на Frontend. На мой взгляд, одним из важных маркеров зрелости продукта является внедрение предиктивных средств мониторинга и отслеживания ошибок. Важно, чтобы у разработчиков была возможность исправлять ошибки до того, как клиенты увидят серьезные проблемы в приложении. Кроме того, error tracking позволяет на раннем этапе узнать, насколько деградирует приложение. Если вы еще не внедрили error tracking — сделайте это прямо сейчас!
CI/CD: unit/e2e/image comparation тесты, проверка размера приложения. Во время всеобщей «девопсизации», GitOps и CI/CD важно понимать, что это такое и как оно поможет бизнесу стать лучше, рентабельнее, а пользователям — счастливее. Мы тоже сильно в это вкладываемся и считаем это важным направлением. Со стороны фронтоны мы добавили несколько дополнительных проверок, таких как проверка размера приложения, увеличили покрытие кода тестами, максимально ускорили эти процессы, чтобы это не затягивало принятие pull requests или выкатку релизов. Продолжим переход на CI/CD и в следующем году.
Внедрение PWA: глубокое кеширование ресурсов и установка сайта как приложения. Мы хотели решить проблему долгого отклика от интерфейса и решить проблему сетевого latency. Одним из лучших (и современных!) решений, которое помогло нам этого добиться — это техники разработки PWA. Мы уже внедрили Web Manifest и кеширующий Service Worker, что позволило не только свести в ноль сетевые издержки при инициализации приложения, но и «на сдачу» дать возможность пользователям устанавливать приложение прямо на десктоп. Удобно!
Разработка компонентов через Storybook. Внедрение одной строкой: если у вас очень большое приложение и live (hot) reload уже вызывает сложности — переходите на разработку компонентов на Storybook. Это не только даст нам «автоматическую» документацию, витрину компонентов, но и более быстрый процесс разработки компонентов. Ну и, конечно, добавить на эти компоненты функциональные тесты будет значительно проще :)
Если говорить о мировых событиях, то 2021 для фронтендеров был богат на значимые технологические достижения. Из наиболее важных я бы выделил:
Релиз Next.js 12, изменения в туллинге веб-разработки и новые люди в команде Vercel.
Добавление поддержки multuthreading в Web Assembly и то, как с этим экспериментирует компания Adobe. Последнее – особенно важно, поскольку позволит запускать в вебе по-настоящему сложные приложения а, возможно, и полностью вытеснить десктопные приложения.
Чтобы лучше погрузиться в эту тему, советую посмотреть:
На официальную документацию и компилятор emscripten;
Поиграться с AssemblyScript;
Вспомнить про WebWorkers;
Попробовать по шагам запустить свой первый WASM проект :)».
Mobile. Скрестили мобильный веб и нативный апп – получился мини-апп
Юрий, руководитель мобильной разработки:
«В 2021 году моя команда работала над интеграцией мобильного ввода и нашей облачной платформы для автоматической обработки документов. Для этого потребовалось исследовать технологии iOS App Clips и Android Instant Apps.
Пользователи часто фотографируют документы на телефон и затем пересылают их на почту. Затем уже с десктопа загружают их для распознавания в разные решения, в том числе в платформу ABBYY. У нас есть технологии, которые позволяют предварительно обработать изображение и улучшить его качество перед распознаванием. Этот процесс можно упаковать в специализированное мобильное приложение, но кому захочется заморачиваться с установкой? У нас есть также технология Mobile Web Capture, которая использует язык программирования WebAssembly (wasm) и позволяет обрабатывать изображения документов прямо в браузере. Но через Wasm сильно проседает FPS, к тому же на Android бывают проблемы с фокусировкой мобильной камеры.
Поэтому мы решили попробовать использовать мини-аппы (термин придуман внутри команды). Это приложения с урезанной функциональностью, которые запускаются прямо из браузера и автоматически удаляются из телефона через месяц. У мини-аппов есть доступ к большинству нативного API, но они ограничены по весу: в Android это 15 Мб, а в iOS – 10 Мб. Apple и Google позиционирует их как небольшие приложения для простых задач: сделать заказ в ресторане, оплатить парковку, арендовать самокат, или, например, как триалка к игре. А наша идея состояла в том, чтобы перепрыгнуть из браузера в натив для тяжелых вычислений и низкоуровнего доступа к API камеры телефона.
Зимой 2021 года мы в ABBYY создали первый прототип мини-аппа на базе нашего мобильного SDK. У нас уже были готовые UI-компоненты, которые реализуют сценарий захвата целиком, поэтому прототип “завелся” очень быстро и всех воодушевил. Весной сделали интеграцию с бэкендом, а к лету уже провели масштабное тестирование. Но в ходе разработки пришлось решить ряд проблем. Более подробно об этом расскажем в отдельном посте, если коротко, то вот что мы сделали за этот год:
Во-первых, уменьшили размер SDK и приложения, чтобы вписаться в требования Apple и Google.
Потом проработали UX и помогли убедить пользователя перейти в мини-апп. Дело в том, что в парадигме Apple и Google их запуск не гарантируется. Они лишь опциональное дополнение к веб-сайту, а нам мы бы хотелось пустить по этому пути большинство пользователей и не спугнуть их при этом.
А после того, как пользователь отправил документы, настроили его бесшовное возвращение в браузер. Для этого нет API, потому что Apple и Google не предполагали такой сценарий использования – пришлось придумывать свой вариант.
А еще мы прошли Apple и Google Review, разобрались с тестированием, версионированием, обновлениями, ограничениями на домены. Прошли путь от прототипа до полноценного релиза.
Сейчас мини-апп успешно обрабатывает изображения, но в 2022 году нам еще предстоит решить несколько важных задач. Так, мы хотим добиться того, чтобы мини-аппы запускались на большинстве Android-устройств, а сейчас они частично заблокированы вендорами и требуют дополнительных приседаний или ковыряний в настройках системы. Кроме того, пока захват из видеопотока не обеспечивает идеальное извлечение данных, особенно если работает с очень мелкими шрифтами. Мы хотим добиться хорошего качества не только для документов, удостоверяющих личность, но и для счетов и налоговых форм».
А каким был ваш 2021 год? Есть чем поделиться? Расскажите в комментариях!
Exchan-ge
Это все хорошо.
Но как -то далеко от обычного пользователя.
А что нового было сделано для развития FineReader?