Met de combinatie van Laravel en AWS houdt je de hoge load op bestaande servers zo minimaal mogelijk. Benieuwd hoe wij dit aangepakt hebben. Lees dan snel verder, want developer Kevin vertelt je er alles over in zijn blog naar aanleiding van de Automatische Copyright Checker die wij onlangs ontwikkeld hebben.

Automatisch copyrights checken

Wij kregen de vraag om oplossing te bouwen waarmee onrechtmatig gebruik van foto’s op het internet gedetecteerd kan worden. Dit alles met het doel om automatisch complete dossiers aan te maken, die direct naar de juristen en gerechtsdeurwaarder kunnen.



Fundamentele elementen

Elk project is anders en vereist daarom een verse blik op de mogelijk te gebruiken technieken. Met het aantal foto’s (minimaal 100.000) waarvan we regelmatig moeten kijken of ze onrechtmatig worden gebruikt, zijn wij op onderzoek uitgegaan naar welke tools we moeten inzetten om dit goed en efficiënt te kunnen doen. Er zijn drie fundamentele elementen die dit project nodig heeft. Het scannen naar detecties (mogelijke inbreuken op auteursrecht), het maken van screenshots als bewijs en het doorsturen van de detecties voor onrechtmatig gebruikte foto’s naar de gerechtsdeurwaarder.

Bepalen van de juiste technieken

Het automatiseren van business logic doen we dagelijks, veelal via Laravel framework. Dit was dus een makkelijke keuze, omdat we ons in Laravel thuis voelen, alle ins- en outs kennen en we daardoor makkelijk en snel kwaliteitsproducten kunnen opleveren. Het internet scannen naar foto’s en het maken van screenshots was voor ons nieuw. Na wat onderzoek bleek dat deze twee elementen meer nodig hadden dan alleen een applicatie om de business logic af te handelen.

Een call om foto’s te detecteren kan soms heel lang duren, dit kan afhangen van het formaat van de foto en hoeveel deze foto op internet gebruikt wordt. Voor het maken van screenshots moet je een webbrowser kunnen draaien om vervolgens een screenshot te kunnen maken. Wanneer je periodiek 100.000 foto’s moet scannen kan je je voorstellen dat dat nogal een extra load geeft op onze bestaande servers.

We zouden bijvoorbeeld de servercapaciteit kunnen verhogen en een extra server kunnen plaatsen voor de afhandeling van web detectie en het maken van screenshots, maar dit voelde niet als de juiste manier. Het zou een gok zijn omdat we nog niet exact weten wat het met de server gaat doen wanneer we deze acties uitvoeren. Daarom zijn verder gaan zoeken naar oplossingen.


AWS Lambda

Bij DIJ zijn we constant opzoek naar nieuwe technieken, zo zijn we al een tijdje bezig met AWS (Amazon Web Services). Samen met gespecialiseerde collega’s zijn we in gesprek gegaan om te ontdekken wat AWS voor ons zou kunnen betekenen in deze business case. We kwamen uit bij AWS Lambda.

“AWS Lambda is een evenement gestuurd, serverloos computerplatform dat door Amazon wordt geleverd als onderdeel van Amazon Web Services”

Dit betekent concreet dat we onze bestaande servercapaciteit niet hoeven te verhogen en ook geen extra server hoeven te plaatsen. Onze opdrachtgever hoeft dus niet direct extra kosten te maken. Met het oog op de toekomst hebben we er voor gekozen om deze intensieve processen bij AWS Lambda onder te brengen, maar hoe ziet dit er uit?


Wat hebben we precies gebouwd?

We hebben twee Lambda functies gebouwd: een functie die internet afzoekt naar foto’s en een functie die screenshots maakt. Hier hebben we een Laravel applicatie bij gebouwd die alle business logic afhandelt. In onze Laravel applicatie kan een Excel document met afbeelding url’s worden geüpload, die wij vervolgens opslaan in een AWS S3 Bucket. S3 is een bestand opslag service van AWS. Door deze foto’s direct bij AWS op te slaan hebben we geen extra uitbreiding nodig op de schijfruimte van de server en kunnen we deze foto’s direct benaderen vanuit onze Lambda functie om internet af te zoeken.

De voordelen daarvan zijn:
•   Minder schijfruimte nodig op de server
•   Minder dataverkeer tussen de Lambda functie en onze server

Wanneer we deze foto’s hebben opgeslagen roepen we de Lambda functie aan om internet af te speuren naar deze geïmporteerde foto’s. Niet overal waar een foto gevonden wordt vindt direct een inbreuk plaats, dus deze filteren we er meteen uit. Alle overgebleven detecties sturen we terug naar onze Laravel applicatie door middel van een webhook. We roepen de Lambda screenshot functie aan om vervolgens een screenshot te maken van de detectie. Deze screenshot functie slaat de screenshots weer op in een AWS S3 Bucket en stuurt een webhook naar onze Laravel applicatie om de screenshots te koppelen aan de hiervoor doorgestuurde gedetecteerde inbreuk.

Deze Lambda functies moeten natuurlijk beheerd worden. Dit doen we door onze infrastructuur vast te leggen in code, meer hierover kan je lezen in ons blog artikel: Infrastructure as code: begin er gelijk mee zodra je applicatie naar de Cloud gaat

Het resultaat?

De cirkel is rond! We krijgen lijsten binnen met mogelijke inbreuken en die kunnen we opsturen naar de juristen. Die kunnen direct aan de slag met deze lijsten. Dat scheelt hen heel veel kostbare tijd, want nu hoeven ze zelf niet meer handmatig op zoek naar mogelijke zaken.

We zijn echt begonnen bij het begin, hebben grondig onderzoek gedaan en hebben vervolgens de functionele eisen van onze opdrachtgever verwezenlijkt in een nieuw product waardoor er weer een stukje business logica geautomatiseerd is.

Wil je meer weten? Mail me gerust of meld je aan voor ons Digitale Spreekuur!


Geschreven door: Kevin Pijning

Meer kennis bijspijkeren? Kom dan naar onze Meetup: Ode aan de Code!

Bekijk onze Meetups

Wij zijn altijd op zoek naar getalenteerde vakgenoten!

Bekijk onze vacatures