Unificador PAAS (AWS, GCP e Azure) - AnthraxisBR/swoole-fastwork GitHub Wiki

O FastWork tem como um de seus recursos nativos, algo chamado aqui de Unificador PAAS, que tem como propósito, trazer um camada de abtração, acima dos serviços AWS, GCP e Azure, permitindo que o trabalho seja feito em qualquer uma dessas 3 plataformas, sem fazer nenhum alteração de código.

Exemplo:

É possível deletar um item de algum storage, em qualquer uma das plataformas acima apenas chamando:

use AnthraxisBR\SwooleFW\CloudServices\ObjectStorage\ObjectStorage;
use AnthraxisBR\SwooleFW\CloudServices\CloudServices;

$CloudServices = new CloudServices();
$CloudServices->use('AWS'); //Aqui define o provedor do serviço AWS, GCP ou Azure
$service = new ObjectStorage();
$CloudServices->delete($service->setFilename('arquivo.formato')->setTarget('bucket-ou-container'))

O Unificador PAAS, não só permite o uso de ObjectStorage, mas também o uso de todas as ferramentas que podem ser consideradas equivalentes, como :

  • Lambda <> Google Cloud Function <> Azure Function.
  • RDS <> Google Databases <> Azure DB
  • API Gateway <> Endpoints <> API Management
  • EC2 <> Compute Engine <> Azure VM
  • ECS <> Kubernets Engine <> Azure Container Instances

Exemplo 2:

É possível subir um instancia de servidor, em qualquer uma das 3 plataformas, com o mesmo código, sendo o que importa a configuração, se houver necessidade de migrar da AWS para GCp por exemplo, não é necessário alterar nenhum código da infraestrutura.

Esse é o previsato inicial do projeto, e deverá estar pronto até a primeira versão 100% usual.

Service in Tasks

O FastWork preve de forma nativa, um forma de inserir as terefas do Unificador PAAS direto em tarefas para processamento em segundo plano.

public function createS3(TasksManager $TasksManager, Request $request, CloudServices $CloudServices)
{
    $TasksManager->signature('CloudServices@cloudServiceTask');
    return $TasksManager->startCloudServiceTask($CloudServices->willGoToTask($request));
}

Para receber a task, crie:

class CloudServices extends TasksReceiver
{

    public function cloudServiceTask(ObjectStorage $objectStorage)
    {
        return $objectStorage->uploadObject();
    }

}