{"id":786,"date":"2019-07-12T15:56:18","date_gmt":"2019-07-12T13:56:18","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=786"},"modified":"2021-03-17T12:50:33","modified_gmt":"2021-03-17T11:50:33","slug":"realizziamo-un-sistema-di-notifiche-serverless-con-amazon-api-gateway","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/realizziamo-un-sistema-di-notifiche-serverless-con-amazon-api-gateway\/","title":{"rendered":"Realizziamo un sistema di notifiche Serverless con Amazon API Gateway"},"content":{"rendered":"

La diffusione capillare del Cloud computing ha portato, negli ultimi anni, ad una adozione massiva del paradigma di sviluppo applicativo \u201ca microservizi\u201d. La rifattorizzazione di applicazioni monolitiche in microservizi permette infatti di sfruttare al meglio alcune caratteristiche intrinseche del Cloud stesso, tra le quali la presenza di molti servizi di tipo <\/span>managed<\/span><\/i>, utili a demandare al Cloud provider la gestione e l\u2019affidabilit\u00e0 di task critici, ma non facenti parte del <\/span>core<\/span><\/i> applicativo.<\/span><\/p>\n

beSharp non fa eccezione: questo processo di rifattorizzazione, infatti, ha coinvolto anche <\/span>Noovolari Smart Backup<\/span><\/a> – il nostro prodotto per la gestione del Backup e Disaster Recovery di infrastrutture AWS.\u00a0<\/span><\/p>\n

A tal proposito \u00e8 stato particolarmente interessante il refactoring del sistema di notifiche interne all\u2019applicazione, che vengono \u201cpushate\u201d all\u2019interno dell\u2019interfaccia web al verificarsi di specifici eventi, come ad esempio la conclusione di un backup job o l\u2019apertura di una sessione di file-level recovery.<\/span><\/p>\n

La soluzione monolitica era basata su Ruby\/<\/span>ActionCable <\/b>e<\/span> Redis <\/b>e accentrava la gestione degli invii di notifiche in un controller dell\u2019applicazione.\u00a0<\/span><\/p>\n

Approfittando del recente rilascio da parte di AWS delle API Websocket per API Gateway, abbiamo deciso di rifattorizzare l\u2019engine di gestione delle notifiche in un microservizio completamente serverless, utilizzando SQS per disaccoppiare l\u2019invio e la ricezione dei messaggi.<\/span><\/p>\n

Sempre recentemente sono stati introdotti i Lambda Layers e la possibilit\u00e0 di scrivere funzioni Lambda in Ruby (il linguaggio principale con cui \u00e8 sviluppato Noovolari Smart Backup); grazie a queste due feature abbiamo potuto riutilizzare buona parte del codice backend originale, mantenendolo pulito e facilmente integrabile in altre applicazioni.<\/span><\/p>\n

Questo approccio ci ha dato diversi spunti tecnici che abbiamo deciso di condividere in questo articolo, creando un piccolo tutorial su come realizzare un microservizio di notifiche completamente Serverless basato sui servizi AWS.\u00a0<\/span><\/p>\n

Tecnologie utilizzate<\/h2>\n

\u00a0<\/span>Per implementare questa soluzione andremo ad utilizzare i seguenti linguaggi e servizi:<\/span><\/p>\n