Быстрее загружай
Возможно, вы заметили, что правки передаются на сервер быстрее. Или не заметили, потому что это не особенно тормозило и раньше. На прошлой неделе код сайта osm.org, Rails Port, отстранили от ещё одной части API: загрузки пакетов правок. Ваши пакеты теперь обрабатывает Cgimap.
Cgimap — это программа на C++, которая обрабатывает часть запросов к OSM API. Сайт написан на Ruby on Rails, поэтому каждый запрос к нему проходит через длинную цепочку обработчиков, не всегда оптимальную. Кроме того, передача данных от базы к клиенту в Rails требует много памяти и задействует сборщик мусора, который напрягает систему. Поэтому запрос /map на скачивание данных был переписан на C++ ещё в 2009 году.
Предполагается, что если появится API 0.7, то он целиком будет сделан внутри Cgimap. Мы давно хотим отвязать API от кода сайта, чтобы дневнички и интерактивная карта остались в Rails Port, а запросы к базе были отдельно. Но работа не кипит, скрипт обрабатывает лишь малую часть запросов. Сложным барьером была поддержка авторизации OAuth, но в 2016 году Мэтт Эймос, главный разработчик Cgimap, её сделал. В мае 2018 Mmd приступил и написал обработчик второго по количеству перекачиваемых данных запроса: /upload для отправки пакетов правок на сервер. Только в начале этого года у разработчиков дошли руки подчистить концы, отрефакторить и приступить к тестированию.
Второго марта бета-версию Cgimap 0.7.0 (это версия программы, не API) подключили к dev.osm.org, 28 марта тестирование закончилось и версию отправили в репозитории. Но у Тома, как водится, руки дошли подключить только после третьего напоминания. Пара дней ушла на настройку доступа к базе данных, и с 28 мая пакеты правок обрабатываются сервером быстрее, особенно большие. Поскольку это первый запрос, на котором Cgimap требует аутентификации, в ней нашлись несколько проблем, которые поправили в трёх версиях Cgimap за три дня.
Как это мило автор про себя «Мы»
Автор это не про себя. Эту отвязку постоянно поминают участники OWG и прочие разработчики в обсуждении разных фич и API 0.7 (в основном, в чатиках, поэтому ссылку найти непросто). И cgimap — именно что предвестник такого вот разделения. Предполагается переписать в него весь api, удалить их из Rails Port и подключать cgimap через адаптер cgimap-ruby. Вот пример заметки про это из 2015 года: http://www.asklater.com/matt/blog/2015/11/18/the-road-to-api-07/