RMI в Одноклассниках

Для обмена данными между серверами Одноклассники "изобрели" собственный RMI сервер, на основе паттерна proactor, который можно найти на гитхабе rpc-samples

Изначально они использовали вроде бы Netty, но потом написали свое решение с нативными вставками Си, с использованием JNI. Основная мотивация - перфоманс.

Под нагрузкой Netty создавал огромное количество объектов, которые не собиралась во время GC. Вроде бы это как-то было связано с использованием finalize у класса сокет. Они пытались хакать jdk, заменяя класс сокет собственной имлементацией с переписанным методом finalize, но получалось только хуже. В итоге написали свой сервер.

А также они используют самописный механизм сериализация. Джавовская сериализация довольно медленная, есть альтернативные решения вроде Jboss Serialization, который быстрее. Но клиент и сервер при использовании Jboss Serialization должны использовать идентичные версии классов. Другое решение - для каждого класса писать сериализацию самостоятельно. Однако это не удобно, если у тебя тысячи классов.


Комментариев нет:

Отправить комментарий