Схема в общем-то рабочая, но стоит все же предусмотреть некоторые нюансы:
Создаю сервер с nginx и ClickHouse на Ubunta в одном месте
Вы уверены, что одна единственная машина, нагруженная одновременно и nginx и CH и redis и php/python справится с Вашей нагрузкой?
Я бы сразу закладывал, что раньше позже CH уедет на отдельную машину (а то и на 2), redis + php/python будут жить в парах на множестве машин, а nginx будет балансировать нагрузку с отдельной машины.
раз в N секунд скриптом на python/php через cron кладет данные в ClickHouse
Тут сразу 2 момента:
Во-первых, при миллиарде записей CH вполне может пересчитывать индексы пару минут. +1000 записей за 10 инсертов конечно лучше, чем +1000 записей за 1000 инсертов... но все же заметно хуже чем +1000 записей за 1 инсерт.
Во-вторых, при пиковой нагрузке у Вас может закончится память, и redis уйдет на диск, потеряв всю скорость от inMemory работы. Конечно Вы тут еще и упретесь в количество активных потоков под php и начнете его балансировать. Так что одно из решений будет уже описанное выше, что на каждой машине с php/python свой redis. А там как повезет с нагрузкой.
Но все же я бы сразу делал выгрузку из redis в CH умнее, чем тупо каждые N секунд выгружаем все что есть. Лучше если будет выгрузка и по времени (при этом реже) и по количеству данных для записи.
Ну и еще, задумайтесь сразу как делить данные в redis по принадлежности к интервалу записи