Rust, бесспорно, интересный язык. Но тут проблема курицы и яйца. Пока на нем никто не пишет, нет инструментов и вакансий. Пока нет инструментов и вакансий, это никому не интересная игрушка. А то что плагин медленно пишется — ну так вы автору занесите, может разработка и ускорится. Racer хотя бы прикрутит, уже прогресс огромный будет.
Есть подозрения, что ближайшие лет 5 это не бизнес приоритетная задача ))) Точно не более приоритеная, чем нормальная поддержка скажем Haskell. Но тут энтузиастом пилится плагин для Rust github.com/Vektah/idea-rust
Ой, а каким хоткеем в QtCreator посмотреть тип? Я читал их шпаргалку по хоткеям и не нашел. Может посоветуете туториал какой-нибудь или иного рода учебный материал по этой теме?
Я смотрю, CLion знает типы переменных, отображает их при нажатии Ctr+Q. А нельзя ли также сделать отображение типа без документации через Alt+=? У меня, как, вероятно, и у многих других пользователей продукции JetBrains, мышечная память на него :) И еще вопрос. Планируется ли добавить полноценный вывод типа для auto переменных? Сейчас это работает только в обычном коде, но не в шаблонах i.imgur.com/uvxCWXM.png
Ребят, вы извините меня пожалуйста, но этот сайт где вы предлагаете зарегистрироваться и подать заявку на доклад ни на что не годится. Хотел зарегистрироваться. Пришло письмо. Заполняю форуму, говорят «ой, а пользователь с таким email уже есть». Зачем было слать письмо на регистрацию тогда? Ок, кликаю по ссылке на профиль — 404. Хм… Ок, жму восстановить пароль, приходит письмо с линком, все ОК. По линку предлагают ввести новый пароль дважды и (!) текущий пароль, который я блин не помню. Ок, оставляю это поле пустым, может прокатит. Получаю 502 Bad Gateway. Не смог ни зарегистрироваться, ни подать заявку на доклад в итоге :(
Касательно ручного шардинга PostgreSQL. Судя по отзывам, неплохо работает схема вроде следующей.
Определяете, по какому ключу шардите. Например, это id пользователя. Заводите множество небольших БД, каждая, например, ровно на 1000 пользователей. База 1 держит пользователей 1-1000, база 2 — пользователей 1001-2000 и так далее. Если в БД уже есть 1000 пользователей, заводите новую. Один сервер PostgreSQL держит несколько баз, в зависимости от крутости железа и числа запросов к этим БД. Если нагрузку сервер больше не держит, заводите новый сервер. При обновлении сервера в поднятый на нем PostgreSQL можно перенести бОльшее число баз. Для определения какая БД на каком сервере лежит используется «словарь» который можно держать, скажем, в Redis.
Остается проблема распределенных транзакций, если приложению нужно передавать что-то между пользователями живущими в разных БД. Почти рабочее решение описано в этой статье (в описанном там чтении нет изолированности, решается выполнением транзакции на запись тех же значений, что считали). Альтернативный вариант, более колхозный, описан здесь. Кто-то предпочитает 2PC, но он его сложно реализовать, чтобы он работал при падении узлов или клиента, выполняющего транзакцию, нужно какой-то Raft/Paxos еще прикручивать.
С удовольствием прочитал бы другие заметки о том, как у вас все устроено. Интересуют вопросы из этого списка, например, вы совсем не рассказали про ваши метрики, мониторинг и агрегацию логов.
Спасибо за интересную статью. Следует однако отметить, что в ней вы рассмотрели довольно простую задачу. Попробуйте, например, задачу распознавания образов, и все сразу станет намного интереснее. Плюс Fann насколько я понимаю не параллелится, а жаль, потому что обучение нейронных сетей можно существенно ускорить на многоядерных процессорах.
Rust выглядит очень интересно. Но мое отношение к нему — пусть лет 5 на нем попишут другие люди, соберут все грабли, если после этого на нем кто-то еще будет писать, возможно, язык заслуживает внимания. Может и инструменты нормальные (IDE в том числе) появятся к тому времени. Очень уж много было «убийц C++» в последнее время которые так и не оправдали ожиданий, во всяком случае, как замены C++: D, Vala, Go, возможно еще какие-то о которых я забыл.
И чтобы в метод measure передавалось имя класса и имя метода. Пробовали извлекать их из стэктрейсов, но при нагрузочном тестировании из-за этого возникают постоянные блокировки, производительность просаживается. Было бы интересно посмотреть, как решить проблему с помощью AOP.
AspectJ — это очень хорошо, используем в проекте для сборка метрик и трассировки в распределенном приложении (через библиотеку Kamon). Не представляю, как бы жили без него.
Но, увы, у меня не получилось купить лицензию с помощью Яндекс.Денег i.imgur.com/BNt5CL4.png :(
Касательно ручного шардинга PostgreSQL. Судя по отзывам, неплохо работает схема вроде следующей.
Определяете, по какому ключу шардите. Например, это id пользователя. Заводите множество небольших БД, каждая, например, ровно на 1000 пользователей. База 1 держит пользователей 1-1000, база 2 — пользователей 1001-2000 и так далее. Если в БД уже есть 1000 пользователей, заводите новую. Один сервер PostgreSQL держит несколько баз, в зависимости от крутости железа и числа запросов к этим БД. Если нагрузку сервер больше не держит, заводите новый сервер. При обновлении сервера в поднятый на нем PostgreSQL можно перенести бОльшее число баз. Для определения какая БД на каком сервере лежит используется «словарь» который можно держать, скажем, в Redis.
Остается проблема распределенных транзакций, если приложению нужно передавать что-то между пользователями живущими в разных БД. Почти рабочее решение описано в этой статье (в описанном там чтении нет изолированности, решается выполнением транзакции на запись тех же значений, что считали). Альтернативный вариант, более колхозный, описан здесь. Кто-то предпочитает 2PC, но он его сложно реализовать, чтобы он работал при падении узлов или клиента, выполняющего транзакцию, нужно какой-то Raft/Paxos еще прикручивать.
С удовольствием прочитал бы другие заметки о том, как у вас все устроено. Интересуют вопросы из этого списка, например, вы совсем не рассказали про ваши метрики, мониторинг и агрегацию логов.
* Testing in Scala
* Effective Modern C++
* (возможно) Netty in Action
Также в бложике по тэгу Литература можете найти рецензии на другие книги.
А хотелось бы:
И чтобы в метод measure передавалось имя класса и имя метода. Пробовали извлекать их из стэктрейсов, но при нагрузочном тестировании из-за этого возникают постоянные блокировки, производительность просаживается. Было бы интересно посмотреть, как решить проблему с помощью AOP.
С нетерпением жду новых постов, посвященных AOP!