Skip to content

marcus-campos/flowyt-engine-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

O que é?

Conforme a quantidade de microsserviços cresce, também cresce a sua complexidade. Por isso o time da Devyzi desenvolveu um orquestrador baseado em fluxos de processos para tornar mais fácil a visibilidade da distribuição dos fluxos sem a utilização de um orquestrador central.

Por que microsserviços?

Muito se fala em microsserviços atualmente e, neste ambiente complexo e com muita atividades paralelas e automações de processos de negócios, é necessário um serviço de orquestração. Assim, o Flowyt habilita a orquestração entre os serviços e também fornece controle e visibilidade para as interações. Essa habilidade da ao time de engenharia a possibilidade de alavancar os serviços existentes, construir novos fluxos e atualizar os existentes, aumentando assim a velocidade de utilização do fluxo, o que forneceu uma rota efetivamente mais fácil para a adoção da solução.

Começando

Você instalou o Python 3.8.1 e os outros utilitários (pip, virtualenv e git) no seu computador, certo? Caso contrário, vá aqui para instalar.

A primeira coisa que precisamos fazer é criar uma pasta para o seu projeto. Se você quiser fazer isso também, siga estes comandos no seu terminal para criar a pasta projects (essa etapa é opcional):

$ mkdir projects
$ cd projects

Se você precisar de uma revisão da linha de comando, o mkdir cria pastas e o cd acessa a pasta. Se você se perder, seu terminal deve mostrar em qual diretório você está e executando ls (no Mac ou Linux, dir no Windows), listará o conteúdo da pasta em que você está. Use cd .. para fazer o voltar uma pasta.

Baixe na aba releases a versão mais recente do Flowyt compatível com seu sistema, e extraia o conteudo dentro da pasta projects que você acabou de criar:

$ mv orchestryzi.zip projects
$ unzip orchestryzi.zip

Agora, acesse a pasta contendo os arquivos que você extraiu, se necessário dê permissões de execução e execute o orchestryzi:

$ cd orchestryzi
$ chmod +x orchestryzi
$ ./orchestryzi

Caso seja necessário, você pode alterar algumas configurações, para isso copie o arquivo .env.example, renomeie para .env e reinicie o orchestryzi

$ cp .env.example .env
$ ./orchestryzi

Se tudo estiver correto, você verá o seguinte retorno no terminal:


    ____           _               _                  _    
   / __ \         | |             | |                (_)   
  | |  | |_ __ ___| |__   ___  ___| |_ _ __ _   _ _____    
  | |  | | '__/ __| '_ \ / _ \/ __| __| '__| | | |_  / |   
  | |__| | | | (__| | | |  __/\__ \ |_| |  | |_| |/ /| |   
   \____/|_|  \___|_| |_|\___||___/\__|_|   \__, /___|_|   
                                           __/ /           
                                          |___/            
                                                           
                                              By: Devyzi   


 * Check available routes at http://localhost:5000/_workspaces/routes
 * Running on http://localhost:5000/ (Press CTRL+C to quit)

Para ver as rotas disponíveis para uso acesse: http://127.0.0.1:5555/_workspaces/routes

O que são workspaces?

Um workspaces é um grupo de configurações, fluxos e funções que compõe um projeto. Um woskpace padrão tem a seguinte estrutura:

workspaces
│
└───example1
│   │
│   └───config
│   |   │   settings.json
|   |
|   └───flows
|   |   | example_flow.json
|   |
|   └───functions
|   |   | example.py
|   |
|   | routes.json
│   
└───example2
|    │   ...
|
...

Ver alguns exemplos

Como criar um fluxo de trabalho (flow)?

Vamos ver um exemplo muito simples de um fluxo de trabalho

Flow 1

Definição das tarefas

O comportamento de cada fluxo é controlado por seu template. Uma definição de um fluxo fornece parâmetros de controle para cada tarefa. Uma tarefa pode ser do tipo executadora, implementada pela aplicação, ou de sistema, que é executada pelo servidor de orquestração.

Ações

O Ochestryzi fornece ações de sistema fora da caixa, como switchs, requests, declarações, jumps, etc.

Uma ação tem como template o seguinte fragmento em JSON

{
    "id": "1",
    "action": "start",
    "data": {},
    "next_action": "2"
}

Essa estrutura é utilizada para definir o que vai ser executado e qual é a próxima ação a ser executada. No exemplo acima a ação start é onde o fluxo é iniciado, ela tem um id que é necessário para orientar a pipeline a ordem de execução das ações, em seguida o campo action determina qual ação vai ser executada naquele momento e o campo data fornece o modelo de dados utilizado pela ação, e por ultimo e não menos importante, o campo next_action determina qual é a próxima ação a ser executada com base em seu id.

Fragmento em JSON de uma definição de tarefa

{
    "id": "f9033cf9-2336-474f-b785-0c334177dfb3",
    "name": "Github",
    "pipeline": [
        {
            "id": "1",
            "action": "start",
            "data": {},
            "next_action": "2"
        },
        {
            "id": "2",
            "action": "flow_var",
            "data": {
                "url": "${env.baseUrl}/users/${request.qs.user}/repos?sort=updated&direction=asc"
            },
            "next_action": "3"
        },
        {
            "id": "3",
            "action": "request",
            "data": {
                "url": "${flow.url}",
                "method": "get",
                "headers": {},
                "data": {},
                "next_action_success": "4",
                "next_action_fail": "5"
            },
            "next_action": "${pipeline.next_action}"
        },
        {
            "id": "4",
            "action": "response",
            "data": {
                "status": 200,
                "headers": {},
                "data": {
                    "data": "${response.data}"
                }
            },
            "next_action": null
        },
        {
            "id": "5",
            "action": "response",
            "data": {
                "status": 400,
                "headers": {},
                "data": {
                    "msg": "Something went wrong",
                    "data": "${response.data}"
                }
            },
            "next_action": null
        }
    ]
}

Veja a lista de ações disponíveis atualmente e como utiliza-las:

Conceitos chaves