Состояние машины
В версии 0.5.0 ServiceComb Pack мы начали использовать модель состояния машины для решения сложных отношений между событиями и состояниями в распределённых транзакциях. Мы рассматриваем Alpha как ящик, который может записывать различные состояния каждой глобальной транзакции. После получения сообщения о транзакции (запуск глобальной транзакции, остановка глобальной транзакции, сбой глобальной транзакции, запуск субтранзакции, остановка субтранзакции, сбой субтранзакции и т. д.) от Omega, Alpha выполняет некоторые действия (ожидание, компенсация, тайм-аут) и переключает состояние.
Распределённые транзакции создают сложные ситуации, и мы надеемся определить состояние машины с помощью чёткого DSL, а также решить проблемы с сохранением состояния машины и распределением. После попытки мы считаем, что Akka — хороший выбор. Давайте вместе рассмотрим эту новую функцию.
Важные обновления
Быстрый старт
С версии 0.5.0 ServiceComb Pack поддерживает режим Saga State Machine. Вам нужно только добавить параметр alpha.spec.names=saga-akka
при запуске Alpha и параметр omega.spce.names=saga
при запуске программы на стороне Omega. Вы можете найти файл docker-compose в docker hub, или вы можете развернуть его следующим образом.
Примечание: после включения режима состояния машины, Saga транзакция будет работать в режиме состояния машины, TCC по-прежнему использует метод базы данных.
Примечание: версия 0,6,0+ программе на стороне Omega не требуется настраивать параметр alpha.feature.akka.enabled=true
.
docker run -d -e "POSTGRES_DB=saga" -e "POSTGRES_USER=saga" -e "POSTGRES_PASSWORD=password" -p 5432:5432 postgres
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.1
java -jar alpha-server-${version}-exec.jar \
--spring.datasource.url=jdbc:postgresql://0.0.0.0:5432/saga?useSSL=false \
--spring.datasource.username=saga \
--spring.datasource.password=password \
--alpha.spec.names=saga-akka \
--alpha.spec.saga.akka.channel.name=memory \
--alpha.spec.saga.akka.repository.name=elasticsearch \
--alpha.spec.saga.akka.repository.elasticsearch.uris=http://127.0.0.1:9200 \
--spring.profiles.active=prd
После включения режима состояния машины мы также предоставляем простой интерфейс управления, где вы можете увидеть показатели производительности Alpha, статистику глобальных транзакций и детали транзакций.
На панели инструментов в верхней части отображается количество уже завершённых глобальных транзакций:
TOTAL: общее количество транзакций; SUCCESSFUL: количество успешно завершённых транзакций; COMPENSATED: количество успешно компенсированных транзакций; FAILED: количество неудачных (приостановленных) транзакций.
Active Transactions: счётчик активных транзакций
COMMITTED: количество успешных транзакций, которые были завершены с момента запуска; COMPENSATED: количество компенсированных транзакций с момента запуска; SUSPENDED: количество приостановленных транзакций с момента запуска.
Активные компоненты транзакций: счётчики компонентов
Events, Actors, Sagas, DB — это группа счётчиков, каждый из которых показывает количество обработчиков каждого компонента обработки в системе Alpha, количество обработчиков до и после обработки, а также среднее время обработки события. Отслеживая эти индикаторы, можно понять текущую производительность и узкие места системы.
События: отображают количество полученных, обработанных и отклонённых событий Alpha, а также среднее время обработки каждого события. Actors: отображают количество событий, полученных состоянием машины, количество обработанных событий, количество отклонённых событий и среднее время обработки каждого события. Sagas: отображают начальное количество глобальных транзакций, конечное количество глобальных транзакций и среднее время обработки каждой глобальной транзакции. DB: отображает количество глобальных транзакций, завершившихся в Elasticsearch, и количество глобальных транзакций, сохранённых в Elasticsearch.
Top 10 Slow Transactions: показывает 10 самых медленных транзакций. При нажатии на них можно увидеть подробную информацию об этих медленных транзакциях. System Info: показывает текущую информацию о системе, JVM, потоках и т.д. Alpha-сервиса.
Обратите внимание: значения индикаторов в Active Transactions сбрасываются после перезапуска.
Список транзакций Saga может отображать все завершённые глобальные транзакции, включая идентификатор службы, идентификатор экземпляра службы, идентификатор глобальной транзакции, количество включённых субтранзакций, время выполнения и окончательное состояние завершения (успешная отправка, успешная компенсация, приостановка). Вы также можете искать конкретную глобальную транзакцию в поле поиска в верхней части и быстро находить её.
Детали глобальной транзакции могут отображать информацию о событиях и субтранзакциях этой глобальной транзакции.
Панель событий: подробная информация о типе события, времени события, идентификаторе службы и идентификаторе экземпляра службы, отправивших событие.
Субтранзакции: панель: идентификатор субтранзакции этой глобальной транзакции, статус субтранзакции, время выполнения субтранзакции и другая подробная информация.
При нажатии на стрелку вниз в правом нижнем углу карточки события можно увидеть информацию о методе компенсации этого события.
Красный текст указывает на то, что получено сообщение о неудаче, и нажатие на красную стрелку справа позволяет увидеть стек ошибок.
Из-за установленного тайм-аута в 5 секунд и отсутствия сообщений о завершении в течение 5 секунд эта транзакция находится в состоянии приостановки.
Поскольку не было получено никаких событий субтранзакции, это не соответствует ожиданиям состояния машины, поэтому красный текст указывает на непредвиденную приостановку.
Необходимо загрузить основной код и скомпилировать версию 0.6.0 самостоятельно.
Зависимость от Kafka и Redis позволяет нам развернуть кластер Alpha с распределённой обработкой. Кластер Alpha основан на Akka Cluster Sharding и Akka Persistence для динамических вычислений и самовосстановления после сбоев.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )