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();
}
}