В прошлой статье я рассказал о конкурентной среде в Точке и типовых проблемах, с которыми сталкиваются разработчики. В этот раз речь пойдёт о том, как же можно эту консистентность реализовать и какие злые силы нам могут помешать это сделать. Решил больше не делить статьи на…
150 млн чтений в секунду — итог скрупулёзной инженерии кэша. В этом кейсе Uber — как ужесточить консистентность без удушения записи: инвалидация «по пути записи» из слоя запросов, дедупликация по commit-timestamp из БД, сочетание TTL и CDC на бинлогах, плюс измерение «черствости» через Cache Inspector. Разобраны реальные источники stale-данных (лаг CDC, реплики, негативное кэширование) и компромиссы вроде read-your-writes — с практическими схемами, которые масштабируются до сотен миллионов RPS. Читать кейс
В Java 8 появился новый класс CompletableFuture, который позволяет удобно писать асинхронный код. При использовании CompletableFuture из нескольких потоков я столкнулся с его неочевидным поведением, а именно с тем, что callbacks на нём могут выполнятся совсем не в тех потоках, как ожидалось. Об этом и о…
На Хабре можно найти немало статей, посвящённых оптимизациям поиска кратчайшего пути на графе. Я расскажу ещё про еще один подход. Речь пойдёт о распараллеливании алгоритма A* и исполнении его на двух потоках, а также о сложностях, с которыми я столкнулся при реализации, и их преодолении. Читать далее