Pull to refresh

Comments 6

PinnedPinned comments

Спасибо, хороший вопрос.

Кассовый чек — это один из видов фискальных документов. «Фискальный документ» — более широкое понятие, но в статье речь в основном именно о чеках, поэтому местами я использую эти слова почти как синонимы.

С «печатью» история менялась вместе с системой. В первой версии, когда в серверной стояли обычные физические кассы, чеки действительно печатались на бумаге — и в больших объёмах. С бумажной лентой приходилось что-то делать физически: обслуживать кассы, менять расходники и утилизировать накопившиеся чеки.

Позже мы перешли на стоечные фискальные серверы. Там под «печатью» уже понимается формирование фискального документа накопителем: он присваивает номер, сохраняет документ в архиве и формирует фискальные реквизиты. Физическая бумага в этом контуре уже не появлялась.

Поэтому [размер фермы / 0,7] бумажных чеков в секунду — это не совсем шутка для ранней версии системы, но для архитектуры, разобранной дальше в статье, бумажной печати уже не было 🙂

Если коротко: перед повторной печатью, проверяли, не напечатан ли чек уже.

Мы делали что-то подобное, когда отправляли документ во внешнюю систему, которая не поддерживала идемпотентных операций. Правда там тоже было весело: документ во внешней системе появлялся не сразу, поэтому перед повторной отправкой была добавлена задержка.

P.S. Текст от нейронки ): Раньше слог автора был лучше

@Gromilo Раньше редактуру делал gpt нынче клод всему голова) но видимо уж больно он суховат и по существу) по ходу нужно промт обновить))

Спасибо, интересно с точки зрения архитектуры. А можно пояснение для тех, кто не в курсе?

  • фискальный документ и чек - это одно и то же?

  • что значит “печать”? реально физическая печать на реально физической бумажке? зачем? и что потом делают с бумажками, появляющимися [размер фермы / 0.7] в секунду?

Спасибо, хороший вопрос.

Кассовый чек — это один из видов фискальных документов. «Фискальный документ» — более широкое понятие, но в статье речь в основном именно о чеках, поэтому местами я использую эти слова почти как синонимы.

С «печатью» история менялась вместе с системой. В первой версии, когда в серверной стояли обычные физические кассы, чеки действительно печатались на бумаге — и в больших объёмах. С бумажной лентой приходилось что-то делать физически: обслуживать кассы, менять расходники и утилизировать накопившиеся чеки.

Позже мы перешли на стоечные фискальные серверы. Там под «печатью» уже понимается формирование фискального документа накопителем: он присваивает номер, сохраняет документ в архиве и формирует фискальные реквизиты. Физическая бумага в этом контуре уже не появлялась.

Поэтому [размер фермы / 0,7] бумажных чеков в секунду — это не совсем шутка для ранней версии системы, но для архитектуры, разобранной дальше в статье, бумажной печати уже не было 🙂

Вы id кладёте в тег 1192? А как понимаете в какой из 224 ФНов он попал? Балансировщик ведёт отдельные логи?

Не в тег 1192. Мы использовали дополнительный реквизит пользователя — структуру 1084: в 1085 передавали название реквизита documentId, а в 1086 — идентификатор нашего документа.

Перебирать все 224 ФН не требовалось. Диспетчер выбирал слот до отправки команды, а slotId сохранялся как часть состояния конкретной попытки и передавался в device-gateway. Поэтому, когда документ оказывался в SENT, уже было известно, к какому слоту нужно обратиться за архивом.

При этом слот — логическая абстракция над физическим накопителем. Сам ФН со временем мог быть заменён, а идентификатор слота оставался прежним: для остальной системы это был стабильный канал последовательного исполнения, за которым в конфигурации закреплялся текущий физический накопитель.

Идентификатор в 1086 использовался не для поиска нужного ФН, а для проверки, что найденный в архиве документ — именно наша операция, а не другой чек с похожей суммой или временем.

Отдельный журнал балансировщика источником истины для этого не был. Выбранный slotId и состояние попытки сохранялись персистентно. Поэтому при необъяснимом расхождении блокировался конкретный слот, а не весь сервер.

224 ФН на фотографии — это два сервера в одной стойке. В зрелом состоянии парк был гораздо больше, так что поиск перебором всех накопителей был бы в принципе нежизнеспособен.

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

Sign up to leave a comment.

Articles