Команда разработчиков Twitter объявила о публикации исходных текстов системы распределенной трассировки веб-приложений Zipkin, используемой внутри компании для выявления узких мест в работе сервиса. Zipkin позволяет измерять скорость обработки запросов клиентов в больших распределенных веб-приложениях, собирая статистику скорости ответа с каждого участвующего в обработке запроса компонента. Код опубликован под лицензией Apache 2.0 и включает в себя набор библиотек, реализацию сервера Zipkin и веб-интерфейс.
В основе Zipkin лежит идея, предложенная разработчиками Google для трассировщика Google Dapper. Система работает с реальными запросами, сгенерированными пользователями, однако трассировке подвергаются не все запросы. Компонент системы, установленный на одном из-серверов фронтэндов, выбирает один из запросов и помечает его с помощью специально сгенерированного ключа, который передается вместе с запросом всем остальным сервисам, участвующим в обработке. Получив такой ключ, сервис, с помощью специальной подключаемой библиотеки, генерирует трассировочную информацию и отправляет ее головному серверу Zipkin. В ходе обработки запроса информация со всех сервисов собирается на головном сервере и помещается в базу данных. Результат трассировки можно проанализировать с помощью веб-интерфейса, который включает в себя список всех участвующих в обработке запроса сервисов и временную шкалу с отображением времени ответа того или иного сервиса.
Zipkin позволяет проследить обработку запросов вплоть до отдельных выборок из базы данных и обращений к memcached. Однако, чтобы это стало возможном нужны изменения в инфраструктуре веб-приложения. Код, опубликованный Twitter, включает в себя набор библиотек, позволяющий подключить Zipkin к приложениям, написанных с использованием RPC-библиотеки Finagle, Ruby-клиента, фреймворка Apache Thrift, Scala-библиотеки для работы с SQL БД Querulous и клиентской библиотеки для no-SQL БД Сassandra Cassie.
|