Почему apache использует транспортный уровень, разделенный на низкоуровневую транспортную оболочку и транспортную оболочку - PullRequest
1 голос
/ 22 апреля 2019

Я думал, что причина разделения транспортного уровня Apache Thrift заключается в том, что низкоуровневый транспорт просто использует / переносит некоторые базовые функции Java, такие как сокет.А транспортная оболочка только подготавливает данные, например, с помощью zlib-transport или framed-transport, и использует какой-то другой транспорт для отправки их в сеть.Но HttpClient также является транспортной оболочкой и не использует другой транспорт для отправки.

Так в чем причина того, что Apache Thrift разделил транспортный уровень на низкоуровневую транспортную и транспортную оболочку?

Источник: https://thrift.apache.org/docs/Languages

1 Ответ

1 голос
/ 23 апреля 2019

В последние годы для них были придуманы термины «многоуровневая транспортировка» и «транспортировка в конечную точку», и они достаточно хорошо их описывают.

Идея в том, что

  1. вам всегда нужен транспорт (конечная точка) для записи / чтения данных с / с провода или любого другого физического эквивалента.

  2. вы можете захотеть добавить дополнительные уровни возможностей поверх транспорта конечной точки, такие как сжатие данных, оптимизация транспорта через буферы или «рамочный» транспорт, добавление шифрования или что-либо еще, что приходит на ум.

Хотя часть 1 является обязательной, вторая часть - нет. Кроме того, вы можете сложить более одного многоуровневого транспорта друг на друга:

  • протокол = компактный
  • многоуровневый транспорт = пользовательский транспорт шифрования
  • многослойный транспорт = каркасный транспорт
  • транспорт конечной точки = сокеты

Помимо некоторых других целей, Thrift разработан с целью обеспечения большой гибкости и модульности, в основном благодаря гибкости за счет модульности. Когда вы посмотрите на базовую основу того, что такое TTransport / TServerTransport или TProtocol, вы обнаружите, что это не очень большой объем кода, который нужно реализовать, когда требуется настроенный транспорт или протокол.

И поскольку такие вещи, как шифрование или буферизация, не имеют жестких зависимостей от какого-либо используемого транспорта или протокола, вполне естественно сохранять их независимыми по своему замыслу. Именно это делает протокол / транспортный стек Thrift простым в использовании и расширяемым. Это позволяет создавать отличные приложения, не мешая.

PS: лучше читать: https://thrift.apache.org/docs/concepts

...