Talks
Below is a list of public talks I've given at various conferences and meetups.[EN]Collaborative Applications at Scale with RSocket
02 October 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 для взаимодействия в реальном времени
В мире, где правит запрос/ответ, клиенты обычно инициируют взаимодействие, тогда как в realtime мире бэкенд должен начать передачу данных, как только данные становятся доступны, не дожидаясь запросов от клиента. Построение таких систем нетривиально для сервисов с большим количеством пользователей, ведь для каждого пользователя бэкэнду необходимо держать открытое соединение и все связанные с ним данные. Вопросы масштабирования и отказоустойчивости в случае realtime сервисов также сложнее обычных REST сервисов.
В Canva мы сделали возможным для наших пользователей взаимодействовать друг другом в реальном времени, построив сервис с помощью RSocket. В этом докладе я опишу, как мы строили сервис, проблемы, с которыми мы столкнулись и сопутствующие решения как с точки зрения кода — использование RSocket на бэкенде и фронтенде, backpressure, мониторинг и отладка, так и с точки зрения инфраструктуры.
[RU]Workshop: Build Bomberman with RSocket
(Oleh Dokuka & Sergey Tselovalnikov)
13 April 2021
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
05 December 2018
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
27 June 2018
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
14 July 2017
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 приложение
15 May 2014
Однажды вы решаете добавить динамики приложению и в вашем Java коде появляется Groovy, либо любой другой скриптовый язык. И Groovy приносит свою магию.
Сначала её мало, но затем её становится все больше и больше! Вместе со скриптами появляется много вопросов - а если?, а как?, а почему?Я расскажу как сделать так, чтобы написание скриптов приносило радость, их поддержка не была болью, а Groovy стал вашим лучшим другом!