Netty, который используется в Finagle, использует конвейер «обработчиков» для последовательной обработки входящих и исходящих связанных данных. Примеры Netty и включенные библиотеки демонстрируют различные обработчики, используемые для таких вещей, как аутентификация, кодеки протоколов и фактическая бизнес-логика службы.
Похоже, что Finagle использует концепцию обработчика и вместо этого напрямую предлагает пользователям API кодеки, фильтры и услуги. Хотя они имеют разные сигнатуры, новым пользователям Finagle остается задача решить, что использовать для реализации каждой части своего общего сервера. Вместо того, чтобы просто решить, где разбить цепочку на различные обработчики Netty, теперь им нужно решить, какая часть должна быть частью кодека, а какие фильтры, а какая отдельная служба в конце цепочки. В целом, хотя Finagle является библиотекой более высокого уровня, чем Netty, и должна упростить задачу создания службы, у пользователя API может быть больше вариантов выбора.
Каковы ключевые моменты принятия решения и плюсы/минусы размещения определенной части потока обработки в кодеке, фильтре или отдельном сервисе? Если существует возможность дальнейшего расширения конвейера, следует ли вместо этого поместить логику службы в фильтр с службой «noop» в конце конвейера? Учитывая гибкость в упорядочивании фильтров (как обработчиков в конвейере) по сравнению с единственным кодеком на одном конце и сервисом на другом конце, почему «все» не должно быть фильтром?