Talks

Below is a list of public talks I've given at various conferences and meetups.

[EN]
Collaborative Applications at Scale with RSocket

02 September 2021
At Canva, we enabled our users to collaborate with each other by introducing services that support bidirectional streaming with RSocket. Building such a system is difficult when the number of clients is large because every client must maintain a connection to the backend service. The scaling and reliability considerations are significantly more complex than a request-response based system. This talk discusses the challenges that we faced building these services, and the solutions we came up with. The talk will go over the application challenges, including transport concerns, client configuration, and observability, as well as the infrastructure challenges, including load balancing and application configuration to support a large number of concurrent users.

[RU]
Построение сервисов с RSocket для взаимодействия в реальном времени

26 February 2021
В мире, где правит запрос/ответ, клиенты обычно инициируют взаимодействие, тогда как в realtime мире бэкенд должен начать передачу данных, как только данные становятся доступны, не дожидаясь запросов от клиента. Построение таких систем нетривиально для сервисов с большим количеством пользователей, ведь для каждого пользователя бэкэнду необходимо держать открытое соединение и все связанные с ним данные. Вопросы масштабирования и отказоустойчивости в случае realtime сервисов также сложнее обычных REST сервисов. В Canva мы сделали возможным для наших пользователей взаимодействовать друг другом в реальном времени, построив сервис с помощью RSocket. В этом докладе я опишу, как мы строили сервис, проблемы, с которыми мы столкнулись и сопутствующие решения как с точки зрения кода — использование RSocket на бэкенде и фронтенде, backpressure, мониторинг и отладка, так и с точки зрения инфраструктуры.

[RU]
Workshop: Build Bomberman with RSocket (Oleh Dokuka & Sergey Tselovalnikov)

The workshop is aimed at developers of microservices and distributed systems who are interested in getting to know RSocket-Java and RSocket-JS closely in practice, trying different features of these technologies, and understanding their use for building fast and fault-tolerant systems. In this workshop, you will encounter RSocket-JS on the browser side and develop some of the logic related to interacting with remote players, as well as an intermediate server. You will also create a clustering and sharding mechanism that allows players to connect in the same game space. You will have the opportunity to evaluate the possibility of changing transport to achieve more efficient interaction between the client-server and the server-server.

[EN]
Why we should care about clocks

As software developers, each of us relies on the notion of time: a crucial concept in ensuring that events in our programs follow a chronological order. Yet, invoking a simple call to “get the current time” can potentially yield unexpected results and lead to unforeseen consequences if not used correctly. Moreover, the invariants about time we observe on our local development machine may not necessarily hold in the cloud, or in any distributed system. In this talk, I’ll go through the different ways we can obtain the current time in our programs, and present cases where our intuitions and expectations of time from these clocks may mislead us, at best, and cause unintended errors at best or catastrophic failures, at worst.

[EN]
Distributed Tracing - Know Your Enemy

Modern web applications consist of multiple services often deployed on hundreds of different machines. This allows them to be scalable, evolve quickly, deploy often. However, these distributed architectures contain new challenges for debugging. Luckily for us, there is a solution - distributed tracing. In this talk, I'll go through the experience of integrating distributed tracing at Canva, the decisions we made and the challenges we faced.

[EN]
Fantastic DSLs and Where to Find Them

Kotlin is a very rich language. Unlike many other languages, it allows building another language inside itself. For example, mimic HTML syntax or construct completely typed SQL query. But Kotlin's power isn't limited to simple DSLs. With some Kotlin-fu, it's possible to write a DSL that allows working on untyped data structures in a typed manner. In this talk, we'll go through different ways to define a DSL in Kotlin, from very simple to fantastically powerful.

[RU]
Как не наступить на грабли, внедряя скрипты в java приложение

Однажды вы решаете добавить динамики приложению и в вашем Java коде появляется Groovy, либо любой другой скриптовый язык. И Groovy приносит свою магию. Сначала её мало, но затем её становится все больше и больше! Вместе со скриптами появляется много вопросов - а если?, а как?, а почему?Я расскажу как сделать так, чтобы написание скриптов приносило радость, их поддержка не была болью, а Groovy стал вашим лучшим другом!