Giter Club home page Giter Club logo

labrhsso-offline-tokens's Introduction

Laboratório para testes de tokens offline

O presente laboratório, tem por objetivo testar uma nova funcionalidade disponível na versão 7.5 do RH-SSO.

A funcionalidade está presente no pull request keycloak/keycloak#7722. A funcionalidade permite que o carregamento de tokens offline ocorra por demanda. Isso melhora substancialmente o tempo de startup do RH-SSO. Quando a sessão do token offline não é encontrada no infinispan, mas encontrada no banco de dados, o RH-SSO dinamicamente importa a sessão no cache.

Preparando o ambiente

Para a configuração, do ambiente usado no laboratório efetuamos o download diretamente do site da RedHat da versão 7.5 do RH-SSO.

Configurando RH-SSO

Para a funcionalidade ser ativada é necessária a execução das seguintes etapas no cli do jboss do RH-SSO:

/subsystem=keycloak-server/spi=userSessions:add()
/subsystem=keycloak-server/spi=userSessions/provider=infinispan:add(enabled=true)
/subsystem=keycloak-server/spi=userSessions/provider=infinispan:write-attribute(name=properties.preloadOfflineSessionsFromDatabase,value=${env.KEYCLOAK_INFINISPAN_SESSIONS_PRELOAD_DATABASE:false})
/subsystem=keycloak-server/spi=userSessions:write-attribute(name=default-provider,value=infinispan)

Os parametros do cli agora passam a observar a variável de ambiente KEYCLOAK_INFINISPAN_SESSIONS_PRELOAD_DATABASE, caso a variável não exista o valor default é false, que desliga o pré carregamento.

Com isso a funcionalidade de pré carregamento de sessões foi desabilitado.

startup

O start-up é feito usando o comando:

rh-sso-7.5.0-server-dist/rh-sso-7.5/bin/standalone.sh

A inicialização do cli é feita pelo comando:

rh-sso-7.5.0-server-dist/rh-sso-7.5/bin/jboss-cli.sh

Script de teste

Para gerar os tokens offline utilizamos o realm master com o client admin-cli. Previamente criamos o usuário administrativo usando a interface web. O usuário criado foi admin com a senha admin.

Para criar os tokens off-line usamos a ferramenta de execução de testes Hey que pode ser obtida em: https://github.com/rakyll/hey.

Abaixo temos o comando utilizado para gerar os tokens:

hey -n <NUM_REQUISICOES> -c <CONCORRENCIA> -m POST \
-d 'client_id=admin-cli&username=admin&password=admin&scope=offline_access&grant_type=password' \
-T 'application/x-www-form-urlencoded' \
'http://localhost:8080/auth/realms/master/protocol/openid-connect/token'

Os parametros NUM_REQUISICOES refere-se a quantidade de tokens que deve ser gerado, e o parametro CONCORRENCIA refere-se a quandos tokens serão gerados em paralelo.

Um comando equivalente o acima em bash puro seria o abaixo:

for i in {1..5000}
do
  echo $i
  curl --silent -d 'client_id=admin-cli' \
  -d 'username=admin' \
  -d 'password=admin' \
  -d 'scope=offline_access' \
  -d 'grant_type=password' \
  'http://localhost:8080/auth/realms/master/protocol/openid-connect/token' > /dev/null
done

Comparativo de startup

Abaixo vemos um comparativo dos tempos de inicialização, o servidor utilizado Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz com 8 processadores e 32 GB de RAM.

Tokens offline start com pré-load start sem pré-load Diferença %
0 30 segundos 22 segundos 36%
1000 32 segundos 26 segundos 23%
5000 42 segundos 30 segundos 40%
10000 1 min e 45 segundos 42 segundos 150%
15000 1 min e 28 segundos 13 segundos 576%
20000 2 min e 37 segundos 14 segundos 1021%
25000 4 min e 14 segundos 19 segundos 1236%

alt text

Resultados Obtidos

Quando a quantidade de tokens offline são grandes demais o RH-SSO pode apresentar problemas na inicialização, por causa do tempo de transação para leitura e carga dos dados no cache infinispan.

Com a desativação do preload de usuários, obtivemos um um tempo praticamente constante no startup do RH-SSO, conforme demonstrado no gráfico acima.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.