Небольшое дополнение по одной из обсуждённых тем, «layer communication protocols»: Важно обратить внимание, что использование layer communication protocols ведет к деградации производительности, но при этом дает и существенные выгоды: - Модульная структура открывает возможности для самых различных комбинаций, например возможность добавлять и убирать слои в зависимости от требований. You only pay for what you use. - При аккуратной декомпозиции вышестоящие протоколы могут быть реализованы и протестированы значительно быстрее, чем крупный, монолитный протокол - Протоколы могут быть взаимозаменяемыми (например, выбор протокола под профиль нагрузки) - Верифицировать корректность работы небольшого протокола проще Среди минусов: - Вычислительный оверхед - Оверхед в передаваемых данных, в основном в заголовках между уровнями - Зависимость слоев друг от друга Из-за того, что в типовой системе сообщению требуется пройти 10 и более слоев, оверхед от пересечения границ протоколов может оказаться даже выше, чем затраты на выполнение полезной нагрузки. Работы по оптимизации не прекращаются, среди направлений: - Оптимизация вычислительной нагрузки - Сжатие заголовков - Отложенная обработка (например отложенная буферизация сообщения) По мотивам: https://www.cs.cornell.edu/projects/spinglass/public_pdfs/Optimizing%20Layered.pdf