CCP Stillman
Привет ребята,
Уже около месяца CCP PrismX, вместе со мной и дежурной командой поддержки (operations team) работает над повышением производительности API. Нам ещё многое предстоит сделать в плане улучшения этого востребованного сервиса, и в конце блога я расскажу о наших планах; но для начала - о том, что уже сделано.
Улучшаем API для всех и каждого
Как ранее написал CCP Zirnitra, мы активно сотрудничаем с некоторыми популярными сервисами, использующими API, дабы оптимизировать использование наших ресурсов. Ранее мы заметили, что некоторые сайты используют некорректные вызовы API, и эти вызовы отнимают массу процессорного времени у вызовов, возвращающих полезные данные. Создателям приложений очень важно удостовериться в том, что API не вызывается с некорректными или устаревшими ключами. Так же очень важно иметь ввиду время кэширования запросов; всё это делает API более доступным для всех игроков.
Как написано в посте, залинкованом выше, мы рассматривали возможность создания "чёрных списков" приложений, которые часто и системно делают некорректные вызовы. Это очень трудное для нас решение, но оно может оказаться необходимым для обеспечения доступности API для всех желающих. Разумеется, мы стараемся, когда возможно, связаться с разработчиками приложений и совместно устранить возникающие проблемы. Мы просим разработчиков приложений, использующих API, публиковать координаты для связи, чтобы, при необходимости, ГМы смогли связаться с вами.
Проблемы с серверами
В последние несколько месяцев мы несколько раз встречались с резким падением времени отклика серверов API. Проблема была решена 2 недели назад: профилирование показало, что задержку вызывало приложение, крутящееся на одном из 6 наших серверов API. После удаления этого приложения время отклика резко упало.
Оптимизации баз данных
Так же мы столкнулись с проблемой блокировки базы данных; что интересно, блокировку вызывала утилита для мониторинга состояния сервера. С помощью фирмы-поставщика утилиты мы смогли решить эту проблему.
Кроме этого, уменьшению времени отклика помог и апгрейд серверов - мы закупили новые дисковые массивы. База данных API теперь использует свой собственный 10-дисковый RAID 10, с винчестерами на 15,000 RPM, работающими через fibre channel.
Здорово. Ещё что-нибудь?
После того, как все срочные проблемы были решены, мы приступили к оптимизации внутренностей API.
Наша система логирования основана на утилите log4net, и позволяет пользователям видеть, какие запросы делаются по их API-ключам. API получает в среднем 17-18 миллионов запросов в день, что выливается в 2-3 гигабайта данных на таблицу в день. Это очень серьёзный объём данных, и каждый день мы вынуждены удалять определённую часть этих данных. Каждый день скрипт удаляет логи старше 7 дней. Мы выяснили, что эта операция вызывает проблемы с временем отклика из-за недостаточного индексирования. Мы решили проблему созданием отдельной таблицы, имеющей все необходимые индексы. Это позволит нам удалять логи без удара по производительности бд. Но с учётом объёма данных, создание таблицы и конвертация данных для неё займёт около 3-4 часов.
Так что для уменьшения необходимого для изменения бд даунтайма, мы не будем переносить данные, а просто удалим все старые логи. Мы понимаем, что это серьёзный шаг, но верим, что изменения стоят того.
В понедельник, 27 сентября, мы удалим все существующие логи доступа. После даунтайма логирование будет возобновлено; логи будут хранится 7 дней.
Что, где, когда?
В понедельник, 27 сентября, во время обычного даунтайма мы выключим сервера API для настройки новой системы логов. Все предыдущие логи доступа будут при этом безвозвратно удалены. Если вам нужны эти логи - пожалуйста скопируйте их себе заранее.
Будущее
Мы готовим для вас ещё много чего интересного, как в плане производительности так и в плане новых возможностей API. CCP PrismX готовит новый релиз API, детали которого он раскроет в следующем девблоге. Следите за новостями.
Счастливо оставаться!
Сообщение отредактировал AllSeeingI: 21 September 2010 - 22:32