Вопрос

Хорошая ли идея использовать сокеты для отправки данных между двумя серверами, или мне следует использовать что-то вроде MQ для перемещения данных?

Мои вопросы:надежны ли сокеты, если мне нужна только однократная / гарантированная доставка данных?

Есть ли какие-то другие решения?

Спасибо.

Это было полезно?

Решение

Сокеты - это API прикладного уровня для осуществления сетевого взаимодействия.Надежность сокетов зависит от сетевого протокола, который вы выбираете при создании сокета.Если вы выберете TCP / IP, вы получите "надежную" передачу...до определенного предела.Если вы выберете UDP / IP, вы получите "ненадежную" передачу.

Как указано в других ответах, TCP гарантирует, что вы не потеряете или не повредите данные до определенного момента:

  1. если сеть работает достаточно долго сбой в работе или отправитель или получатель умрет, соединение TCP / IP разорвется и вы потеряете данные, если не предпримете шагов по перезапуску соединения.
  2. при повреждении данных на сетевом уровне существует небольшая вероятность того, что это не будет обнаружено по контрольным суммам.

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

Итак, ответ на ваш вопрос заключается в том, что это зависит от того, как вы используете сокеты, и от того, какой уровень надежности требуется вашей системе.

Другие советы

Сокеты настолько надежны, насколько надежна ваша реализация и основаны на базовом оборудовании.Если вы не хотите хлопот с гарантированной доставкой (на каких условиях?100% никогда не произойдет), система очередей сообщений — хороший выбор.В очереди сообщений будут реализованы все функции сохранения, организации очередей, повторных попыток и т. д., которые вам нужно будет реализовать самостоятельно, если вы используете стандартные сокеты.

Вероятно, вам следует использовать MQ, если вам нужна гарантированная доставка независимо от того, что произойдет (например, если другая сторона отключится от сети для обслуживания), и вы не хотите писать всю логику самостоятельно.Сокеты — это то, что вы используете для подключения к другой стороне, независимо от того, является ли эта сторона MQ или конечным получателем сообщения.

Сокеты надежны, поскольку все коммуникации осуществляются поверх них, включая MQ.

Но вы можете добавить гарантированную доставку с помощью MQ, чтобы повысить надежность вашего приложения.Что это такое?гарантированная доставка гарантирует, что ваше сообщение будет обработано потребителем хотя бы один и не более одного раза.потребитель выключен?продюсер ушёл?сервер MQ выключен?диск выходит из строя?благодаря MQ ни одно сообщение не потеряется, что бы ни случилось (при условии, что ваш администратор знает свою работу).Кроме того, если вы перезапустите потребителя, ни одно сообщение не будет обрабатываться дважды.Это может быть важно, если сообщения содержат переводы на миллионы долларов.Но это не гарантирует, что ваше сообщение будет обработано в разумные сроки.и время обработки иногда важнее гарантированной доставки, в зависимости от вашего приложения.

Вы сами можете выбрать лучший способ связи между вашими серверами в зависимости от ваших потребностей.Гарантированная доставка имеет как финансовые, так и эксплуатационные затраты, поэтому ее следует использовать только в случае реальной необходимости (например, переводы на миллионы долларов).

Для большинства приложений вы можете добиться чего-то удовлетворительного, только повторяя отправку сообщений в случае неудачи.Но это не настоящая однократная гарантированная доставка.не пытайтесь реализовать это самостоятельно, это очень сложная вещь, которую способны выполнить лишь немногие.Бесполезно рассматривать возможность повторной разработки такого сложного программного обеспечения, как MQ или Apache AQ.

Надеюсь, это поможет.

  • Джеб

Сокеты — это простой механизм передачи данных.Все остальное реализовано поверх этого.в Сетевая модель OSI они принадлежат слою 4.Хотя они реализуют надежное сквозное соединение, они редко используются в качестве конечного протокола.Почти всегда вам необходимо реализовать прикладной уровень.Что это будет, зависит от вашего приложения (нужно ли вам передавать файлы или просто отправлять сообщения) и вашей сетевой инфраструктуры.

Если вы используете потоковый сокет, протокол TCP гарантирует, что данные не будут потеряны при передаче и вряд ли будут повреждены (хотя вам придется решить, достаточны ли его 16-битные контрольные суммы или вам нужен механизм контрольных сумм на уровне приложения).

Что предоставляют системы MQ и что вам может понадобиться, а может и не понадобиться, — это уровень приложения. Тип операции надежность, т.е.возможность гарантировать доставку даже в случае периодических сбоев оборудования или программного обеспечения.

В зависимости от типа данных простой веб-сервис может оказаться самым быстрым решением.Их относительно легко настроить и протестировать.Хотя для некоторых конкретных примеров мне нужно знать, какие данные и среду вы используете.

Это во многом зависит от типа приложения, которое вы разрабатываете.Если вы пишете программу, в которой вам нужен ответ или подтверждение отправленного сообщения, тогда TCP-сокеты хороши.Но если вы реализуете какой-либо сценарий рабочего процесса, вам следует использовать очереди сообщений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top