6. Как идемпотентность распределены дизайн интерфейса службы (например, не дубликат заряда)?

Автор: Китайский Ши Шань

Интервью вопросы

Как идемпотентность распределена дизайн интерфейса службы (например, не дубликат заряда)?

Интервьюер психологического анализа

От этого вопроса, интервьюер вошел в реальную проблему производства интервью вообще.

Распределенная система интерфейса, как обеспечить идемпотентность? На самом деле, эта вещь является технической проблемой в производственной среде, когда вы распределенная система должна рассматриваться. Что это значит?

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

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

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

Анализ лица вопросы

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

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

На самом деле, чтобы обеспечить идемпотентность в основном три точки:

  • Там должен быть уникальный идентификатор для каждого запроса, дать каштаны: заказ запрос оплаты, безусловно, должны включать в себя идентификатор заказа, когда платежное поручение ид большинство из них.
  • После того, как каждый запрос был обработан, должна быть запись идентификации запроса обрабатывается. Общее решение для записи, что состояния, в MySQL, запись получки воды этого порядка перед такой оплатой.
  • Каждый раз, когда прием запроса необходимо определить, прежде чем определить, является ли или не лечить. Например, если есть заказ оплачен, они должны заплатить воду, а затем повторите, если запрос посылается, то сначала вставляют в это время платить воды, OrderId уже существует, уникальный ключ ограничения в действие, вставка ошибок не идут. Тогда вам не придется заряжать.

Фактическая работа процесса, вы должны объединить свой бизнес, например, использование Redis с OrderId в качестве единственного ключа. Только успешно вставили оплату воды, прежде чем они могут выполнять фактические оплаты заряда.

Требуется платежное поручение, необходимо вставить получки воды, order_id построить уникальный ключ  unique key. Прежде чем оплатить заказ, первый вкладыш в воду получки, order_id был введен. Вы можете написать идентичность Redis зайти внутрь set order_id payed, в течение следующего запроса повтора, первый проверьте Redis Order_ID соответствующего значение, если  payed она пояснила , что она была уплачена, и вы не повторите оплачены.

рекомендация

отwww.cnblogs.com/morganlin/p/11986338.html
рекомендация