analyse der microservices eines digitalen marktplatzes...
Post on 05-Nov-2019
12 Views
Preview:
TRANSCRIPT
1
Analyse der Microserviceseines digitalen Marktplatzes
mittels ExplorViz Masterarbeit
Felix Eichhorst
2
3
Einleitung
Grundlagen
Analyse
Entwurf
Implementierung
Evaluation
Live-Demo
4
Einleitung ▹ Motivation
Verständnis von Software zur Laufzeit ist begrenzt.
Foto: Markus Hauser, Copyright: Uni Kiel
Software wird immer wichtiger und komplexer.
Software-Visualisierung durchExplorViz kann Verständnisüber Software bringen.
Trend hin zu mehr verteiltenArchitekturen.
Unterschiedliche Technologien und Kommunikation zwischen den Diensten können nicht ohne weiteres überwacht werden.
?
5
Einleitung ▹ Motivation
spring.io
Spring Boot AnwendungenMicroservice Architektur
Symphony [ˈsɪɱ.fəˌni]:Plattform für Vermarktung, Verwaltung, Wartung und Störungsmanagement von IKT Diensten verschiedener Hersteller.
„Warum adesso?“
6
Einleitung ▹ Motivation
- Wie kann ExplorViz in Zukunft mit unterschiedlichen Technologien umgehen?
- Wie kann ExplorViz in Zukunft verteilte Kommunikation erfassen?
✓ Verwendung des Kieker Monitoring-Frameworks
7
Einleitung ▹ Ziele
Z1: Visualisierung der Microservices von Symphony durch Kieker und ExplorViz Z1.1: Technische Gegebenheiten prüfen (Analyse) Z1.2: Erstellen eines Entwurfs, inkl. verteilter Kommunikation Z1.2: Implementierung des Entwurfs
Z2: Evaluation des Mehrwertes einer Visualisierung durch ExplorViz für Entwicklerinnen und Entwickler
8
Grundlagen: AspectJ
- Aspektorientierte Erweiterung für Java - Löst übergreifende Belange ohne Modularität zu zerstören
@Aspectpublic class PersonActivityLogger {
@Pointcut(“execution(* Person.*(..)”)public void anyPersonActivity() {}
@Before(“anyPersonActivity()”)public void beforeAnyPersonActivity(JoinPoint joinPoint) {
logger.info(“Execution: ” + joinPoint.getSignature().getName());}
}
123456789
1011
Aspe
kt
Join Point
Poin
tcut
Advi
ce
9
Analyse ▹ Aufbau von Symphony
Frontendproxy8081
Marketingservice8084
Searchservice8082 Authservice
8083
Ratingservice8089
Usageservice8086
Configservice8087
Serviceservice8088
10
Analyse ▹ Aufbau von Symphony
1 RestTemplate restTemplate = new RestTemplate(); 2 ProductInformation productInfo = restTemplate.getForObject(url, ProductInformation.class) 3 4 println "Produktinformationen fuer " + productInfo.getName() + " erhalten."
1 @RestController 2 @RequestMapping(value='marketing') 3 class ProductController { 4 @RequestMapping ( 5 value='/products/{id}', method=RequestMethod.GET, produces='application/json' 6 ) 7 Product getProduct( @ApiParam(required=false) @PathVariable String id { 8 Product product = this.productRepository.findProduct(id) 9 ... 10 return product 11 } 12 }
Eingehende Kommunikation über HTTP
Ausgehende Kommunikation über HTTP
11
Analyse ▹ Monitoring mit Kieker
M
M
M
MM
M
M
z.B. AOP-basierteÜberwachung
Monitoring Log/Stream
z.B. Dateisystem, Datenbank, Middleware
z.B. Trace-Information, Auslastung, Antwortzeiten, Ressourcennutzung
Monitoring Record
Kieker.Monitoring Kieker.Analysis
Analysis Plug-In
z.B. Architekturrekonstruktion, Performanzanalyse, Fehlerdiagnose
Kieker.Monitoring
Monitoring Probe
Monitoring Controller
Monitoring Writer
Kieker.Analysis
Monitoring Reader
Analysis/Visualization
Plugin
AnalysisController
Eingedeutscht, von http://kieker-monitoring.net/
12
Analyse ▹ Analyse und Visualisierung mit ExplorViz
InsertionRepositoryPart
RemoteCallRepositoryPart
insertSentRecord(…)
LandscapeRepositoryModel
insertIntoModel(…)
LandscapeRepositorySink
processRecord(..)processRecord(..)
IRecordIRecordIRecordIRecord
Trace
IRecordIRecordIRecordIRecord
SystemMonitoringRecord
Trace
Trace
BeforeReceivedRemoteCallRecord
BeforeSentRemoteCallRecord
Darstellung von verteilter Kommunikation in ExplorViz ist bereits möglich.
13
Analyse ▹ Übertragung der Daten von Kieker zu ExplorViz
InsertionRepositoryPart
RemoteCallRepositoryPart
insertSentRecord(…)
LandscapeRepositoryModel
insertIntoModel(…)
LandscapeRepositorySink
processRecord(..)processRecord(..)
IRecordIRecordIRecordIRecord
Trace
IRecordIRecordIRecordIRecord
SystemMonitoringRecord
Trace
Trace
BeforeReceivedRemoteCallRecord
BeforeSentRemoteCallRecord
M
M
M
MM
M
M
z.B. AOP-basierteÜberwachung
Monitoring Log/Stream
z.B. Dateisystem, Datenbank,Middleware
z.B. Trace-Information, Auslastung,Antwortzeiten, Ressourcennutzung
Monitoring Record
Kieker.Monitoring
Kieker.Monitoring
Monitoring Probe
Monitoring Controller
Monitoring Writer
External Monitoring Logs Adapter
KiekerToExplorVizWriter
offline
online
14
Entwurf ▹ Monitoring mit Kieker
Kieker Events ExplorViz Event-RecordsBeforeConstructorEvent BeforeConstructorEventRecordAfterConstructorFailedEvent AfterFailedConstructorEventRecordAfterConstructorEvent AfterConstructorEventRecordBeforeOperationEvent BeforeOperationEventRecordAfterOperationFailedEvent AfterFailedOperationEventRecordAfterOperationEvent AfterOperationEventRecord- BeforeSentRemoteCallRecord- BeforeReceivedRemoteCallRecord
BeforeSentEvent
BeforeReceivedEvent
Neue Events für Kieker
Erstellen neuer Events für Kieker für verteilte Kommunikation
15
Entwurf ▹ Monitoring mit Kieker
Kieker Events ExplorViz Event-RecordsBeforeConstructorEvent BeforeConstructorEventRecordAfterConstructorFailedEvent AfterFailedConstructorEventRecordAfterConstructorEvent AfterConstructorEventRecordBeforeOperationEvent BeforeOperationEventRecordAfterOperationFailedEvent AfterFailedOperationEventRecordAfterOperationEvent AfterOperationEventRecord- BeforeSentRemoteCallRecord- BeforeReceivedRemoteCallRecordBeforeReceivedEvent
Neue Events für Kieker
Wie erhalten wir im BeforeReceivedEvent die Trace-ID des Senders?
BeforeSentEvent
BeforeReceivedRemoteCallRecordcallerTraceId callerOrderIndex traceId orderIndex
BeforeSentRemoteCallRecordtechnology traceId orderIndexÜbertragung der Daten im
HTTP-Header
16
Entwurf ▹ Monitoring mit Kieker
service(HttpServletRequest, ..)processRequest(HttpServletRequest, ..)
doService(HttpServletRequest, ..)
doDispatch(HttpServletRequest, ..)
DispatcherServlet
getForObject(..)execute(..)
doExecute(..)
createRequest(..)
RestTemplate
return ClientHttpRequest
Neue Probe für Kieker
Instrumentieren der Methode createRequest Instrumentieren der Methode service
17
Entwurf ▹ Übertragung der Daten von Kieker zu ExplorViz Offline-Übertragung
FSReader
KiekerImporter
AnalysisController
KiekerToExplorVizTransformFilter
FSReader
FSReader
KTEVTF
GenericExplorVizExternalLogAdapter
<<erstelle>> <<erstelle>>
KTEVTF
appName
IEventRecord
connect(..)
send…Record(..)
MonitoringControllersendOutBuffer(…)
ExplorViz
KiekerLog
FSReader
KiekerImporter
AnalysisController
KiekerToExplorVizTransformFilter
FSReader
FSReader
KTEVTF
GenericExplorVizExternalLogAdapter
<<erstelle>> <<erstelle>>
KTEVTF
appName
IEventRecord
connect(..)
send…Record(..)
MonitoringControllersendOutBuffer(…)
ExplorViz
KiekerLog
sendBeforeSentRecord(..)sendBeforeReceivedRecord(..)
FSReader
KiekerImporter
AnalysisController
KiekerToExplorVizTransformFilter
FSReader
FSReader
KTEVTF
KiekerToExplorViz
GenericExplorVizExternalLogAdapter
<<erstelle>> <<erstelle>>
KTEVTF
applicationName
systemName
ipaddress
programmingLang
applicationName
systemName
ipaddress
programmingLang
appNametoolName
IEventRecord
KiekerToExplorVizMetaDataRecord
connect(..)
send…Record(..)
MonitoringControllersendOutBuffer(…)
ExplorViz
KiekerLog
sendBeforeSentRecord(..)sendBeforeReceivedRecord(..)sendHostApplicationMetaDataRecord(..)
18
Entwurf ▹ Übertragung der Daten von Kieker zu ExplorViz Online-Übertragung
KiekerToExplorVizWriter
Kieker ExplorVizKiekerToExplorViz
Writer MonitoringControllerKieker
kieker.monitoring.properties
sendOutBuffer(…)ExplorViz
19
Implementierung ▹ Monitoring mit Kieker
15 @AfterReturning(pointcut = "requestCreation()", returning = "request") 16 public void doBeforeRequestCreation(ClientHttpRequest request) { 17 long traceId = TRACEREGISTRY.getTrace().getTraceId(); 18 int orderIndex = TRACEREGISTRY.getTrace().getNextOrderId(); 19 20 HttpHeaders headers = request.getHeaders(); 21 22 headers.add("kieker-traceId", Long.toString(traceId)); 23 headers.add("kieker-orderIndex", Integer.toString(orderIndex)); 24 25 CTRLINST.newMonitoringRecord(new BeforeSentEvent(TIME.getTime(), traceId, orderIndex, "REST")); 26 }
8 @Pointcut("execution(* * org.springframework.http.client.support.HttpAccessor.createRequest(..))") 9 private void requestCreation() {} 10 11 @Pointcut("execution(* * org.springframework.web.servlet.FrameworkServlet.service(..))") 12 private void frameworkServletService() {}
20
Implementierung ▹ Monitoring mit Kieker
28 @Before("frameworkServletService() && args(request, ..)") 29 public void doBeforeDispatcherService(HttpServletRequest request) { 30 String traceIdStr = request.getHeader("kieker-traceId"); 31 String orderIndexStr = request.getHeader("kieker-orderIndex"); 32 if (traceIdStr != null) { 33 try { 34 long traceId = Long.parseLong(traceIdStr); 35 int orderIndex = Integer.parseInt(orderIndexStr); 36 37 if(TRACEREGISTRY.getTrace() == null) { 38 TRACEREGISTRY.registerTrace(); 39 } 40 CTRLINST.newMonitoringRecord(new BeforeReceivedEvent( TIME.getTime(), traceId, orderIndex, TRACEREGISTRY.getTrace().getTraceId(), TRACEREGISTRY.getTrace().getNextOrderId() )); 41 } catch (final NumberFormatException exc) {} 42 } 43 }
21
Evaluation
Entwickler/innen können mit der Landschaftsansicht von ExplorViz Fragen zur Softwarelandschaft von Symphony schneller beantworten als Entwickler/innen, die eine IDE verwenden.
Entwickler/innen können mit der Anwendungsansicht von ExplorViz Fragen zu den einzelnen Microservices von Symphony schneller beantworten als Entwickler/innen, die eine IDE verwenden.
Die zeitliche Verbesserung durch Nutzung von ExplorViz gegenüber der Nutzung einer IDE fällt bei unerfahrenen Entwickler/innen am größten aus.
H1:
H2:
H3:
Forschungs-Hypothesen
22
Evaluation Experiment
Icons erstellt durch Freepik un Roundicons von Flaticon
IntelliJ IDEA
ExplorViz + Fragebogen
+ Fragebogen
Vers
uchs
- gr
uppe
Kont
roll-
gr
uppe
23
Evaluation Experiment
Frontendproxy8081
Searchservice8082
Ratingservice8089
Authservice8083
Marketingservice8084
Szenario: Produktauswahl in der Produktliste
24
Evaluation Fragen und Ergebnisse
Überblick über die Softwarelandschaft
Überblick über die einzelnen Microservices
Verständnis der Kommunikation innerhalb der einzelnen Microservices
Verständnis der verteilten Kommunikation
25
Evaluation Fragen und Ergebnisse
Überblick über die Softwarelandschaft
Über welchen Port kommuniziert der Authservice?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
50 Sek 56 Sek 100 % 56 Sek 37 Sek 100 %
Welchen Port würden sie einem neuen Microservice zuweisen?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
53 Sek 32 Sek 100 % 88 Sek 44 Sek 90 %
Gibt es Microservices, die über den gleichen Port kommunizieren?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
34 Sek 39 Sek 100 % 96 Sek 19 Sek 100 %62 Sek Differenz
35 Sek Differenz
6 Sek Differenz
26
Evaluation Fragen und Ergebnisse
Überblick über die einzelnen Microservices
Betrachten Sie den Searchservice. In welchem Paket liegt die Klasse ReindexTaskQueue?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
194 Sek 64 Sek 100 % 118 Sek 60 Sek 100 %
Welche Klassen befinden sich im Paket ..symphony.frontendproxy.product.model.search?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
78 Sek 20 Sek 100 % 69 Sek 15 Sek 90 %76 Sek Differenz 9 Sek Differenz
27
Evaluation Fragen und Ergebnisse
Verständnis der Kommunikation innerhalb der einzelnen Microservices
Versuchen Sie kurz zu beschreiben, was die Aufgabe vom AuthWrapper im Searchservice ist.
ExplorViz IntelliJ IDEAØ σ Ø σ
alle Antw. 351 Sek 138 Sek 193 Sek 88 Seknur gute Antw. 392 Sek 119 Sek 229 Sek 82 Sek
Sortieren Sie die Klassen des Authservice nach deren ersten Auftretens beim Login. ersten Auftretens. ExplorViz IntelliJ IDEA
Ø σ C Ø σ C481 Sek 227 Sek 60 % 555 Sek 524 Sek 30 %
Ermitteln Sie die Methoden- und Klassennamen im Sequenzdiagramm zum Produktaufruf.
ExplorViz IntelliJ IDEAØ σ C Ø σ C
551 Sek 165 Sek 86,7 % 531 Sek 336 Sek 66,7 %
DispatcherServlet RatingServiceRestController
increaseClicks(..)
AuthWrapper ProductPopularity
<<create>>
RatingService
<<return clicks>><<return clicks>>
<<return clicks>>
<<return clicks>>
2
4
5
6
getIdentifier(..)
getPasswordHash(..)
1
3
~160 Sek Differenz74 Sek Differenz
28
Evaluation Fragen und Ergebnisse
Verständnis der verteilten Kommunikation
Nennen Sie drei Microservices, die mit dem Searchservice kommunizieren.
ExplorViz IntelliJ IDEAØ σ C Ø σ C
58 Sek 27 Sek 100 % 103 Sek 59 Sek 95 %
Über welche Technologie kommuniziert der Ratingservice mit dem Authservice?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
36 Sek 40 Sek 100 % 53 Sek 65 Sek 80 %
Gibt es Microservices, die nur aufgerufen werden, selbst aber nie einen anderen aufrufen?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
137 Sek 73 Sek 80 % 114 Sek 158 Sek 80 %
Welche Klasse des Searchservice ist als letzte an ausgehender Kommunikation beteiligt?
ExplorViz IntelliJ IDEAØ σ C Ø σ C
289 Sek 246 Sek 80 % 182 Sek 140 Sek 40 %
45 Sek Differenz 17 Sek Differenz
23 Sek Differenz
29
Evaluation Fragen und Ergebnisse
Persönliche Meinung
Bewertung Sehr leicht Leicht Eher leicht Eher schwer Schwer Sehr schwerNumerischer Wert 1 2 3 4 5 6
ExplorViz IntelliJ IDEAdie Arbeit mit der Arbeitsumgebung? 3 2,6das Lösen der Aufgaben mit der Arbeitsumgebung? 3 3,4der Überblick über die Microservices? 1,8 3,8das Zurechtfinden in den Microservices? 2,6 2,6das Verstehen des Zusammenhangs zwischen den Microservices? 3 4das Folgen des Programmablaufs in den Microservices? 3,2 3,4
Wie einfach fiel Ihnen
30
Implementierung ▹ Demo
Fazit & Live-Demo
31
Vielen Dank
top related