Теорема CAP простыми словами

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

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

Теорема CAP говорит:

Когда что-то ломается, ты можешь выбрать только два из трёх:

  1. Согласованность (Consistency)
    Все видят одни и те же данные. Если ты записал что-то, все другие сразу это увидят.
  2. Доступность (Availability)
    Система всегда отвечает на запросы, даже если есть проблемы.
  3. Устойчивость к разделению (Partition tolerance)
    Система продолжает работать, даже если связь между серверами прервалась.

Простой пример:

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

Теперь:

  • Если ты выберешь доступность и устойчивость к разделению (AP) — банкоматы будут работать, но может быть, что один покажет, что у тебя есть деньги, хотя другой уже показал снятие. Данные могут временно отличаться (нет согласованности).
  • Если ты выберешь согласованность и устойчивость к разделению (CP) — банкоматы будут показывать только правильные данные, но, возможно, ты не сможешь снять деньги, пока сеть не восстановится (нет доступности).

Вывод:

Нельзя получить всё сразу. При сбоях ты должен пожертвовать либо точностью, либо доступом.

Теорема CAP

Теорема CAP (также известная как CAP-теорема Брюэра) — это фундаментальное утверждение в распределённых системах, которое гласит:

В любой распределённой системе невозможно одновременно обеспечить все три из следующих свойств:

  1. Consistency (Согласованность)
    Все узлы видят одинаковые данные в одно и то же время.
  2. Availability (Доступность)
    Каждый запрос получает корректный отклик (не обязательно самый свежий), даже если некоторые узлы системы недоступны.
  3. Partition tolerance (Устойчивость к разделению)
    Система продолжает работать, несмотря на разделение сети (network partition), когда сообщения между частями кластера теряются или задерживаются.

Визуальное представление:

CAP часто изображают в виде треугольника, где каждая вершина — одно из свойств. Система может гарантировать не более двух из трёх.

Возможные комбинации:

  • CP (Consistency + Partition tolerance)
    Система сохраняет согласованность и устойчивость к разделению, но может быть недоступна в момент сбоя.
    Пример: HBase, MongoDB (в некоторых конфигурациях)
  • CA (Consistency + Availability)
    Возможна только в системах без разделения сети — то есть в централизованных системах. В распределённых системах эта комбинация неустойчива к разделению.
  • AP (Availability + Partition tolerance)
    Система всегда отвечает, даже при разделении, но может вернуть устаревшие данные (нет строгой согласованности).
    Пример: Cassandra, Couchbase, DynamoDB

Важное уточнение:

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

Новая версия программы «МиниСмета»

Доступна новая версия (7.5.22) программы «МиниСмета».

В карточке работы/материала добавлено поле «Себестоимость». В этом поле можно указывать себестоимость работы или цену покупки материала.

В разделе «Заказчики и счета…» добавлена группа «Исполнители». В эту группу надо добавлять исполнителей для последующего указания в смете.

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

Пример для обработки списка штрих-кодов

Пример для обработки списка штрих-кодов от пакетного сканера штрих-кодов на web-сервере. Список штрих кодов передается на сервер POST-запросом. Запрос содержит один из трех параметров list-json для списка в формате json, list-txt для списка в текстовом формате, one-barcode для одного штрих-кода. Ниже простой пример кода для обработки.

<?php
//
$dat_dir = "./_list-barcode" ;	
// запись списка штрих-кодов в файл в формате json
if (isset($_REQUEST['list-json'])) {
    //
	$time_str = date('-Y-m-d-His') ;
	//		
	$filename = $dat_dir . "/" . "list-barcode" . $time_str . ".json" ;
	$dst = fopen($filename, "w") ; 
	fwrite($dst, $_REQUEST['list-json']) ;
	fclose($dst) ;
	echo "Ok!" ;
}
// запись списка штрих-кодов в текстовый файл
if (isset($_REQUEST['list-txt'])) {
    //
	$time_str = date('-Y-m-d-His') ;
	//		
	$filename = $dat_dir . "/" . "list-barcode" . $time_str . ".txt" ;
	$dst = fopen($filename, "w") ; 
	fwrite($dst, $_REQUEST['list-txt']) ;
	fclose($dst) ;
	echo "Ok!" ;
}
// добавление одного штрих-кода в текстовый файл
if (isset($_REQUEST['one-barcode'])) {
	$filename = $dat_dir . "/list-one-barcode.txt" ;
	$dst = fopen($filename, "a") ; 
	fwrite($dst, $_REQUEST['one-barcode'] . "\n") ;
	fclose($dst) ;
	echo "Ok!" ;
}

Пакетный сканер штрих-кодов

Пакетный сканер штрих-кодов предназначен для сканирования штрих-кодов 1D и 2D всех типов, а так же  QR-кодов. Приложение поддерживает два варианта сканирования с помощью камеры устройства и сканирование аппаратным сканером UROVO. Список отсканированных кодов сохраняется на устройстве.

После завершения сканирования список штрих-кодов можно:

  • сохранить в формате текстового или json файла на устройстве,
  • отправить в формате текстового или json файла через месенджер или элетронную почту,
  • отправить на web-сервер.

При наличии web-сервера можно включить режим отправки каждого кода после сканирования на сервер.

Настройки программы.

  • Адрес сервера – здесь можно задать адрес сервера на который приложение будет отправлять список штрих-кодов. Если у Вас нет сервера или то поле можно оставить пустым. Список штрих кодов передается на сервер POST-запросом. Запрос содержит один из трех параметров list-json для списка в формате json, list-txt для списка в текстовом формате, one-barcode для одного штрих-кода. Пример для обработки здесь.
  • Сканер – здесь можно выбрать способ сканирования. Возможны два варианта сканирования с помощью камеры устройства. Оба варианта имеют свои плюсы и минусы. Вы можете выбрать наиболее подходящий Вам вариант. Вариант аппаратного сканера для работы с терминалом сбора данных на базе сканера UROVO.
  • Блокировать одинаковые коды (запрет повторного сканирования) – эта опция позволяет отклонить повторно отсканированный в рамках списка штрих-код. Включать мли нет эту опцию зависит от цели использования сканера. Например, если Вы сканируете коды маркировки, опцию надо включить, что бы предотвратить случайное повторное сканирование. Если же вы используете сканер для подсчета товаров, то опцию надо выключить. Количество повторов штрих-кода будет соответствовать количеству товара.
  • Отправлять код на сервер сразу после сканирования – позволяет кроме добавления в список отправлять штрих-код на сервер сразу после сканирования. На сервере надо обрабатывать параметр one-barcode.
  • Сканировать при нажатии списка кодов – в случае сканирования камерой устройства кнопка «Сканировать» расположена в верхней части экрана и нажимать ее может быть не слишком удобно. Эта опция позволяет нажимать не только на кнопку «Сканировать», но и на список штрих-кодов вместо кнопки.
  • Запускать новое сканирование автоматически – в случае сканирования камерой устройства после успешного сканирования автоматически запускает следующее сканирование. Эта опция может быть полезна при массовом сканировании штрих-кодов.

Установить пакетный сканер штрих-кодов можно из GooglePlay https://play.google.com/store/apps/details?id=ru.rcamel.barcode либо из RuStore https://www.rustore.ru/catalog/app/ru.rcamel.barcode

Со всеми вопросами по программе Вы можете обращаться по почте rcamel@yandex.ru