Почему нельзя брать данные сразу из оперативной памяти
Что проверяют
Прежде всего умение уточнить вопрос. Он читается двояко: почему процессор не работает с оперативной памятью напрямую, и почему нельзя держать состояние сервиса в памяти процесса вместо базы. Кандидат, который бросается отвечать сразу, в половине случаев отвечает не на то, что спросили.
Как отвечать
Если речь про железо, разложите иерархию. Доступ в кэш первого уровня стоит единицы наносекунд, в оперативную память порядка сотни, то есть сотни тактов простоя ядра. Поэтому память читается не байтами, а строками кэша по 64 байта, и процессор заранее подтягивает следующие, пока обход предсказуем.
Для Go отсюда следуют практические вещи:
[]Tиз структур лежит в памяти подряд,[]*Tэто массив указателей и прыжки по куче, предсказание доступа на них не работает;- поля структуры стоит группировать по размеру, иначе выравнивание добавит дыры и строка кэша потратится впустую;
- ложное разделение: две горутины пишут в соседние поля одной строки кэша, строка ходит между ядрами, и параллельный код оказывается медленнее последовательного.
Если речь про архитектуру сервиса, ответ другой: память процесса теряется при рестарте и деплое, у каждой реплики она своя, поэтому кэш в переменной расходится между подами, а сброс работает только на том, куда попал запрос. Плюс рост потребления, который сборщик не сдержит, пока ссылки живут в глобальной карте.
Где спотыкаются
Отвечают заготовкой про надёжность хранения, когда спрашивали про кэши процессора, или наоборот. Один уточняющий вопрос снимает проблему целиком.
Считают оперативную память быстрой и на этом успокаиваются. Она быстрая относительно диска и медленная относительно ядра, поэтому алгоритм с хорошей локальностью регулярно обгоняет формально более экономный по числу операций.
Держат кэш в памяти пода и удивляются, что баг воспроизводится через раз. Пока реплик больше одной, ответ зависит от того, куда попал запрос, и такой кэш нужно либо выносить в общее хранилище, либо честно объявлять неточным с коротким сроком жизни.