Vaak API Performance Technieken


  Share  
|

Websites zijn ontworpen om te worden benaderd door particulieren, en als zodanig de neiging te vertrouwen op de relatief lage snelheid van de gebruiker om alle prestaties knelpunten te voorkomen. Deze techniek faalt jammerlijk met API's, omdat ze zullen worden verbruikt door andere servers met snelle verbindingen, vaak alleen ontworpen met hun eigen prestaties in het achterhoofd (ze zal niet het cachegeheugen van uw antwoorden voor u, en zal in plaats daarvan doen precies hetzelfde verzoek keer op keer). Het ontwerpen van uw API met de prestaties in het achterhoofd kan helpen om de server snel, zelfs als er veel aanvragen worden gedaan, en zal ertoe bijdragen dat toekomstige hardware-upgrades de gewenste taken kunnen volbrengen.

Opmerking

Veel websites zijn ofwel slecht ontworpen of lijken te ontbreken elke vorm van ontwerp dan ook. Ik heb een site die vereiste 10 database-queries om de pagina te starten, wordt een query voor elk item in hun database. Met meer dan 40 artikelen in hun database, waren er ongeveer 50 queries worden gemaakt elke keer dat de index pagina geladen. Deze techniek was niet verschrikkelijk voor een website die relatief weinig hits. Het zou niet hebben geduurd minuten als het automatisch werd verbruikt, en ik betwijfel of het zou duurde meer dan een paar seconden onder de Slashdot effect. Al deze database-queries werden in feite zinloos als goed, de inventaris van de onderneming veranderd langzaam, dus een statische pagina gegenereerd keer per week uit hetzelfde script zou hebben gefunctioneerd net zo goed voor de eindgebruiker, maar zou geweest zijn verschillende ordes van grootte sneller.

Caching Data

Vaak beide websites en API's verzoek gegevens uit de database iedere keer dat een verzoek is gedaan, hoewel de gegevens die worden gebruikt om de respons veranderingen zelden bevolken. Dit, gecombineerd met de technieken database normalisatie geleerd sinds het begin van de tijd, betekent dat elk van deze aanvragen waarschijnlijk is het maken van ten minste een zoekopdracht toetreding tot de resultaten van meerdere tabellen, eventueel meerdere queries. Als uw gegevens niet aan het veranderen is dat vaak, overwegen caching de respons.

Neem bijvoorbeeld de fictieve Bob's Video website. Elke keer als iemand beide standpunten gedetailleerde informatie over een film op zijn website of het verzoek het door zijn API, zijn server draait drie vragen: een query die de volledige titel van de film, plot lijn, en rating, een andere query met een gezamenlijke query wordt uitgevoerd ophalen vindt gedetailleerde informatie over elk van de cast-leden, en een laatste vraag om te bepalen verhuur status van de film. Dit is een gigantische verspilling van middelen; eens een film wordt uitgebracht, het enige antwoord dat zal veranderen is de verhuur status. Toch, elke keer dat de pagina wordt geladen, wordt de data opnieuw om uit de database. Het zou veel logischer om ofwel een statische pagina te gebruiken voor vrijgegeven films (bevolken huur status dynamisch), of op zijn minst cache alle informatie van de film en ophalen van de huur status dynamisch.

Opmerking

U hebt waarschijnlijk al gemerkt dat, omdat de cache waarschijnlijk zal eindigen in een database, heb ik eigenlijk alleen maar beperkt de query tellen 3-2. Het maakt niet uit als een drastische verbetering, maar het is. De toegetreden query opzoeken van gedetailleerde informatie over de cast leden is er een orde van grootte trager dan een lookup op basis van een primaire sleutel, dus er is een grote besparing daar. U kunt ook de cache van de film gegevens in een vorm die dicht bij haar definitieve webformulier, besparing op de verwerking in het algemeen nodig is om van database webpagina. Je hebt twee caches in dit voorbeeld, een voor de website en een voor de API.

Slimmer Gebruik van databasevragen

Hoewel caching van gegevens is een uitstekende methode voor het verminderen van het aantal vragen die u gebruikt, is het niet altijd nodig. Zorg ervoor dat u de meeste uit elke zoekopdracht die u gebruikt. Vele malen dubbele gegevens wordt gevraagd, terwijl de afhandeling van een enkel verzoek, dit gebeurt vaak wanneer verschillende functies moeten dezelfde gegevens, maar ze doen niets af aan elkaar, zodat ze het niet eens met hun resultaten. Denk ofwel bewerken van uw script om alle benodigde gegevens zelf, dan verkrijgen uit de gegevens doorgeven aan de functies die het nodig hebben, of het creëren van een abstractie laag met een object dat zorgt voor het verkrijgen van informatie uit de databank alleen wanneer dit nodig is.

Zodra u met uw database vragen om hun volle, beginnen werken aan het verbeteren van de snelheid van de vragen zelf. Nooit beginnen queries met SELECT * FROM - aanvraag alleen de velden die u daadwerkelijk nodig hebt. Ook onderzoekt zowel uw vragen en uw database. Probeer ervoor te zorgen dat de velden die u uw keuze baseren op zijn ofwel primaire sleutels of ten minste geïndexeerd door de database server.

Reactie Caching

Overweeg een geval van een Video Store API, waarmee gebruikers informatie op films aanvraag. Met een kleine verandering ontwerp (bewegend verhuur status aan zijn eigen vraag, in plaats van het met elke aanvraag), caching veel nieuwe mogelijkheden aandienen. Omdat de reactie niet los van die daarom vraagt, een proxy-server verandert kan worden gebruikt server-side aan het antwoord (dit handvat is veel makkelijker met REST API's dan met SOAP). Het instellen van de juiste headers voor cache leven (24 uur voor films, en 30 minuten voor verhuur status) zal de API om schouders het grootste deel van zijn werkzaamheden aan de proxy-server.

PHP Accelerators

Er zijn een paar PHP accelerators beschikbaar, kunnen een drastische invloed op de snelheid van uw scripts. Elke keer een PHP script wordt uitgevoerd, is het geparsed en gecompileerd in byte code door scripting engine PHP. Omdat in het algemeen heeft het script niet veranderd tussen executies, dit is een enorme verspilling van verwerkingstijd. PHP versnellers cache van de byte code versie van de scripts, en uitvoeren die kopie (zijnde bewust van eventuele wijzigingen in het oorspronkelijke script). Dit bespaart het ontleden en opstellen stappen elke keer dat het script wordt uitgevoerd, omdat uw API zal worden genoemd met grote frequentie, en veranderde zelden kan dit een aanzienlijke besparing.

Het is belangrijk te beseffen hoe PHP versnellers werken om te voorkomen dat onnodige verwachtingen voor hun resultaten. Beschouw het parsen en compilatie tijd voor een script als vaste kosten - elke keer dat het script wordt benaderd, ongeacht de snelheid van andere middelen (databases, bijvoorbeeld) of hoeveel de verwerking van de afgewerkte script vereist, moeten deze kosten worden betaald. Caching de byte-code kopie van het script alleen bespaart dat kosten, het zal niet de snelheid van uw database query's of andere CPU-intensieve processen.

Een van de meest voorkomende PHP versnellers is van Zend, plichtsgetrouw titel het Zend PHP [4 / 5] Accelerator. Ik vond het makkelijk te installeren en is relatief tevreden met de resultaten. Na een upgrade naar PHP5 kort na de release, was ik niet in staat om andere versnellers die sindsdien beschikbaar test. Een van de andere versnellers ik gelukt om te proberen sigfault'd de roeping Apache proces op een aantal van mijn scripts, dus zorg ervoor dat u test welk gas u uitgebreid voordat het op het productiesysteem.

een artikel afkomstig van Emanuela Hedrick


Share  

© 2005-2010 E-articles.info All Rights Reserved - Terms and conditions