Valentin Kovalenko
Server-side software engineer
Concurrency and distributed systems
Technical skills
Main language |
Java |
Second language |
Rust |
Frameworks/libraries |
Netty, Protocol Buffers, JMH, Spring Framework, Hibernate ORM, JUnit, Mockito |
DBMSs |
PostgreSQL, Redis + Sentinel, Cassandra |
Distributed coordination |
ZooKeeper + Curator |
Other |
Maven, Git, Docker, basic front-end knowledge, good understanding of the Java memory model (this presentation may back the claim) |
Work experience
MongoDB / Calgary, Canada (remote)
Senior Java driver engineer / Jan 2021–current
- MongoDB Java Drivers
- my pull requests;
-
implemented a PoC for using gRPC as a "transport" protocol for MongoDB Wire Protocol messages, the most interesting part is
GrpcStream.java
; - designed and implemented a query building API for MongoDB Atlas Search;
-
investigated and fixed an interesting performance degradation caused by fair locking, without blowing up the tail latency;
- implemented a large set of improvements that help
avoiding connection storms;
the most interesting parts are
- implemented a mechanism of limiting the number of connections that can be established concurrently, featuring the connection hand-over mechanism to support fairness;
- refactored read/write retries.
- MongoDB Kafka Connector
- MongoDB Rust Driver
Synopsys / Calgary, Canada
Senior software engineer / Apr 2018–Nov 2020
- Coverity Connect server
(Tomcat, PostgreSQL, Hibernate ORM)—stores and manages issues detected by code analysis tools
-
designed and developed export/import functionality (the technical side is more complex than it sounds) in pair with a colleague, designed and implemented support of this functionality in a cluster environment on my own;
- migrated from JDK 8 to JDK 11, took me about 1.5 months in case you are curious;
- cluster—identified and fixed/mitigated multiple bugs, including replication failures caused by
- incorrect inference of the order of replicated changes, here is my related blog post;
- broken transaction isolation due to incorrect cache strategy;
- incremental updates functionality—allows automatically updating client applications; fixed a number of bugs, optimized the process of downloading updates so that updates that are not needed or have been cached would not be downloaded.
-
ZeptoLab / Moscow, Russia
Senior server-side developer / Jan 2016–Mar 2018
Server-side developer / Dec 2014–Dec 2015
- King of Thieves server
(Netty, ZooKeeper + Curator, Protocol Buffers, Redis + Sentinel, Cassandra, Docker, Ansible, Datadog, Mixpanel)
- joined this project in Aug 2015, 7 months after the global release, and supported it / developed new features until resigning;
- implemented validation and processing of in-app purchases and subscriptions, here is my related blog post;
- implemented automatic data extraction/grouping from Mixpanel and sending it to partners.
- Server and client homegrown frameworks (Netty)
- developed from scratch;
- the server framework is similar to my server project, which is based on it.
- Configuration server (Netty, Hibernate ORM, JGroups, PostgreSQL, Tapestry)—manages
and delivers game configurations to game clients, supports having configurations for split-testing
- redeveloped;
- a couple of dozen projects started using it compared to only a single one before redevelopment.
- Notifications server/client (Netty, ZooKeeper + Curator, JGroups, Protocol Buffers, PostgreSQL)—provides
unified access to major push notification services,
e.g., Amazon Device Messaging, Apple Push Notification Service
- refactored the design as inappropriate usage of ActiveMQ and Quartz Scheduler was causing performance bottlenecks;
- improved the throughput by an order of magnitude;
- when I resigned, this server was used by all ZeptoLab games.
Netcracker / Moscow, Russia
Senior software programmer / Aug 2013–Dec 2014
Software programmer / Apr 2010–Aug 2013
- TELUS Self Service Portal (JMS, WebLogic Server, Oracle Database)
- integrated with Oracle OpenSSO;
- availability—developed functionality allowing front-end servers to persist and later initiate asynchronous execution of tasks on back-ends. This allowed users to use some features of the portal even when back-end servers are temporarily unavailable.
- Data objects, a homegrown persistence library—developed various concurrent caches.
- Implemented OpenID authentication.
- Data migration (Oracle Database, Oracle PL/SQL).
I.T. Information Technology / Moscow, Russia
Implementation engineer / Jul 2008–Apr 2010
IRE RAS / Moscow, Russia
Student / Sep 2006–Jun 2009
Formal education
Moscow Institute of Physics and Technology / Dolgoprudny, Moscow Region, Russia
MSc in applied mathematics and physics / Sep 2007–Jun 2009
BSc in applied mathematics and physics / Sep 2003–Jun 2007