{"id":443874,"date":"2025-01-02T15:03:44","date_gmt":"2025-01-02T15:03:44","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=443874"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2025-01-02T15:03:44","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=443874","title":{"rendered":"<span>CAP-n-Coq. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>CAP-n-Coq. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/\/post_images\/740\/98c\/4f7\/74098c4f7371a5706d95881287afbfd8.jpg\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/740\/98c\/4f7\/74098c4f7371a5706d95881287afbfd8.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>No subject appears to be more controversial to distributed systems engineers than the oft-quoted, oft-misunderstood CAP theorem. <a href=\"https:\/\/www.the-paper-trail.org\/page\/cap-faq\/\" rel=\"noopener noreferrer nofollow\">The CAP FAQ<\/a><\/p>\n<p>\u2014 \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0442\u0435\u0431\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e&#8230; \u2014 \u041e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u044f \u0438 \u0441\u0430\u043c \u043c\u043e\u0433\u0443, \u0442\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442! (\u0418\u0437 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u043e\u0432, \u043d\u043e \u0434\u043b\u044f CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0436\u0435)<\/p>\n<p>\u2014 \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u043c CAP \u0432 Coq \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. (\u042f)<\/p>\n<h3>\u041e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/h3>\n<p>\u0412 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u0430\u0439: \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043e\u0440\u0435\u043c\u0435 CAP (\u044d\u0434\u0430\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%93%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043a\u043e\u043d\u0430 \u0413\u043e\u0434\u0432\u0438\u043d\u0430<\/a>).<\/p>\n<p>\u0414\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043c\u0438\u043c\u043e \u043c\u0435\u043d\u044f. \u042f \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043f\u043e CAP-\u0441\u0442\u0430\u0442\u044c\u044f\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043d\u0430 habr, \u043d\u043e \u0432 \u0441\u0438\u043b\u0443 \u043a\u0430\u0436\u0443\u0449\u0435\u0439\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f &#171;\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043d\u0438\u0435\u043c&#187; \u0434\u0435\u043b\u043e \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c. \u0414\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u0430 \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0432\u0443\u0447\u0435\u0441\u0442\u044c\u044e \u0438 \u043a\u043b\u0438\u043a\u0431\u0435\u0439\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432: &#171;<a href=\"https:\/\/habr.com\/ru\/articles\/328792\/\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0451, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043b\u0438 \u043e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/a>&#171;, &#171;<a href=\"https:\/\/habr.com\/ru\/articles\/322276\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u0444\u044b \u043e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/a>&#171;&#8230; \u0447\u0442\u043e \u0442\u0443\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c (\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b)?<\/p>\n<p>\u0427\u0435\u043c \u043f\u0440\u043e\u0449\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f, \u0442\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0439 \u0434\u043e\u0441\u043a\u043e\u043d\u0430\u043b\u044c\u043d\u043e. \u0418 \u0432\u043e\u0442, \u043a\u0430\u043a-\u0442\u043e \u043c\u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d &#171;\u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u044b\u0439&#187;, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442&#8230; \u041b\u0430\u0434\u043d\u043e, &#171;OK, Google&#187;: [1], [2], [3], [4], [5].<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f &#171;\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432&#187; \u043f\u0440\u0438\u0447\u0438\u043d\u044b &#171;\u0445\u043e\u043b\u0438\u0432\u0430\u0440\u043d\u043e\u0441\u0442\u0438&#187; \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>In this paper we survey some of the confusion about the meaning of CAP, including <strong>inconsistencies and ambiguities in its definitions<\/strong>, and we highlight some problems in its formalization [3].<\/p>\n<\/li>\n<li>\n<p>The problem lies in the <strong>open-ended definitions<\/strong> of CAP which are subject to interpretations [5].<\/p>\n<\/li>\n<\/ul>\n<p>\u0428\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0435\u0439, \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0438\u0442\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0445. <\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/19f\/ffd\/cf2\/19fffdcf23f34d653114634488706dda.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/19f\/ffd\/cf2\/19fffdcf23f34d653114634488706dda.png\"\/><\/figure>\n<h3>\u0421\u0432\u0435\u0442\u043b\u044b\u0439 \u043f\u0443\u0442\u044c<\/h3>\n<p>\u0417\u0430\u0442\u0435\u0432\u0430\u044f \u0441\u0442\u0430\u0440\u0442\u0430\u043f \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 &#171;\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044e&#187;\/&#187;\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e&#187; CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c key differentiators. \u0414\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451, \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u043d\u043e\u0435 value, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u044b\u043f\u0430\u0434\u043e\u0432 \u0432 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e \u0446\u0435\u0445\u0443 \u0438 \u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0438\u0440\u0443 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0432 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0443\u0442\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u043e\u0438\u0446\u044b.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u2014 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043e\u0440\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 <a href=\"https:\/\/coq.inria.fr\/\" rel=\"noopener noreferrer nofollow\">Coq<\/a>, \u0442\u0430\u043a \u0432\u0440\u043e\u0434\u0435 \u0435\u0449\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b. \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u044e\u0442 \u0432\u0438\u0434 &#171;\u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0443\u043c\u0430\u0436\u043a\u0438&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0447\u0451\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0430\u043a\u0441\u0438\u043e\u043c\u0430\u0442\u0438\u043a\u0438. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Coq \u2014 \u043a\u0440\u0430\u0442\u043a\u043e\u0435, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0435\u0451 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432.<\/p>\n<p>\u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e, \u0441\u0447\u0438\u0442\u0430\u044e, \u043d\u0430\u043f\u0440\u0430\u0441\u043d\u044b\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#gl\" rel=\"noopener noreferrer nofollow\">Gilbert &amp; Lynch<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#def\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#lin\" rel=\"noopener noreferrer nofollow\">Linearizable Consistency (Atomic Data Objects)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#av\" rel=\"noopener noreferrer nofollow\">Availability (Available Data Objects)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pn\" rel=\"noopener noreferrer nofollow\">Partitioned Network<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pt\" rel=\"noopener noreferrer nofollow\">Partition Tolerance<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#conc\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cont\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#ref\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"cap\" id=\"cap\"><\/a><\/p>\n<h3>Gilbert &amp; Lynch<\/h3>\n<p>\u0421\u043a\u0430\u0436\u0443 \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043f\u0440\u043e \u0431\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e Gilbert &amp; Lynch, &#171;Brewer&#8217;s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services&#187;, 2002 [2].<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0418\u0418 claude.ai \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u0451 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u0437\u043e\u0440:<\/p>\n<blockquote>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 &#171;\u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0411\u0440\u044e\u0435\u0440\u0430&#187; \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0412 \u043d\u0435\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0442\u0440\u0438 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c (consistency) &#8212; \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c (availability) &#8212; \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e (partition tolerance) &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0435\u0442\u0438 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410\u0432\u0442\u043e\u0440\u044b \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u0442\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0442\u0440\u0451\u0445. \u041e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0430\u0431\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u0442\u0435\u043e\u0440\u0435\u043c\u0430 CAP (Consistency-Availability-Partition tolerance), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/blockquote>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0437\u0430\u043d\u044f\u0442\u043d\u043e\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430 <code>web service<\/code> (\u044d\u0442\u043e \u0431\u044b\u043b, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, 2002 \u0433\u043e\u0434), \u0446\u0438\u0442\u0438\u0440\u0443\u044e:<\/p>\n<blockquote>\n<p>Most <code>web services<\/code> today attempt to provide strongly consistent data. There has been significant research designing ACID databases, and most of the new frameworks for building distributed <code>web services<\/code> depend on these databases. Interactions with <code>web services<\/code>&#8230;<\/p>\n<\/blockquote>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043c\u043e\u043b, &#171;\u0430\u0432\u0442\u043e\u0440\u044b \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435&#187;. \u041a\u0430\u043a \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0435&#187; \u0438, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u0412\u0441\u0451 \u044d\u0442\u043e \u043c\u044b \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<p>\u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p><a class=\"anchor\" name=\"def\" id=\"def\"><\/a><\/p>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Coq \u043e\u0447\u0435\u043d\u044c \u0437\u043b\u043e\u0439. \u041e\u043d \u0434\u0430\u0436\u0435 \u0437\u043b\u0435\u0435, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Rust (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c). \u0412\u043e\u0434\u0430 \u0438\u0437 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u0449\u0430\u0434\u043d\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u0430\u0440\u0435\u043d\u0430, \u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0443 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p><a class=\"anchor\" name=\"lin\" id=\"lin\"><\/a><\/p>\n<h4>Linearizable Consistency (Atomic Data Objects)<\/h4>\n<p>\u0420\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u044f \u043f\u0440\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c (<code>consistency<\/code>), Gilbert &amp; Lynch \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d <code>linearizable<\/code> \u0438 \u0434\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f (\u0437\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0451):<\/p>\n<blockquote>\n<p>Atomic, or linearizable, consistency is the condition expected by most web services today. Under this consistency guarantee, there must exist a <strong>total order<\/strong> on all operations such that each operation <strong>looks as if it were completed at a single instant<\/strong>. This is equivalent to requiring requests of the distributed shared memory to act as if they were executing on a single node, responding to operations one at a time.<\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0442\u0430\u043a\u0438\u043c \u0432\u0438\u0434\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0443\u0442\u0430\u0442\u044c \u0441 <code>One Copy Serializability<\/code>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Yadav &amp; Butler [7]:<\/p>\n<blockquote>\n<p>The One Copy Serializability is the highest correctness criterion for replica control protocols&#8230; In order to achieve this correctness criterion, it is required that interleaved execution of transactions on replicas be equivalent to <strong>serial execution of those transactions on one copy of a database<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0418\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441 <code>Serializability<\/code> [8]:<\/p>\n<blockquote>\n<p>Informally, serializability means that transactions appear to have occurred in some <strong>total order<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0430\u0431\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 Immortal Write (\u0411\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u0430\u044f \u0417\u0430\u043f\u0438\u0441\u044c), Stale Read (\u041d\u0435\u0441\u0432\u0435\u0436\u0435\u0435 \u0427\u0442\u0435\u043d\u0438\u0435), Causal Reverse (\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u041f\u0440\u0438\u0447\u0438\u043d\u043d\u043e\u0441\u0442\u044c). \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c. Daniel Abadi [11] (\u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043c\u043e\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/705332\/#d-abadi-introduction-to-transaction-isolation-levels\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>).<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>linearizable<\/code> \u0434\u0430\u043d\u043e \u0432 [9], \u0442\u0443\u0442 \u0443\u0436\u0435 \u043d\u0435\u0442 \u043f\u0440\u043e &#171;single node&#187;:<\/p>\n<blockquote>\n<p>Linearizability is one of the strongest single-object consistency models, and implies that every operation appears to take place atomically, in some order, consistent with the <strong>real-time<\/strong> ordering of those operations: e.g., if operation A completes before operation B begins, then B should logically take effect after A.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/CAP_theorem\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438<\/a> \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 <strong>real-time<\/strong>) \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f: \u0442\u0435\u0440\u043c\u0438\u043d <code>linearizable<\/code> &#8212; \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/p>\n<p><a class=\"anchor\" name=\"av\" id=\"av\"><\/a><\/p>\n<h4>Availability (Available Data Objects)<\/h4>\n<p>Gilbert &amp; Lynch \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <code>Available Data Objects<\/code> \u0442\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>continuously available<\/code> (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <code>availability<\/code>):<\/p>\n<blockquote>\n<p>For a distributed system to be <strong>continuously available<\/strong>, every request received by a non-failing node in the system must result in a response. That is, any algorithm used by the service must eventually terminate. In some ways this is a weak definition of availability: it puts no bound on how long the algorithm may run before terminating, and therefore allows unbounded computation. On the other hand, when qualified by the need for partition tolerance, this can be seen as a strong definition of availability: even when severe network failures occur, every request must terminate.<\/p>\n<\/blockquote>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0443\u0437\u0435\u043b \u043d\u0435 &#171;\u0441\u043b\u043e\u043c\u0430\u043b\u0441\u044f&#187;, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441. \u0418\u043d\u0430\u0447\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>continuously available<\/code>.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043a \u0441\u043b\u043e\u0432\u0443, \u043f\u043e\u0431\u0443\u0434\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>non-failing node<\/code>? \u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u043a\u0430\u043a <code>failing<\/code>? \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0438 Martin Kleppmann [3]:<\/p>\n<blockquote>\n<p>If it is possible for the algorithm to declare nodes as failed (e.g. if a node may crash itself), then the availability property can be trivially satisfied: all nodes can be crashed, and thus no node is required to respond.<\/p>\n<\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0435, \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 CAP-\u0441\u0438\u0441\u0442\u0435\u043c (\u0442\u0430\u043c \u0436\u0435):<\/p>\n<blockquote>\n<p>Alternatively, if a minority of nodes is permanently partitioned from the majority, an algorithm could define the nodes in the minority partition as failed (by crashing them), while the majority partition continues implementing a linearizable register.<\/p>\n<\/blockquote>\n<p>\u0422.\u0435. \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e <code>P<\/code>, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a <code>failing<\/code>, \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f majority \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 <code>A<\/code> \u0438 <code>C<\/code>.<\/p>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 &#171;Inadequacies of CAP Theorem&#187; [5] \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<blockquote>\n<p>Availability ensures that every request is answered, even in the case of failures.<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0437\u044e\u043c\u0435: \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u043f\u0443\u0442\u0451\u043c \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 <code>non-failing node<\/code>. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <code>available<\/code>, \u0442\u043e \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u043e\u043b\u0436\u043d\u044b (eventually, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435) \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"pn\" id=\"pn\"><\/a><\/p>\n<h4>Partitioned Network<\/h4>\n<p>Gilbert &amp; Lynch \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>partitioned network<\/code>:<\/p>\n<blockquote>\n<p>When a network is partitioned, all messages sent from nodes in one component of the partition to nodes in another component are lost.<\/p>\n<\/blockquote>\n<p>\u0422.\u0435. \u0432\u043e\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0435\u0442\u044c, \u0441\u0435\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u044b (\u0437\u0430\u0447\u0435\u043c-\u0442\u043e) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u043d\u043e \u0438 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u2014 \u0442\u043e\u0436\u0435:<\/p>\n<blockquote>\n<p>Assume that the network consists of at least two nodes. Thus it can be divided into two <strong>disjoint<\/strong>, non-empty sets: <code>G1<\/code>, <code>G2<\/code>. The basic idea of the proof is to assume that all messages between <code>G1<\/code> and <code>G2<\/code> are lost.<br \/> &#8230;<br \/> Further, assume that no messages from <code>G1<\/code> are received in <code>G2<\/code>, and no messages from <code>G2<\/code> are received in <code>G1<\/code>.<br \/> &#8230;<br \/> During <code>alpha2<\/code> no messages from <code>G2<\/code> are received in <code>G1<\/code>, and no messages from <code>G1<\/code> are received in <code>G2<\/code><\/p>\n<\/blockquote>\n<p>Martin Kleppmann, \u043a\u0440\u0438\u0442\u0438\u043a\u0443\u044f, \u0434\u0430\u0451\u0442 \u0442\u0430\u043a\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 [3]:<\/p>\n<blockquote>\n<p>A network partition has long been defined as a communication failure in which the network is split into disjoint sub-networks, <strong>with no communication possible across sub-networks<\/strong>. This is a fairly narrow class of fault, but it does occur in practice, so it is worth studying.<\/p>\n<\/blockquote>\n<p>\u041e\u043d \u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0442\u0430\u043a\u0443\u044e \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044e \u0432 [4]:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/7e6\/8cb\/6d6\/7e68cb6d63e15e82d2bce1eebb77541d.png\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/7e6\/8cb\/6d6\/7e68cb6d63e15e82d2bce1eebb77541d.png\"\/><\/figure>\n<p>\u0422.\u0435. \u0432\u043e\u0442, \u0434\u0432\u0430 \u0434\u0430\u0442\u0430\u0446\u0435\u043d\u0442\u0440\u0430, \u043a\u0430\u0431\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0440\u0443\u0431\u043b\u0435\u043d, \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430\u0446\u0435\u043d\u0442\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442. \u0418\u0437 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0432 \u043e\u0434\u0438\u043d \u0442\u043e\u0436\u0435.<\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 &#171;Inadequacies&#8230;&#187; [5] \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 <code>partition<\/code> \u0442\u0430\u043a:<\/p>\n<blockquote>\n<p>A partition is a split within the systems in a distributed system which leads to <strong>complete loss of communications<\/strong> between affected nodes.<\/p>\n<\/blockquote>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0441\u044b\u043b\u043a\u0430 \u0438\u0434\u0451\u0442 \u043d\u0430 &#171;Perspectives on the CAP Theorem&#187; (Gilbert &amp; Lynch, 2012) [10], \u0433\u0434\u0435 <code>partitioned network<\/code> \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<blockquote>\n<p>Unlike the other two requirements, this property can be seen as a statement regarding the underlying system: communication among the servers is not reliable, and the servers may be partitioned into <strong>multiple groups that cannot communicate with each other<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0412\u0435\u043b\u0438\u043a\u0430 \u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u043c\u043e\u0434\u0435\u043b\u044f\u043c\u0438? \u0412\u0435\u043b\u0438\u043a\u0430. Gilbert &amp; Lynch \u0432 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u043e\u043c \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 <strong>\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442<\/strong> \u0434\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u0438 \u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f <code>partitioned network<\/code> \u0438 <strong>\u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442<\/strong> \u0441\u043b\u0443\u0447\u0430\u0439 <code>asymmetric network partition<\/code>, \u0442.\u0435. \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0435\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u0430 \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u2014 \u043d\u0435\u0442. \u0418 \u043d\u0438\u043a\u0442\u043e \u044f\u0432\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442, \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u0440\u0443\u0431\u044f\u0442 \u043a\u0430\u0431\u0435\u043b\u044c&#187;, \u0438 \u0432\u0441\u0451.<\/p>\n<p>\u041c\u044b \u0436\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0438\u043d\u0430\u0447\u0435 \u0438 \u0431\u0443\u0434\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 (\u0440\u0451\u0431\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f) \u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0440\u0430\u0444. \u0412\u0435\u0440\u0448\u0438\u043d\u044b \u2014 \u0443\u0437\u043b\u044b \u0441\u0435\u0442\u0438, \u0440\u0451\u0431\u0440\u0430 \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0430 \u2014 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f, \u0442.\u0435. \u0435\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c <code>A-&gt;B<\/code>, \u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c <code>B-&gt;A<\/code>.<\/p>\n<p>\u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438, \u043a\u0430\u043a Strongly Connected Graph \u0438 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Strongly_connected_component\" rel=\"noopener noreferrer nofollow\">Strongly Connected Component<\/a>:<\/p>\n<blockquote>\n<p>A <strong>directed graph<\/strong> is called <strong>strongly connected<\/strong> if there is a path in each direction between each pair of vertices of the graph. That is, a path exists from the first vertex in the pair to the second, and another path exists from the second vertex to the first.<br \/> &#8230;<br \/> a <strong>strongly connected component<\/strong> of a directed graph G is a subgraph that is strongly connected, and is maximal with this property: no additional edges or vertices from G can be included in the subgraph without breaking its property of being strongly connected.<\/p>\n<\/blockquote>\n<p>\u0418\u043d\u044b\u043c\u0438 \u044f\u0437\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444<\/strong> \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>\u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u043c<\/strong>, \u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u0432\u0435\u0440\u0448\u0438\u043d \u0433\u0440\u0430\u0444\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0443\u0442\u044c \u0432 \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445: \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0443\u0442\u044c \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0432 \u043f\u0430\u0440\u0435 \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u043f\u0443\u0442\u044c \u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043a \u043f\u0435\u0440\u0432\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438<\/strong> \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 <code>G<\/code> \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0433\u0440\u0430\u0444, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443: \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0438 \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0438\u043b\u0438 \u0440\u0435\u0431\u0440\u043e \u0438\u0437 <code>G<\/code> \u0432 \u043f\u043e\u0434\u0433\u0440\u0430\u0444, \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0438\u0432 \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c, \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0438 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u0430\u043a\u043e\u0439. \u041f\u0440\u0438\u043c\u0435\u0440 \u0433\u0440\u0430\u0444\u0430 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/\/post_images\/507\/77f\/e60\/50777fe603a6b562516bd8849b11b8be.png\" alt=\"Graph with strongly connected components marked\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/\/post_images\/507\/77f\/e60\/50777fe603a6b562516bd8849b11b8be.png\"\/><\/p>\n<div><figcaption>Graph with strongly connected components marked<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0443\u0442 \u0438\u043c\u0435\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438: <code>[[a,b,e], [c,d,h], [f,g]]<\/code>, \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0432\u044f\u0437\u044c \u0445\u043e\u0442\u044c \u0438 \u0435\u0441\u0442\u044c, \u043d\u043e &#171;\u044d\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0435&#187;.<\/p>\n<p>\u0412 \u0447\u0451\u043c \u0442\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430? \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0443, \u043f\u0440\u0438\u043d\u044f\u0442\u043e\u043c\u0443 \u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 \u043e\u0442 Gilbert &amp; Lynch \u0438 \u043f\u043e\u0434\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438\/\u043a\u0440\u0438\u0442\u0438\u043a\u0430\u043c\u0438, \u0442\u0430\u043a\u0430\u044f \u0441\u0435\u0442\u044c \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>partitioned<\/code>, \u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u043a \u0431\u044b \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <strong>\u043c\u043e\u0436\u0435\u0442<\/strong> \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c <code>C<\/code> \u0438 <code>A<\/code>. \u041d\u043e \u0432\u0435\u0434\u044c \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0437\u0435\u043b <code>f<\/code>, \u0442\u043e \u0443\u0437\u043b\u044b <code>a<\/code>, <code>b<\/code> \u0438 <code>e<\/code> \u0435\u0433\u043e \u043d\u0435 &#171;\u0443\u0432\u0438\u0434\u044f\u0442&#187;&#8230;<\/p>\n<p>\u0420\u0435\u0437\u044e\u043c\u0435: \u0442\u0443\u0442 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0435\u0448\u0438\u043c \u043f\u0443\u0442\u0451\u043c \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u0442\u0438. Partitioned \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0442\u0430\u043a: <strong>\u0441\u0435\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430<\/strong>, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0438\u043b\u044c\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><a class=\"anchor\" name=\"pt\" id=\"pt\"><\/a><\/p>\n<h4>Partition Tolerance<\/h4>\n<p>Gilbert &amp; Lynch \u044f\u0432\u043d\u043e \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d <code>Partition Tolerance<\/code>, \u043a\u043e\u0435-\u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0440\u043e <code>fault-tolerance<\/code>:<\/p>\n<blockquote>\n<p>When some nodes crash or some communication links fail, it is important that the service still perform as expected. One desirable <strong>fault-tolerance<\/strong> property is the ability to <strong>survive<\/strong> a network partitioning into multiple components.<\/p>\n<\/blockquote>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>survive<\/code> \u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e. Martin Kleppmann [3] \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>Partition Tolerance<\/code> &#171;\u0432\u0438\u0434\u0438\u0442&#187; \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u0438\u0447\u0443\u0434\u043b\u0438\u0432\u043e\u0439 \u0444\u043e\u0440\u043c\u0435, \u043a\u043e\u043d\u0441\u0442\u0430\u0442\u0438\u0440\u0443\u044f \u043d\u0435\u044f\u0441\u043d\u043e\u0441\u0442\u044c:<\/p>\n<blockquote>\n<p>It is less clear what partition tolerance means. Gilbert and Lynch [25] define a system as partition-tolerant if it continues to satisfy the consistency and availability properties in the presence of a partition.<\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u0435\u0435 Martin \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p>Fox and Brewer [24] define partition-resilience as &#171;the system as whole can survive a partition between data replicas&#187; (where <strong>survive is not defined<\/strong>).<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0441\u0435\u0442\u043e\u0432\u0430\u0432 \u043d\u0430 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438 \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u0440 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442:<\/p>\n<blockquote>\n<p>Thus, we can interpret <strong>partition tolerance<\/strong> as meaning &#171;a network partition is among the faults that are assumed to be possible in the system.&#187;<\/p>\n<\/blockquote>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u0442\u0443\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 <code>Partition Tolerance<\/code>. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0434\u0432\u0443\u043c\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438 \u0438\u0437 \u0442\u0440\u0451\u0445: <code>A<\/code> (availability), <code>C<\/code> (consistency) \u0438 <code>P<\/code> (partitioned), \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f <code>P<\/code> \u043c\u044b \u043c\u044b\u0441\u043b\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>\u0420\u0435\u0437\u044e\u043c\u0435: \u043f\u043e\u043d\u044f\u0442\u0438\u0435 <code>Partition Tolerance<\/code> \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p><a class=\"anchor\" name=\"conc\" id=\"conc\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f CAP-\u0441\u0432\u043e\u0439\u0441\u0442\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 Gilbert &amp; Lynch. \u041c\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438, \u0447\u0442\u043e \u0434\u0430, \u043a\u0440\u0438\u0442\u0438\u043a\u0438 \u043f\u0440\u0430\u0432\u044b \u2014 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u044b (\u043c\u044f\u0433\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f). \u041d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0430 \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0430\u043c \u0438 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c\u0443 &#171;\u0445\u043e\u043b\u0438\u0432\u0430\u0440\u0443&#187;.<\/p>\n<p>\u041d\u0430\u043c \u0434\u0430\u0436\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 Gilbert &amp; Lynch.<\/p>\n<p>\u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432 \u0446\u0435\u043b\u043e\u043c CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0430 \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u043d\u0430 &#171;\u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0440\u043d\u043e&#187;. \u041c\u044b \u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u043e\u0434\u043e\u0431\u0438\u043c\u0441\u044f \u0441\u044d\u0440\u0443 \u0418\u0441\u0430\u0430\u043a\u0443 \u041d\u044c\u044e\u0442\u043e\u043d\u0443, &#171;\u0432\u0441\u0442\u0430\u043d\u0435\u043c \u043d\u0430 \u043f\u043b\u0435\u0447\u0438 \u0433\u0438\u0433\u0430\u043d\u0442\u043e\u0432&#187; \u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u043d\u043e\u0442\u0430\u0446\u0438\u0435\u0439 Coq, \u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u2014 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0432 \u044d\u0442\u043e\u0439 \u043d\u043e\u0442\u0430\u0446\u0438\u0438 CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0443.<\/p>\n<p><a class=\"anchor\" name=\"cont\" id=\"cont\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/870936\" rel=\"noopener noreferrer nofollow\">CAP, Coq \u0438 \u0415\u0432\u043a\u043b\u0438\u0434<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"ref\" id=\"ref\"><\/a><\/p>\n<h3>\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/h3>\n<ol>\n<li>\n<p>Eric A. Brewer. Towards robust distributed systems. <em>Principles of Distributed Computing<\/em> (Invited Talk), 2000. URL <a href=\"https:\/\/sites.cs.ucsb.edu\/~rich\/class\/cs293b-cloud\/papers\/Brewer_podc_keynote_2000.pdf\" rel=\"noopener noreferrer nofollow\">https:\/\/sites.cs.ucsb.edu\/~rich\/class\/cs293b-cloud\/papers\/Brewer_podc_keynote_2000.pdf<\/a><\/p>\n<\/li>\n<li>\n<p>Seth Gilbert and Nancy Lynch. Brewer&#8217;s conjecture and the feasibility of consistent, available, partition-tolerant web services. <em>ACM SIGACT News<\/em>, 33(2):51\u201359, 2002. doi:10.1145\/564585.564601. URL <a href=\"https:\/\/users.ece.cmu.edu\/~adrian\/731-sp04\/readings\/GL-cap.pdf\" rel=\"noopener noreferrer nofollow\">https:\/\/users.ece.cmu.edu\/~adrian\/731-sp04\/readings\/GL-cap.pdf<\/a><\/p>\n<\/li>\n<li>\n<p>Martin Kleppmann. A Critique of the CAP Theorem. [Online], 2015. URL <a href=\"https:\/\/arxiv.org\/pdf\/1509.05393\" rel=\"noopener noreferrer nofollow\">https:\/\/arxiv.org\/pdf\/1509.05393<\/a><\/p>\n<\/li>\n<li>\n<p>Martin Kleppmann. Please stop calling databases CP or AP. [Online], 2015. URL <a href=\"https:\/\/martin.kleppmann.com\/2015\/05\/11\/please-stop-calling-databases-cp-or-ap.html\" rel=\"noopener noreferrer nofollow\">https:\/\/martin.kleppmann.com\/2015\/05\/11\/please-stop-calling-databases-cp-or-ap.html<\/a><\/p>\n<\/li>\n<li>\n<p>Omkar Patinge, Vineet Karkhanis, Amey Barapatre. Inadequacies of CAP Theorem. International Journal of Computer Applications (0975 \u2013 8887) Volume 151 \u2013 No.10, October 2016. URL <a href=\"https:\/\/www.ijcaonline.org\/archives\/volume151\/number10\/patinge-2016-ijca-911921.pdf\" rel=\"noopener noreferrer nofollow\">https:\/\/www.ijcaonline.org\/archives\/volume151\/number10\/patinge-2016-ijca-911921.pdf<\/a><\/p>\n<\/li>\n<li>\n<p>D. Abadi. Problems with CAP, and Yahoo&#8217;s little known NoSQL system. [Online], 2010. URL <a href=\"http:\/\/dbmsmusings.blogspot.com\/2010\/04\/problems-with-cap-and-yahoos-little.html\" rel=\"noopener noreferrer nofollow\">http:\/\/dbmsmusings.blogspot.com\/2010\/04\/problems-with-cap-and-yahoos-little.html<\/a><\/p>\n<\/li>\n<li>\n<p>D. Yadav and M. Butler, Rigorous Design of Fault-Tolerant Transactions for Replicated Database Systems using Event B. [Online], 2006. URL <a href=\"https:\/\/eprints.soton.ac.uk\/262096\/1\/reft.pdfq\" rel=\"noopener noreferrer nofollow\">https:\/\/eprints.soton.ac.uk\/262096\/1\/reft.pdfq<\/a><\/p>\n<\/li>\n<li>\n<p>&#171;Jepsen.io&#187;. Serializability. URL <a href=\"https:\/\/jepsen.io\/consistency\/models\/serializable\" rel=\"noopener noreferrer nofollow\">https:\/\/jepsen.io\/consistency\/models\/serializable<\/a><\/p>\n<\/li>\n<li>\n<p>&#171;Jepsen.io&#187;. Linearizability. URL <a href=\"https:\/\/jepsen.io\/consistency\/models\/linearizable\" rel=\"noopener noreferrer nofollow\">https:\/\/jepsen.io\/consistency\/models\/linearizable<\/a><\/p>\n<\/li>\n<li>\n<p>Seth Gilbert and Nancy Lynch. Perspectives on the CAP Theorem. 2012. URL <a href=\"https:\/\/groups.csail.mit.edu\/tds\/papers\/Gilbert\/Brewer2.pdf\" rel=\"noopener noreferrer nofollow\">https:\/\/groups.csail.mit.edu\/tds\/papers\/Gilbert\/Brewer2.pdf<\/a><\/p>\n<\/li>\n<li>\n<p>Daniel Abadi. Correctness Anomalies Under Serializable Isolation. [Online], 2019. URL <a href=\"https:\/\/dbmsmusings.blogspot.com\/2019\/06\/correctness-anomalies-under.html\" rel=\"noopener noreferrer nofollow\">https:\/\/dbmsmusings.blogspot.com\/2019\/06\/correctness-anomalies-under.html<\/a><\/p>\n<\/li>\n<li>\n<p>Nancy Lynch. Distributed Algorithms. <em>Morgan Kaufman, 1996<\/em>. URL <a href=\"https:\/\/dl.acm.org\/doi\/pdf\/10.5555\/2821576\" rel=\"noopener noreferrer nofollow\">https:\/\/dl.acm.org\/doi\/pdf\/10.5555\/2821576<\/a><\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/870864\/\"> https:\/\/habr.com\/ru\/articles\/870864\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>CAP-n-Coq. \u0427\u0430\u0441\u0442\u044c 1. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b<\/h2>\n<figure class=\"\"><\/figure>\n<p>No subject appears to be more controversial to distributed systems engineers than the oft-quoted, oft-misunderstood CAP theorem. <a href=\"https:\/\/www.the-paper-trail.org\/page\/cap-faq\/\" rel=\"noopener noreferrer nofollow\">The CAP FAQ<\/a><\/p>\n<p>\u2014 \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u0442\u0435\u0431\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u044e&#8230; \u2014 \u041e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u044f \u0438 \u0441\u0430\u043c \u043c\u043e\u0433\u0443, \u0442\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0438, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442! (\u0418\u0437 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430 \u043f\u043e\u043b\u0438\u0442\u043e\u043b\u043e\u0433\u043e\u0432, \u043d\u043e \u0434\u043b\u044f CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u0436\u0435)<\/p>\n<p>\u2014 \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0436\u0435 \u0437\u0430\u043f\u0438\u0448\u0435\u043c CAP \u0432 Coq \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. (\u042f)<\/p>\n<h3>\u041e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/h3>\n<p>\u0412 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u0430\u0439: \u043b\u044e\u0431\u043e\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0435\u043e\u0440\u0435\u043c\u0435 CAP (\u044d\u0434\u0430\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%93%D0%BE%D0%B4%D0%B2%D0%B8%D0%BD%D0%B0\" rel=\"noopener noreferrer nofollow\">\u0437\u0430\u043a\u043e\u043d\u0430 \u0413\u043e\u0434\u0432\u0438\u043d\u0430<\/a>).<\/p>\n<p>\u0414\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043c\u0438\u043c\u043e \u043c\u0435\u043d\u044f. \u042f \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0437\u0433\u043b\u044f\u0434\u043e\u043c \u043f\u043e CAP-\u0441\u0442\u0430\u0442\u044c\u044f\u043c, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u043d\u0430 habr, \u043d\u043e \u0432 \u0441\u0438\u043b\u0443 \u043a\u0430\u0436\u0443\u0449\u0435\u0439\u0441\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u0430 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f &#171;\u043f\u0440\u043e\u0431\u0435\u0433\u0430\u043d\u0438\u0435\u043c&#187; \u0434\u0435\u043b\u043e \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u043e\u0441\u044c. \u0414\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u044f \u0443\u0434\u0438\u0432\u043b\u044f\u043b\u0430 \u0441\u0432\u043e\u0435\u0439 \u0436\u0438\u0432\u0443\u0447\u0435\u0441\u0442\u044c\u044e \u0438 \u043a\u043b\u0438\u043a\u0431\u0435\u0439\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432: &#171;<a href=\"https:\/\/habr.com\/ru\/articles\/328792\/\" rel=\"noopener noreferrer nofollow\">\u0412\u0441\u0451, \u0447\u0442\u043e \u0432\u044b \u043d\u0435 \u0437\u043d\u0430\u043b\u0438 \u043e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/a>&#171;, &#171;<a href=\"https:\/\/habr.com\/ru\/articles\/322276\/\" rel=\"noopener noreferrer nofollow\">\u041c\u0438\u0444\u044b \u043e CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u0435<\/a>&#171;&#8230; \u0447\u0442\u043e \u0442\u0443\u0442 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0442\u044c (\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b)?<\/p>\n<p>\u0427\u0435\u043c \u043f\u0440\u043e\u0449\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f, \u0442\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u0435\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0439 \u0434\u043e\u0441\u043a\u043e\u043d\u0430\u043b\u044c\u043d\u043e. \u0418 \u0432\u043e\u0442, \u043a\u0430\u043a-\u0442\u043e \u043c\u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u043e\u0434\u0438\u043d &#171;\u0448\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u044b\u0439&#187;, \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442&#8230; \u041b\u0430\u0434\u043d\u043e, &#171;OK, Google&#187;: [1], [2], [3], [4], [5].<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f &#171;\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432&#187; \u043f\u0440\u0438\u0447\u0438\u043d\u044b &#171;\u0445\u043e\u043b\u0438\u0432\u0430\u0440\u043d\u043e\u0441\u0442\u0438&#187; \u0434\u0438\u0441\u043a\u0443\u0441\u0441\u0438\u0438 \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>In this paper we survey some of the confusion about the meaning of CAP, including <strong>inconsistencies and ambiguities in its definitions<\/strong>, and we highlight some problems in its formalization [3].<\/p>\n<\/li>\n<li>\n<p>The problem lies in the <strong>open-ended definitions<\/strong> of CAP which are subject to interpretations [5].<\/p>\n<\/li>\n<\/ul>\n<p>\u0428\u0435\u0440\u043e\u0445\u043e\u0432\u0430\u0442\u043e\u0441\u0442\u0435\u0439, \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0438\u0442\u0430\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432, \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438 \u0438\u0445. <\/p>\n<figure class=\"\"><\/figure>\n<h3>\u0421\u0432\u0435\u0442\u043b\u044b\u0439 \u043f\u0443\u0442\u044c<\/h3>\n<p>\u0417\u0430\u0442\u0435\u0432\u0430\u044f \u0441\u0442\u0430\u0440\u0442\u0430\u043f \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u043c\u0443 &#171;\u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044e&#187;\/&#187;\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e&#187; CAP-\u0442\u0435\u043e\u0440\u0435\u043c\u044b, \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c key differentiators. \u0414\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451, \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u043d\u043e\u0435 value, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u044b\u043f\u0430\u0434\u043e\u0432 \u0432 \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u043e \u0446\u0435\u0445\u0443 \u0438 \u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0438\u0440\u0443 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441\u043b\u043e\u0432 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0443\u0442\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0442\u0440\u043e\u0438\u0446\u044b.<\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u2014 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043e\u0440\u0435\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 <a href=\"https:\/\/coq.inria.fr\/\" rel=\"noopener noreferrer nofollow\">Coq<\/a>, \u0442\u0430\u043a \u0432\u0440\u043e\u0434\u0435 \u0435\u0449\u0451 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u043b. \u0412 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0430\u044e\u0442 \u0432\u0438\u0434 &#171;\u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0431\u0443\u043c\u0430\u0436\u043a\u0438&#187;, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u0438\u0437 \u0447\u0451\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0430\u043a\u0441\u0438\u043e\u043c\u0430\u0442\u0438\u043a\u0438. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 Coq \u2014 \u043a\u0440\u0430\u0442\u043a\u043e\u0435, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f.<\/p>\n<p>\u0412\u0442\u043e\u0440\u0430\u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u0438\u0434\u0435\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0435 \u0435\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0430. \u0427\u0442\u043e\u0431\u044b \u0435\u0451 \u043f\u043e\u043d\u044f\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0438 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0441\u043d\u0443\u0442\u044c\u0441\u044f \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432.<\/p>\n<p>\u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u044d\u0442\u043e\u0433\u043e, \u0441\u0447\u0438\u0442\u0430\u044e, \u043d\u0430\u043f\u0440\u0430\u0441\u043d\u044b\u043c \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>\u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#gl\" rel=\"noopener noreferrer nofollow\">Gilbert &amp; Lynch<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#def\" rel=\"noopener noreferrer nofollow\">\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/a> <\/p>\n<ul>\n<li>\n<p><a href=\"#lin\" rel=\"noopener noreferrer nofollow\">Linearizable Consistency (Atomic Data Objects)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#av\" rel=\"noopener noreferrer nofollow\">Availability (Available Data Objects)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pn\" rel=\"noopener noreferrer nofollow\">Partitioned Network<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#pt\" rel=\"noopener noreferrer nofollow\">Partition Tolerance<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#conc\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#cont\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#ref\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"cap\" id=\"cap\"><\/a><\/p>\n<h3>Gilbert &amp; Lynch<\/h3>\n<p>\u0421\u043a\u0430\u0436\u0443 \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043f\u0440\u043e \u0431\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e Gilbert &amp; Lynch, &#171;Brewer&#8217;s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services&#187;, 2002 [2].<\/p>\n<p>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0418\u0418 claude.ai \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u0451 \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u0437\u043e\u0440:<\/p>\n<blockquote>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 &#171;\u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b \u0411\u0440\u044e\u0435\u0440\u0430&#187; \u043e \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0412 \u043d\u0435\u0439 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0442\u0440\u0438 \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c (consistency) &#8212; \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0442\u0430\u043a, \u0431\u0443\u0434\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c (availability) &#8212; \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e (partition tolerance) &#8212; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0441\u0435\u0442\u0438 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0410\u0432\u0442\u043e\u0440\u044b \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0435\u0442\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0432\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 \u0442\u0440\u0451\u0445. \u041e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0430\u0431\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c\u044e \u043a \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>\u042d\u0442\u043e \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u0430\u043a \u0442\u0435\u043e\u0440\u0435\u043c\u0430 CAP (Consistency-Availability-Partition tolerance), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/blockquote>\n<p>\u041d\u0430 \u0447\u0442\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435. \u041f\u0435\u0440\u0432\u043e\u0435 \u2014 \u0437\u0430\u043d\u044f\u0442\u043d\u043e\u0435 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430 <code>web service<\/code> (\u044d\u0442\u043e \u0431\u044b\u043b, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, 2002 \u0433\u043e\u0434), \u0446\u0438\u0442\u0438\u0440\u0443\u044e:<\/p>\n<blockquote>\n<p>Most <code>web services<\/code> today attempt to provide strongly consistent data. There has been significant research designing ACID databases, and most of the new frameworks for building distributed <code>web services<\/code> depend on these databases. Interactions with <code>web services<\/code>&#8230;<\/p>\n<\/blockquote>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u2014 \u043c\u043e\u043b, &#171;\u0430\u0432\u0442\u043e\u0440\u044b \u0434\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435&#187;. \u041a\u0430\u043a \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u044d\u0442\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 &#171;\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0435&#187; \u0438, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443. \u0412\u0441\u0451 \u044d\u0442\u043e \u043c\u044b \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<p>\u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p><a class=\"anchor\" name=\"def\" id=\"def\"><\/a><\/p>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 Coq \u043e\u0447\u0435\u043d\u044c \u0437\u043b\u043e\u0439. \u041e\u043d \u0434\u0430\u0436\u0435 \u0437\u043b\u0435\u0435, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 Rust (\u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c). \u0412\u043e\u0434\u0430 \u0438\u0437 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u0449\u0430\u0434\u043d\u043e \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u044b\u043f\u0430\u0440\u0435\u043d\u0430, \u0438\u043d\u0430\u0447\u0435 \u0434\u0430\u0436\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0443 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p><a class=\"anchor\" name=\"lin\" id=\"lin\"><\/a><\/p>\n<h4>Linearizable Consistency (Atomic Data Objects)<\/h4>\n<p>\u0420\u0430\u0441\u0441\u0443\u0436\u0434\u0430\u044f \u043f\u0440\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c (<code>consistency<\/code>), Gilbert &amp; Lynch \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d <code>linearizable<\/code> \u0438 \u0434\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f (\u0437\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0451):<\/p>\n<blockquote>\n<p>Atomic, or linearizable, consistency is the condition expected by most web services today. Under this consistency guarantee, there must exist a <strong>total order<\/strong> on all operations such that each operation <strong>looks as if it were completed at a single instant<\/strong>. This is equivalent to requiring requests of the distributed shared memory to act as if they were executing on a single node, responding to operations one at a time.<\/p>\n<\/blockquote>\n<p>\u042d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u0442\u0430\u043a\u0438\u043c \u0432\u0438\u0434\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u0443\u0442\u0430\u0442\u044c \u0441 <code>One Copy Serializability<\/code>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e Yadav &amp; Butler [7]:<\/p>\n<blockquote>\n<p>The One Copy Serializability is the highest correctness criterion for replica control protocols&#8230; In order to achieve this correctness criterion, it is required that interleaved execution of transactions on replicas be equivalent to <strong>serial execution of those transactions on one copy of a database<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0418\u043b\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441 <code>Serializability<\/code> [8]:<\/p>\n<blockquote>\n<p>Informally, serializability means that transactions appear to have occurred in some <strong>total order<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0414\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0430\u0431\u044b\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 Immortal Write (\u0411\u0435\u0441\u0441\u043c\u0435\u0440\u0442\u043d\u0430\u044f \u0417\u0430\u043f\u0438\u0441\u044c), Stale Read (\u041d\u0435\u0441\u0432\u0435\u0436\u0435\u0435 \u0427\u0442\u0435\u043d\u0438\u0435), Causal Reverse (\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u041f\u0440\u0438\u0447\u0438\u043d\u043d\u043e\u0441\u0442\u044c). \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c. Daniel Abadi [11] (\u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u0437 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043c\u043e\u0435\u0439 <a href=\"https:\/\/habr.com\/ru\/articles\/705332\/#d-abadi-introduction-to-transaction-isolation-levels\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a>).<\/p>\n<p>\u0411\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>linearizable<\/code> \u0434\u0430\u043d\u043e \u0432 [9], \u0442\u0443\u0442 \u0443\u0436\u0435 \u043d\u0435\u0442 \u043f\u0440\u043e &#171;single node&#187;:<\/p>\n<blockquote>\n<p>Linearizability is one of the strongest single-object consistency models, and implies that every operation appears to take place atomically, in some order, consistent with the <strong>real-time<\/strong> ordering of those operations: e.g., if operation A completes before operation B begins, then B should logically take effect after A.<\/p>\n<\/blockquote>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/CAP_theorem\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438<\/a> \u2014 \u043a\u0430\u0436\u0434\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 <strong>real-time<\/strong>) \u0437\u0430\u043f\u0438\u0441\u0438.<\/p>\n<p>\u0420\u0435\u0437\u044e\u043c\u0438\u0440\u0443\u044f: \u0442\u0435\u0440\u043c\u0438\u043d <code>linearizable<\/code> &#8212; \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439, \u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u0442 \u0447\u0443\u0442\u044c \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443.<\/p>\n<p><a class=\"anchor\" name=\"av\" id=\"av\"><\/a><\/p>\n<h4>Availability (Available Data Objects)<\/h4>\n<p>Gilbert &amp; Lynch \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 <code>Available Data Objects<\/code> \u0442\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>continuously available<\/code> (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0442\u043e\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <code>availability<\/code>):<\/p>\n<blockquote>\n<p>For a distributed system to be <strong>continuously available<\/strong>, every request received by a non-failing node in the system must result in a response. That is, any algorithm used by the service must eventually terminate. In some ways this is a weak definition of availability: it puts no bound on how long the algorithm may run before terminating, and therefore allows unbounded computation. On the other hand, when qualified by the need for partition tolerance, this can be seen as a strong definition of availability: even when severe network failures occur, every request must terminate.<\/p>\n<\/blockquote>\n<p>\u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0443\u0437\u0435\u043b \u043d\u0435 &#171;\u0441\u043b\u043e\u043c\u0430\u043b\u0441\u044f&#187;, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441. \u0418\u043d\u0430\u0447\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>continuously available<\/code>.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435, \u043a \u0441\u043b\u043e\u0432\u0443, \u043f\u043e\u0431\u0443\u0434\u0438\u043b\u043e \u043c\u0435\u043d\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>non-failing node<\/code>? \u041c\u043e\u0436\u0435\u0442 \u043b\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u043a\u0430\u043a <code>failing<\/code>? \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0438 Martin Kleppmann [3]:<\/p>\n<blockquote>\n<p>If it is possible for the algorithm to declare nodes as failed (e.g. if a node may crash itself), then the availability property can be trivially satisfied: all nodes can be crashed, and thus no node is required to respond.<\/p>\n<\/blockquote>\n<p>\u0415\u0441\u043b\u0438 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0435, \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 CAP-\u0441\u0438\u0441\u0442\u0435\u043c (\u0442\u0430\u043c \u0436\u0435):<\/p>\n<blockquote>\n<p>Alternatively, if a minority of nodes is permanently partitioned from the majority, an algorithm could define the nodes in the minority partition as failed (by crashing them), while the majority partition continues implementing a linearizable register.<\/p>\n<\/blockquote>\n<p>\u0422.\u0435. \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e <code>P<\/code>, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0437\u043b\u044b \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a <code>failing<\/code>, \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f majority \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 <code>A<\/code> \u0438 <code>C<\/code>.<\/p>\n<p>\u0412 \u0440\u0430\u0431\u043e\u0442\u0435 &#171;Inadequacies of CAP Theorem&#187; [5] \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<blockquote>\n<p>Availability ensures that every request is answered, even in the case of failures.<\/p>\n<\/blockquote>\n<p>\u0420\u0435\u0437\u044e\u043c\u0435: \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u0430\u044f \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u043c \u043f\u0443\u0442\u0451\u043c \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 <code>non-failing node<\/code>. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <code>available<\/code>, \u0442\u043e \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0434\u043e\u043b\u0436\u043d\u044b (eventually, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435) \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u044b. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"pn\" id=\"pn\"><\/a><\/p>\n<h4>Partitioned Network<\/h4>\n<p>Gilbert &amp; Lynch \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442, \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 <code>partitioned network<\/code>:<\/p>\n<blockquote>\n<p>When a network is partitioned, all messages sent from nodes in one component of the partition to nodes in another component are lost.<\/p>\n<\/blockquote>\n<p>\u0422.\u0435. \u0432\u043e\u0442 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0435\u0442\u044c, \u0441\u0435\u0442\u044c \u0440\u0430\u0437\u0431\u0438\u0442\u0430 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438, \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0430\u0432\u0442\u043e\u0440\u044b (\u0437\u0430\u0447\u0435\u043c-\u0442\u043e) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0440\u0443\u0433\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442, \u043d\u043e \u0438 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u2014 \u0442\u043e\u0436\u0435:<\/p>\n<blockquote>\n<p>Assume that the network consists of at least two nodes. Thus it can be divided into two <strong>disjoint<\/strong>, non-empty sets: <code>G1<\/code>, <code>G2<\/code>. The basic idea of the proof is to assume that all messages between <code>G1<\/code> and <code>G2<\/code> are lost.<br \/> &#8230;<br \/> Further, assume that no messages from <code>G1<\/code> are received in <code>G2<\/code>, and no messages from <code>G2<\/code> are received in <code>G1<\/code>.<br \/> &#8230;<br \/> During <code>alpha2<\/code> no messages from <code>G2<\/code> are received in <code>G1<\/code>, and no messages from <code>G1<\/code> are received in <code>G2<\/code><\/p>\n<\/blockquote>\n<p>Martin Kleppmann,<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-443874","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443874","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=443874"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/443874\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=443874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=443874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=443874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}