100 likes | 280 Views
Agenda. Opnåede resultater Logging af backendkald Analyse af logs Implementering af caching Demo af prototype Videre arbejde i praksis Logging og analyse i praksis Caching i praksis Eksempel på anden analyse. Resultater for logging.
E N D
Agenda • Opnåede resultater • Logging af backendkald • Analyse af logs • Implementering af caching • Demo af prototype • Videre arbejde i praksis • Logging og analyse i praksis • Caching i praksis • Eksempel på anden analyse
Resultater for logging • En væsentlig bedre placering af ansvaret for logging i forhold til ad-hoc logging • Bedre kvalitet i logging (flere detaljer) • Mindre arbejde ved at implementere i eksisterende applikationer • Minimalt performance impact • Erfaring med dynamic proxy til håndtering af ”cross-cutting concerns”
Resultater for analyse • Bedre og mere automatisk analyse af ”duplicate invocations” end en ad-hoc analyse (fokus på de to ”cases” fra ad-hoc analyserne) • Opbygning af CallSimulator – der giver et grundlag for test af caching • Skabt arkitektonisk grundlag for andre analyser (mere om det senere)
Resultater for caching • Bedre kendskab til caching ”fundamentals” både generelt og i en Java kontekst • En arkitektur der transparent indskyder en central caching for backendkald og isolerer caching implementationen • En effektiv caching af duplicate invocations, som var fokus for prototypen
Demo af prototype • CallSimulator med/uden cache • Skift af strategi/size (learning tests af konfiguration) • Coverage for prototypen
Logging og analyse i praksis • InvocationLogger ville kunne gøres ”stateless” ved fx at logge til Log4J (fx til systemout.log) • Forskellige reporters ville fortsat kunne være observers på InvocationLogger: • En SlowResponseReporter, der fx logger langsomme kald i forhold til et threshold • DuplicateInvocationReporter, ville selv skulle holde state – fx baseret på en intern cache af invocations med timeout på 10 min (en netbank ”session”) • LogAnalyzer er ikke brugbar (kræver state) – men var driver for test og design af Reporters
Caching i praksis • Klassifikation af levetid i cache – data der opdateres løbende fx aktiekurser • En løsning kunne være et CacheableDao interface med en getCacheTimeToLive metode
Caching i praksis (fortsat) • Filtrering af CUD i forhold til caching • En regularexpression filtrering af ”standard” metodenavne (get.*, hent.* delete.*, update.* osv.) • Evt. en metode på CacheableDao – getNoCacheMethodNamePattern • Evt. flere interfaces NonCacheableDao – som efterfølgende kunne anvendes til at vælge en caching strategi i DaoInvocationHandler
Caching i praksis (fortsat) • LiveCacheStatistics (fra Ehcache) • Overvågning af størrelse i memory – kunne bruges til dynamisk at regulere op og ned i størrelse (for fx at beskytte heap) • getCacheMissCountExpired – kunne måske bruges til at styre størrelse på en LFU cache • API til LiveCacheStatistics
Eksempel på anden analyse • Analyse af ”næsten” identiske kald • Motivation – stort spild af ressourcer • Målet – bedre design af ”backend” interfaces • Mulige løsning • gennemløb af indhold på return object med reflection, hvor der laves en simpel optælling af antal ”equals”, der er true i forhold til antal værdier