В данном случае как раз используются версии get(int index) и putInt(int index, int value) по абсолютному index, которые реализованы в HeapByteBuffer как явное чтение/запись из массива (в DirectByteBuffer — как чтение/запись из памяти), поэтому проблем нет.
Алексей, вы большие молодцы — так держать! Много лет ждал подобной конференции в РФ. Понимая, что это большой риск и из-за более узкой тематики (хотя очень перспективной), и из-за докладов на английском языке, тем не менее, искренне верю, что у вас всё получится и конференция станет регулярной.
Спасибо.
Действительно, вызов sendfile() блокируется на время чтения с диска (при отсутствии данных в дисковом кеше). Но по результатам профилирования раздатчика под нагрузкой sendfile() не является проблемой — он обслуживает proxy-запросы (HTTP) и ненадолго блокируется только в 10-20% случаях (page cache miss) на чтении с SSD.
В нашем случае количество потоков большее числа ядер в первую очередь объясняется использованием независимых пулов для различных стадий конвейера, чтобы повысить управляемость и наблюдаемость системы.
Но и блокирующие операции, конечно, присутствуют — в частности, в докладе рассматривается чтение блоков с дисков для отправки в клиентский SSL-сокет, когда мы не можем использовать sendfile(). Кроме того, запись блоков из OBS/OCS на диск при cache miss является блокирующей.
Действительно, единственный AtomicBoolean присутствует в абстрактном Actor, от которого наследуются все прикладные акторы. Правильнее было бы сказать, что в прикладном коде никакой синхронизации нет.
Ниже в комментарии приведены ссылки на варианты курсового проекта студентов Технополиса и кафедры КСиПТ ФТК СПбГПУ. В результате почти у всех получился работоспособный распределённый KV storage.
Скорее всего, авторы книги подразумевали, что в абстрактном современном ДЦ, расположенном в США, уже используется state-of-the-art охлаждение со всеми возможными трюками и на этом фоне имеет смысл заниматься проблемой лишнего преобразования энергии, для чего, в свою очередь, приходится заказывать/разрабатывать кастомные платформы и шасси. Данный пример про оптимизацию преобразования энергии приведён лишь для иллюстрации подходов, используемых в погоне за оптимизацией PUE.
Вы правы: если погружаться в особенности ДЦстроения, всё гораздо сложнее, не так однозначно и достойно отдельной лекции или даже не одной.
Спасибо за развёрнутый комментарий.
Information
Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
В данном случае как раз используются версии
get(int index)
иputInt(int index, int value)
по абсолютномуindex
, которые реализованы вHeapByteBuffer
как явное чтение/запись из массива (вDirectByteBuffer
— как чтение/запись из памяти), поэтому проблем нет.Спасибо.
Действительно, вызов
sendfile()
блокируется на время чтения с диска (при отсутствии данных в дисковом кеше). Но по результатам профилирования раздатчика под нагрузкойsendfile()
не является проблемой — он обслуживает proxy-запросы (HTTP) и ненадолго блокируется только в 10-20% случаях (page cache miss) на чтении с SSD.В нашем случае количество потоков большее числа ядер в первую очередь объясняется использованием независимых пулов для различных стадий конвейера, чтобы повысить управляемость и наблюдаемость системы.
Но и блокирующие операции, конечно, присутствуют — в частности, в докладе рассматривается чтение блоков с дисков для отправки в клиентский SSL-сокет, когда мы не можем использовать
sendfile()
. Кроме того, запись блоков из OBS/OCS на диск при cache miss является блокирующей.Действительно, единственный
AtomicBoolean
присутствует в абстрактномActor
, от которого наследуются все прикладные акторы. Правильнее было бы сказать, что в прикладном коде никакой синхронизации нет.Различные варианты решений можно посмотреть среди закрытых pull request'ов.
Вы правы: если погружаться в особенности ДЦстроения, всё гораздо сложнее, не так однозначно и достойно отдельной лекции или даже не одной.
Спасибо за развёрнутый комментарий.