Video: HPE ProLiant DL380: The world’s best-selling server just got better 2024
Het analyseren van de prestaties is waarschijnlijk een van de meest complexe taken bij het ontwerpen van een toepassing. Het is een onnauwkeurige wetenschap omdat er veel factoren spelen. Deze zijn uitgebreid in Enterprise JavaBeans (EJB) -toepassingen, waarbij de prestaties grotendeels afhangen van de implementatie van de EJB-container die u gebruikt. Waar het op neerkomt, is dat je niet kunt weten of je de juiste beslissingen neemt over de prestaties tot je ze test.
Hieronder volgen enkele problemen waarmee u rekening moet houden bij het beoordelen van prestatieproblemen:
- Niet alle EJB-containers zijn gelijk gemaakt. Hoewel elke EJB-container moet voldoen aan de EJB-specificatie, hebben leveranciers een grote vrijheid bij het implementeren van de EJB-container. Hun eisen zijn gericht op de uitkomsten van operaties, niet op de efficiëntie van een operatie. Sommige leveranciers zullen het beter doen met verschillende delen van een EJB-container. U moet bepalen waar efficiëntieverbeteringen kunnen worden behaald in een EJB-container en waar knelpunten in de prestaties optreden. De enige manier om dat met zekerheid te weten, is door te proberen voordat je koopt. Zelfs nadat u een oplossing hebt aangeschaft, moeten belangrijke ontwerpbeslissingen, zoals het al dan niet gebruiken van EJB-entiteitbonen, worden getest.
- De prestaties kunnen afhangen van de efficiëntie van uw toepassing. Er zijn algemene regels die u kunt gebruiken om te bepalen welke app-ontwerpen beter zijn dan andere. Maar deze richtlijnen kunnen gemakkelijk ongeldig worden gemaakt met een slordige implementatie. De beste manier om slordige implementaties te voorkomen, is door regelmatig codeoverzichten uit te voeren - dat is wanneer u bij al uw codeermedewerkers zit en uw werk laat beoordelen - tijdens uw EJB-project. U moet uw codebeoordelingen richten op het analyseren van de bron en ervoor zorgen dat deze zowel goed ontworpen als efficiënt is. Code-reviews bieden programmeurs een geweldige mogelijkheid om van elkaar te leren.
- Ontwikkel een prototype om uw prestatieaannamen te testen. Dit is een voorbeeldscenario. Als ontwikkelaar van een EJB-applicatie moet u al snel beslissen of u entity-bonen wilt gebruiken om de interactie met een database te beheren. Uw twee basiskeuzes zijn om
• entiteitbonen te maken om de database-interactie te beheren. Entity-bonen kunnen uw database-interactie vereenvoudigen vanuit het perspectief van een applicatieprogrammering. Maar ze kunnen ook een prestatievergoeding eisen. Een deel van die boete kan worden beheerd op de manier waarop u entiteitsbonen implementeert - dat wil zeggen, door lokale interfaces te gebruiken ten opzichte van externe interfaces of door entiteitbonen grofkorrelige objecten te maken.
• Typ JDBC-databasecodes rechtstreeks in sessiebonen en vermijd het gebruik van entiteitbonen helemaal. JDBC kan moeilijker zijn om mee te werken dan het gebruik van entiteitsbonen met persistentie die wordt beheerd door containers. Deze cursus kan ook uw vermogen om te profiteren van EJB-containerbeheerde transacties ondermijnen.
Om te bepalen welke van de twee cursussen meer geschikt is, kunt u een eenvoudige test uitvoeren:
1. Maak een entity bean en een sessieboon die beide bewerkingen uitvoeren op dezelfde set gegevens uit een database.
2. Schrijf een eenvoudig programma dat de hoeveelheid tijd meet die nodig is om een set invoegingen, updates, query's en wijzigingen in de database op te roepen.
Dit tweede programma zou de sessieboon moeten aanroepen voor één test en de entiteit moet een nieuwe test uitvoeren - waarbij dezelfde set bewerkingen op elke test worden uitgevoerd.
3. Analyseer de resultaten om te bepalen of de prestaties een probleem vormen.
Als u een meer verfijnde prestatieanalyse wilt, kunt u afzonderlijke stappen uitvoeren om de duurste bewerking te identificeren en vervolgens deze bewerkingen wijzigen om prestatiewinst te behalen.
Voor een entiteit-bean, wil je misschien de prestaties meten met de volgende bewerkingen:
- Hoe lang duurt het om een verwijzing naar een externe interface of een lokale interface te krijgen?
- Wat is het verschil in prestaties tussen het uitvoeren van een update op een externe interface en een lokale interface?
- Wat is het verschil tussen het bijwerken van meerdere rijen in een database in JDBC en het uitvoeren van een update op meerdere rijen met de startmethode van een entiteitboon?
De antwoorden op deze vragen zullen verschillen van EJB-container tot EJB-container en zullen ook worden beïnvloed door: a) het JDBC-stuurprogramma dat u kiest; b) of u gebruik maakt van pooling van databaseverbindingen; en c) de efficiëntie van uw implementaties van de entiteit bean en de session bean. U zult waarschijnlijk verrast zijn door sommige van de resultaten die u krijgt - testen als deze hebben een manier om uw veronderstellingen over de prestaties van entiteitsbonen uit te dagen.
Maak geen willekeurige wijzigingen als u een EJB afstemt op prestaties. Richt in plaats daarvan uw aandacht op de stappen in de toepassing die het meest kosten in termen van prestaties.
Opmerking: Prestatiemetingen tonen meestal aan dat een bedrijfsproces slechts één of twee punten heeft waarop aanzienlijke verbeteringen kunnen worden aangebracht. Deze constatering is vaak genoeg gemaakt dat dit heeft geleid tot de totstandkoming van de Pareto 80-20-regel. Die regel stelt dat 80 procent van de uitvoeringstijd van een programma te wijten is aan 20 procent van de code. Het is uw doel om vast te stellen welke 20 procent van de code het meest duur is in termen van systeembronnen en u te richten op het optimaliseren van dat gedeelte.