Talk type: Talk

Unusual Performance Approaches in Ozon Search Engine

Room 3
  • Talk in Russian

Ozon seach Engine O2 is a complex-distributed system based on Apache Lucene. O2 base search operates with tens of millions documents with an approximate number of 14K sparse fields at thousands of RPS.

On the one hand, performance and fault tolerance are achieved by a multi-layered system design involving concepts like physical replication, sharding, the usage of CDN. On the other hand, serving thousands of requests while maintaining our latency and throughput targets would not be possible without getting down to more low-level and local (micro)optimizations specific to our base search service and often peculiar to the JVM runtime which would be quite uncommon for the mainstream Java development.

In this talk, we will study a few unconventional approaches to optimizing the base search performance and discover a few real stories related to them.

The key topics will be:

  • Using code generation to reduce the number of virtual calls on search query execution hot paths.
  • Fighting allocations, ByteBuffer vs VarHandle and allocation-free tuples.
  • Decreasing the number of indirections and random memory accesses.
  • The story on how we dropped performance by the right usage of Objects.requireNonNull(..).

I am also going to share our experience and insight in tracking performance and doing the corresponding researches.


Invited experts