For more than five years I was working on a distributed airline system that processed thousands of transactions per second. Now I work at Codewise focusing on real time big data processing backend powering our SaaS for online marketers. Interested in high volume and low latency services I also help with implementation of microservices in our company. Out of this work comes my quest for more adequate tools, frameworks and libraries that do not break under just moderate load requiring lots of investment in basic infrastructure code.
RxJava is prominent amongst only few options for doing reactive streams in Java. It is different than JDK Streams and CompletableFuture and, while this presentation will cover the differences, it seems to be the best option for coordination asynchronous tasks using simple and powerful api.
In this presentation we will not theorise but open up code editor and take a deep dive into code using RxJava.
First we will write simple application that consumes firehose of tweets directly from Twitter. You will learn how to filter, map and throttle them. Then we will look how asynchronous http client emits events into the stream. After this introduction we will write JavaFx based windowed app for posting tweets with asynchronous autocompletion of @mentions and downloading of profile pictures.
I hope this will be fun and at the end of the presentation we will have a working application.
Measuring right things at right places in an application is not only about good engineering practices and maintaining some vague SLAs. It is foremost about user experience and should impact strategic decisions at highest levels. In order to allocate time for improving performance metrics such as max latency and consistent response times we need to know their accurate value.
The problem with such metrics is that when using popular tools we get results that are not only inaccurate but also too optimistic.
During my presentation I will simulate services that require monitoring and show how gathered metrics differ from real numbers. All this while using what currently seems to be most popular metric pipeline - Graphite together with com.codahale metrics library - and get completely false results. We will learn to tune it and get much better accuracy. We will use JMeter to measure latency and observe how falsely reassuring the results are. We will check how graphite averages data just to helplessly watch important latency spikes disappear. Finally I will show how HdrHistogram helps in gathering reliable metrics. We will also run tests measuring performance of different metric classes
You probably know the mantra that allocation is cheap. It usually is true, but devil is in the details. In your use case object allocation may impact processor caches evicting important data; burn CPU on executing constructor code; impact rates of object promotion to old generation and most importantly increase frequency of stop the word young gen pauses.
This presentation is for you if you are working on a Java based services that need to handle more and more traffic. As number of transactions per second rises you might hit performance wall that are young generation gc stopping whole application for precious milliseconds.
This presentation focuses on optimising object creation rate when dealing with seemingly mundane tasks. I will show few examples of surprising places in JDK and other libraries where garbage is created. We will look into replacements for things such as inefficient and allocating XML, date and number parsers. We will investigate thread locals and object reuse patterns. Finally we will run benchmarks to find out impact of these techniques on performance.