{"id":479662,"date":"2026-05-14T05:40:56","date_gmt":"2026-05-14T05:40:56","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=479662"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=479662","title":{"rendered":"\u0422\u0430\u0439\u043d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u0438 \u0438\u043b\u0438 System Design \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0448\u0430\u0448\u043b\u044b\u043a\u0430 \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<blockquote>\n<p><strong>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440:<\/strong> \u044d\u0442\u043e \u043d\u0435 stand-up \u0438 \u043d\u0435 \u043f\u0430\u0440\u043e\u0434\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0435 \u043d\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438: TL;DR, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0430\u0440\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432, failure modes, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, references \u043d\u0430 DDIA \/ Release It! \/ Use The Index Luke. \u0412\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 12+ \u0433\u043e\u0434\u0430\u0445 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.<\/p>\n<p>\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0441\u0442\u0430: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043a \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a hi-load backend. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u044c\u043c\u0438 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438 \u0442\u0435 \u0436\u0435 \u0448\u0430\u0433\u0438: workload analysis, paired comparisons, failure modes, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430 \u0436\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435.<\/p>\n<\/blockquote>\n<hr\/>\n<h2>TL;DR<\/h2>\n<ul>\n<li>\n<p><strong>\u0427\u0442\u043e \u0441\u0442\u0440\u043e\u0438\u043c:<\/strong> \u0448\u0430\u0448\u043b\u044b\u043a-pipeline \u0434\u043b\u044f \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439. \u041e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b\u044c\u0449\u0438\u043a (\u043f\u0430\u043f\u0430, \u0434\u044f\u0434\u044f \u0438\u043b\u0438 \u043c\u0443\u0436 \u0441\u0435\u0441\u0442\u0440\u044b), \u043e\u0434\u0438\u043d \u0443\u0447\u0430\u0441\u0442\u043e\u043a, 4-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430:<\/strong> 20 \u0433\u043e\u0441\u0442\u0435\u0439 \u00d7 ~2.2 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c = <strong>~45 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445<\/strong> (~9-11 \u043a\u0433 \u043c\u044f\u0441\u0430). \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 (\u043e\u0442 0 \u0434\u043e 5-6 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u0433\u043e\u0441\u0442\u044f; \u043a\u0442\u043e-\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0435\u0441\u0442 \u043c\u044f\u0441\u043e, \u043d\u043e \u0442\u0430\u043a\u0438\u0445 1-2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430). Bursty profile: \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0438\u043a \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0435, \u043f\u043e\u0442\u043e\u043c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u0434\u043a\u043b\u0430\u0434\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430:<\/strong> producer-consumer pattern \u0441 <strong>\u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u043e\u0439 \u043a\u0430\u043a bounded buffer<\/strong>. \u0428\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u043f\u0430\u0440\u0442\u0438\u044f\u043c\u0438, \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u044f\u0441\u043e \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432 \u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443, \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0443\u043b, \u0433\u043e\u0441\u0442\u0438 \u0431\u0435\u0440\u0443\u0442 \u0438\u0437 \u0431\u043b\u044e\u0434\u0430 \u0441\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u043e:<\/strong> \u043d\u0430 \u0434\u0430\u0447\u0435, +28\u00b0C, \u0448\u0442\u0438\u043b\u044c. <strong>\u0428\u0435\u0444 sustained rate 12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b<\/strong> (8-10 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432, ~13 \u043c\u0438\u043d \u043d\u0430 batch), \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u043b\u044e\u0434\u0430 0.8-1.2 \u043f\u043e\u0440\u0446\u0438\u0438\/\u043c\u0438\u043d \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441. 0 burnt \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f:<\/strong> 50+ \u0433\u043e\u0441\u0442\u0435\u0439 (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 hybrid \u2014 ordering layer \u043f\u043e\u0432\u0435\u0440\u0445 producer-consumer, 3+ \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443-\u0448\u0435\u0444\u043e\u0432), \u0434\u043e\u0436\u0434\u044c \u0431\u0435\u0437 \u0442\u0435\u043d\u0442\u0430, \u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0446\u0435\u0432 &gt; 30% (cross-contamination \u043d\u0430 \u0431\u043b\u044e\u0434\u0435), \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 +5 \u0433\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f (\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433).<\/p>\n<\/li>\n<\/ul>\n<hr\/>\n<h2>1. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<h3>1.1. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/h3>\n<p><strong>\u0428\u0430\u0448\u043b\u044b\u043a-\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0434\u0430\u0447\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435<\/strong> (single-host) \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><strong>\u0414\u0435\u043d\u044c \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f<\/strong>: 15-25 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0438 \u0434\u0440\u0443\u0437\u0435\u0439, \u043e\u0434\u043d\u043e 4-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435<\/strong>: 8-15 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0430\u0447\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0441 \u0434\u0435\u0442\u044c\u043c\u0438 \u0438 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u0441\u0435\u0434\u0441\u043a\u0438\u0439 \u0448\u0430\u0448\u043b\u044b\u043a-\u0434\u0435\u043d\u044c<\/strong>: 3-6 \u0441\u0435\u043c\u0435\u0439 (15-25 \u0447\u0435\u043b\u043e\u0432\u0435\u043a), distributed potluck-style ingest (\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0441\u0432\u043e\u0451 \u043c\u044f\u0441\u043e).<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432 backend-\u043e\u0442\u0434\u0435\u043b\u0430 (mini)<\/strong>: 10-20 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432: \u00ab\u043c\u044f\u0441\u043e\u00bb \u0438 \u00abvegetables-only\u00bb.<\/p>\n<\/li>\n<li>\n<p><strong>\u0412\u0441\u0442\u0440\u0435\u0447\u0430 \u0441\u043e \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438<\/strong>: 12-20 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445, durability = how-many-old-stories \u00d7 time.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043c\u044f\u0441\u0430: <strong>\u0440\u044b\u043d\u043e\u043a<\/strong> (push-\u043c\u043e\u0434\u0435\u043b\u044c: \u00ab\u0432\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0441\u0432\u0435\u0436\u0435\u0435, \u0440\u0435\u0436\u0443 \u043f\u0440\u0438 \u0432\u0430\u0441\u00bb) \u0438\u043b\u0438 <strong>\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442<\/strong> (pull-\u043c\u043e\u0434\u0435\u043b\u044c: \u00ab\u0431\u0435\u0440\u0451\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043a\u0435\u00bb). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 <strong>\u0447\u0442\u043e \u041d\u0415 \u0432\u0445\u043e\u0434\u0438\u0442<\/strong>: multi-tenant \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, real-time WebSocket \u0434\u043b\u044f \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0445, multi-region \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c.<\/p>\n<p><strong>\u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0441\u0432\u0430\u0434\u044c\u0431\u0435 \u043d\u0430 100 \u0433\u043e\u0441\u0442\u0435\u0439.<\/strong> \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u044b\u0441\u044f\u0447 \u0434\u0430\u0447, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0434\u043e \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.<\/p>\n<h3>1.2. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b (\u0442\u0438\u043f \u043c\u044f\u0441\u0430: \u0441\u0432\u0438\u043d\u0438\u043d\u0430 \/ \u043a\u0443\u0440\u0438\u0446\u0430 \/ \u0440\u044b\u0431\u0430 \/ vegetables)<\/p>\n<\/li>\n<li>\n<p>\u0425\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u044f\u0441\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e (\u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a: \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0430\u0440 \u043e\u0442\u0432\u043b\u0451\u043a\u0441\u044f, \u0431\u043b\u044e\u0434\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442)<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441\u044b: \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441\u00bb, \u00ab\u0447\u0442\u043e \u0435\u0449\u0451 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438\u00bb, \u00ab\u0434\u0430\u0439\u0442\u0435 \u043c\u043d\u0435 \u0435\u0449\u0451\u00bb<\/p>\n<\/li>\n<li>\n<p>Health check: \u043e\u0433\u043e\u043d\u044c \u043d\u0435 \u0442\u0443\u0445, \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0448\u0435\u0444 \u0436\u0438\u0432<\/p>\n<\/li>\n<li>\n<p>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 admin-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: \u043b\u0438\u0441\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f + \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 (\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439)<\/p>\n<\/li>\n<\/ul>\n<h3>1.3. \u041d\u0435\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Dimension<\/p>\n<\/th>\n<th>\n<p align=\"left\">Target<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Producer throughput<\/p>\n<\/td>\n<td>\n<p align=\"left\">12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e (\u0448\u0435\u0444 + 1 \u043c\u0430\u043d\u0433\u0430\u043b)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Latency \u0431\u043b\u044e\u0434\u0430 p99<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;5 \u043c\u0438\u043d \u043e\u0442 \u0441\u043d\u044f\u0442\u0438\u044f \u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u0434\u043e \u0442\u0430\u0440\u0435\u043b\u043a\u0438 \u0433\u043e\u0441\u0442\u044f (\u0435\u0441\u043b\u0438 \u0431\u043b\u044e\u0434\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u043e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Wait time, \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u044e\u0434\u043e \u043f\u0443\u0441\u0442\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;8 \u043c\u0438\u043d \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438 (1 \u0446\u0438\u043a\u043b \u0433\u043e\u0442\u043e\u0432\u043a\u0438)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Durability<\/p>\n<\/td>\n<td>\n<p align=\"left\">Zero burn loss + zero food poisoning (TTL \u043c\u044f\u0441\u0430 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 &lt; 30 \u043c\u0438\u043d)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Idempotency<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c batch N (\u0448\u0435\u0444 tracks: \u043a\u0430\u043a\u043e\u0439 batch \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Operational complexity<\/p>\n<\/td>\n<td>\n<p align=\"left\">1 host + 1 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444, \u0431\u0435\u0437 on-call \u043f\u043e\u0441\u043b\u0435 23:00<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>1.4. \u0427\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (\u044f\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b)<\/h3>\n<ul>\n<li>\n<p><strong>Multi-tenant<\/strong>: \u043e\u0434\u0438\u043d host, \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u0415\u0441\u043b\u0438 \u0443 \u0441\u043e\u0441\u0435\u0434\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u043e\u0439 \u0448\u0430\u0448\u043b\u044b\u043a, \u043d\u0435 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Multi-source ingestion<\/strong>: \u043c\u044f\u0441\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0421\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c 5 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u043d\u043e\u0439 schema = chaos.<\/p>\n<\/li>\n<li>\n<p><strong>Real-time fan-out<\/strong> \u0432 \u043e\u0431\u0449\u0438\u0439 \u0447\u0430\u0442 \u0434\u043b\u044f \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0445: \u043f\u0443\u0441\u0442\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u0437\u0430\u043f\u0430\u0445, pull-\u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>Multi-region<\/strong>: \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u0434\u0432\u043e\u0440\u0435. \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043a \u0441\u043e\u0441\u0435\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0431\u043e\u0440 \u0432\u043d\u0435 \u0433\u0440\u0430\u043d\u0438\u0446.<\/p>\n<\/li>\n<li>\n<p><strong>Sub-5-\u043c\u0438\u043d\u0443\u0442 latency<\/strong>: \u044d\u0442\u043e \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043d\u044b\u0439 tier, \u0434\u0430\u0447\u0430 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>HA \/ failover<\/strong>: \u0435\u0441\u043b\u0438 \u0448\u0435\u0444 \u0443\u0441\u0442\u0430\u043b, \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0440\u044b\u0432 20 \u043c\u0438\u043d\u0443\u0442. \u0413\u043e\u0441\u0442\u0438 \u043f\u043e\u0439\u043c\u0443\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u00ab\u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u00bb \u2014 \u044d\u0442\u043e <strong>\u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0438\u043b\u0438\u0435<\/strong>. Premature scaling \u0448\u0430\u0448\u043b\u044b\u043a\u0430 (\u00ab\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043a\u0430\u043a \u0443 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u043e\u0432\u00bb) \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432\u044b\u0433\u043e\u0440\u0430\u0435\u0442 \u043a \u0442\u0440\u0435\u0442\u044c\u0435\u043c\u0443 \u0447\u0430\u0441\u0443 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h3>1.5. \u0427\u0442\u043e \u0432\u043d\u0435 scope \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 (\u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430)<\/h3>\n<p>\u0428\u0430\u0448\u043b\u044b\u043a-pipeline \u2014 \u044d\u0442\u043e <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441<\/strong> \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0430\u0447\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Service<\/p>\n<\/th>\n<th>\n<p align=\"left\">Pattern<\/p>\n<\/th>\n<th>\n<p align=\"left\">SLA<\/p>\n<\/th>\n<th>\n<p align=\"left\">Backend analog<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041d\u0430\u043f\u0438\u0442\u043a\u0438<\/strong> (\u0432\u043e\u0434\u0430, \u0433\u043e\u0440\u044f\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0447\u0430\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Self-service \u043e\u0442 \u0441\u0442\u043e\u043b\u0430, prep \u0434\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u00ab\u0412\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0445\u043e\u043b\u043e\u0434\u043d\u0430\u044f \u0432\u043e\u0434\u0430\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">Independent service, separate DB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0430\u043b\u0430\u0442\u044b \/ \u0437\u0430\u043a\u0443\u0441\u043a\u0438<\/strong> (\u043e\u043b\u0438\u0432\u044c\u0435, \u0441\u0435\u043b\u0451\u0434\u043a\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Pre-event batch, \u043b\u0435\u0436\u0430\u0442 \u0432 \u043c\u0438\u0441\u043a\u0430\u0445, read-only \u043f\u043e\u0441\u043b\u0435 18:00<\/p>\n<\/td>\n<td>\n<p align=\"left\">Topped up \u0440\u0435\u0434\u043a\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CDN static content<\/strong> (many readers, no writers)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0425\u043b\u0435\u0431 \/ \u043b\u0430\u0432\u0430\u0448<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Pre-staged, self-service<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u00ab\u041d\u0435 \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">Static asset, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 replenishment<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0414\u0435\u0441\u0435\u0440\u0442\u044b \/ \u0447\u0430\u0439<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Late-stage service, \u043f\u043e\u0441\u043b\u0435 22:00<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0448\u0430\u0448\u043b\u044b\u043a wind-down<\/p>\n<\/td>\n<td>\n<p align=\"left\">Async job triggered by upstream event<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b \u043e\u0442 \u0448\u0430\u0448\u043b\u044b\u043a-pipeline (\u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u044b, \u0440\u0430\u0437\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0440\u0430\u0437\u043d\u044b\u0435 SLA). \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0431\u044b <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 microservices<\/strong> \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u0428\u0430\u0448\u043b\u044b\u043a \u2014 \u0441\u0430\u043c\u044b\u0439 \u0442\u044f\u0436\u0451\u043b\u044b\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 (real-time producer-consumer), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0444\u043e\u043a\u0443\u0441\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 \u0434\u043b\u044f \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 trade-offs (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c).<\/p>\n<p><strong>\u0423\u0440\u043e\u043a \u0434\u043b\u044f backend:<\/strong> \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0439 <strong>\u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432<\/strong>. \u0428\u0430\u0448\u043b\u044b\u043a-pipeline \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u0435\u043d; \u043d\u0430\u043f\u0438\u0442\u043a\u0438 \u0438 \u0441\u0430\u043b\u0430\u0442\u044b \u2014 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0441\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u0434 \u0432\u0441\u0435 use cases.<\/p>\n<hr\/>\n<h2>2. \u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430<\/h2>\n<p>\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445: \u043e\u0442 <strong>\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430<\/strong> \u043a <strong>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044f\u0441\u0430 \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c<\/strong>.<\/p>\n<h3>2.1. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430 (20 \u0433\u043e\u0441\u0442\u0435\u0439)<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/1f\/0e\/dc\/1f0edc5ae299589753708e61b69be8c4.png\" alt=\"Pareto distribution \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/1f\/0e\/dc\/1f0edc5ae299589753708e61b69be8c4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/1f\/0e\/dc\/1f0edc5ae299589753708e61b69be8c4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Pareto distribution \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435, \u0430 <strong>\u043f\u0430\u0440\u0435\u0442\u043e-\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0435<\/strong>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0428\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0435\u043b<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041a\u043e\u043b-\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0418\u0442\u043e\u0433\u043e \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Non-meat (\u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0435\u0446, \u0434\u0438\u0435\u0442\u0430, \u043f\u043e\u0435\u043b \u043f\u043b\u043e\u0442\u043d\u043e \u0434\u043e\u043c\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-2<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Light (\u0434\u0435\u0442\u0438, \u043f\u043e\u0435\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0439 \u0430\u043f\u043f\u0435\u0442\u0438\u0442)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0.5-1<\/p>\n<\/td>\n<td>\n<p align=\"left\">5-6<\/p>\n<\/td>\n<td>\n<p align=\"left\">~5<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Average (\u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0430\u043f\u043f\u0435\u0442\u0438\u0442, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">2-3<\/p>\n<\/td>\n<td>\n<p align=\"left\">9-10<\/p>\n<\/td>\n<td>\n<p align=\"left\">~22<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Heavy (\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043c\u044f\u0441\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">4<\/p>\n<\/td>\n<td>\n<p align=\"left\">3<\/p>\n<\/td>\n<td>\n<p align=\"left\">12<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Hot key<\/strong> (\u043e\u0434\u0438\u043d \u2014 \u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">5-6<\/p>\n<\/td>\n<td>\n<p align=\"left\">1<\/p>\n<\/td>\n<td>\n<p align=\"left\">~5-6<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Total consumed<\/strong> (avg ~2.2\/\u0447\u0435\u043b)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><strong>20<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>~44<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">+ \u0420\u0435\u0437\u0435\u0440\u0432 \/ \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0441 \u0434\u0435\u0442\u044c\u043c\u0438 \/ \u0443\u043f\u0430\u043b\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><strong>~50<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">+ \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><strong>~55<\/strong><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Total: <strong>~50-55 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445<\/strong> = <strong>~10-11 \u043a\u0433 \u043c\u044f\u0441\u0430<\/strong> (200 \u0433 \u043d\u0430 \u0448\u0430\u043c\u043f\u0443\u0440).<\/p>\n<h3>2.2. \u041e\u0434\u0438\u043d \u0448\u0430\u043c\u043f\u0443\u0440 (production primitive)<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0435\u0441 \u043c\u044f\u0441\u0430 \u043d\u0430 \u0448\u0430\u043c\u043f\u0443\u0440\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">200-250 \u0433 (6-8 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">12-15 \u043c\u0438\u043d\u0443\u0442 (\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\u043c\u0438 \u043a\u0430\u0436\u0434\u044b\u0435 3-4 \u043c\u0438\u043d)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">8-10 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 batch size)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0428\u0435\u0444 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0441 \u043e\u0434\u043d\u0438\u043c \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u043c, \u0430 \u0441 <strong>\u043f\u0430\u0440\u0442\u0438\u0435\u0439<\/strong> \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435. \u041a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0442\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043c\u044f\u0441\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f <strong>\u0432 \u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443<\/strong>, \u0430 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0443\u043b \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438.<\/p>\n<h3>2.3. Producer rate (\u0448\u0435\u0444 + 1 \u043c\u0430\u043d\u0433\u0430\u043b)<\/h3>\n<ul>\n<li>\n<p>1 batch = 8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e<\/p>\n<\/li>\n<li>\n<p>1 batch cycle = <strong>~13 \u043c\u0438\u043d\u0443\u0442<\/strong> (cook + \u0441\u043d\u044f\u0442\u044c \u043d\u0430 \u0431\u043b\u044e\u0434\u043e + \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u0430\u043d\u0433\u0430\u043b)<\/p>\n<\/li>\n<li>\n<p><strong>~4.6 batches\/\u0447\u0430\u0441<\/strong> = <strong>~38-46 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441<\/strong> theoretical max<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e <strong>\u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 production\u2019\u0430<\/strong>. Realistic sustained 12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441: \u0448\u0435\u0444 \u043e\u0442\u0434\u044b\u0445\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 batches, \u043f\u044c\u0451\u0442 \u0447\u0430\u0439, \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0435\u0442 \u0441 \u0433\u043e\u0441\u0442\u044f\u043c\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <strong>\u0433\u043e\u0441\u0442\u0438 \u043d\u0435 \u0435\u0434\u044f\u0442 46\/\u0447\u0430\u0441<\/strong>: \u043e\u043d\u0438 \u0435\u0434\u044f\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 25-30 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441, \u043f\u043e\u0442\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0411\u043b\u044e\u0434\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u0435\u0442.<\/p>\n<h3>2.4. Single-host aggregate scenarios<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Scenario<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">Total \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432<\/p>\n<\/th>\n<th>\n<p align=\"left\">Active grilling time<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439 \u0443\u0436\u0438\u043d (\u043c\u0430\u043c\u0430-\u043f\u0430\u043f\u0430-\u0434\u0435\u0442\u0438-\u0431\u0430\u0431\u0443\u0448\u043a\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">4-6<\/p>\n<\/td>\n<td>\n<p align=\"left\">10-15<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-1.5 \u0447<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Friendly BBQ (\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0437\u0435\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">8-12<\/p>\n<\/td>\n<td>\n<p align=\"left\">18-30<\/p>\n<\/td>\n<td>\n<p align=\"left\">1.5-2.5 \u0447<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0414\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u043d\u0430 20 (\u043d\u0430\u0448\u0430 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">20<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>45-55<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>3-4 \u0447<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0432\u0430\u0434\u044c\u0431\u0430 \/ \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">50+<\/p>\n<\/td>\n<td>\n<p align=\"left\">100+<\/p>\n<\/td>\n<td>\n<p align=\"left\">6+ \u0447 (\u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433-\u0443\u0440\u043e\u0432\u0435\u043d\u044c)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Tier 0 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 = ~50 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a<\/strong> \u043d\u0430 1 \u043c\u0430\u043d\u0433\u0430\u043b + \u043f\u0430\u043f\u0430\/\u0434\u044f\u0434\u044f \u043a\u0430\u043a \u0448\u0435\u0444 + \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444. \u0423\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 <strong>3-4 \u0447\u0430\u0441\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043a\u0438<\/strong> \u0441 \u0440\u0430\u0441\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u043d\u044b\u043c \u0442\u0435\u043c\u043f\u043e\u043c.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 50+ \u0433\u043e\u0441\u0442\u0435\u0439 \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 ticket-based ordering + 3+ \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432 (\u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e \u043d\u0430 \u043d\u0435\u0439 \u043c\u044f\u0441\u043e \u0441\u0442\u043e\u0438\u0442, food safety \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f).<\/p>\n<hr\/>\n<h2>3. \u0410\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/h2>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 <strong>\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/strong>: \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0438\u043a\u0430\u043c\u0438. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0443\u0433\u0430\u0434. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c 4 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043d\u0430\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u00a75.<\/p>\n<h3>3.1. Retry rate vs effective production<\/h3>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0442\u044b \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438\u043d\u0430\u0447\u0435, \u0447\u0435\u043c \u0432 ticket-\u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u00ab\u0425\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435\u00bb<\/strong>: \u043a\u0443\u0441\u043e\u043a \u043e\u0441\u0442\u044b\u043b, \u0433\u043e\u0441\u0442\u044c \u043a\u043b\u0430\u0434\u0451\u0442 \u043d\u0430 \u043a\u0440\u0430\u0439 \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0433\u0440\u0435\u0442\u044c (~5%)<\/p>\n<\/li>\n<li>\n<p><strong>\u00ab\u041e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u043d\u0435\u0434\u043e\u0436\u0430\u0440\u0438\u043b\u0441\u044f\u00bb<\/strong>: \u0433\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b \u043d\u0430 2 \u043c\u0438\u043d (~3%)<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0435\u0437\u0435\u0440\u0432 (\u043e\u0441\u0442\u0430\u0442\u043a\u0438)<\/strong>: \u043d\u0435\u0441\u044a\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043c\u044f\u0441\u043e \u043a \u043a\u043e\u043d\u0446\u0443 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb (\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0443\u0432\u0435\u0437\u043b\u0438). \u042d\u0442\u043e <strong>\u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f, \u044d\u0442\u043e feature<\/strong> (~10-15% \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430)<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 ticket-\u043c\u043e\u0434\u0435\u043b\u0438 (\u0437\u0430\u043a\u0430\u0437 \u2192 \u0448\u0430\u043c\u043f\u0443\u0440 \u2192 \u0433\u043e\u0441\u0442\u044c) \u0437\u0434\u0435\u0441\u044c <strong>\u043d\u0435\u0442 per-guest retry<\/strong>. \u0415\u0441\u043b\u0438 \u043c\u044f\u0441\u043e \u043f\u043b\u043e\u0445\u043e\u0435, \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u044a\u0435\u0434\u0435\u043d\u043e \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u041c\u0435\u0442\u0440\u0438\u043a\u0430: <strong>plate clearance rate<\/strong> (\u043a\u0430\u043a\u043e\u0439 % \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u044a\u0435\u043b\u0438 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a).<\/p>\n<p>\u041f\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 clearance ~85-90%. \u0415\u0441\u043b\u0438 &lt;70%, \u0447\u0442\u043e-\u0442\u043e \u0441 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u043e\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u043e\u0439 (\u043d\u043e \u043d\u0435 \u00abretry storm\u00bb: \u0433\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c).<\/p>\n<h3>3.2. Backpressure \u2014 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0444\u0435\u0440\u0430<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cc\/0b\/cf\/cc0bcf5d781f3e4911c079ee01496276.png\" alt=\"Backpressure feedback loop\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/cc\/0b\/cf\/cc0bcf5d781f3e4911c079ee01496276.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/cc\/0b\/cf\/cc0bcf5d781f3e4911c079ee01496276.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Backpressure feedback loop<\/figcaption><\/div>\n<\/figure>\n<p>\u0411\u043b\u044e\u0434\u043e \u2014 \u044d\u0442\u043e <strong>bounded buffer<\/strong>. Capacity ~10-15 \u043f\u043e\u0440\u0446\u0438\u0439 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u044f\u0441\u0430. \u0428\u0435\u0444 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043a\u043b\u0430\u0441\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u0411\u043b\u044e\u0434\u043e <strong>\u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f<\/strong> (\u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442) \u2192 \u0448\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043d\u0430 \u043e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u0411\u043b\u044e\u0434\u043e <strong>\u043f\u043e\u043b\u043d\u043e\u0435<\/strong> \u2192 \u0448\u0435\u0444 <strong>\u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442<\/strong> (\u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c, \u043c\u044f\u0441\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u043c)<\/p>\n<\/li>\n<li>\n<p><strong>Steady state<\/strong> = \u0448\u0435\u0444 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0442\u0435\u043c\u043f: \u043a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0430<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0431\u043b\u044e\u0434\u043e \u043e\u043f\u0443\u0441\u0442\u0435\u043b\u043e \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u0430\u0440\u0442\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430 \u2192 wait time spike (\u0445\u043e\u0440\u043e\u0448\u0430\u044f backpressure-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u0442)<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <strong>backpressure<\/strong> \u0432 \u0447\u0438\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u0412 backend \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445: producer \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 buffer \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u044b\u0439, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 anticipation, \u043a\u043e\u0433\u0434\u0430 buffer drain\u2019\u0438\u0442\u0441\u044f.<\/p>\n<h3>3.3. Hot keys \u2014 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0438\u0437\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435<\/h3>\n<p>\u00abHot key\u00bb \u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0434\u0451\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0440\u0435\u0441\u0443\u0440\u0441. \u041d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u0435 \u044d\u0442\u043e <strong>\u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043e\u043f\u0430\u0441\u043d\u0435\u0435<\/strong>, \u0447\u0435\u043c \u0432 ticket-\u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p>\u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0435\u0441\u0442 5-6 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 (~12-15% \u043e\u0442 ~44 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f). \u041f\u0440\u0438 ticket-\u043c\u043e\u0434\u0435\u043b\u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c <strong>6 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432<\/strong> \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438 \u0432\u0441\u0435 \u0441\u0442\u043e\u044f\u043b\u0438 \u0431\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c. \u041f\u0440\u0438 <strong>\u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u0435<\/strong> \u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u043f\u0440\u043e\u0441\u0442\u043e <strong>\u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438 \u0431\u0435\u0440\u0451\u0442 \u0431\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438<\/strong>: \u043d\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u043e\u0441\u043b\u0435 batch\u2019\u0430, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0431\u043b\u044e\u0434\u0430 \u0443\u0448\u043b\u0430 \u0435\u043c\u0443, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043a \u043f\u0443\u0441\u0442\u043e\u043c\u0443 \u0431\u043b\u044e\u0434\u0443.<\/p>\n<p><strong>\u0427\u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>No queue fairness<\/strong>: first-come-first-served \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435<\/p>\n<\/li>\n<li>\n<p><strong>Burst-protection \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442<\/strong>: \u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0432 \u043e\u0434\u0438\u043d \u0437\u0430\u0445\u043e\u0434 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0438\u0442\u044c \u0431\u043b\u044e\u0434\u043e<\/p>\n<\/li>\n<li>\n<p><strong>Hot key effect amplified<\/strong>: \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u044e\u0434\u043e \u043c\u0435\u043b\u043a\u043e\u0435<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u044f<\/strong> (\u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 social complexity):<\/p>\n<ol>\n<li>\n<p><strong>Social rate limiting<\/strong>: \u0434\u044f\u0434\u0435 \u041f\u0435\u0442\u0435 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u00ab\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u0437\u0430 \u0440\u0430\u0437\u00bb. \u0414\u0451\u0448\u0435\u0432\u043e, \u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 social pressure<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043b\u044e\u0434<\/strong>: \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u044e\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043c\u044f\u0441\u0430, \u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0431\u0435\u0440\u0451\u0442 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441 \u0434\u0440\u0443\u0433\u043e\u0433\u043e<\/p>\n<\/li>\n<li>\n<p><strong>Manual portioning<\/strong>: \u043f\u0430\u043f\u0430 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u0442\u0430\u0440\u0435\u043b\u043a\u0430\u043c \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e (\u043d\u043e \u044d\u0442\u043e ticket-\u043c\u043e\u0434\u0435\u043b\u044c, \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f async-\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e)<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 \u043e\u0431\u044b\u0447\u043d\u043e <strong>(1) \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e<\/strong>: \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u043d\u0430\u0435\u0442 \u0434\u044f\u0434\u044e \u041f\u0435\u0442\u044e \u0438 \u043f\u043e\u0434\u043a\u043e\u043b\u044b \u043f\u0440\u043e \u0435\u0433\u043e \u0430\u043f\u043f\u0435\u0442\u0438\u0442. \u041d\u0430 50+ \u0433\u043e\u0441\u0442\u044f\u0445 \u0441\u0440\u0435\u0434\u0438 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 \u043d\u0435\u0442 social pressure, \u043d\u0443\u0436\u043d\u0430 (2) \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 hybrid \u0441 ordering layer (\u0441\u043c. \u00a710).<\/p>\n<p><strong>Tech analog<\/strong>: \u0448\u0443\u043c\u043d\u044b\u0439 \u0441\u043e\u0441\u0435\u0434 \u0432 multi-tenant \u0431\u0435\u0437 \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u0438. \u0420\u0435\u0448\u0430\u0435\u0442\u0441\u044f per-tenant rate limiting (token bucket): \u0443 \u043d\u0430\u0441 social token bucket \u0447\u0435\u0440\u0435\u0437 \u0448\u0443\u0442\u043e\u0447\u043a\u0438.<\/p>\n<h3>3.4. Producer\/consumer rate balance<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/08\/13\/e9\/0813e90d6e6f3698b5b66f8664ee6647.png\" alt=\"Producer\/Consumer rate balance \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/08\/13\/e9\/0813e90d6e6f3698b5b66f8664ee6647.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/08\/13\/e9\/0813e90d6e6f3698b5b66f8664ee6647.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Producer\/Consumer rate balance \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 \u043d\u0435\u0442 \u00abreads vs writes\u00bb \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e: <strong>producer rate (\u0448\u0435\u0444 \u043a\u043b\u0430\u0434\u0451\u0442 \u043d\u0430 \u0431\u043b\u044e\u0434\u043e) vs consumer rate (\u0433\u043e\u0441\u0442\u0438 \u0431\u0435\u0440\u0443\u0442 \u0441 \u0431\u043b\u044e\u0434\u0430)<\/strong>:<\/p>\n<ul>\n<li>\n<p><strong>Producer (\u0448\u0435\u0444):<\/strong> 8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043a\u0430\u0436\u0434\u044b\u0435 13 \u043c\u0438\u043d\u0443\u0442 = ~40-46\/\u0447\u0430\u0441 theoretical max, ~12-15\/\u0447\u0430\u0441 sustained<\/p>\n<\/li>\n<li>\n<p><strong>Consumer (20 \u0433\u043e\u0441\u0442\u0435\u0439):<\/strong> \u043f\u0438\u043a \u0434\u043e 25-30\/\u0447\u0430\u0441 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441, \u043f\u043e\u0442\u043e\u043c 5-15\/\u0447\u0430\u0441 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e, \u0441\u043d\u0438\u0436\u0430\u044f\u0441\u044c \u043a \u043a\u043e\u043d\u0446\u0443 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u043b\u044e\u0434\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0428\u0435\u0444 rate<\/p>\n<\/th>\n<th>\n<p align=\"left\">Guest rate<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0411\u043b\u044e\u0434\u043e depth<\/p>\n<\/th>\n<th>\n<p align=\"left\">Status<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:00-19:15 (warmup)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e (\u0448\u0435\u0444 \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u0442 \u043c\u0430\u043d\u0433\u0430\u043b)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:15-19:30 (1st batch)<\/p>\n<\/td>\n<td>\n<p align=\"left\">35\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">filling<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u044e\u0434\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:30-20:00 (peak hour)<\/p>\n<\/td>\n<td>\n<p align=\"left\">40\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">30\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e ~5-8 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">balanced<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">20:00-21:30 (sustained)<\/p>\n<\/td>\n<td>\n<p align=\"left\">15\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">12\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e ~3-5 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">low load<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">21:30-22:30 (late)<\/p>\n<\/td>\n<td>\n<p align=\"left\">5\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">3\/\u0447\u0430\u0441<\/p>\n<\/td>\n<td>\n<p align=\"left\">shrinking<\/p>\n<\/td>\n<td>\n<p align=\"left\">wind-down<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">22:30+ (\u043e\u0441\u0442\u0430\u0442\u043a\u0438)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">0<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0441\u0442\u0430\u0442\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Key insight:<\/strong> \u0448\u0435\u0444 \u0438 \u0433\u043e\u0441\u0442\u0438 <strong>decoupled<\/strong> \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e. \u0413\u043e\u0441\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0436\u0434\u0451\u0442 \u0448\u0435\u0444\u0430, \u0448\u0435\u0444 \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0437\u0430\u043a\u0430\u0437. <strong>\u042d\u0442\u043e backbone async event-driven \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.<\/strong><\/p>\n<p><strong>Architectural implications:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0411\u043b\u044e\u0434\u043e = bounded buffer (Kafka topic \u0441 retention TTL)<\/strong>: capacity 10-15 \u043f\u043e\u0440\u0446\u0438\u0439, TTL ~30 \u043c\u0438\u043d (\u043f\u043e\u0441\u043b\u0435 food safety)<\/p>\n<\/li>\n<li>\n<p><strong>Backpressure<\/strong>: \u0448\u0435\u0444 \u0432\u0438\u0434\u0438\u0442, \u0447\u0442\u043e \u0431\u043b\u044e\u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0435, \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0430\u0443\u0437\u0443 (\u0441\u043c. \u00a73.2). \u0412 backend \u044d\u0442\u043e producer \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 consumer lag \u0438 \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Async decoupling<\/strong>: \u0448\u0435\u0444 \u0438 \u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u0412 backend \u044d\u0442\u043e producer service \u0438 consumer service, \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<\/li>\n<li>\n<p><strong>Eventual consistency<\/strong>: \u0433\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u0448\u0451\u043b \u0447\u0435\u0440\u0435\u0437 10 \u043c\u0438\u043d \u043f\u043e\u0441\u043b\u0435 batch\u2019\u0430, \u0435\u0441\u0442, \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u041d\u0435 \u00abexactly the skewer ordered\u00bb, \u0430 \u00abwhat\u2019s available\u00bb.<\/p>\n<\/li>\n<\/ul>\n<h3>3.5. Burst vs sustained<\/h3>\n<p><strong>\u0428\u0435\u0444 production rate<\/strong> \u043f\u043e\u0447\u0442\u0438 <strong>\u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043f\u0438\u043a\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e<\/strong>. \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u0432\u0435\u0447\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><strong>18:00-19:00 (prep):<\/strong> 0 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u043e, \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u0432 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0435, \u043c\u0430\u043d\u0433\u0430\u043b \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u0439<\/p>\n<\/li>\n<li>\n<p><strong>19:00-19:30 (warmup + 1st batch):<\/strong> 0-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432, warm-up phase, \u0434\u043b\u0438\u043d\u043d\u044b\u0439 TTFB<\/p>\n<\/li>\n<li>\n<p><strong>19:30-20:30 (peak hour):<\/strong> \u0448\u0435\u0444 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 25-30 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u2192 \u0431\u043b\u044e\u0434\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u2192 \u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 \u2192 \u0431\u043b\u044e\u0434\u043e \u0432 \u0431\u0430\u043b\u0430\u043d\u0441\u0435<\/p>\n<\/li>\n<li>\n<p><strong>20:30-22:00 (sustained):<\/strong> \u0448\u0435\u0444 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 12-15\/\u0447\u0430\u0441 \u2192 \u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442 ~10\/\u0447\u0430\u0441 \u2192 \u0431\u043b\u044e\u0434\u043e \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f, \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f<\/p>\n<\/li>\n<li>\n<p><strong>22:00+ (wind-down):<\/strong> \u0448\u0435\u0444 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb<\/p>\n<\/li>\n<\/ul>\n<p><strong>Math sanity check:<\/strong> 30 (peak hour) + 25 + 5 (sustained 1.5h) \u2248 50-55 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u0421\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 TL;DR (~50 \u0433\u043e\u0442\u043e\u0432\u044b\u0445, ~10-11 \u043a\u0433 \u043c\u044f\u0441\u0430).<\/p>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439:<\/p>\n<ul>\n<li>\n<p><strong>Pre-warm \u043c\u0430\u043d\u0433\u0430\u043b\u0430<\/strong>: \u0448\u0435\u0444 \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u0442 \u0434\u043e \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0439 (mitigate cold start)<\/p>\n<\/li>\n<li>\n<p><strong>Burst absorption<\/strong>: \u0431\u043b\u044e\u0434\u043e \u0451\u043c\u043a\u043e\u0441\u0442\u044c\u044e 10-15 \u043f\u043e\u0440\u0446\u0438\u0439 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0430\u0441 \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0432\u043e\u043b\u043d\u0443<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0435\u0437\u0435\u0440\u0432 \u0443\u0433\u043b\u044f 50%<\/strong>: \u0437\u0430\u043f\u0430\u0441 \u0434\u043b\u044f \u0432\u0435\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043f\u0438\u043a\u0430<\/p>\n<\/li>\n<li>\n<p><strong>Cooking surface \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d \u043d\u0430 peak<\/strong>: 1\u00d7 large \u043b\u0438\u0431\u043e 2\u00d7 standard parallel (\u0441\u043c. \u00a75.3)<\/p>\n<\/li>\n<li>\n<p><strong>Pre-loaded \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a<\/strong>: \u043c\u044f\u0441\u043e \u0437\u0430\u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u043e \u0438 \u0433\u043e\u0442\u043e\u0432\u043e \u0434\u043e \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0442\u0434\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0442\u0438\u044f\u043c\u0438<\/strong>: \u0432 \u043f\u0435\u0440\u0438\u043e\u0434 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0448\u0435\u0444 \u043d\u0435 \u0432\u044b\u0433\u043e\u0440\u0430\u0435\u0442 \u043a 22:00<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 <strong>\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 40\/\u0447\u0430\u0441 \u0437\u0430 8+ \u0447\u0430\u0441\u043e\u0432<\/strong> \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0434\u0440\u0443\u0433\u0430\u044f (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432 \u0441 \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438): \u043f\u0440\u043e\u043c-\u043c\u0430\u043d\u0433\u0430\u043b, \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0437\u0435\u0440\u0432, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u0434\u0440\u043e\u0432. \u041d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u0434\u0430\u0447\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>Designing Data-Intensive Applications<\/strong> (Kleppmann), Ch1 \u00abReliability, Scalability, Maintainability\u00bb: applies \u043a \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0448\u0430\u0448\u043b\u044b\u043a<\/p>\n<\/li>\n<li>\n<p><strong>Systems Performance<\/strong> (Brendan Gregg), Ch2 \u00abMethodology\u00bb: USE method (Utilization, Saturation, Errors), \u043c\u0430\u043d\u0433\u0430\u043b utilization, \u043e\u0447\u0435\u0440\u0435\u0434\u044c saturation, burnt errors<\/p>\n<\/li>\n<li>\n<p><strong>\u00abCapacity Planning for Internet Services\u00bb<\/strong> (Allspaw): \u043f\u0440\u043e bursts vs sustained, sized \u0434\u043b\u044f peak<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<h2>4. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fd\/ab\/f1\/fdabf134c84bd5092ff3571bf186219d.png\" alt=\"\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/fd\/ab\/f1\/fdabf134c84bd5092ff3571bf186219d.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/fd\/ab\/f1\/fdabf134c84bd5092ff3571bf186219d.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0414\u0432\u0430 \u043f\u0443\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Default (95-99%)<\/strong>: \u0448\u0435\u0444 \u2192 \u0431\u043b\u044e\u0434\u043e \u2192 \u0433\u043e\u0441\u0442\u044c (async \u0447\u0435\u0440\u0435\u0437 \u0431\u0443\u0444\u0435\u0440)<\/p>\n<\/li>\n<li>\n<p><strong>Direct VIP (1-5%)<\/strong>: \u0448\u0435\u0444 \u2192 \u0448\u0430\u043c\u043f\u0443\u0440 \u2192 connoisseur (bypass \u0431\u043b\u044e\u0434\u043e, sync handoff)<\/p>\n<\/li>\n<\/ul>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e: natural async pull. Connoisseur (1-2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439) \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 direct delivery (special-case bypass). \u042d\u0442\u043e classic <strong>default path + premium bypass<\/strong> pattern. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0432 \u00a75.1.<\/p>\n<p><strong>\u041e\u0434\u0438\u043d \u0448\u0435\u0444 (\u043f\u0430\u043f\u0430 \/ \u0434\u044f\u0434\u044f), 1\u00d7 large \u0438\u043b\u0438 2\u00d7 standard \u043c\u0430\u043d\u0433\u0430\u043b\u0430, 1 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a, \u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043a\u0430\u043a \u0431\u0443\u0444\u0435\u0440.<\/strong> Producer-consumer pattern \u0441 bounded buffer: <strong>backbone async event-driven \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b<\/strong>, \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u043d\u0430 \u0434\u0430\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a.<\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0442\u0435\u043a (\u00a74.1) \u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f (\u00a75).<\/p>\n<h3>4.1. Stack<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u044b\u0431\u043e\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0430\u0451\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0442\u0435\u043f\u043b\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0423\u0433\u043e\u043b\u044c (\u0431\u0435\u0440\u0451\u0437\u043e\u0432\u044b\u0439) + \u0441\u0442\u0430\u0440\u0442\u0435\u0440 \u0434\u043b\u044f \u0443\u0433\u043b\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">I\/O-bound (\u0442\u0435\u043f\u043b\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430), \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432 \u0437\u0430 15 \u043c\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Cooking surface<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439: 1\u00d7 large (90+ \u0441\u043c, 12-15 \u0448\u0430\u043c\u043f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e) \u0418\u041b\u0418 2\u00d7 standard (60\u00d730 \u043a\u0430\u0436\u0434\u044b\u0439, parallel) \u2014 \u0441\u043c. \u00a75.3<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0440\u0435\u043b\u0430\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0448\u0430\u043c\u043f\u0443\u0440\u0430\u043c\u0438<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Skewer pool<\/strong> (resource pool)<\/p>\n<\/td>\n<td>\n<p align=\"left\">15-20 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e (8-10 \u0432 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 + 5-10 \u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u0447\u0438\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u043d\u044f\u0442\u0438\u044f \u043c\u044f\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u043b\u044e\u0434\u043e \/ \u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430<\/strong> (bounded buffer)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043b\u0443\u0431\u043e\u043a\u043e\u0435 \u0441\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0435 \u0431\u043b\u044e\u0434\u043e, \u0451\u043c\u043a\u043e\u0441\u0442\u044c 10-15 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">Async decoupling \u0448\u0435\u0444 \u2194 \u0433\u043e\u0441\u0442\u0438, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 backpressure<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0425\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u044b\u0442\u043e\u0432\u043e\u0439 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a 280L<\/p>\n<\/td>\n<td>\n<p align=\"left\">Durable, \u0432\u044b\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 4 \u0447\u0430\u0441\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u044f\/\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Marinade pipeline<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0442\u043e\u0432\u044b\u0439 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 (8h \u0444\u0435\u0440\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f) + \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">Pre-staged async pipeline<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0434\u0430\u0447\u0430 \u0442\u0430\u0440\u0435\u043b\u043e\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u043e\u043b \u0441 \u0442\u0430\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">Self-service, \u0433\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u0438 \u0431\u0435\u0440\u0443\u0442<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h3>4.2. Containers: \u0442\u0430\u0440\u0435\u043b\u043a\u0438 + \u0448\u0430\u043c\u043f\u0443\u0440\u044b, \u0431\u0435\u0437 \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u043a\u0438<\/h3>\n<p>\u0414\u043e\u0440\u043e\u0433\u0430\u044f \u0441\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0430\u0451\u0442 \u00ab\u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u00bb: \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0440\u044f\u0434\u043d\u0443\u044e \u043f\u043e\u0434\u0430\u0447\u0443, \u0444\u043e\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u0446\u0441\u0435\u0442\u0435\u0439.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u0447\u043d\u043e\u043c \u0448\u0430\u0448\u043b\u044b\u043a\u0435 \u044d\u0442\u043e <strong>operational tax \u0431\u0435\u0437 \u0432\u044b\u0433\u043e\u0434\u044b<\/strong>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0434\u0430\u0451\u0442 \u0441\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Visual appeal<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u0438 \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0435, \u0438\u043c \u0432\u0430\u0436\u043d\u0430 \u0435\u0434\u0430, \u0430 \u043d\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0438\u0437 Pinterest<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Fancy presentation<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0435\u0440\u0435\u0437 \u0447\u0430\u0441 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0432 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u043f\u043e\u043c\u043d\u0438\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0424\u043e\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u0446\u0441\u0435\u0442\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0435\u043b\u0430\u044e\u0442 2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0435\u0434\u044f\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Fine dining ratio<\/p>\n<\/td>\n<td>\n<p align=\"left\">1:1 \u0442\u0430\u0440\u0435\u043b\u043a\u0430\/\u0433\u043e\u0441\u0442\u044c \u043d\u0430\u0448\u0430, full-service 1:3 (overkill)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0422\u0430\u0440\u0435\u043b\u043a\u0438 + \u0448\u0430\u043c\u043f\u0443\u0440\u044b<\/strong> = stage 1 default. Fine dining \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0434\u043b\u044f food critic (\u043d\u0435 \u043d\u0430\u0448 \u0441\u043b\u0443\u0447\u0430\u0439).<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u044b \u0434\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>\u00abTwelve-Factor \u0428\u0430\u0448\u043b\u044b\u043a\u00bb<\/strong> (\u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u043e\u0433 12factor.net): III. \u0417\u0430\u043a\u0443\u043f\u043a\u0438 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435, IV. Backing services (\u0441\u043e\u0441\u0435\u0434\u0441\u043a\u0438\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0432\u043e\u0434\u0430), IX. Disposability (\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0434\u0430\u043d\u043d\u044b\u0445)<\/p>\n<\/li>\n<li>\n<p><strong>\u00abBuilding Microservices\u00bb \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u043a \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433\u0443<\/strong>, Ch3 \u00abWhen NOT to use professional catering\u00bb: must-read \u0434\u043b\u044f \u0434\u0430\u0447 \u0434\u043e 100 \u0447\u0435\u043b\u043e\u0432\u0435\u043a<\/p>\n<\/li>\n<li>\n<p><strong>\u00abChoose Boring Technology\u00bb<\/strong> (Dan McKinley): \u043c\u0435\u0442\u043e\u0434\u043e\u043b\u043e\u0433\u0438\u044f \u00abinnovation tokens\u00bb. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c ~3 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430 (\u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0440\u0438\u043d\u0430\u0434, \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0443\u0441, \u043d\u043e\u0432\u0430\u044f \u043c\u044f\u0441\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f). \u041a\u0430\u0436\u0434\u044b\u0439 \u2014 \u044d\u0442\u043e investment.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<h2>5. Key design decisions<\/h2>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c <strong>\u0434\u0435\u0432\u044f\u0442\u044c<\/strong> \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u043d\u044f\u044e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. Cosmetic-\u0443\u0440\u043e\u0432\u0435\u043d\u044c (\u0441\u0432\u0438\u043d\u0438\u043d\u0430 vs \u0431\u0430\u0440\u0430\u043d\u0438\u043d\u0430, \u043a\u0435\u0442\u0447\u0443\u043f vs \u0430\u0434\u0436\u0438\u043a\u0430, \u043b\u0438\u043c\u043e\u043d\u0430\u0434 vs \u043c\u043e\u0440\u0441 \u2014 \u0432\u0441\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435) \u0436\u0438\u0432\u0451\u0442 \u0432 README \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<blockquote>\n<p><strong>\u0412\u0430\u0436\u043d\u0430\u044f \u0440\u0430\u043c\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0430.<\/strong> \u0412\u0441\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0438\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 scope \u0438\u0437 \u00a71: \u043e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b\u044c\u0449\u0438\u043a, \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a, \u0431\u0435\u0437 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433\u0430. <strong>\u0420\u0435\u0448\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439, \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439.<\/strong> \u041f\u0440\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u00ab\u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043b\u0430\u0435\u043d\u0441 \u043d\u0430 \u0445\u0430\u043b\u044f\u043b\u044c\u043d\u043e\u0435 \u043c\u044f\u0441\u043e\u00bb \u0438\u043b\u0438 \u00ab\u0433\u043e\u0441\u0442\u0438-\u0432\u0435\u0433\u0430\u043d\u044b &gt; 50%\u00bb) \u0442\u043e\u0442 \u0436\u0435 \u0441\u0442\u0435\u043a \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 50 \u0433\u043e\u0441\u0442\u044f\u0445 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c broker (\u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433\u043e\u0432\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e), \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e analytics \u0411\u0414 (food-cost tracking), \u043a\u044d\u0448, \u0434\u0430\u0436\u0435 \u0431\u0435\u0437 \u0440\u043e\u0441\u0442\u0430 \u043f\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435.<\/p>\n<\/blockquote>\n<h3>5.1. Async \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e vs sync ticket-per-guest<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/44\/80\/f3\/4480f321602aff6b894bdcf4453954d9.png\" alt=\"Async \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e vs Sync ticket-per-guest\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/44\/80\/f3\/4480f321602aff6b894bdcf4453954d9.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/44\/80\/f3\/4480f321602aff6b894bdcf4453954d9.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Async \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e vs Sync ticket-per-guest<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> async producer-consumer \u0447\u0435\u0440\u0435\u0437 <strong>\u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443 \u043a\u0430\u043a bounded buffer<\/strong>. \u0428\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 batch\u2019\u0430\u043c\u0438, \u043c\u044f\u0441\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u043d\u0430 \u0431\u043b\u044e\u0434\u043e, \u0433\u043e\u0441\u0442\u0438 \u0431\u0435\u0440\u0443\u0442 \u0441 \u0431\u043b\u044e\u0434\u0430 \u0441\u0430\u043c\u0438.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 (20 \u0433\u043e\u0441\u0442\u0435\u0439):<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Sync model (ticket-per-guest)<\/p>\n<\/th>\n<th>\n<p align=\"left\">Async model (\u043d\u0430\u0448 \u2014 \u0431\u043b\u044e\u0434\u043e)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u00ab2 \u043a\u0443\u0440\u0438\u043d\u044b\u0445\u00bb \u2192 \u0448\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u0430\u0445 \u0434\u043b\u044f \u043d\u0435\u0433\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0428\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 batch\u2019\u0430\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u2192 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0431\u043b\u044e\u0434\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0440\u044f\u043c\u0430\u044f coupling \u0448\u0435\u0444 \u2194 \u0433\u043e\u0441\u0442\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">Decoupling \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u043d\u044b tickets \u0434\u043b\u044f idempotency (per-guest)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Idempotency \u043d\u0430 batch level (\u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c batch N)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u044c \u0436\u0434\u0451\u0442 <strong>\u0441\u0432\u043e\u0439<\/strong> \u0437\u0430\u043a\u0430\u0437 (queue)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u044c \u0435\u0441\u0442 <strong>\u0447\u0442\u043e \u0435\u0441\u0442\u044c<\/strong> \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 (eventual consistency)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Latency: order \u2192 cook \u2192 deliver = 13-22 \u043c\u0438\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">Latency: \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0431\u043b\u044e\u0434\u0443 \u2192 \u0435\u0441\u0442 \u0441\u0440\u0430\u0437\u0443 = 0 \u043c\u0438\u043d (\u0438\u043b\u0438 0-13, \u0435\u0441\u043b\u0438 \u043f\u0443\u0441\u0442\u043e)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0425\u043e\u0440\u043e\u0448\u043e \u0434\u043b\u044f \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 (\u0441\u0432\u0430\u0434\u044c\u0431\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0425\u043e\u0440\u043e\u0448\u043e \u0434\u043b\u044f \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u043b\u044e\u0434\u043e \u0432\u044b\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0430\u0447\u043d\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Decoupling<\/strong>: \u0448\u0435\u0444 \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u00ab\u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0439?\u00bb, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 batch\u2019\u0430\u043c\u0438 \u0432 \u0441\u0432\u043e\u0451\u043c \u0440\u0438\u0442\u043c\u0435<\/p>\n<\/li>\n<li>\n<p><strong>Burst absorption<\/strong>: \u0431\u043b\u044e\u0434\u043e capacity 10-15 \u043f\u043e\u0440\u0446\u0438\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u044c \u0437\u0430\u043f\u0430\u0441 \u0434\u043e \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/li>\n<li>\n<p><strong>Naturally backpressure\u2019d<\/strong>: \u0448\u0435\u0444 \u0432\u0438\u0434\u0438\u0442 \u0431\u043b\u044e\u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0435, \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0430\u0443\u0437\u0443; \u0432\u0438\u0434\u0438\u0442 \u043f\u0443\u0441\u0442\u043e\u0435, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 batch<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0435\u043d\u044c\u0448\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439<\/strong>: \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0431\u043b\u044e\u0434\u0443, \u043c\u044f\u0441\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, 0 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 sync \u0432\u0441\u0435 \u0436\u0434\u0443\u0442 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u043d\u043e\u043c\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0443<\/strong> \u0434\u0430\u0447\u0438 \u0438 \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 (\u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 tickets \u043d\u0430 \u0431\u0430\u0431\u0443\u0448\u043a\u0438\u043d \u0443\u0436\u0438\u043d)<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c ordering layer (hybrid \u0441 tickets):<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Trigger<\/p>\n<\/th>\n<th>\n<p align=\"left\">Reason<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>50+ \u0433\u043e\u0441\u0442\u0435\u0439<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u044e\u0434\u043e \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e \u043c\u044f\u0441\u043e \u0441\u0442\u043e\u0438\u0442, food safety \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Vegetarians \/ \u0445\u0430\u043b\u044f\u043b\u044c \/ \u0434\u0435\u0442\u0441\u043a\u043e\u0435 \u043c\u0435\u043d\u044e<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Cross-contamination \u0432 \u043e\u0431\u0449\u0435\u043c \u0431\u043b\u044e\u0434\u0435; \u043d\u0443\u0436\u043d\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u044e\u0434\u0430, \u043f\u0440\u043e\u0449\u0435 tickets<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a<\/strong> (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0441\u0442\u0438 \u043e\u0436\u0438\u0434\u0430\u044e\u0442 \u00ab\u0438\u0445 \u0437\u0430\u043a\u0430\u0437\u00bb, \u0430 \u043d\u0435 \u00ab\u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c\u00bb<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Multi-source ingestion<\/strong> (\u0441\u043e\u0441\u0435\u0434\u0441\u043a\u0438\u0439 potluck \u0438\u0437 5 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043c\u044f\u0441\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d ordering layer: \u0447\u044c\u0451 \u043c\u044f\u0441\u043e \u043a\u043e\u0433\u0434\u0430 \u0436\u0430\u0440\u0438\u0442\u0441\u044f<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Saga \/ Outbox \/ CDC patterns<\/strong> \u0432 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u0442\u043e broker territory (Kafka\/RabbitMQ analog), \u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043d\u0435 enough<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Tech analog:<\/strong> \u0431\u043b\u044e\u0434\u043e \u2014 \u044d\u0442\u043e classic <strong>producer-consumer bounded buffer<\/strong> (Kafka topic \u0441 retention TTL, Redis Stream). \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 backend-\u0441\u0438\u0441\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u043c\u043e\u0434\u0435\u043b\u044c: \u0447\u0438\u0441\u0442\u044b\u0439 sync HTTP \u0431\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0435, \u0447\u0435\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0442\u044b \u0441\u0442\u0440\u043e\u0438\u0448\u044c backend \u0438 \u043d\u0435 \u0434\u0435\u043b\u0430\u043b event-driven \u0447\u0435\u0440\u0435\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u044b \u0434\u0435\u043b\u0430\u043b \u0447\u0438\u0441\u0442\u044b\u0439 sync request-response (sync ticket-per-guest \u0437\u0434\u0435\u0441\u044c) \u2014 \u0438 \u043e\u043d \u0431\u044b\u0441\u0442\u0440\u043e \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a. \u041d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f <strong>ordering layer (tickets)<\/strong> \u043f\u043e\u0432\u0435\u0440\u0445 async, \u043d\u0435 \u0432\u043c\u0435\u0441\u0442\u043e.<\/p>\n<h4>Edge case: direct-skewer delivery (VIP path)<\/h4>\n<p>\u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 95-99% \u043c\u044f\u0441\u0430 \u0438\u0434\u0451\u0442 \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e. \u041d\u043e <strong>1-5%<\/strong> \u2014 \u044d\u0442\u043e special-case bypass: \u0433\u043e\u0441\u0442\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u00ab\u0434\u0430\u0439 \u043f\u0440\u044f\u043c\u043e \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430\u00bb (\u043c\u044f\u0441\u043e \u0433\u043e\u0440\u044f\u0447\u0435\u0435, \u043d\u0435 \u043e\u0441\u0442\u044b\u043b\u043e \u043d\u0430 \u0431\u043b\u044e\u0434\u0435, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0434\u0440\u0443\u0433\u0430\u044f, \u0441\u043e\u043a \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u0443\u0441\u043a\u0435). \u042d\u0442\u043e <strong>\u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0439 VIP \/ direct path<\/strong> pattern.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">Path<\/p>\n<\/th>\n<th>\n<p align=\"left\">Coverage<\/p>\n<\/th>\n<th>\n<p align=\"left\">Latency<\/p>\n<\/th>\n<th>\n<p align=\"left\">Use case<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Default async<\/strong> (\u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">95-99% \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">0-13 \u043c\u0438\u043d wait<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e, \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u0440\u0435\u0434\u043b\u0438\u0432\u044b \u043a \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Direct sync<\/strong> (\u043f\u0440\u044f\u043c\u043e \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-5% connoisseurs<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;1 \u043c\u0438\u043d (\u0448\u0435\u0444 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Heavy enthusiast \u0438\u043b\u0438 special request<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>Architecture implications direct-path\u2019\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u0428\u0430\u043c\u043f\u0443\u0440 temporarily out of pool<\/strong>: \u043f\u043e\u043a\u0430 \u0433\u043e\u0441\u0442\u044c \u0434\u0435\u0440\u0436\u0438\u0442 \u0438 \u0435\u0441\u0442, \u0448\u0430\u043c\u043f\u0443\u0440 \u043d\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 reserve. \u0415\u0441\u043b\u0438 3-4 connoisseur\u2019\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, effective pool size \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u043c\u0435\u043d\u044c\u0448\u0438\u0435 batches.<\/p>\n<\/li>\n<li>\n<p><strong>\u0428\u0435\u0444 interrupted from batch flow<\/strong>: \u043e\u0442\u0434\u0430\u0442\u044c \u0448\u0430\u043c\u043f\u0443\u0440 = \u043c\u0438\u043a\u0440\u043e\u043f\u0430\u0443\u0437\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, batch counter \u043c\u043e\u0436\u0435\u0442 \u0441\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u044b\u0448\u0435 5%<\/strong>: \u0431\u043e\u043b\u044c\u0448\u0435 direct requests \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 pipeline. \u041d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 1-2 connoisseur\u2019\u0430 \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430; \u043d\u0430 50 \u0433\u043e\u0441\u0442\u044f\u0445 \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444 \u0434\u043b\u044f direct-path \u0438\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0432\u0441\u0435\u043c.<\/p>\n<\/li>\n<\/ul>\n<p><strong>Tech analog:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Stripe<\/strong>: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e charges \u0447\u0435\u0440\u0435\u0437 standard processing, enterprise merchants \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 direct queue (priority + bypass)<\/p>\n<\/li>\n<li>\n<p><strong>Twitter<\/strong>: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e tweets \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e fanout pipeline, celebrity tweets \u0438\u043c\u0435\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 handler \u0438\u0437-\u0437\u0430 high subscriber count<\/p>\n<\/li>\n<li>\n<p><strong>Cloudflare<\/strong>: \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e requests \u0447\u0435\u0440\u0435\u0437 CDN edge, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 routes \u0438\u0434\u0443\u0442 direct-to-origin \u043c\u0438\u043d\u0443\u044f cache<\/p>\n<\/li>\n<\/ul>\n<p>Pattern \u0432\u0435\u0437\u0434\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439: <strong>default path \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 + bypass \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e premium-\u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0441\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/strong> \u0412 backend \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 priority queues \u0438\u043b\u0438 dedicated worker pools. \u041d\u0430 \u0434\u0430\u0447\u0435 \u0447\u0435\u0440\u0435\u0437 \u0448\u0435\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u00ab\u0422\u0438\u043c\u0443 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0430\u0451\u0442 \u043f\u0440\u044f\u043c\u043e \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430\u00bb.<\/p>\n<p><strong>\u0427\u0435\u0441\u0442\u043d\u044b\u0439 trade-off:<\/strong> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 mental complexity (\u0448\u0435\u0444 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u043e\u043c\u043d\u0438\u0442 \u043f\u0440\u043e special requests). \u041d\u0430 \u0434\u0430\u0447\u043d\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e connoisseur\u2019\u043e\u0432 1-2 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c; complexity tax negligible. \u041d\u0430 50+ \u0433\u043e\u0441\u0442\u044f\u0445 \u0441\u0440\u0435\u0434\u0438 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u043b\u044e\u0434\u0435\u0439 direct-path \u0440\u0430\u0441\u043f\u043b\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043b\u0443\u0447\u0448\u0435 \u0443\u043d\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0431\u043b\u044e\u0434\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445.<\/p>\n<h3>5.2. \u0423\u0433\u043e\u043b\u044c, \u043d\u0435 \u0433\u0430\u0437 \/ \u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e \/ \u043a\u043e\u0441\u0442\u0451\u0440<\/h3>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0431\u0435\u0440\u0451\u0437\u043e\u0432\u044b\u0439 \u0443\u0433\u043e\u043b\u044c + \u0441\u0442\u0430\u0440\u0442\u0435\u0440 \u0434\u043b\u044f \u0443\u0433\u043b\u0435\u0439.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0413\u0430\u0437\u043e\u0432\u044b\u0439 \u0433\u0440\u0438\u043b\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0440\u0435\u043b\u044b\u0439 \u0440\u044b\u043d\u043e\u043a, \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a, \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0439. \u041d\u043e: \u043d\u0435\u0442 \u0434\u044b\u043c\u043d\u043e\u0433\u043e \u0430\u0440\u043e\u043c\u0430\u0442\u0430 (\u0433\u0443\u0440\u043c\u0430\u043d\u044b \u043e\u0442\u0432\u0435\u0440\u0433\u0430\u044e\u0442), \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0433\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0431\u0430\u043b\u043b\u043e\u043d\u0430 (\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u044b\u0439 \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442), \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u043a\u0443\u043f\u043a\u0438 ($300-800).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u0433\u0440\u0438\u043b\u044c<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430, \u043b\u0435\u0433\u043a\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u043e: \u043f\u0438\u043a\u043e\u0432\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c 2-3 \u043a\u0412\u0442 \u043d\u0435 \u0432\u044b\u0442\u044f\u043d\u0435\u0442 2 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u043d\u0430 \u0434\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u043e\u0434\u043a\u0435 (\u0432\u044b\u0431\u044c\u0435\u0442 \u043f\u0440\u043e\u0431\u043a\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0438\u043a\u0430), \u043d\u0435\u0442 \u0434\u044b\u043c\u043d\u043e\u0433\u043e \u0430\u0440\u043e\u043c\u0430\u0442\u0430, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d \u043a \u0440\u043e\u0437\u0435\u0442\u043a\u0435 (\u0440\u0438\u0441\u043a \u0443\u0434\u043b\u0438\u043d\u0438\u0442\u0435\u043b\u044f).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041a\u043e\u0441\u0442\u0451\u0440 \u043d\u0430 \u0437\u0435\u043c\u043b\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430, \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0447\u043d\u043e. \u041d\u043e: \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 (high variance p99), \u043f\u0435\u043f\u0435\u043b \u0432 \u0448\u0430\u0448\u043b\u044b\u043a\u0435 (food safety violation), PM2.5 emissions (cancer-causing \u043f\u0440\u0438 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435), \u043f\u043e\u0436\u0430\u0440-\u0440\u0438\u0441\u043a \u043d\u0430 \u0441\u0443\u0445\u043e\u0439 \u0442\u0440\u0430\u0432\u0435.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0414\u0440\u043e\u0432\u0430 \u0432 \u043c\u0430\u043d\u0433\u0430\u043b\u0435<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u042d\u043a\u043e\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0434\u044b\u043c\u043d\u044b\u0439 \u0430\u0440\u043e\u043c\u0430\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439. \u041d\u043e: 30+ \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0440\u0430\u043d\u0438\u0435 (no warm pool, slow start), \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u043f\u043b\u043e\u043e\u0442\u0434\u0430\u0447\u0430 (variance 100\u00b0C peak-to-peak).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0423\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0435\u0442\u043a\u0438 (\u0434\u043b\u044f \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u0438\u0446\u044b)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043f\u0438\u043a\u043d\u0438\u043a\u0430. \u041d\u043e: \u0445\u0438\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u0432\u043a\u0443\u0441, \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u0433\u043e\u0440\u0430\u044e\u0442 (\u043f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0430 \u043a\u0430\u0436\u0434\u044b\u0435 20 \u043c\u0438\u043d\u0443\u0442 \u2014 \u044d\u0442\u043e operational overhead).<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u0431\u0435\u0440\u0451\u0437\u043e\u0432\u044b\u0439 \u0443\u0433\u043e\u043b\u044c<\/strong> + \u0441\u0442\u0430\u0440\u0442\u0435\u0440 \u0434\u043b\u044f \u0443\u0433\u043b\u0435\u0439 (\u043c\u0435\u0442\u0430\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0442\u0440\u0443\u0431\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0436\u0438\u0433\u0430\u043d\u0438\u044f \u0437\u0430 15 \u043c\u0438\u043d\u0443\u0442).<\/p>\n<p>\u0411\u0435\u0440\u0451\u0437\u043e\u0432\u044b\u0439 \u0443\u0433\u043e\u043b\u044c \u0434\u0430\u0451\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 220-260\u00b0C \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0443 1.5-2 \u0447\u0430\u0441\u0430 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0437\u0430\u0440\u044f\u0434\u043a\u0438, smoky flavor \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439.<\/p>\n<h3>5.3. Vertical vs horizontal: \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u043d\u0433\u0430\u043b \u0438\u043b\u0438 \u0434\u0432\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/11\/4f\/e6\/114fe6b81802e36e4316b90c25f4497f.png\" alt=\"Vertical vs Horizontal scaling: 1\u00d7 large vs 2\u00d7 standard parallel\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/11\/4f\/e6\/114fe6b81802e36e4316b90c25f4497f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/11\/4f\/e6\/114fe6b81802e36e4316b90c25f4497f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Vertical vs Horizontal scaling: 1\u00d7 large vs 2\u00d7 standard parallel<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0434\u043b\u044f 20 \u0433\u043e\u0441\u0442\u0435\u0439 \u043e\u0434\u0438\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b 60\u00d730 \u2014 undersized. Realistic baseline: \u043b\u0438\u0431\u043e <strong>1 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u043d\u0433\u0430\u043b (90+ \u0441\u043c, 12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e)<\/strong>, \u043b\u0438\u0431\u043e <strong>2 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e (60\u00d730 \u043a\u0430\u0436\u0434\u044b\u0439, 8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c, 16-20 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0432\u0441\u0435\u0433\u043e)<\/strong>.<\/p>\n<p>\u041e\u0434\u0438\u043d \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b 60\u00d730 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e <strong>6-12 \u0433\u043e\u0441\u0442\u0435\u0439<\/strong> (\u0441\u0435\u043c\u0435\u0439\u043d\u044b\u0439 \u0443\u0436\u0438\u043d, \u0434\u0440\u0443\u0436\u0435\u0441\u043a\u0438\u0439 BBQ). \u041d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 \u043e\u043d \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c: \u0448\u0435\u0444 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u0442\u043e\u043b\u043e\u043a \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0435\u043c\u043f\u0430 (12-15\/\u0447\u0430\u0441 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e, \u0435\u0441\u043b\u0438 \u0448\u0435\u0444 \u043e\u0442\u0434\u044b\u0445\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0442\u0438\u044f\u043c\u0438 \u043a\u0430\u043a \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0447\u0435\u043b\u043e\u0432\u0435\u043a).<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e classic vertical-vs-horizontal scaling:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\n<\/th>\n<th>\n<p align=\"left\">1\u00d7 large (90+ \u0441\u043c)<\/p>\n<\/th>\n<th>\n<p align=\"left\">2\u00d7 standard parallel (60\u00d730)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">12-15<\/p>\n<\/td>\n<td>\n<p align=\"left\">16-20 (8-10 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u0438\u043d \u0448\u0435\u0444, \u043e\u0434\u0438\u043d heat zone<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0443\u0436\u0435\u043d \u0441\u0443-\u0448\u0435\u0444 \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u043d\u0433\u0430\u043b\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0433\u043e\u043b\u044c \/ \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-2 \u043f\u0430\u043a\u0435\u0442\u0430 (3-6 \u043a\u0433)<\/p>\n<\/td>\n<td>\n<p align=\"left\">2-3 \u043f\u0430\u043a\u0435\u0442\u0430 (\u00d71.5-2 \u0440\u0430\u0441\u0445\u043e\u0434)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Temperature control<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043b\u043e\u0436\u043d\u0435\u0435 (\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u043e\u043d\u0430 \u043d\u0430\u0433\u0440\u0435\u0432\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0449\u0435 (independent \u0437\u043e\u043d\u044b)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Bulkhead<\/strong> (\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043c\u044f\u0441\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435\u0442 \u2014 \u0432\u0441\u0451 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c heat zone<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0414\u0430<\/strong> \u2014 \u043a\u0443\u0440\u0438\u0446\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c, \u0441\u0432\u0438\u043d\u0438\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Failure mode \u00ab\u043f\u0440\u043e\u0433\u043e\u0440\u0435\u043b \u0443\u0433\u043e\u043b\u044c\u00bb<\/p>\n<\/td>\n<td>\n<p align=\"left\">Single point of failure: 20 \u043c\u0438\u043d \u043f\u0430\u0443\u0437\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0434\u0438\u043d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442, \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u043d\u043e\u0432\u043e<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Operational complexity<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u0440\u043e\u0441\u0442\u0430\u044f, 1 worker<\/p>\n<\/td>\n<td>\n<p align=\"left\">Distributed coordination, 2 workers<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u0442\u044c:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>1\u00d7 large<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u0441\u043e\u043b\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0435\u0437 \u0441\u0443-\u0448\u0435\u0444\u0430, \u0433\u043e\u0441\u0442\u0438 \u0435\u0434\u044f\u0442 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u043e\u0435 \u043c\u044f\u0441\u043e, \u043d\u0435\u0442 vegetarian\/halal segment, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0432\u0430\u0436\u043d\u0435\u0435 redundancy<\/p>\n<\/li>\n<li>\n<p><strong>2\u00d7 standard parallel<\/strong> \u2014 \u0435\u0441\u043b\u0438 \u0441\u0443-\u0448\u0435\u0444 \u0435\u0441\u0442\u044c, \u043d\u0443\u0436\u0435\u043d <strong>bulkhead<\/strong> (vegetarians &gt; 5, \u0438\u043b\u0438 allergens), \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <strong>fault tolerance<\/strong> (\u0432\u0430\u0436\u043d\u044b\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a, \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c 20-\u043c\u0438\u043d\u0443\u0442\u043d\u0443\u044e \u043f\u0430\u0443\u0437\u0443)<\/p>\n<\/li>\n<\/ul>\n<p><strong>Tech analog:<\/strong><\/p>\n<ul>\n<li>\n<p>1 large = <strong>vertical scaling<\/strong> (\u043e\u0434\u0438\u043d bigger DB instance, scale-up)<\/p>\n<\/li>\n<li>\n<p>2 standard = <strong>horizontal scaling<\/strong> (\u0434\u0432\u0435 replicas, scale-out)<\/p>\n<\/li>\n<li>\n<p>Bulkhead = \u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u043e \u043c\u0430\u043d\u0433\u0430\u043b\u0443 \u2014 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0434\u043b\u044f food safety, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0427\u0435\u0441\u0442\u043d\u044b\u0439 trade-off:<\/strong> 2\u00d7 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 + \u0441\u0443-\u0448\u0435\u0444 = \u0432\u044b\u0448\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c (\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f\u043c\u0438, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u044b), \u043d\u043e \u0434\u0430\u044e\u0442 <strong>fault tolerance<\/strong> + <strong>\u0438\u0437\u043e\u043b\u044f\u0446\u0438\u044e \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043c\u044f\u0441\u0430<\/strong>. \u041d\u0430 \u0434\u0430\u0447\u043d\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 20 \u0433\u043e\u0441\u0442\u0435\u0439 \u0441 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u043e\u0439 \u043a\u0443\u0445\u043d\u0435\u0439 1\u00d7 large \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0421 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0446\u0435\u0432 &gt; 5 \u0447\u0435\u043b\u043e\u0432\u0435\u043a 2\u00d7 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c (cross-contamination \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435 \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c, \u0441\u043c. \u00a710).<\/p>\n<h3>5.4. \u0418\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0430\u0440\u0442\u0438\u0438<\/h3>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u043d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 (4-7 \u043f\u0430\u0440\u0442\u0438\u0439 \u0437\u0430 \u0432\u0435\u0447\u0435\u0440) \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u2014 overkill. Mental tracking + \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 skewer pool \u043a\u0430\u043a natural counter (8 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 vs 5-10 \u0432 reserve) \u0445\u0432\u0430\u0442\u0430\u0435\u0442; \u0444\u0438\u043d\u0430\u043b \u2014 \u043a\u043e\u0433\u0434\u0430 \u043c\u044f\u0441\u043e \u0432 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p><strong>Pattern \u0432\u0430\u0436\u0435\u043d \u043d\u0430 scale:<\/strong> \u043f\u0440\u0438 50+ \u0433\u043e\u0441\u0442\u044f\u0445 \/ multi-day events \/ \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0448\u0435\u0444\u0430\u0445 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 batch ID \u0438 persistent state \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b. \u0412 \u00a75.5 \u043d\u0438\u0436\u0435 \u2014 schema design \u043a\u0430\u043a \u00abscale-form\u00bb \u0438\u0434\u0435\u043c\u043f\u043e\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 (\u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u0430\u043d\u0433\u0430\u043b \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0431\u044b\u0442\u044c \u043c\u044b\u0441\u043b\u0435\u043d\u043d\u043e-trackable).<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e batch-level, \u043d\u0435 per-guest:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0412 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 <strong>\u0433\u043e\u0441\u0442\u044c \u043d\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f<\/strong> \u043d\u0430 \u043f\u0443\u0442\u0438 \u043e\u0442 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u0434\u043e \u0442\u0430\u0440\u0435\u043b\u043a\u0438. \u00ab\u041a\u0442\u043e \u044d\u0442\u043e \u0441\u044a\u0435\u043b\u00bb \u0432\u044b\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u0444\u0430\u043a\u0442\u0443\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435 (\u00ab\u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0435\u0441\u0442 \u0443\u0436\u0435 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439\u00bb)<\/p>\n<\/li>\n<li>\n<p>Per-guest ticket \u0431\u044b\u043b \u0431\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c tracking\u2019\u043e\u043c: \u0448\u0430\u043c\u043f\u0443\u0440 \u2192 \u0431\u043b\u044e\u0434\u043e \u2192 \u0433\u043e\u0441\u0442\u044c (\u0433\u0434\u0435 \u0433\u043e\u0441\u0442\u044c \u043d\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f)<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0442\u0438\u044f \u2014 natural unit \u0434\u043b\u044f \u0448\u0435\u0444\u0430: \u00ab\u043e\u0434\u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u044f = \u043e\u0434\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 = ~13 \u043c\u0438\u043d\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u044b\u00bb<\/p>\n<\/li>\n<\/ul>\n<p><strong>Tech analog:<\/strong> Kafka producer idempotency \u0447\u0435\u0440\u0435\u0437 <code>acks=all<\/code> + sequence numbers \u2014 producer \u043d\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442, \u0435\u0441\u043b\u0438 \u0443\u0436\u0435 acked. \u0428\u0435\u0444 \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 batch ID; \u043d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 \u2014 \u0447\u0435\u0440\u0435\u0437 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 skewer pool.<\/p>\n<h3>5.5. Schema design \u2014 batches + \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0431\u043b\u044e\u0434\u0430<\/h3>\n<pre><code>shashlyk_batches:                       -- producer side (\u0448\u0435\u0444's mental log)  id          BIGSERIAL PRIMARY KEY,  batch_id    TEXT UNIQUE,              -- 'batch-1', 'batch-2' (\u0448\u0435\u0444-generated, idempotency key)  mangal_id   INT,                      -- 1 \u0438\u043b\u0438 2 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c 2-\u0439)  loaded_at   TIMESTAMPTZ,              -- \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d  ready_at   TIMESTAMPTZ,               -- \u043a\u043e\u0433\u0434\u0430 \u0441\u043d\u044f\u0442 \u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 (NULL \u043f\u043e\u043a\u0430 \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0441\u044f)  skewers_count INT,                    -- 6-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0432 batch'\u0435  meat_types  JSONB,                    -- {chicken: 5, pork: 3} per batch  notes       TEXT                      -- '\u0431\u0435\u0437 \u043b\u0443\u043a\u0430', '\u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u0430'UNIQUE INDEX idx_batch ON shashlyk_batches (batch_id);INDEX idx_loaded_ts ON shashlyk_batches USING BRIN (loaded_at);platter_state:                          -- consumer side (volatile, \u043d\u0435 persistent)  current_count   INT,                  -- \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0440\u0446\u0438\u0439 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441  oldest_added_at TIMESTAMPTZ,          -- TTL tracking (food safety)  current_types   JSONB,                -- {chicken: 3, pork: 2} \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 \u0441\u0435\u0439\u0447\u0430\u0441skewer_pool:                            -- resource tracking  total           INT = 15-20,          -- \u0432\u0435\u0441\u044c pool  in_mangal       INT,                  -- 8-10 active (\u0435\u0441\u043b\u0438 batch \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435)  cooling         INT,                  -- 2-3 returned, \u0435\u0449\u0451 \u0433\u043e\u0440\u044f\u0447\u0438\u0435  available       INT                   -- ready \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e batch'\u0430<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p><code><strong>batch_id UNIQUE<\/strong><\/code>: idempotency key \u2014 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u0432 schema \u043e\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0430\u0440\u0442\u0438\u0438. \u041d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435, \u0433\u0434\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 skewer pool \u0443\u0436\u0435 \u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043e\u043b\u043e\u0432\u0435, \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><code><strong>shashlyk_batches<\/strong><\/code><strong> \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 <\/strong><code><strong>guest_id<\/strong><\/code>: \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 \u0433\u043e\u0441\u0442\u044c \u043e\u0442\u0432\u044f\u0437\u0430\u043d \u043e\u0442 tracking\u2019\u0430. \u041d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u00ab\u043a\u0442\u043e \u0447\u0442\u043e \u0435\u043b\u00bb, \u044d\u0442\u043e \u0432\u043d\u0435 scope.<\/p>\n<\/li>\n<li>\n<p><code><strong>platter_state<\/strong><\/code><strong> volatile<\/strong>: \u043d\u0435 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0438\u0442\u0441\u044f \u0432 long-term time-series, \u044d\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f backpressure-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 (\u043f\u043e\u043b\u043d\u044b\u0439\/\u043f\u0443\u0441\u0442\u043e\u0439 checks).<\/p>\n<\/li>\n<li>\n<p><code><strong>skewer_pool<\/strong><\/code><strong> \u043a\u0430\u043a resource counter<\/strong>: \u0430\u043d\u0430\u043b\u043e\u0433 connection pool. \u0415\u0441\u043b\u0438 <code>available = 0<\/code> \u0438 <code>cooling &gt; 0<\/code> \u2192 \u0436\u0434\u0451\u043c, \u043f\u043e\u043a\u0430 cooling \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 <code>available = 0<\/code> \u0438 <code>cooling = 0<\/code> \u2014 \u0443 \u043d\u0430\u0441 \u0443\u0442\u0435\u0447\u043a\u0430 (\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0438 \u0448\u0430\u043c\u043f\u0443\u0440).<\/p>\n<\/li>\n<li>\n<p><strong>BRIN \u043d\u0430 <\/strong><code><strong>loaded_at<\/strong><\/code>: \u043f\u0430\u0440\u0442\u0438\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0432 \u0445\u0440\u043e\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f BRIN \u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><code><strong>meat_types JSONB<\/strong><\/code><strong> \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u044e<\/strong> \u0441\u043b\u0443\u0436\u0438\u0442 <strong>audit trail \u0434\u043b\u044f food safety forensics<\/strong>: \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u0443-\u0442\u043e \u0441\u0442\u0430\u043b\u043e \u043f\u043b\u043e\u0445\u043e, \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u00ab\u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0432 \u043f\u0430\u0440\u0442\u0438\u0438 N \u0432 20:15\u00bb. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e incident investigation \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: bbq event schema design<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>\u00abPostgreSQL Internals\u00bb<\/strong> (Egor Rogov): JSONB indexing strategies, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0434\u0430\u0436\u0435 \u043a \u0437\u0430\u043c\u0435\u0442\u043a\u0430\u043c \u043d\u0430 \u0431\u0443\u043c\u0430\u0436\u043a\u0435<\/p>\n<\/li>\n<li>\n<p><strong>\u00abUse The Index, Luke!\u00bb<\/strong> (Markus Winand): partial indexes \u0434\u043b\u044f <code>WHERE status != 'served'<\/code> (active queue queries)<\/p>\n<\/li>\n<li>\n<p><strong>\u00abDatabase Internals\u00bb<\/strong> (Petrov), Ch3 \u00abFile Formats\u00bb: \u043f\u043e\u0447\u0435\u043c\u0443 BRIN \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435 \u0434\u043b\u044f time-series<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<h3>5.6. Connection pooling \u2014 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/53\/8c\/23\/538c23166cb6a94a4caf85bd7a18ee82.png\" alt=\"Skewer pool \u2014 resource partitioning\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/53\/8c\/23\/538c23166cb6a94a4caf85bd7a18ee82.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/53\/8c\/23\/538c23166cb6a94a4caf85bd7a18ee82.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Skewer pool \u2014 resource partitioning<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> <strong>15-20 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0432\u0441\u0435\u0433\u043e<\/strong> \u0432 \u043f\u0443\u043b\u0435, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 8-10 \u0430\u043a\u0442\u0438\u0432\u043d\u044b \u0432 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u0441\u0442\u044b\u0432\u0430\u044e\u0442 \/ \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438. \u0428\u0430\u043c\u043f\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e <strong>\u043c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441<\/strong>, \u043d\u0435 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u044e.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u0443\u043b\u0430 = 15-20:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0443\u043b &lt; 12 (\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 1 \u043f\u0430\u0440\u0442\u0438\u044e): \u043d\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u0430 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438, \u043f\u043e\u043a\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043e\u0441\u0442\u044b\u0432\u0430\u0435\u0442, \u0448\u0435\u0444 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0435\u0442<\/p>\n<\/li>\n<li>\n<p>\u041f\u0443\u043b 15-20: \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 (8-10) + \u0440\u0435\u0437\u0435\u0440\u0432 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 (5-10), zero-wait turnover<\/p>\n<\/li>\n<li>\n<p>\u041f\u0443\u043b &gt; 25: \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432 \u0440\u0435\u0437\u0435\u0440\u0432\u0435, \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 throughput \u043d\u0435 \u0434\u0430\u0451\u0442<\/p>\n<\/li>\n<\/ul>\n<pre><code>At any moment:  in_mangal     = 8-10  (active batch cooking)  cooling       = 0-2   (\u0441\u043d\u044f\u043b\u0438 \u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0435\u0449\u0451 \u0433\u043e\u0440\u044f\u0447\u0438\u0435, \u043c\u044b\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f)  available     = 5-10  (clean, ready \u0434\u043b\u044f next batch)  total pool    = 15-20<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c throughput: 10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u00d7 (60 \u043c\u0438\u043d \/ 13 \u043c\u0438\u043d \u043d\u0430 \u0446\u0438\u043a\u043b) = <strong>~46 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441<\/strong> \u043d\u0430 1 \u043c\u0430\u043d\u0433\u0430\u043b. \u0420\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e 12-15\/\u0447\u0430\u0441, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <strong>\u0433\u043e\u0441\u0442\u0438 \u043d\u0435 \u0435\u0434\u044f\u0442 46\/\u0447\u0430\u0441<\/strong> \u0438 \u0431\u043b\u044e\u0434\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u0435\u0442 \u0448\u0435\u0444\u0430 \u0447\u0435\u0440\u0435\u0437 backpressure.<\/p>\n<p><strong>\u042d\u0442\u043e \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u044b\u0439 connection pool \u0432 backend:<\/strong><\/p>\n<ul>\n<li>\n<p>in_mangal = \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 connections (\u0437\u0430\u043d\u044f\u0442\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 requests)<\/p>\n<\/li>\n<li>\n<p>cooling = recently-released, \u0435\u0449\u0451 \u0432 TIME_WAIT<\/p>\n<\/li>\n<li>\n<p>available = idle pool, \u0433\u043e\u0442\u043e\u0432 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 request<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0441\u0435\u0433\u043e = 0 \u2192 resource starvation \u2192 wait, \u043a\u0430\u043a \u043f\u0440\u0438 pool exhaustion \u0432 DB<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432:<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Max \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u0438<\/strong> = 18 \u043c\u0438\u043d\u0443\u0442 (\u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0440\u0438\u0441\u043a burnt, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u043c, \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c). Backend analog: <code>statement_timeout<\/code> \u0434\u043b\u044f PG queries.<\/p>\n<\/li>\n<li>\n<p><strong>Idle batch warning<\/strong> = 5 \u043c\u0438\u043d\u0443\u0442 \u0431\u0435\u0437 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 (\u043c\u044f\u0441\u043e \u043f\u043e\u0434\u0433\u043e\u0440\u0430\u0435\u0442 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b). Backend analog: <code>idle_in_transaction_timeout<\/code>, \u0443\u0442\u0435\u0447\u043a\u0430 transaction warning.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b <strong>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439<\/strong>: \u044d\u0442\u043e failure mode \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u043e\u0434\u0430, \u043d\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 50+ \u0433\u043e\u0441\u0442\u0435\u0439 \u0438\u043b\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0446\u0435\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b + \u0441\u0443-\u0448\u0435\u0444 + \u0432\u0442\u043e\u0440\u043e\u0435 \u0431\u043b\u044e\u0434\u043e. \u042d\u0442\u043e <strong>horizontal scaling \u043f\u0443\u043b\u0430<\/strong>: \u0431\u043e\u043b\u044c\u0448\u0435 worker\u2019\u043e\u0432, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0451\u043c\u043a\u043e\u0441\u0442\u0438 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439. Backend analog: pgbouncer + read replicas \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e single instance.<\/p>\n<h3>5.7. Caching: \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u043a\u0430\u043a pre-warm cache<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/da\/93\/35\/da9335e5c4bbfc273af94846fc697692.png\" alt=\"Cache hierarchy \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/da\/93\/35\/da9335e5c4bbfc273af94846fc697692.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/da\/93\/35\/da9335e5c4bbfc273af94846fc697692.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Cache hierarchy \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/figcaption><\/div>\n<\/figure>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 8 \u0447\u0430\u0441\u043e\u0432 \u0434\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e <strong>pre-warm cache<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 8 \u0447\u0430\u0441\u043e\u0432 \u0441 critical path \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430.<\/p>\n<p><strong>Cache hierarchy \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435:<\/strong><\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u043b\u043e\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u0434\u043e \u043f\u043e\u0434\u0430\u0447\u0438<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0401\u043c\u043a\u043e\u0441\u0442\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Cold storage<\/strong> (\u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a, \u0441\u044b\u0440\u043e\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u044b\u0440\u043e\u0435 \u043c\u044f\u0441\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">8h+ (\u043d\u0443\u0436\u0435\u043d \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u043d\u0430 critical path)<\/p>\n<\/td>\n<td>\n<p align=\"left\">~10 \u043a\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>L2: pre-marinated<\/strong> (8h \u0444\u0435\u0440\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u043a \u0448\u0430\u043c\u043f\u0443\u0440\u0443 \u043c\u044f\u0441\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">~13 \u043c\u0438\u043d (\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u043a\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">~10 \u043a\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>L1: \u043a\u0440\u0430\u0439 \u043c\u0430\u043d\u0433\u0430\u043b\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043d\u044f\u0442\u044b\u0439 \u0448\u0430\u043c\u043f\u0443\u0440, \u0435\u0449\u0451 \u0433\u043e\u0440\u044f\u0447\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">0 \u043c\u0438\u043d (direct handoff)<\/p>\n<\/td>\n<td>\n<p align=\"left\">2-3 \u0448\u0430\u043c\u043f\u0443\u0440\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Shared cache (\u0431\u043b\u044e\u0434\u043e)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u043c\u044f\u0441\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">0 \u043c\u0438\u043d (\u0441\u0430\u043c\u043e\u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">10-15 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 pre-warm \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u0435\u043d:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0411\u0435\u0437 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u0430 \u043c\u044f\u0441\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 8h \u0444\u0435\u0440\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <strong>\u043d\u0430 critical path<\/strong>: \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 03:00 \u043d\u043e\u0447\u0438.<\/p>\n<\/li>\n<li>\n<p>Pre-marinated = \u0447\u0438\u0441\u0442\u044b\u0439 <strong>shift left<\/strong>: \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043e\u043f\u043b\u0430\u0447\u0435\u043d\u044b \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 (off-peak), \u0433\u043e\u0440\u044f\u0447\u0438\u0439 \u043f\u0443\u0442\u044c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u043a\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>Cache stampede \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438.<\/strong> \u0412 19:30 \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430, 20 \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0445 \u0433\u043e\u0441\u0442\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u043a \u0431\u043b\u044e\u0434\u0443: classic <strong>dogpile<\/strong>. \u0420\u0435\u0448\u0435\u043d\u0438\u0435: \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c <strong>\u0431\u043e\u043b\u044c\u0448\u0435<\/strong> \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e (8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0432\u043c\u0435\u0441\u0442\u043e 6), \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 20 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442, \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u0441\u0432\u043e\u044e \u043f\u043e\u0440\u0446\u0438\u044e \u0431\u0435\u0437 13-\u043c\u0438\u043d\u0443\u0442\u043d\u043e\u0433\u043e \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u0412 backend \u044d\u0442\u043e <strong>request coalescing<\/strong> \u0438\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u044b\u0439 TTL \u0434\u043b\u044f hot keys \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435.<\/p>\n<p><strong>Cache invalidation (TTL-based):<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u041c\u0430\u0440\u0438\u043d\u0430\u0434 TTL 8-12h<\/strong>: \u043f\u0435\u0440\u0435\u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043c\u044f\u0441\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u0443\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e (\u0441\u043c. \u00a79 anti-pattern #4)<\/p>\n<\/li>\n<li>\n<p><strong>\u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u043c\u044f\u0441\u043e \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 TTL 30 \u043c\u0438\u043d<\/strong>: food safety threshold (\u0441\u043c. \u00a76.2)<\/p>\n<\/li>\n<li>\n<p><strong>Eviction policy<\/strong>: \u043d\u0435 LRU (\u043c\u044f\u0441\u043e \u0431\u0435\u0440\u0443\u0442 \u043d\u0435 \u043f\u043e \u00ab\u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u043b\u0438\u00bb), \u0430 <strong>TTL + visual inspection<\/strong> \u0448\u0435\u0444\u043e\u043c<\/p>\n<\/li>\n<\/ul>\n<p><strong>Tech analog:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041c\u0430\u0440\u0438\u043d\u0430\u0434 = <strong>pre-warming cache<\/strong> (Redis warmup \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u0430, prerendered pages \u0432 CDN)<\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u0430\u0439 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 = <strong>L1 in-process cache<\/strong> (process-local memory, application-level cache)<\/p>\n<\/li>\n<li>\n<p>\u0411\u043b\u044e\u0434\u043e = <strong>shared cache<\/strong> (Redis, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0432\u0441\u0435\u043c readers)<\/p>\n<\/li>\n<li>\n<p>Stampede mitigation = <strong>request coalescing<\/strong> (singleflight pattern)<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 <strong>work shifted left<\/strong>: 8 \u0447\u0430\u0441\u043e\u0432 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 \u0441\u043d\u0438\u043c\u0430\u044e\u0442 8 \u0447\u0430\u0441\u043e\u0432 \u0441 critical path \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430. \u041d\u0430 backend \u044d\u0442\u043e \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442 prerendering, CDN warmup, DB query cache prepopulation. \u0411\u0435\u0437 cache layer \u043b\u044e\u0431\u043e\u0439 read-heavy \u0441\u0435\u0440\u0432\u0438\u0441 \u0437\u0430\u0445\u043b\u0451\u0431\u044b\u0432\u0430\u0435\u0442\u0441\u044f; \u043d\u0430 \u0434\u0430\u0447\u0435 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435.<\/p>\n<h3>5.8. \u0428\u0435\u0444 runtime: \u00ab\u043f\u0430\u043f\u0430\u00bb, \u043d\u0435 \u043d\u0430\u043d\u044f\u0442\u044b\u0439 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b<\/h3>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u0448\u0435\u0444 \u2014 \u044d\u0442\u043e <strong>\u043f\u0430\u043f\u0430 \/ \u0434\u044f\u0434\u044f \/ \u043c\u0443\u0436 \u0441\u0435\u0441\u0442\u0440\u044b<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 15+ \u0440\u0430\u0437 \u0434\u0435\u043b\u0430\u043b \u0448\u0430\u0448\u043b\u044b\u043a \u043d\u0430 \u044d\u0442\u043e\u0439 \u0434\u0430\u0447\u0435. \u0417\u043d\u0430\u043d\u0438\u0435 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0435, \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435.<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435:<\/strong> \u043c\u044b I\/O-bound, \u0442\u0435\u043f\u043b\u043e\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438 timing \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u0443\u044e\u0442, raw skill \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d. \u041f\u0430\u043f\u0430 \u0441 15-\u043b\u0435\u0442\u043d\u0438\u043c BBQ-\u043e\u043f\u044b\u0442\u043e\u043c \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0443\u0433\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0437\u0433\u043e\u0440\u0430\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u044b\u043f\u0430\u0442\u044c, \u043f\u043e \u043a\u0430\u043a\u0438\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0440\u0430 \u0441\u043d\u0438\u043c\u0430\u0442\u044c. \u041d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 \u0438\u043d\u0442\u0443\u0438\u0446\u0438\u044f \u00ab\u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u043e\u0442 \u0448\u0430\u043c\u043f\u0443\u0440 \u0433\u043e\u0442\u043e\u0432\u00bb \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u041f\u043b\u044e\u0441 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 mockup\u2019\u043e\u0432 \u043e\u0442 \u043d\u0430\u043d\u044f\u0442\u043e\u0433\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430: \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0430 \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0443 \u043c\u0430\u043d\u0433\u0430\u043b\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 grill runtimes: \u043f\u0430\u043f\u0430\/\u0434\u044f\u0434\u044f vs amateur \/ professional \/ robot<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b \u0434\u043b\u044f tier 0<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041b\u044e\u0431\u0438\u0442\u0435\u043b\u044c (\u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u043a\u0442\u043e-\u0442\u043e \u0438\u0437 \u0433\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0451\u0448\u0435\u0432\u043e, \u043d\u043e: burnt rate &gt;20%, \u0434\u043b\u0438\u043d\u043d\u044b\u0435 latency p99, \u0433\u043e\u0441\u0442\u0438 \u0443\u0439\u0434\u0443\u0442 \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d \u0437\u0430 \u043f\u0435\u043b\u044c\u043c\u0435\u043d\u044f\u043c\u0438. \u041d\u0430 \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435 \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0434\u043e\u0432\u0435\u0440\u0438\u0442.<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0435\u0444 (\u043d\u0430\u043d\u044f\u0442\u044b\u0439)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0435, \u043d\u043e: 15-30 \u0442\u044b\u0441. \u0440\u0443\u0431\u043b\u0435\u0439 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a, overkill \u0434\u043b\u044f \u0434\u0430\u0447\u0438 \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439. \u0418 \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0443 \u0443\u0431\u0438\u0432\u0430\u0435\u0442 (\u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u0434\u043e\u043c\u0430\u0448\u043d\u0438\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0420\u043e\u0431\u043e\u0442-\u0448\u0430\u0448\u043b\u044b\u0447\u043d\u0438\u0446\u0430 (BBQ \u0430\u0432\u0442\u043e\u043c\u0430\u0442)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u043d\u0435\u0442 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430. \u041d\u043e: 100-200 \u0442\u044b\u0441. \u0440\u0443\u0431\u043b\u0435\u0439 \u043a\u0430\u043f\u0438\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442, \u043d\u0435\u0442 \u0434\u044b\u043c\u043d\u043e\u0433\u043e \u0430\u0440\u043e\u043c\u0430\u0442\u0430 (\u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044c), \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u00ab\u0434\u0443\u0448\u0430 \u043f\u043e\u0432\u0430\u0440\u0430\u00bb (\u043c\u0430\u043c\u0430 \u043e\u0431\u0438\u0434\u0438\u0442\u0441\u044f).<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>AI-driven grill (\u0441 computer vision \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u0438)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439, hype. \u041d\u043e: \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u043d\u0430 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 Wi-Fi \u043d\u0430 \u0434\u0430\u0447\u0435 (LOL), failure mode \u00abAI \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u00bb \u0442\u0440\u0443\u0434\u043d\u043e\u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u044f \u0431\u044b \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0435\u0444\u0430:<\/strong><\/p>\n<ul>\n<li>\n<p>50+ \u0433\u043e\u0441\u0442\u0435\u0439 (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432: \u0434\u043e\u043b\u0433\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0432\u044b\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u043e\u043f\u044b\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u043f\u0443)<\/p>\n<\/li>\n<li>\n<p>Hard SLA \u043d\u0430 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e (food critic \u0432 \u0433\u043e\u0441\u0442\u044f\u0445, \u0432\u0430\u0436\u043d\u044b\u0439 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432)<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0443\u0445\u043e\u043d\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e (steak + sushi + \u043a\u0435\u0431\u0430\u0431 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e)<\/p>\n<\/li>\n<li>\n<p>Operational pod density: \u043f\u0430\u043f\u0430 \u0442\u044f\u043d\u0435\u0442 1 \u043c\u0430\u043d\u0433\u0430\u043b, \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u2014 2-3 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e \u044d\u0442\u0438\u0445 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043f\u0430\u043f\u0430\/\u0434\u044f\u0434\u044f \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. \u0418 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435 \u043f\u043e \u0430\u0442\u043c\u043e\u0441\u0444\u0435\u0440\u0435.<\/p>\n<\/div>\n<\/details>\n<h3>5.9. \u0421\u0443-\u0448\u0435\u0444 framework: \u0436\u0435\u043d\u0430 \/ \u0434\u0440\u0443\u0433 \/ \u0441\u043e\u0441\u0435\u0434\u043a\u0430<\/h3>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435:<\/strong> \u043e\u0434\u0438\u043d \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444 \u0434\u043b\u044f \u0447\u0430\u0441\u043e\u0432 \u043f\u0438\u043a (peak hour 19:00-20:00).<\/p>\n<p><strong>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435:<\/strong> structure \u0434\u043b\u044f \u0440\u043e\u0441\u0442\u0430 (\u0436\u0435\u043d\u0430 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u043c\u044f\u0441\u043e \u043a \u043c\u0430\u043d\u0433\u0430\u043b\u0443, \u0448\u0435\u0444 \u0436\u0430\u0440\u0438\u0442, DI \/ separation of concerns) <strong>\u0431\u0435\u0437 cost \u043d\u0430 \u0441\u0442\u0430\u0440\u0442\u0435<\/strong>. \u041d\u0430 50 \u0433\u043e\u0441\u0442\u044f\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0448\u0435\u0444\u043e\u043c \u0438 \u0441\u0443-\u0448\u0435\u0444\u043e\u043c \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c \u0441\u0442\u043e\u0438\u0442, \u0438 \u043f\u043b\u0430\u0432\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0434\u043e \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433-\u0443\u0440\u043e\u0432\u043d\u044f: DI container \u0443\u0436\u0435 \u0435\u0441\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0443-\u0448\u0435\u0444\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0443-\u0448\u0435\u0444 frameworks: wife\/friend\/neighbor\/no-helper<\/summary>\n<div class=\"spoiler__content\">\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u043b \u0434\u043b\u044f tier 0<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u0435\u0437 \u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a\u0430 (\u0441\u043e\u043b\u043e)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0438\u043d\u0438\u043c\u0443\u043c coordination overhead, \u043d\u043e: \u043f\u0438\u043a \u0432\u044b\u043c\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0448\u0435\u0444\u0430, \u0434\u043b\u0438\u043d\u043d\u044b\u0435 queue waits \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0447\u0430\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0433\u043e\u0441\u0442\u044c (\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e, \u043d\u043e: \u043d\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430 onboarding, \u0447\u0435\u043c \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0444\u0438\u0446\u0438\u0430\u043d\u0442 (\u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f, \u043d\u043e: $50-100\/\u0447\u0430\u0441 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a, overkill<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>AI-\u043f\u043e\u043c\u043e\u0449\u043d\u0438\u043a (\u0410\u043b\u0438\u0441\u0430 \/ \u041c\u0430\u0440\u0443\u0441\u044f \u0434\u043b\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439, \u043d\u043e: \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u043c, \u043d\u0435 \u0441 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u043c\u044f\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 (\u0435\u0441\u043b\u0438 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c) \u0431\u0443\u0434\u0435\u0442 \u0440\u043e\u0441\u0442 \u0432 multi-event tier, \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u00abhost + \u0441\u0443-\u0448\u0435\u0444\u00bb \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u0430 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u043d\u044f.<\/p>\n<\/div>\n<\/details>\n<hr\/>\n<h2>6. Durability, \u043f\u043e\u0442\u0435\u0440\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c<\/h2>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0430\u0441\u0442\u043e \u0443\u043f\u0443\u0441\u043a\u0430\u044e\u0442 \u043d\u0430 \u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\u0445: <strong>\u0447\u0442\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c<\/strong>, \u0438 \u0433\u0434\u0435 \u0440\u0438\u0441\u043a\u0438 \u043f\u043e\u0442\u0435\u0440\u0438.<\/p>\n<h3>6.1. \u0427\u0442\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e<\/h3>\n<p>\u0423\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b + \u0431\u043b\u044e\u0434\u043e \u0434\u0430\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e durability primitives \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><strong>Synchronous heat transfer.<\/strong> \u041c\u044f\u0441\u043e \u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0435 \u0441 \u0443\u0433\u043b\u0451\u043c, \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u0430\u044f. \u0415\u0441\u043b\u0438 \u0448\u0430\u043c\u043f\u0443\u0440 \u043f\u043e\u043b\u043e\u0436\u0435\u043d, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0434\u0451\u0442.<\/p>\n<\/li>\n<li>\n<p><strong>Atomicity \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043f\u0430\u0440\u0442\u0438\u0438.<\/strong> \u041f\u0430\u0440\u0442\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c: \u043b\u0438\u0431\u043e \u0432\u0441\u044f \u0441\u043d\u044f\u0442\u0430 \u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 \u0431\u043b\u044e\u0434\u043e, \u043b\u0438\u0431\u043e \u0435\u0449\u0451 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435. \u041f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u0438 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435, \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 \u2014 \u044d\u0442\u043e \u043d\u0435 \u0431\u0430\u0433, \u044d\u0442\u043e <strong>transient state<\/strong> \u043c\u0435\u0436\u0434\u0443 \u0446\u0438\u043a\u043b\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p><strong>Buffer durability<\/strong>: \u043c\u044f\u0441\u043e \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u0430\u043c, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043d\u0435 \u0432\u043e\u0437\u044c\u043c\u0451\u0442. \u0428\u0435\u0444 \u043d\u0435 \u0442\u0435\u0440\u044f\u0435\u0442 \u00ab\u0443\u0436\u0435 \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435\u00bb, \u043a\u0430\u043a \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0431\u044b\u0442\u044c \u0432 \u0447\u0438\u0441\u0442\u043e\u043c sync chain.<\/p>\n<\/li>\n<li>\n<p><strong>TTL via cooling<\/strong>: \u043c\u044f\u0441\u043e \u0445\u043e\u043b\u043e\u0434\u043d\u0435\u0435\u0442 \u043f\u0440\u0438 \u0434\u043e\u043b\u0433\u043e\u043c \u043b\u0435\u0436\u0430\u043d\u0438\u0438. \u042d\u0442\u043e <strong>explicit retention policy<\/strong>: \u043f\u043e\u0441\u043b\u0435 ~30 \u043c\u0438\u043d \u043c\u044f\u0441\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u044a\u0435\u0434\u043e\u0431\u043d\u043e\u0435, \u043d\u043e \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0435; &gt;2 \u0447\u0430\u0441\u043e\u0432 \u2014 \u044d\u0442\u043e food safety violation. \u0411\u043b\u044e\u0434\u043e \u0441\u0430\u043c\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u00ab\u0437\u0430\u0431\u0435\u0440\u0438 \u043c\u0435\u043d\u044f\u00bb.<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0442\u043e\u0433\u043e: <strong>producer \u0438 consumer decoupled \u0447\u0435\u0440\u0435\u0437 durable buffer.<\/strong> \u041a\u0430\u043a Kafka topic: producer \u043f\u043e\u043b\u043e\u0436\u0438\u043b, \u0442\u043e\u043f\u0438\u043a \u0445\u0440\u0430\u043d\u0438\u0442, consumer \u0431\u0435\u0440\u0451\u0442, \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0433\u043e\u0441\u0442\u044c \u043e\u0442\u0432\u043b\u0451\u043a\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u0438 \u043f\u0440\u0438\u0448\u0451\u043b \u0447\u0435\u0440\u0435\u0437 15 \u043c\u0438\u043d\u0443\u0442, \u043c\u044f\u0441\u043e \u0435\u0449\u0451 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 (\u0435\u0441\u043b\u0438 TTL \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0435\u043d).<\/p>\n<h3>6.2. Failure modes \u2014 \u0447\u0442\u043e \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0438 \u043e\u0442 \u0447\u0435\u0433\u043e \u0441\u043f\u0430\u0441\u0430\u0435\u0442 \u0447\u0442\u043e<\/h3>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/db\/f0\/ef\/dbf0efa54d34925df1df7958fe8cbf79.png\" alt=\"Failure modes matrix \u2014 9 mode'\u043e\u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e severity\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/db\/f0\/ef\/dbf0efa54d34925df1df7958fe8cbf79.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/db\/f0\/ef\/dbf0efa54d34925df1df7958fe8cbf79.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Failure modes matrix \u2014 9 mode&#8217;\u043e\u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e severity<\/figcaption><\/div>\n<\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0431\u043e\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0442 \u0447\u0435\u0433\u043e \u0441\u043f\u0430\u0441\u0430\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041e\u0442 \u0447\u0435\u0433\u043e \u041d\u0415 \u0441\u043f\u0430\u0441\u0430\u0435\u0442<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u043b\u044e\u0434\u043e \u043f\u0443\u0441\u0442\u043e\u0435, \u0433\u043e\u0441\u0442\u0438 \u0436\u0434\u0443\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u043a\u0430\u0447\u043e\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f (1 batch cycle = ~13 \u043c\u0438\u043d)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Pre-warm \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0448\u0435\u0444 \u0443\u0448\u0451\u043b \u0437\u0430 \u0443\u0433\u043b\u0435\u043c, \u0434\u043b\u0438\u043d\u043d\u0430\u044f \u043f\u0430\u0443\u0437\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u043b\u044e\u0434\u043e \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u043c\u044f\u0441\u043e \u0441\u0442\u043e\u0438\u0442 &gt;30 \u043c\u0438\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">Food safety violation (cold meat \u2192 bacteria growth)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Backpressure (\u0448\u0435\u0444 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u044e\u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0435)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0448\u0435\u0444 \u043d\u0435 \u0441\u043b\u0435\u0434\u0438\u0442 \u0437\u0430 \u0431\u043b\u044e\u0434\u043e\u043c, \u0440\u0438\u0441\u043a<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0428\u0435\u0444 \u043f\u043e\u0442\u0435\u0440\u044f\u043b \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0430\u0440\u0442\u0438\u0439 (\u0447\u0435\u0440\u0435\u0437 2 \u0447\u0430\u0441\u0430 + \u043e\u0442\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0443\u0431\u043b\u044c \u043f\u0430\u0440\u0442\u0438\u0438 \u0438\u043b\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u0440\u043a\u0435\u0440 \u043d\u0430 \u0431\u0443\u043c\u0430\u0436\u043a\u0435 + skewer pool counter<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u0441\u0442\u043e\u0449\u0435\u043d\u0438\u0435 \u2192 \u043d\u0443\u0436\u0435\u043d \u0441\u0443-\u0448\u0435\u0444<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0428\u0435\u0444 \u0437\u0430\u0431\u044b\u043b \u043f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u044e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0433\u043e\u0440\u0435\u0432\u0448\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f (\u043f\u043e\u0442\u0435\u0440\u044f 8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0430\u0439\u043c\u0435\u0440 \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435 4 \u043c\u0438\u043d<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0436\u0430\u0440\u0435\u043d\u043e, \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u043c<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0423\u0433\u043e\u043b\u044c \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f (storage exhaustion)<\/p>\n<\/td>\n<td>\n<p align=\"left\">20-\u043c\u0438\u043d\u0443\u0442\u043d\u0430\u044f \u043f\u0430\u0443\u0437\u0430, \u0431\u043b\u044e\u0434\u043e \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">50% \u0440\u0435\u0437\u0435\u0440\u0432\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0435\u0440\u0432 \u0442\u043e\u0436\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0443 \u043a\u043e\u043d\u0435\u0446<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u043e\u0436\u0434\u044c \u0431\u0435\u0437 \u0442\u0435\u043d\u0442\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u043d\u0433\u0430\u043b \u0437\u0430\u0442\u043e\u043f\u043b\u0435\u043d, \u043f\u0430\u0440\u0442\u0438\u0438 \u0442\u0435\u0440\u044f\u044e\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041d\u0438\u0447\u0435\u0433\u043e \u0431\u0435\u0437 \u0442\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u0430 \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Durability-\u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0438 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0435\u0434\u0441\u043a\u0430\u044f \u0441\u043e\u0431\u0430\u043a\u0430 \u0443\u043a\u0440\u0430\u043b\u0430 \u043c\u044f\u0441\u043e \u0441 \u0431\u043b\u044e\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0427\u0430\u0441\u0442\u0438\u0447\u043d\u0430\u044f \u043f\u043e\u0442\u0435\u0440\u044f \u0441 \u0431\u043b\u044e\u0434\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0412\u044b\u0441\u043e\u043a\u0438\u0439 \u0441\u0442\u043e\u043b + \u043f\u0440\u0438\u0441\u043c\u043e\u0442\u0440<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u044f\u0441\u043e \u0443\u0436\u0435 \u0432 \u0441\u043e\u0431\u0430\u043a\u0435<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 +5 \u0433\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0428\u0435\u0444 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f, \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u0430\u0440\u0442\u0438\u0439 \u0441\u0431\u0438\u0432\u0430\u0435\u0442\u0441\u044f, capacity exceeded<\/p>\n<\/td>\n<td>\n<p align=\"left\">Backup host (\u0441\u0443-\u0448\u0435\u0444 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0414\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044f \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041c\u0430\u0440\u0438\u043d\u0430\u0434 \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u043b\u0441\u044f (food poisoning)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0438\u0447\u043d\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0421\u0432\u0435\u0436\u0438\u0439 \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u0441 \u0443\u043a\u0441\u0443\u0441\u043e\u043c \u043a\u0430\u0436\u0434\u044b\u0435 8 \u0447\u0430\u0441\u043e\u0432<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0415\u0441\u043b\u0438 \u0443\u0436\u0435 \u043f\u043e\u0434\u0430\u043d\u043e, \u0432\u0441\u0435 \u0433\u043e\u0441\u0442\u0438 \u0432 \u0431\u043e\u043b\u044c\u043d\u0438\u0446\u0435<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0427\u0442\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c:<\/strong> durability primitives \u043c\u0430\u043d\u0433\u0430\u043b\u0430 (heat, ACID \u0448\u0430\u043c\u043f\u0443\u0440\u0430) \u0437\u0430\u0449\u0438\u0449\u0430\u044e\u0442 \u043e\u0442 <strong>process failures<\/strong>, \u043d\u043e <strong>\u043d\u0435 \u043e\u0442 storage failures<\/strong> (\u0434\u043e\u0436\u0434\u044c, \u0441\u043e\u0431\u0430\u043a\u0430, \u043d\u0435\u0437\u0432\u0430\u043d\u044b\u0435 \u0433\u043e\u0441\u0442\u0438). Single host \u0431\u0435\u0437 backup\u2019\u0430 \u2014 \u044d\u0442\u043e single point of failure.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u00ab\u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0440\u0438\u0441\u043a\u0430 \u043f\u043e\u0442\u0435\u0440\u0438\u00bb \u0447\u0443\u0432\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u00a73-\u00a75. \u041e\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435: \u0431\u0435\u0437 backup\u2019\u043e\u0432 \u0438\/\u0438\u043b\u0438 \u0441\u0443-\u0448\u0435\u0444\u0430 disk failure (\u0434\u043e\u0436\u0434\u044c) \u0441\u0442\u0438\u0440\u0430\u0435\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u0417\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 \u00a76.3-\u00a76.4.<\/p>\n<h3>6.3. Backup strategy \u2014 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0439<\/h3>\n<p>\u041d\u0435 \u00ab\u043d\u0443 \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c \u043e\u0431\u043e\u0439\u0434\u0451\u0442\u0441\u044f\u00bb. \u042d\u0442\u043e \u043d\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p><strong>Pre-event capacity planning<\/strong>: \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0433\u043e\u0441\u0442\u0435\u0439 \u00d7 \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0430\u043f\u043f\u0435\u0442\u0438\u0442 + 30% \u0440\u0435\u0437\u0435\u0440\u0432\u0430. \u0417\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u044f\u0441\u043e \u0437\u0430 1-2 \u0434\u043d\u044f \u0434\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u043d\u0442 \/ \u043d\u0430\u0432\u0435\u0441<\/strong>: \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0436\u0434\u044f \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442 (vs 30 \u043c\u0438\u043d\u0443\u0442 \u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0431\u0435\u0436\u043a\u0438 \u0432 \u0434\u043e\u043c)<\/p>\n<\/li>\n<li>\n<p><strong>\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u0443\u0445\u043d\u044f \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438<\/strong>: \u0435\u0441\u043b\u0438 \u0443\u0433\u043e\u043b\u044c \u043f\u0440\u043e\u043c\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0436\u0430\u0440\u0438\u0442\u044c \u043d\u0430 \u0441\u043a\u043e\u0432\u043e\u0440\u043e\u0434\u0435<\/p>\n<\/li>\n<li>\n<p><strong>\u0421\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c:<\/strong> ~5-8 \u0442\u044b\u0441. \u0440\u0443\u0431\u043b\u0435\u0439 \u0437\u0430 \u0442\u0435\u043d\u0442 + 30% \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u044f\u0441\u0430.<\/p>\n<\/li>\n<\/ul>\n<h3>6.4. Replication \u2014 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 tier 0<\/h3>\n<p><strong>\u0421\u0443-\u0448\u0435\u0444 \u043a\u0430\u043a replica<\/strong> \u2014 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 durability:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0421\u0443-\u0448\u0435\u0444?<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439 \u0443\u0436\u0438\u043d \u043d\u0430 4-6 \u0447\u0435\u043b\u043e\u0432\u0435\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0441\u043e\u043b\u043e OK, \u043f\u0430\u043f\u0430 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u043d\u0430 12-20 (\u043d\u0430\u0448\u0430 \u0437\u0430\u0434\u0430\u0447\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u0435\u043d \u043d\u0430 \u043f\u0438\u043a\u043e\u0432\u044b\u0439 \u0447\u0430\u0441, \u0438\u043d\u0430\u0447\u0435 \u043f\u0430\u043f\u0430 \u043d\u0435 \u0443\u0441\u043f\u0435\u0435\u0442 \u0437\u0430 \u0447\u0430\u0441 \u0434\u043e 20:00<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0432\u0430\u0434\u044c\u0431\u0430 \/ 50-\u043b\u0435\u0442\u0438\u0435 \/ 50+ \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e + standby \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0443-\u0448\u0435\u0444 + \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043d\u0433\u0430\u043b\u044b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432 \u0441 food critic \u0432 \u0433\u043e\u0441\u0442\u044f\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e + \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0435\u0444 \u043a\u0430\u043a primary<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u043d\u0430 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433-\u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0443-\u0448\u0435\u0444 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c + automated failover (\u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0448\u0435\u0444 \u0443\u0441\u0442\u0430\u043b, \u0441\u0443-\u0448\u0435\u0444 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0434\u043b\u044f \u0433\u043e\u0441\u0442\u0435\u0439).<\/p>\n<h3>6.5. \u0427\u0442\u043e \u043f\u0440\u043e \u0432\u043a\u0443\u0441 \u0438 food safety<\/h3>\n<p>\u0412\u043a\u0443\u0441 \u0438 food safety \u2014 \u044d\u0442\u043e <strong>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/strong>, \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0430\u044f \u043e\u0442 tier. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043d\u0430 5 \u0433\u043e\u0441\u0442\u044f\u0445, 50 \u0438 500: \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u0441 \u0443\u043a\u0441\u0443\u0441\u043e\u043c \u0438\u043b\u0438 \u043b\u0438\u043c\u043e\u043d\u043e\u043c (\u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u043a\u0442\u0435\u0440\u0438\u0438), \u043f\u0440\u043e\u0433\u0440\u0435\u0432 \u0434\u043e 70\u00b0C \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0443\u0441\u043a\u0430 (USDA standard \u0434\u043b\u044f \u0441\u0432\u0438\u043d\u0438\u043d\u044b\/\u043a\u0443\u0440\u0438\u0446\u044b), \u0441\u044b\u0440\u043e\u0435 \u043c\u044f\u0441\u043e \u043d\u0435 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0442\u0430\u0440\u0435\u043b\u043a\u0430\u0445. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043d\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 tier\u2019\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e.<\/p>\n<p><strong>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 tier-specific \u043d\u044e\u0430\u043d\u0441 \u2014 \u0434\u0432\u0430 \u0441\u043c\u044b\u0441\u043b\u0430 rate limiting\u2019\u0430.<\/strong><\/p>\n<ul>\n<li>\n<p><strong>Per-guest fair-share<\/strong> (\u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u043e\u0441\u0442\u044f \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u043d\u0435 \u0441\u044a\u0435\u043b \u0432\u0441\u0451): \u043d\u0430 \u0434\u0430\u0447\u043d\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 <strong>\u043d\u0435 \u043d\u0443\u0436\u0435\u043d<\/strong>, \u043f\u0430\u043f\u0430 \u0437\u043d\u0430\u0435\u0442 \u0433\u043e\u0441\u0442\u0435\u0439 \u043b\u0438\u0447\u043d\u043e, \u0441\u043e\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0434\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u0430 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u0435 \u0441 \u043d\u0435\u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c\u0438 \u0433\u043e\u0441\u0442\u044f\u043c\u0438 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>Per-mangal safety throttle<\/strong> (\u0437\u0430\u0449\u0438\u0442\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u043e\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 30 \u0448\u0430\u043c\u043f\u0443\u0440\u0430\u043c\u0438): <strong>\u043d\u0443\u0436\u0435\u043d \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e<\/strong>. \u042d\u0442\u043e safety net \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>6.6. \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 production checklist<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432\u044b\u0448\u0435:<\/p>\n<ul>\n<li>\n<p>[ ] \u0422\u0435\u043d\u0442 \u0438\u043b\u0438 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u0443\u0445\u043d\u044f \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043d\u044b<\/p>\n<\/li>\n<li>\n<p>[ ] \u0417\u0430\u043f\u0430\u0441 \u043c\u044f\u0441\u0430 30% \u0441\u0432\u0435\u0440\u0445 \u0440\u0430\u0441\u0447\u0451\u0442\u043d\u043e\u0433\u043e (20 \u0433\u043e\u0441\u0442\u0435\u0439 \u00d7 5 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u00d7 250\u0433 = 25\u043a\u0433, \u0431\u0435\u0440\u0451\u043c 32-35\u043a\u0433 \u0441 \u0440\u0435\u0437\u0435\u0440\u0432\u043e\u043c \u043d\u0430 heavy eaters \u0442\u0438\u043f\u0430 \u0434\u044f\u0434\u0438 \u041f\u0435\u0442\u0438)<\/p>\n<\/li>\n<li>\n<p>[ ] \u041c\u0430\u0440\u0438\u043d\u0430\u0434 \u0433\u043e\u0442\u043e\u0432 \u043d\u0430\u043a\u0430\u043d\u0443\u043d\u0435 (8h \u0444\u0435\u0440\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f) + \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f (2h)<\/p>\n<\/li>\n<li>\n<p>[ ] Alert \u043d\u0430 \u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0439 \u0437\u0430\u043f\u0430\u0441 &lt; 1 \u043f\u0430\u043a\u0435\u0442\u0430 (rule of thumb: \u043f\u0430\u043a\u0435\u0442 \u2248 2 \u0447\u0430\u0441\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043a\u0438)<\/p>\n<\/li>\n<li>\n<p>[ ] Alert \u043d\u0430 19:00-20:00 \u043f\u0438\u043a (\u0441\u0443-\u0448\u0435\u0444 on standby)<\/p>\n<\/li>\n<li>\n<p>[ ] <strong>Per-mangal safety throttle<\/strong> (\u0441\u043c. \u00a76.5): \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b<\/p>\n<\/li>\n<li>\n<p>[ ] \u041e\u0434\u0438\u043d-\u0434\u0432\u0430 \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u044b\u0445 post-mortem\u2019\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 (\u00ab\u0447\u0442\u043e \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a\u00bb, \u00ab\u0447\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c\u00bb) \u0434\u043b\u044f \u043d\u0435-\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 (\u0431\u0435\u0440\u0451\u0437\u043e\u0432\u044b\u0439 \u0443\u0433\u043e\u043b\u044c vs \u0434\u0443\u0431\u043e\u0432\u044b\u0439, \u0441\u0435\u043a\u0440\u0435\u0442 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u0430)<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: durability \u0438 event recovery<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>\u00abCrash-Only Software\u00bb<\/strong> (Candea &amp; Fox), applied to grilling: \u00ab\u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u2192 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u00bb \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u00ab\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u00bb<\/p>\n<\/li>\n<li>\n<p><strong>Aphyr Jepsen analyses<\/strong>: distributed system consistency, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a\u043e\u0433\u0434\u0430 2 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u0438, \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439<\/p>\n<\/li>\n<li>\n<p><strong>\u00abSite Reliability Engineering\u00bb<\/strong> (Google), Ch26 \u00abData Integrity\u00bb: \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u00ab\u0434\u043e\u0432\u0435\u0440\u044f\u0442\u044c backup\u2019\u0443\u00bb, \u043a\u0430\u043a \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e reserve \u043c\u044f\u0441\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u0440\u0447\u0435\u043d<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<h2>7. \u0427\u0442\u043e \u043c\u0435\u0440\u0438\u0442\u044c \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0448\u0430\u043c\u043f\u0443\u0440\u0430<\/h2>\n<p>\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 OK?\u00bb:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041c\u0435\u0442\u0440\u0438\u043a\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">Backend analog<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0413\u043b\u0443\u0431\u0438\u043d\u0430 \u0431\u043b\u044e\u0434\u0430<\/strong> (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e + \u0442\u0438\u043f\u044b \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Buffer occupancy: \u043f\u043e\u043b\u043d\u043e\u0435=backpressure, \u043f\u0443\u0441\u0442\u043e\u0435=starvation<\/p>\n<\/td>\n<td>\n<p align=\"left\">Kafka topic depth, Redis queue length<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0412\u0440\u0435\u043c\u044f \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 p99<\/strong> (\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0430\u043c\u044b\u0439 \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043b\u0435\u0436\u0438\u0442)<\/p>\n<\/td>\n<td>\n<p align=\"left\">TTL nearing: \u043c\u044f\u0441\u043e \u0441\u0442\u044b\u043d\u0435\u0442, food safety risk<\/p>\n<\/td>\n<td>\n<p align=\"left\">Message age in queue<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0422\u0435\u043c\u043f \u043f\u0430\u0440\u0442\u0438\u0439 \u0448\u0435\u0444\u0430<\/strong> (\u043f\u0430\u0440\u0442\u0438\u0439\/\u0447\u0430\u0441) vs <strong>\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u043b\u044e\u0434\u0430<\/strong> (\u043f\u043e\u0440\u0446\u0438\u0439\/\u043c\u0438\u043d)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Producer\/consumer balance: \u0440\u0430\u0432\u043d\u044b \u043b\u0438 \u0442\u0435\u043c\u043f\u044b?<\/p>\n<\/td>\n<td>\n<p align=\"left\">Producer throughput vs consumer rate<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Skewer pool utilization<\/strong> (in_mangal \/ cooling \/ available)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Resource pool exhaustion early warning<\/p>\n<\/td>\n<td>\n<p align=\"left\">Connection pool stats (active\/idle\/total)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0417\u0430\u043f\u0430\u0441 \u0443\u0433\u043b\u044f<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Storage exhaustion: \u043c\u0430\u043d\u0433\u0430\u043b \u043e\u0441\u0442\u044b\u043d\u0435\u0442, \u0435\u0441\u043b\u0438 \u043d\u0438\u0436\u0435 threshold<\/p>\n<\/td>\n<td>\n<p align=\"left\">Disk usage \/ available capacity<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0421\u0447\u0451\u0442\u0447\u0438\u043a \u0441\u0433\u043e\u0440\u0435\u0432\u0448\u0438\u0445 \u043f\u0430\u0440\u0442\u0438\u0439<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">Quality degradation: \u0448\u0435\u0444 \u0443\u0441\u0442\u0430\u043b \u0438\u043b\u0438 \u043c\u0430\u043d\u0433\u0430\u043b \u043f\u0435\u0440\u0435\u0433\u0440\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">Error rate by category<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><code>prom-client<\/code> \u0434\u043b\u044f \u0448\u0430\u0448\u043b\u044b\u043a\u0430 \u2014 \u044d\u0442\u043e <strong>\u0434\u043e\u0441\u043a\u0430 \u0441 \u043f\u043e\u043c\u0435\u0442\u043a\u0430\u043c\u0438<\/strong> \u0432\u043e\u0437\u043b\u0435 \u043c\u0430\u043d\u0433\u0430\u043b\u0430: \u0441\u0447\u0451\u0442\u0447\u0438\u043a (\u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \/ \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e), \u0442\u0430\u0439\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u043e\u0446\u0435\u043d\u043a\u0430 \u0437\u0430\u043f\u0430\u0441\u0430 \u0443\u0433\u043b\u044f. 30 \u043c\u0438\u043d\u0443\u0442 \u043d\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443. \u041d\u0430 5 \u0433\u043e\u0441\u0442\u044f\u0445 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e? \u041d\u0435\u0442, \u044d\u0442\u043e <strong>\u0431\u0430\u0437\u0430 \u0434\u043b\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f<\/strong> \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\u0445: \u00ab\u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0440\u0430\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u0431\u044b\u043b\u043e 12%, \u043f\u043e\u0447\u0435\u043c\u0443? \u041c\u0430\u0440\u0438\u043d\u0430\u0434? \u0423\u0433\u043e\u043b\u044c? \u0428\u0435\u0444 \u0443\u0441\u0442\u0430\u043b?\u00bb.<\/p>\n<p><strong>\u0424\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0443\u0435\u043c SLO.<\/strong> \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0431\u0435\u0437 thresholds \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b: alert \u00ab\u0431\u043b\u044e\u0434\u043e \u043f\u0443\u0441\u0442\u043e 2 \u043c\u0438\u043d\u0443\u0442\u044b\u00bb (\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0430\u043a\u0446\u0438\u0438) \u0438 \u00ab\u0431\u043b\u044e\u0434\u043e \u043f\u0443\u0441\u0442\u043e 10 \u043c\u0438\u043d\u0443\u0442\u00bb (\u0448\u0435\u0444 \u0443\u0448\u0451\u043b, \u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f) \u2014 \u044d\u0442\u043e \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 SLO \u0434\u043b\u044f \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0448\u0430\u0448\u043b\u044b\u043a\u0430: <strong>wait time p95 &lt; 3 \u043c\u0438\u043d<\/strong> (\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 customer experience), <strong>burnt batches &lt; 2%<\/strong> (quality threshold), <strong>alert, \u0435\u0441\u043b\u0438 3 \u043f\u0430\u0440\u0442\u0438\u0438 \u043f\u043e\u0434\u0440\u044f\u0434 &gt; 5 \u043c\u0438\u043d \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f<\/strong> (\u0432\u0435\u0440\u043e\u044f\u0442\u0435\u043d \u0448\u0435\u0444 burnout \u0438\u043b\u0438 storage exhaustion). \u041d\u0430 backend \u0431\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f SLO \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e dashboards \u0431\u0435\u0437 \u0441\u043c\u044b\u0441\u043b\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: observability foundations \u0434\u043b\u044f \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>\u00abEffective Monitoring and Alerting\u00bb<\/strong> (Slawek Ligus): alerting hygiene applied \u043a bbq events<\/p>\n<\/li>\n<li>\n<p><strong>Brendan Gregg: USE Method<\/strong>: \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 (\u043c\u0430\u043d\u0433\u0430\u043b, \u0448\u0435\u0444, \u0441\u0443-\u0448\u0435\u0444, \u0443\u0433\u043e\u043b\u044c) \u043f\u0440\u043e\u0432\u0435\u0440\u044c Utilization, Saturation, Errors<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<h2>8. Measured: \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0448\u0430\u0448\u043b\u044b\u043a \u043d\u0430 \u0434\u0430\u0447\u0435<\/h2>\n<h3>8.1. Setup<\/h3>\n<blockquote>\n<p><strong>Honesty disclaimer:<\/strong> \u0447\u0438\u0441\u043b\u0430 \u043d\u0438\u0436\u0435 \u2014 \u044d\u0442\u043e \u043e\u0446\u0435\u043d\u043a\u0438 \u043f\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0434\u0430\u0447\u043d\u043e\u043c\u0443 \u043e\u043f\u044b\u0442\u0443, \u043d\u0435 \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 benchmarks \u0441 \u0441\u0435\u043a\u0443\u043d\u0434\u043e\u043c\u0435\u0440\u043e\u043c. \u0420\u0430\u0437\u0431\u0440\u043e\u0441 \u00b120-30% \u043e\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043a \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0433\u043e\u0434\u044b, \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0448\u0435\u0444\u0430. \u041d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435 (50+ \u0433\u043e\u0441\u0442\u0435\u0439) degradation factor \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 (\u0441\u043c. \u00a78.4).<\/p>\n<\/blockquote>\n<ul>\n<li>\n<p><strong>Hardware:<\/strong> \u0414\u0430\u0447\u0430 6 \u0441\u043e\u0442\u043e\u043a, 2\u00d7 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 60\u00d730 \u0441\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e (horizontal scaling \u0438\u0437 \u00a75.3 \u2014 bulkhead \u0434\u043b\u044f \u043a\u0443\u0440\u0438\u0446\u044b \u0438 \u0441\u0432\u0438\u043d\u0438\u043d\u044b), 1 \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a 280L, 1 \u0441\u0442\u0430\u0440\u0442\u0435\u0440 \u0434\u043b\u044f \u0443\u0433\u043b\u0435\u0439.<\/p>\n<\/li>\n<li>\n<p><strong>Stack:<\/strong> \u043f\u0430\u043f\u0430 \u043a\u0430\u043a \u0448\u0435\u0444 + \u044f \u043a\u0430\u043a \u0441\u0443-\u0448\u0435\u0444 (2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u00a71.3), 8h-\u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0432\u0438\u043d\u0438\u043d\u0430 + \u043a\u0443\u0440\u0438\u0446\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0437 \u00ab\u041a\u043d\u0438\u0433\u0438 \u043e \u0432\u043a\u0443\u0441\u043d\u043e\u0439 \u0438 \u0437\u0434\u043e\u0440\u043e\u0432\u043e\u0439 \u043f\u0438\u0449\u0435\u00bb 1952 \u0433.<\/p>\n<\/li>\n<li>\n<p><strong>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438:<\/strong> 20 \u0433\u043e\u0441\u0442\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 (\u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u0438 + \u0434\u0440\u0443\u0437\u044c\u044f), 4-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>8.2. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0442\u0438\u0439\/\u0447\u0430\u0441 \u0448\u0435\u0444\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0413\u043b\u0443\u0431\u0438\u043d\u0430 \u0431\u043b\u044e\u0434\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:00-19:15 (\u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0 (\u043c\u0430\u043d\u0433\u0430\u043b \u0440\u0430\u0437\u0433\u043e\u0440\u0430\u0435\u0442\u0441\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043f\u0443\u0441\u0442\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u2014<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:15-19:30 (1-\u044f \u043f\u0430\u0440\u0442\u0438\u044f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">4 (1 \u043f\u0430\u0440\u0442\u0438\u044f \u0437\u0430 13 \u043c\u0438\u043d)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e 8 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">0-13 \u043c\u0438\u043d (cold start)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">19:30-20:30 (\u043f\u0438\u043a\u043e\u0432\u044b\u0439 \u0447\u0430\u0441)<\/p>\n<\/td>\n<td>\n<p align=\"left\">4 \u043f\u0430\u0440\u0442\u0438\u0438\/\u0447\u0430\u0441 (~32 \u0448\u0430\u043c\u043f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e 5-10 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;2 \u043c\u0438\u043d (\u0432\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">20:30-22:00 (\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">1-2 \u043f\u0430\u0440\u0442\u0438\u0438\/\u0447\u0430\u0441 (~12 \u0448\u0430\u043c\u043f)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e 3-7 \u043f\u043e\u0440\u0446\u0438\u0439<\/p>\n<\/td>\n<td>\n<p align=\"left\">&lt;3 \u043c\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">22:00-22:30 (wind-down)<\/p>\n<\/td>\n<td>\n<p align=\"left\">0-1 \u043f\u0430\u0440\u0442\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f, \u043e\u0441\u0442\u0430\u0442\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">0 (\u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0435\u0449\u0451)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0412\u0441\u0435\u0433\u043e \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a:<\/strong> ~50 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 (10-11 \u043a\u0433 \u043c\u044f\u0441\u0430), 0 \u0441\u0433\u043e\u0440\u0435\u0432\u0448\u0438\u0445 \u043f\u0430\u0440\u0442\u0438\u0439, 1 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a (\u0441\u044b\u0440\u043e\u0432\u0430\u0442\u043e), ~5-8 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043e\u0441\u0442\u0430\u0442\u043e\u043a \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb.<\/p>\n<p><strong>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u044e\u0434\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e):<\/strong><\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/9e\/93\/46\/9e9346a4376e8fb099a96c59717d430f.png\" alt=\"\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u044e\u0434\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/9e\/93\/46\/9e9346a4376e8fb099a96c59717d430f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/9e\/93\/46\/9e9346a4376e8fb099a96c59717d430f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u043b\u044e\u0434\u0430 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438<\/figcaption><\/div>\n<\/figure>\n<h3>8.3. \u0427\u0442\u043e \u044d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442<\/h3>\n<ol>\n<li>\n<p><strong>\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u043b\u044e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442<\/strong>: \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f 3-10 \u043f\u043e\u0440\u0446\u0438\u0439 \u0432\u0435\u0441\u044c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e \u0432 \u043f\u0438\u043a\u043e\u0432\u044b\u0439 \u0447\u0430\u0441, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 overflow &gt; TTL threshold.<\/p>\n<\/li>\n<li>\n<p><strong>Wait time &lt;3 \u043c\u0438\u043d<\/strong> \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439: \u0433\u043e\u0441\u0442\u044f\u043c \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c (\u0432 \u044d\u0442\u043e\u043c \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430).<\/p>\n<\/li>\n<li>\n<p><strong>\u0422\u0435\u043c\u043f \u0448\u0435\u0444\u0430 \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0439<\/strong>: 4 \u043f\u0430\u0440\u0442\u0438\u0438\/\u0447\u0430\u0441 \u0432 \u043f\u0438\u043a\u0435, 1-2 \u0432 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435. Backpressure \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0431\u043b\u044e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Cold start<\/strong>: \u043f\u0435\u0440\u0432\u044b\u0435 15 \u043c\u0438\u043d\u0443\u0442 \u0433\u043e\u0441\u0442\u0438 \u0436\u0434\u0443\u0442 \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 + 1-\u0439 \u043f\u0430\u0440\u0442\u0438\u0438. \u042d\u0442\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0441\u0442\u0430\u0442\u043a\u0438 ~10-15%<\/strong>: feature, \u043d\u0435 bug. \u041d\u0438\u043a\u0442\u043e \u043d\u0435 \u0443\u0448\u0451\u043b \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0439, \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u044b.<\/p>\n<\/li>\n<\/ol>\n<h3>8.4. Honest disclaimer: synthetic \u0448\u0430\u0448\u043b\u044b\u043a \u2260 production event<\/h3>\n<p>\u042d\u0442\u043e <strong>dyno test<\/strong> \u043d\u0430 \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435. \u041d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435 50+ (synthetic \u2260 prod):<\/p>\n<ul>\n<li>\n<p>\u0413\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u043e\u043d\u0446\u0443 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430: \u0432\u0441\u043f\u043b\u0435\u0441\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0435 (\u043e\u0434\u043d\u0438 \u0443\u0436\u0435 \u0441\u044b\u0442\u044b, \u0434\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e \u0433\u043e\u043b\u043e\u0434\u043d\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0441\u0435\u0434 \u043a\u0430\u043a concurrent admin user (\u00ab\u043d\u0443 \u043a\u0442\u043e \u0442\u0430\u043a \u0436\u0430\u0440\u0438\u0442, \u0434\u0430\u0439 \u043f\u043e\u043a\u0430\u0436\u0443\u00bb) \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 ~15% overhead<\/p>\n<\/li>\n<li>\n<p>\u0414\u0435\u0442\u0438 \u043a\u0430\u043a chaos engineering (\u043c\u043e\u0433\u0443\u0442 \u043e\u043f\u0440\u043e\u043a\u0438\u043d\u0443\u0442\u044c \u043c\u0430\u043d\u0433\u0430\u043b, \u0443\u043d\u0435\u0441\u0442\u0438 \u0448\u0430\u043c\u043f\u0443\u0440\u044b)<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0433\u043e\u0441\u0442\u044c (\u044e\u0431\u0438\u043b\u044f\u0440 \/ \u0438\u043c\u0435\u043d\u0438\u043d\u043d\u0438\u043a \/ \u0432\u0430\u0436\u043d\u043e\u0435 \u043b\u0438\u0446\u043e) \u043a\u0430\u043a critical SLA: \u0435\u0441\u043b\u0438 \u043d\u0435 \u0432\u043a\u0443\u0441\u043d\u043e \u2014 disaster<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 8+ \u0447\u0430\u0441\u043e\u0432 (vs \u043d\u0430\u0448\u0438 4 \u0447\u0430\u0441\u0430), \u0432\u044b\u0433\u043e\u0440\u0430\u043d\u0438\u0435 \u0448\u0435\u0444\u0430 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<p><strong>Realistic degradation factor: 30-50%<\/strong> \u043e\u0442 \u0434\u0430\u0447\u043d\u043e\u0439 synthetic\u2019\u0438 \u043d\u0430 \u00ab\u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u00bb \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435.<\/p>\n<p>\u041d\u0430\u0448 \u00ab40\/\u0447\u0430\u0441 @ p99 18 \u043c\u0438\u043d\u00bb \u0432 production conditions:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439 \u0443\u0436\u0438\u043d \u043d\u0430 \u0434\u0430\u0447\u0435 (\u043d\u0430\u0448 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">40\/\u0447\u0430\u0441 @ p99 18 \u043c\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0421\u043e\u0441\u0435\u0434\u0438 \u0437\u0430\u0448\u043b\u0438 \u043d\u0430 \u0437\u0430\u043f\u0430\u0445 (+5 \u0447\u0435\u043b\u043e\u0432\u0435\u043a)<\/p>\n<\/td>\n<td>\n<p align=\"left\">30\/\u0447\u0430\u0441 @ p99 25 \u043c\u0438\u043d<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0412\u0441\u0442\u0440\u0435\u0447\u0430 \u0431\u044b\u0432\u0448\u0438\u0445 \u043e\u0434\u043d\u043e\u043a\u043b\u0430\u0441\u0441\u043d\u0438\u043a\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">25\/\u0447\u0430\u0441 @ p99 30 \u043c\u0438\u043d (\u0432\u0441\u0435 \u0441\u043f\u043e\u0440\u044f\u0442 \u043f\u0440\u043e \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u0443)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u043f\u043e\u0441\u043b\u0435 22:00 (\u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043d\u0446\u043f\u043e\u043b\u0430)<\/p>\n<\/td>\n<td>\n<p align=\"left\">15\/\u0447\u0430\u0441 @ p99 45 \u043c\u0438\u043d (chaos mode)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u042d\u0442\u043e <strong>\u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 design point<\/strong> \u00ab20 \u0433\u043e\u0441\u0442\u0435\u0439, 4 \u0447\u0430\u0441\u0430\u00bb \u0432 production conditions \u0434\u043b\u044f \u0441\u0435\u043c\u0435\u0439\u043d\u043e\u0433\u043e \u0443\u0436\u0438\u043d\u0430 (\u0441 \u0437\u0430\u043f\u0430\u0441\u043e\u043c). \u0415\u0441\u043b\u0438 \u043f\u0430\u043f\u0430 \u043d\u0435 \u0432\u044b\u0441\u043f\u0430\u043b\u0441\u044f \/ \u0431\u043e\u043b\u0435\u0435\u0442 \/ \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u2014 \u043d\u0443\u0436\u043d\u0430 \u0440\u043e\u0442\u0430\u0446\u0438\u044f \u0441\u0443-\u0448\u0435\u0444\u0430, \u0438\u043d\u0430\u0447\u0435 latency degradation.<\/p>\n<hr\/>\n<h2>9. Anti-patterns \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/99\/99\/75\/999975904982974a85c5f6df312bd19f.png\" alt=\"7 anti-pattern'\u043e\u0432 \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/99\/99\/75\/999975904982974a85c5f6df312bd19f.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/99\/99\/75\/999975904982974a85c5f6df312bd19f.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>7 anti-pattern&#8217;\u043e\u0432 \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>7 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\u0445 \u0438 \u0443\u0431\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043b\u044e\u0431\u044b\u0445 scaling-\u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/p>\n<p><strong>1. \u0423\u0433\u043e\u043b\u044c \u00ab\u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435\u00bb (cold start procrastination).<\/strong> \u00ab\u0420\u0430\u0437\u043e\u0436\u0433\u0443, \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0435\u0434\u0443\u0442\u00bb, \u0438 \u043f\u0435\u0440\u0432\u044b\u0435 30 \u043c\u0438\u043d\u0443\u0442 \u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043f\u0443\u0441\u0442\u0430\u044f, \u0433\u043e\u0441\u0442\u0438 \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0435. \u0423\u0433\u043e\u043b\u044c \u043d\u0430\u0434\u043e \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u0430\u0442\u044c <strong>\u0437\u0430 30 \u043c\u0438\u043d\u0443\u0442 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0433\u043e\u0441\u0442\u044f<\/strong>, \u0447\u0442\u043e\u0431\u044b 1-\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0431\u044b\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043d\u0443\u0436\u043d\u0430.<\/p>\n<p><strong>2. \u0413\u043e\u0442\u043e\u0432\u0438\u0442\u044c, \u043f\u043e\u043a\u0430 \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f.<\/strong> \u0428\u0435\u0444 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u0443\u044e \u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443, \u043a\u043b\u0430\u0434\u0451\u0442 \u0435\u0449\u0451 \u043f\u0430\u0440\u0442\u0438\u044e, \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0430, \u043c\u044f\u0441\u043e \u0441\u0442\u043e\u0438\u0442 &gt;30 \u043c\u0438\u043d, food poisoning risk. <strong>Backpressure \u0447\u0435\u0440\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443<\/strong>: \u0435\u0441\u043b\u0438 \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043f\u043e\u043b\u043d\u0430\u044f \u2014 \u043f\u0430\u0443\u0437\u0430, \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0439 \u0441 \u0433\u043e\u0441\u0442\u044f\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438.<\/p>\n<p><strong>3. \u041c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441-\u0433\u0440\u0438\u043b\u044c (\u043e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u043c\u044f\u0441\u0430).<\/strong> \u041c\u0430\u043d\u0433\u0430\u043b \u0434\u043b\u044f \u043a\u0443\u0440\u0438\u0446\u044b + \u043c\u0430\u043d\u0433\u0430\u043b \u0434\u043b\u044f \u0441\u0432\u0438\u043d\u0438\u043d\u044b + \u043c\u0430\u043d\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u044b\u0431\u044b. \u041d\u0430 20 \u0433\u043e\u0441\u0442\u044f\u0445 \u044d\u0442\u043e <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442<\/strong>: \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 overhead, \u0442\u0440\u0438 \u043f\u0443\u043b\u0430 \u0441\u043a\u0435\u0432\u0435\u0440\u2019\u043e\u0432, distributed tracing \u00ab\u0430 \u0433\u0434\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u044b\u0431\u0430?\u00bb. \u041c\u043e\u043d\u043e\u043b\u0438\u0442-\u043c\u0430\u043d\u0433\u0430\u043b (\u043e\u0431\u0449\u0438\u0439 \u0441 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u043d\u044b\u0445 \u0437\u043e\u043d) \u2014 \u0441\u043a\u0443\u0447\u043d\u044b\u0439, \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439, \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<p><strong>4. \u0410\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u0430\u0440\u0442\u0438\u043e\u043d\u043d\u043e\u0435 \u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0435\u0437 TTL.<\/strong> \u00ab\u0417\u0430\u043c\u0430\u0440\u0438\u043d\u0443\u044e \u0432\u0441\u0451 \u043c\u044f\u0441\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 8 \u043a\u0433 \u0437\u0430 24 \u0447\u0430\u0441\u0430 \u0434\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\u00bb. \u0427\u0435\u0440\u0435\u0437 24 \u0447\u0430\u0441\u0430: 4 \u043a\u0433 \u043f\u0435\u0440\u0435\u043c\u0430\u0440\u0438\u043d\u043e\u0432\u0430\u043d\u043e (\u043c\u044f\u0441\u043e \u00ab\u0432\u0430\u0440\u0438\u0442\u0441\u044f\u00bb \u0432 \u043a\u0438\u0441\u043b\u043e\u0442\u0435, \u0442\u0435\u0440\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443), 4 \u043a\u0433 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 OK. \u041c\u0430\u0440\u0438\u043d\u0430\u0434 \u0438\u043c\u0435\u0435\u0442 <strong>TTL 8-12 \u0447\u0430\u0441\u043e\u0432<\/strong>, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044f\u0441\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u0443\u0435\u0442, \u0430 \u043d\u0435 \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f. \u041b\u0443\u0447\u0448\u0435 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430: \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0437\u0430 8 \u0447\u0430\u0441\u043e\u0432, \u0432\u0442\u043e\u0440\u0430\u044f \u0437\u0430 4 \u0447\u0430\u0441\u0430.<\/p>\n<p><strong>5. Skewer pool leak.<\/strong> \u0428\u0435\u0444 \u043e\u0442\u0434\u0430\u043b \u0448\u0430\u043c\u043f\u0443\u0440 \u0433\u043e\u0441\u0442\u044e \u00ab\u0432\u043e\u0437\u044c\u043c\u0438 \u0441 \u0441\u043e\u0431\u043e\u0439 \u043a \u043c\u0430\u043d\u0433\u0430\u043b\u0443\u00bb, \u043d\u0435 \u0432\u0435\u0440\u043d\u0443\u043b \u0432 \u043f\u0443\u043b, \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441 <code>available = 0<\/code>, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0436\u0434\u0451\u0442, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442 \u043f\u0440\u043e\u043f\u0430\u0436\u0443. <strong>\u0428\u0430\u043c\u043f\u0443\u0440\u0430 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441, \u043d\u0435 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439.<\/strong> \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442, \u043d\u0435 \u043e\u0442\u0434\u0430\u0432\u0430\u0439 \u0433\u043e\u0441\u0442\u044f\u043c.<\/p>\n<p><strong>6. No social rate limiting \u043d\u0430 \u0434\u044f\u0434\u044e \u041f\u0435\u0442\u044e.<\/strong> \u00ab\u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u043f\u0443\u0441\u0442\u044c \u0431\u0435\u0440\u0451\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0447\u0435\u0442, \u0441 \u0442\u0430\u0440\u0435\u043b\u043a\u0438\u00bb. \u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0431\u0435\u0440\u0451\u0442 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0442\u0438\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043a \u043f\u0443\u0441\u0442\u043e\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u0435, \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0430\u0447\u043a\u043e\u043c \u0432\u044b\u0440\u0430\u0441\u0442\u0430\u0435\u0442, \u043b\u044e\u0434\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043a \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a\u0443 \u0437\u0430 \u043f\u0435\u043b\u044c\u043c\u0435\u043d\u044f\u043c\u0438. <strong>\u041c\u0438\u043d\u0438\u043c\u0443\u043c social pressure<\/strong>: \u00ab\u0434\u044f\u0434\u044f, \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u0437\u0430 \u0440\u0430\u0437\u00bb.<\/p>\n<p><strong>7. Strong consistency \u0442\u0430\u043c, \u0433\u0434\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430.<\/strong> \u00ab\u041f\u043e\u0434\u043e\u0436\u0434\u0451\u043c, \u043f\u043e\u043a\u0430 \u0412\u0421\u0415 \u0448\u0430\u043c\u043f\u0443\u0440\u044b \u0432\u0441\u0435\u0445 \u0433\u043e\u0441\u0442\u0435\u0439 \u0433\u043e\u0442\u043e\u0432\u044b, \u0438 \u043f\u043e\u0434\u0430\u0434\u0438\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u00bb \u2014 \u043d\u0430 read-heavy \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0435 (20 \u0433\u043e\u0441\u0442\u0435\u0439 \u0445\u043e\u0442\u044f\u0442 \u0435\u0441\u0442\u044c <strong>\u0441\u0435\u0439\u0447\u0430\u0441<\/strong>) <strong>eventual consistency \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0440\u0435\u043b\u043a\u0443<\/strong> (\u0440\u0430\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u044f\u043c\u0438, \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0441\u044f) \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u043e\u043d\u0438\u043c\u0430\u0439, <strong>\u0433\u0434\u0435<\/strong> strong consistency \u043d\u0443\u0436\u043d\u0430 (\u043e\u0431\u0449\u0438\u0439 \u0442\u043e\u0441\u0442 \u2014 \u0432\u0441\u0435 \u0432\u043c\u0435\u0441\u0442\u0435), \u0430 \u0433\u0434\u0435 overhead (\u0443\u0436\u0438\u043d: \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0442\u043e\u0432\u043e).<\/p>\n<details class=\"spoiler\">\n<summary>\u0413\u043b\u0443\u0431\u0436\u0435: stability patterns \u0434\u043b\u044f \u0433\u0440\u0438\u043b\u044c-master&#8217;\u043e\u0432<\/summary>\n<div class=\"spoiler__content\">\n<ul>\n<li>\n<p><strong>Release It! 2nd ed<\/strong> (Michael Nygard), Part II \u00abStability Patterns\u00bb: timeouts (max prep time), circuit breakers (\u0441\u0443-\u0448\u0435\u0444 takes over), bulkheads (\u043c\u044f\u0441\u043e \u043d\u0435 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435), fail fast (\u0435\u0441\u043b\u0438 \u0441\u044b\u0440\u043e, \u0441\u0440\u0430\u0437\u0443 \u043e\u0431\u0440\u0430\u0442\u043d\u043e). <strong>\u0420\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0433\u043e\u0441\u0442\u0435\u0439<\/strong>.<\/p>\n<\/li>\n<li>\n<p><strong>\u00abWhy programmers should avoid microservices\u00bb<\/strong> (DHH), applied to grilling: \u043e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b \u043d\u0430 5 \u0442\u0438\u043f\u043e\u0432 \u043c\u044f\u0441\u0430 \u043b\u0443\u0447\u0448\u0435 5 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/details>\n<hr\/>\n<h2>10. \u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/80\/ed\/b3\/80edb3bb1a3f4981f4faa143929fafdd.png\" alt=\"5 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 tier\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/80\/ed\/b3\/80edb3bb1a3f4981f4faa143929fafdd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/80\/ed\/b3\/80edb3bb1a3f4981f4faa143929fafdd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>5 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 tier<\/figcaption><\/div>\n<\/figure>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0422\u0440\u0438\u0433\u0433\u0435\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u2192 \u041a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433-\u0443\u0440\u043e\u0432\u0435\u043d\u044c (\u0432\u043d\u0435 scope \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438)<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>50+ \u0433\u043e\u0441\u0442\u0435\u0439<\/strong> (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u044e\u0431\u0438\u043b\u0435\u0439)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u044b\u0433\u043e\u0440\u0430\u043d\u0438\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0448\u0435\u0444\u0430, queue overflow, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 \u043d\u0430 tickets, \u043d\u0443\u0436\u043d\u043e 3+ \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443-\u0448\u0435\u0444\u043e\u0432<\/p>\n<\/td>\n<td>\n<p align=\"left\">2-3 \u0448\u0435\u0444\u0430 \u0441 \u0440\u043e\u0442\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Multi-event hosting<\/strong> (\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Resource contention, tenant isolation<\/p>\n<\/td>\n<td>\n<p align=\"left\">Multi-tenant \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 schema, ticket isolation<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>8+ \u0447\u0430\u0441\u043e\u0432 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/strong> (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u044e\u0449\u0435\u0435\u0441\u044f \u0432\u044b\u0433\u043e\u0440\u0430\u043d\u0438\u0435, \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u0432\u044b\u0434\u044b\u0445\u0430\u0435\u0442\u0441\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u043e\u0442\u0430\u0446\u0438\u044f \u0448\u0435\u0444\u0430 + \u0441\u0432\u0435\u0436\u0438\u0439 \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u043a\u0430\u0436\u0434\u044b\u0435 4 \u0447\u0430\u0441\u0430<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0412\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0446\u0435\u0432 &gt; 30%<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432 (\u043d\u0435\u043b\u044c\u0437\u044f \u043c\u044f\u0441\u043e \u0438 \u043e\u0432\u043e\u0449\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c)<\/p>\n<\/td>\n<td>\n<p align=\"left\">Dedicated veg-pipeline, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u0430\u044f \u043f\u043e\u0433\u043e\u0434\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f disaster recovery testing<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430\u044f \u043a\u0443\u0445\u043d\u044f \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0415\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u043e\u0432 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u0435 \u043b\u0435\u0437\u044c \u0432 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433.<\/strong> \u041f\u0430\u043f\u0430 + cooking surface \u0438\u0437 \u00a75.3 (1\u00d7 large \u0438\u043b\u0438 2\u00d7 standard parallel) + \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444 \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0430 \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u044b\u0441\u044f\u0447 \u0434\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<hr\/>\n<h2>11. \u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e<\/h2>\n<pre><code class=\"bash\"># Repository: \u0432\u0430\u0448\u0430 \u0434\u0430\u0447\u0430cd ~\/dacha &amp;&amp; git checkout 20-guestsdocker compose up -d  # (\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043c\u0430\u043d\u0433\u0430\u043b, \u043e\u043f\u0446. 2-\u0439 standby)# \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430node scripts\/marinade.mjs 4kg-pork 2kg-chicken 1kg-fish --hours 8# Run eventnode scripts\/grill-event.mjs --guests 20 --duration 4h --weather sunny --chef papa<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0422\u0435 \u0436\u0435 hardware (\u043c\u0430\u043d\u0433\u0430\u043b\u044b + \u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a), \u0442\u043e\u0442 \u0436\u0435 stack (\u0443\u0433\u043e\u043b\u044c + \u043c\u0430\u0440\u0438\u043d\u0430\u0434), \u0442\u0435 \u0436\u0435 data (\u043c\u044f\u0441\u043e + \u0433\u043e\u0441\u0442\u0438), \u0442\u0435 \u0436\u0435 numbers \u00b1 15% (\u0440\u0430\u0437\u0431\u0440\u043e\u0441 \u043e\u0442 \u043f\u043e\u0433\u043e\u0434\u044b, \u0441\u043e\u0441\u0442\u0430\u0432\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043a\u043e\u043c\u0430\u0440\u043e\u0432).<\/p>\n<hr\/>\n<h2>12. \u041f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/h2>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/56\/94\/3a\/56943a59203e54a683dac588daab0b68.png\" alt=\"Shashlyk \u2194 Backend mapping \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/56\/94\/3a\/56943a59203e54a683dac588daab0b68.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/56\/94\/3a\/56943a59203e54a683dac588daab0b68.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>Shashlyk \u2194 Backend mapping \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0442\u044b \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0448\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430. \u0422\u0435 \u0436\u0435 \u0448\u0430\u0433\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043a <strong>\u043b\u044e\u0431\u043e\u0439 backend-\u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/strong> \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \/ \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0428\u0430\u0448\u043b\u044b\u043a \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">Backend \u043d\u0430 \u043b\u044e\u0431\u043e\u043c tier\u2019\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0410\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430, hot keys, producer\/consumer balance, burst<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0442\u043e \u0436\u0435 (workload analysis)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Service boundaries<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0428\u0430\u0448\u043b\u044b\u043a \/ \u043d\u0430\u043f\u0438\u0442\u043a\u0438 \/ \u0441\u0430\u043b\u0430\u0442\u044b \u2014 \u0440\u0430\u0437\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 SLA<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Microservices \/ bounded contexts<\/strong> (DDD)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041f\u0430\u0440\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0433\u0430\u0437 vs \u0443\u0433\u043e\u043b\u044c vs \u0434\u0440\u043e\u0432\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">MySQL vs PG vs MongoDB<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>\u0411\u043b\u044e\u0434\u043e (bounded buffer)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u0441 TTL \u0438 backpressure<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Kafka topic \u0441 retention<\/strong> \/ Redis Stream<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Skewer pool<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">15-20 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432, \u043c\u043d\u043e\u0433\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0445<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Connection pool<\/strong> (DB connections, HTTP keep-alive)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Vertical vs horizontal<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">1\u00d7 large 90 \u0441\u043c vs 2\u00d7 standard parallel<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Scale-up vs scale-out<\/strong> (bigger DB instance vs replicas)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Bulkhead<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041a\u0443\u0440\u0438\u0446\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435, \u0441\u0432\u0438\u043d\u0438\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Failure isolation<\/strong> (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 thread pools \/ queues)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Cache hierarchy<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u0440\u0438\u043d\u0430\u0434 (8h pre-warm) \u2192 \u043a\u0440\u0430\u0439 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u2192 \u0431\u043b\u044e\u0434\u043e<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>L1\/L2 cache + CDN warmup<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Batch idempotency<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041c\u0430\u0440\u043a\u0435\u0440 \u00abbatch-3 \u0433\u043e\u0442\u043e\u0432\u00bb \u043d\u0430 \u0431\u0443\u043c\u0430\u0436\u043a\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Producer idempotency<\/strong> (Kafka acks=all + sequence numbers)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Schema design<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>batch_id UNIQUE<\/code>, JSONB \u043d\u0430 \u0442\u0438\u043f\u044b \u043c\u044f\u0441\u0430, BRIN \u043d\u0430 time-series<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>DB constraints + indexing strategy<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Backpressure<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0411\u043b\u044e\u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u2192 \u0448\u0435\u0444 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442<\/p>\n<\/td>\n<td>\n<p align=\"left\">Producer \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 consumer lag \u0440\u0430\u0441\u0442\u0451\u0442<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Hot key (\u0434\u044f\u0434\u044f \u041f\u0435\u0442\u044f)<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0431\u043b\u044e\u0434\u0430 \u0437\u0430 \u043e\u0434\u0438\u043d \u0437\u0430\u0445\u043e\u0434<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Noisy neighbor<\/strong> \u0432 multi-tenant<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Audit trail<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>meat_types JSONB<\/code> \u043d\u0430 \u043f\u0430\u0440\u0442\u0438\u044e<\/p>\n<\/td>\n<td>\n<p align=\"left\">Forensics log \u0434\u043b\u044f incident investigation<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>Replication<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0443-\u0448\u0435\u0444 \u043a\u0430\u043a backup \u0448\u0435\u0444\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>Read replicas \/ hot standby<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><strong>SLO<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">wait p95 &lt; 3 \u043c\u0438\u043d, burnt &lt; 2%<\/p>\n<\/td>\n<td>\n<p align=\"left\">Error budget + alert thresholds<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Failure modes table<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0431\u043b\u044e\u0434\u043e overflow, batch counter loss, \u0434\u043e\u0436\u0434\u044c<\/p>\n<\/td>\n<td>\n<p align=\"left\">queue overflow, idempotency loss, disk failure<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Honest disclaimer<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0434\u0430\u0447\u043d\u044b\u0439 \u0437\u0430\u043c\u0435\u0440 \u2260 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a<\/p>\n<\/td>\n<td>\n<p align=\"left\">localhost dyno \u2260 production<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Anti-patterns<\/p>\n<\/td>\n<td>\n<p align=\"left\">7 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 bbq<\/p>\n<\/td>\n<td>\n<p align=\"left\">7 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 backend<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0418\u0442\u043e\u0433:<\/strong> \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043a <strong>\u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435<\/strong>, \u0431\u0443\u0434\u044c \u0442\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u0430\u044f \u0431\u0430\u0437\u0430 \u043d\u0430 1M TPS \u0438\u043b\u0438 \u0434\u0430\u0447\u043d\u044b\u0439 \u043c\u0430\u043d\u0433\u0430\u043b \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439. \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435 \u0436\u0435:<\/p>\n<ol>\n<li>\n<p>\u0410\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 <strong>\u0434\u043e<\/strong> \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u0435\u043f\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0441\u0442\u043d\u0430\u044f failure modes table \u0432\u043c\u0435\u0441\u0442\u043e \u00ab\u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u041e\u041a\u00bb<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0432\u043c\u0435\u0441\u0442\u043e \u00ab\u043f\u043e \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c \u043d\u043e\u0440\u043c\u00bb<\/p>\n<\/li>\n<li>\n<p>Anti-patterns \u043a\u0430\u043a \u044f\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f<\/p>\n<\/li>\n<\/ol>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f (\u043c\u0430\u043d\u0433\u0430\u043b vs PostgreSQL), \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f (idempotency, ACID, time-series indexing, retry budget).<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u044b \u0443\u0437\u043d\u0430\u043b \u0432 \u0448\u0430\u0448\u043b\u044b\u043a\u0435 \u0441\u0432\u043e\u0439 backend \u2014 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u041f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u0442\u0435 \u0436\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435. <strong>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u0430 \u043d\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431.<\/strong><\/p>\n<hr\/>\n<h2>Reading day budget \u2014 \u0447\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439 production-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>Per-\u00a7 reading lists \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u0430\u043c\u0438 \u00ab\u0413\u043b\u0443\u0431\u0436\u0435\u00bb \u0434\u0430\u044e\u0442 depth \u043f\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u043c \u0442\u0435\u043c\u0430\u043c. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c <strong>\u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c<\/strong> \u043d\u0430 foundational \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443 (\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u043a \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435: backend, BBQ, distributed cluster):<\/p>\n<ol>\n<li>\n<p><strong>DDIA chapters 1-3<\/strong> (Kleppmann, \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u00ab\u043a\u043d\u0438\u0433\u0430 \u0441 \u043a\u0430\u0431\u0430\u043d\u0447\u0438\u043a\u043e\u043c\u00bb), 3-4 \u0447\u0430\u0441\u0430 \u2014 foundations reliability \/ scalability \/ maintainability. \u0422\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 frame \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043c\u043e\u0442\u0440\u0438\u0448\u044c \u043d\u0430 \u043b\u044e\u0431\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>Release It! Part II \u00abStability Patterns\u00bb<\/strong> (Nygard), 2 \u0447\u0430\u0441\u0430 \u2014 pattern catalog \u0432 \u0447\u0438\u0441\u0442\u043e\u043c \u0432\u0438\u0434\u0435: timeouts, circuit breakers, bulkheads, fail fast. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u00a75-\u00a76 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b.<\/p>\n<\/li>\n<li>\n<p><strong>Use The Index, Luke! chapters 1-3<\/strong> (Winand), 1 \u0447\u0430\u0441 \u2014 indexing intuition \u0431\u0435\u0437 theory overhead. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f BRIN, partial indexes, composite keys \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u0431\u044b\u0442\u044c mystery.<\/p>\n<\/li>\n<li>\n<p><strong>Twelve-Factor App<\/strong>, 30 \u043c\u0438\u043d\u0443\u0442 \u2014 operational hygiene checklist. \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0437\u0430 \u043e\u0431\u0435\u0434, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 5 \u043b\u0435\u0442.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<h2>P.S.<\/h2>\n<p>\u0412\u0441\u0451 \u0447\u0442\u043e \u0432\u044b\u0448\u0435 \u2014 \u043f\u0440\u043e \u0442\u043e \u043a\u0430\u043a \u0434\u0443\u043c\u0430\u0442\u044c, \u0430 \u043d\u0435 \u043f\u0440\u043e \u0442\u043e \u043a\u0430\u043a \u0436\u0438\u0442\u044c.<\/p>\n<p>\u0428\u0430\u0448\u043b\u044b\u043a \u043d\u0430 \u0434\u0430\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0438\u0437-\u0437\u0430 producer-consumer pattern \u0438 \u043d\u0435 \u0438\u0437-\u0437\u0430 batch idempotency. \u041e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0430\u043f\u0430 \u0443 \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0434\u044f\u0434\u044f \u0442\u0440\u0430\u0432\u0438\u0442 \u0448\u0443\u0442\u043a\u0438, \u0434\u0435\u0442\u0438 \u0431\u0435\u0433\u0430\u044e\u0442 \u043f\u043e \u0434\u0432\u043e\u0440\u0443, \u0430 \u0441\u043e\u0441\u0435\u0434\u0441\u043a\u0438\u0439 \u043a\u043e\u0442 \u0442\u0435\u0440\u0440\u043e\u0440\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0431\u0430\u043a\u0443. System design \u0442\u0443\u0442 \u043d\u0438 \u043f\u0440\u0438 \u0447\u0451\u043c.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0434\u0430\u0447\u0430, \u043b\u0435\u0442\u043e \u0438 \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u2014 \u043b\u0443\u0447\u0448\u0430\u044f \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u043e\u0443\u0442, \u043d\u0430\u043b\u0438\u0442\u044c \u0447\u0430\u044e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u0442\u044c. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043f\u043e\u0434\u043e\u0436\u0434\u0451\u0442 \u0434\u043e \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0445 \u0448\u0430\u0448\u043b\u044b\u043a\u043e\u0432 \u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<\/div>\n<p>\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\/1034968\/\">https:\/\/habr.com\/ru\/articles\/1034968\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0414\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440: \u044d\u0442\u043e \u043d\u0435 stand-up \u0438 \u043d\u0435 \u043f\u0430\u0440\u043e\u0434\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c \u0434\u0438\u0437\u0430\u0439\u043d\u0435 \u043d\u0430 \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438: TL;DR, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0430\u0440\u043d\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432, failure modes, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f, references \u043d\u0430 DDIA \/ Release It! \/ Use The Index Luke. \u0412\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 12+ \u0433\u043e\u0434\u0430\u0445 \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0448\u0430\u0448\u043b\u044b\u0447\u043d\u043e\u0433\u043e \u043e\u043f\u044b\u0442\u0430.\u0418\u0434\u0435\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e\u0441\u0442\u0430: \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u043a \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a hi-load backend. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u044c\u043c\u0438 \u043b\u044e\u0431\u043e\u0439 \u0441\u0432\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0438 \u043f\u0440\u043e\u0439\u0434\u0438 \u0442\u0435 \u0436\u0435 \u0448\u0430\u0433\u0438: workload analysis, paired comparisons, failure modes, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0442\u0430 \u0436\u0435, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0435.TL;DR\u0427\u0442\u043e \u0441\u0442\u0440\u043e\u0438\u043c: \u0448\u0430\u0448\u043b\u044b\u043a-pipeline \u0434\u043b\u044f \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u043d\u0430 20 \u0433\u043e\u0441\u0442\u0435\u0439. \u041e\u0434\u0438\u043d \u043c\u0430\u043d\u0433\u0430\u043b\u044c\u0449\u0438\u043a (\u043f\u0430\u043f\u0430, \u0434\u044f\u0434\u044f \u0438\u043b\u0438 \u043c\u0443\u0436 \u0441\u0435\u0441\u0442\u0440\u044b), \u043e\u0434\u0438\u043d \u0443\u0447\u0430\u0441\u0442\u043e\u043a, 4-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e.\u0426\u0435\u043b\u0435\u0432\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430: 20 \u0433\u043e\u0441\u0442\u0435\u0439 \u00d7 ~2.2 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c = ~45 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 (~9-11 \u043a\u0433 \u043c\u044f\u0441\u0430). \u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 (\u043e\u0442 0 \u0434\u043e 5-6 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u0433\u043e\u0441\u0442\u044f; \u043a\u0442\u043e-\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0435\u0441\u0442 \u043c\u044f\u0441\u043e, \u043d\u043e \u0442\u0430\u043a\u0438\u0445 1-2 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430). Bursty profile: \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0438\u043a \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0433\u043e\u043b\u043e\u0434\u043d\u044b\u0435, \u043f\u043e\u0442\u043e\u043c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u0430\u044f \u043f\u043e\u0434\u043a\u043b\u0430\u0434\u043a\u0430.\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430: producer-consumer pattern \u0441 \u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u043e\u0439 \u043a\u0430\u043a bounded buffer. \u0428\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u043f\u0430\u0440\u0442\u0438\u044f\u043c\u0438, \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u044f\u0441\u043e \u0441 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432 \u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443, \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0443\u043b, \u0433\u043e\u0441\u0442\u0438 \u0431\u0435\u0440\u0443\u0442 \u0438\u0437 \u0431\u043b\u044e\u0434\u0430 \u0441\u0430\u043c\u0438.\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u043e: \u043d\u0430 \u0434\u0430\u0447\u0435, +28\u00b0C, \u0448\u0442\u0438\u043b\u044c. \u0428\u0435\u0444 sustained rate 12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b (8-10 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432, ~13 \u043c\u0438\u043d \u043d\u0430 batch), \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u0431\u043b\u044e\u0434\u0430 0.8-1.2 \u043f\u043e\u0440\u0446\u0438\u0438\/\u043c\u0438\u043d \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441. 0 burnt \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432.\u041a\u043e\u0433\u0434\u0430 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f: 50+ \u0433\u043e\u0441\u0442\u0435\u0439 (\u0441\u0432\u0430\u0434\u044c\u0431\u0430, \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432: \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 hybrid \u2014 ordering layer \u043f\u043e\u0432\u0435\u0440\u0445 producer-consumer, 3+ \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443-\u0448\u0435\u0444\u043e\u0432), \u0434\u043e\u0436\u0434\u044c \u0431\u0435\u0437 \u0442\u0435\u043d\u0442\u0430, \u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0446\u0435\u0432 &gt; 30% (cross-contamination \u043d\u0430 \u0431\u043b\u044e\u0434\u0435), \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u044b\u0435 +5 \u0433\u043e\u0441\u0442\u0435\u0439 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f (\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433).1. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f1.1. \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439\u0428\u0430\u0448\u043b\u044b\u043a-\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0434\u0430\u0447\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 (single-host) \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u043c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:\u0414\u0435\u043d\u044c \u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f: 15-25 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0438 \u0434\u0440\u0443\u0437\u0435\u0439, \u043e\u0434\u043d\u043e 4-\u0447\u0430\u0441\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e.\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435: 8-15 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u0430\u0447\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 \u0441 \u0434\u0435\u0442\u044c\u043c\u0438 \u0438 \u0441\u043e\u0431\u0430\u043a\u0430\u043c\u0438.\u0421\u043e\u0441\u0435\u0434\u0441\u043a\u0438\u0439 \u0448\u0430\u0448\u043b\u044b\u043a-\u0434\u0435\u043d\u044c: 3-6 \u0441\u0435\u043c\u0435\u0439 (15-25 \u0447\u0435\u043b\u043e\u0432\u0435\u043a), distributed potluck-style ingest (\u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043d\u043e\u0441\u0438\u0442 \u0441\u0432\u043e\u0451 \u043c\u044f\u0441\u043e).\u041a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432 backend-\u043e\u0442\u0434\u0435\u043b\u0430 (mini): 10-20 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0434\u0432\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432: \u00ab\u043c\u044f\u0441\u043e\u00bb \u0438 \u00abvegetables-only\u00bb.\u0412\u0441\u0442\u0440\u0435\u0447\u0430 \u0441\u043e \u0448\u043a\u043e\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438: 12-20 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445, durability = how-many-old-stories \u00d7 time.\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043c\u044f\u0441\u0430: \u0440\u044b\u043d\u043e\u043a (push-\u043c\u043e\u0434\u0435\u043b\u044c: \u00ab\u0432\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u0441\u0432\u0435\u0436\u0435\u0435, \u0440\u0435\u0436\u0443 \u043f\u0440\u0438 \u0432\u0430\u0441\u00bb) \u0438\u043b\u0438 \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0441\u0443\u043f\u0435\u0440\u043c\u0430\u0440\u043a\u0435\u0442 (pull-\u043c\u043e\u0434\u0435\u043b\u044c: \u00ab\u0431\u0435\u0440\u0451\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043a\u0435\u00bb). \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0447\u0442\u043e \u041d\u0415 \u0432\u0445\u043e\u0434\u0438\u0442: multi-tenant \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, real-time WebSocket \u0434\u043b\u044f \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0445, multi-region \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u043c.\u042d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0441\u0432\u0430\u0434\u044c\u0431\u0435 \u043d\u0430 100 \u0433\u043e\u0441\u0442\u0435\u0439. \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0442\u044b\u0441\u044f\u0447 \u0434\u0430\u0447, \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0434\u043e \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433\u043e\u0432\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0438 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e.1.2. \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437\u044b (\u0442\u0438\u043f \u043c\u044f\u0441\u0430: \u0441\u0432\u0438\u043d\u0438\u043d\u0430 \/ \u043a\u0443\u0440\u0438\u0446\u0430 \/ \u0440\u044b\u0431\u0430 \/ vegetables)\u0425\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u044f\u0441\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e (\u0445\u043e\u043b\u043e\u0434\u0438\u043b\u044c\u043d\u0438\u043a: \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0430\u0440 \u043e\u0442\u0432\u043b\u0451\u043a\u0441\u044f, \u0431\u043b\u044e\u0434\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442)\u0417\u0430\u043f\u0440\u043e\u0441\u044b: \u00ab\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441\u00bb, \u00ab\u0447\u0442\u043e \u0435\u0449\u0451 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438\u00bb, \u00ab\u0434\u0430\u0439\u0442\u0435 \u043c\u043d\u0435 \u0435\u0449\u0451\u00bbHealth check: \u043e\u0433\u043e\u043d\u044c \u043d\u0435 \u0442\u0443\u0445, \u043c\u0430\u0440\u0438\u043d\u0430\u0434 \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0448\u0435\u0444 \u0436\u0438\u0432\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 admin-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441: \u043b\u0438\u0441\u0442 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f + \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 (\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439)1.3. \u041d\u0435\u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044fDimensionTargetProducer throughput12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e (\u0448\u0435\u0444 + 1 \u043c\u0430\u043d\u0433\u0430\u043b)Latency \u0431\u043b\u044e\u0434\u0430 p99&lt;5 \u043c\u0438\u043d \u043e\u0442 \u0441\u043d\u044f\u0442\u0438\u044f \u0441 \u043c\u0430\u043d\u0433\u0430\u043b\u0430 \u0434\u043e \u0442\u0430\u0440\u0435\u043b\u043a\u0438 \u0433\u043e\u0441\u0442\u044f (\u0435\u0441\u043b\u0438 \u0431\u043b\u044e\u0434\u043e \u043d\u0435 \u043f\u0443\u0441\u0442\u043e)Wait time, \u043a\u043e\u0433\u0434\u0430 \u0431\u043b\u044e\u0434\u043e \u043f\u0443\u0441\u0442\u043e&lt;8 \u043c\u0438\u043d \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438 (1 \u0446\u0438\u043a\u043b \u0433\u043e\u0442\u043e\u0432\u043a\u0438)DurabilityZero burn loss + zero food poisoning (TTL \u043c\u044f\u0441\u0430 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435 &lt; 30 \u043c\u0438\u043d)Idempotency\u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c batch N (\u0448\u0435\u0444 tracks: \u043a\u0430\u043a\u043e\u0439 batch \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u0435)Operational complexity1 host + 1 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444, \u0431\u0435\u0437 on-call \u043f\u043e\u0441\u043b\u0435 23:001.4. \u0427\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (\u044f\u0432\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b)Multi-tenant: \u043e\u0434\u0438\u043d host, \u043e\u0434\u0438\u043d \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a. \u0415\u0441\u043b\u0438 \u0443 \u0441\u043e\u0441\u0435\u0434\u0430 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u043e\u0439 \u0448\u0430\u0448\u043b\u044b\u043a, \u043d\u0435 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430.Multi-source ingestion: \u043c\u044f\u0441\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430. \u0421\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c 5 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u043e\u0439 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u043d\u043e\u0439 schema = chaos.Real-time fan-out \u0432 \u043e\u0431\u0449\u0438\u0439 \u0447\u0430\u0442 \u0434\u043b\u044f \u043e\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0445: \u043f\u0443\u0441\u0442\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u0437\u0430\u043f\u0430\u0445, pull-\u043c\u043e\u0434\u0435\u043b\u044c.Multi-region: \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u043e\u043c \u0434\u0432\u043e\u0440\u0435. \u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 \u043a \u0441\u043e\u0441\u0435\u0434\u0443 \u0447\u0435\u0440\u0435\u0437 \u0437\u0430\u0431\u043e\u0440 \u0432\u043d\u0435 \u0433\u0440\u0430\u043d\u0438\u0446.Sub-5-\u043c\u0438\u043d\u0443\u0442 latency: \u044d\u0442\u043e \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u043d\u044b\u0439 tier, \u0434\u0430\u0447\u0430 \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u0435\u0442.HA \/ failover: \u0435\u0441\u043b\u0438 \u0448\u0435\u0444 \u0443\u0441\u0442\u0430\u043b, \u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0440\u044b\u0432 20 \u043c\u0438\u043d\u0443\u0442. \u0413\u043e\u0441\u0442\u0438 \u043f\u043e\u0439\u043c\u0443\u0442.\u041a\u0430\u0436\u0434\u043e\u0435 \u00ab\u043d\u0435 \u043d\u0443\u0436\u043d\u043e\u00bb \u2014 \u044d\u0442\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u043b\u0435\u043d\u043d\u043e\u0435 \u0443\u0441\u0438\u043b\u0438\u0435. Premature scaling \u0448\u0430\u0448\u043b\u044b\u043a\u0430 (\u00ab\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043a\u0430\u043a \u0443 \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u043e\u0432\u00bb) \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u0432\u044b\u0433\u043e\u0440\u0430\u0435\u0442 \u043a \u0442\u0440\u0435\u0442\u044c\u0435\u043c\u0443 \u0447\u0430\u0441\u0443 \u0438 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f.1.5. \u0427\u0442\u043e \u0432\u043d\u0435 scope \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 (\u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0434\u0430\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430)\u0428\u0430\u0448\u043b\u044b\u043a-pipeline \u2014 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0430\u0447\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441 \u043d\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0440\u0443\u0433\u0438\u0435, \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435:ServicePatternSLABackend analog\u041d\u0430\u043f\u0438\u0442\u043a\u0438 (\u0432\u043e\u0434\u0430, \u0433\u043e\u0440\u044f\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0447\u0430\u0439)Self-service \u043e\u0442 \u0441\u0442\u043e\u043b\u0430, prep \u0434\u043e \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430\u00ab\u0412\u0441\u0435\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0445\u043e\u043b\u043e\u0434\u043d\u0430\u044f \u0432\u043e\u0434\u0430\u00bbIndependent service, separate DB\u0421\u0430\u043b\u0430\u0442\u044b \/ \u0437\u0430\u043a\u0443\u0441\u043a\u0438 (\u043e\u043b\u0438\u0432\u044c\u0435, \u0441\u0435\u043b\u0451\u0434\u043a\u0430)Pre-event batch, \u043b\u0435\u0436\u0430\u0442 \u0432 \u043c\u0438\u0441\u043a\u0430\u0445, read-only \u043f\u043e\u0441\u043b\u0435 18:00Topped up \u0440\u0435\u0434\u043a\u043eCDN static content (many readers, no writers)\u0425\u043b\u0435\u0431 \/ \u043b\u0430\u0432\u0430\u0448Pre-staged, self-service\u00ab\u041d\u0435 \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f\u00bbStatic asset, \u043f\u0440\u043e\u0441\u0442\u043e\u0439 replenishment\u0414\u0435\u0441\u0435\u0440\u0442\u044b \/ \u0447\u0430\u0439Late-stage service, \u043f\u043e\u0441\u043b\u0435 22:00\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0448\u0430\u0448\u043b\u044b\u043a wind-downAsync job triggered by upstream event\u042d\u0442\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b \u043e\u0442 \u0448\u0430\u0448\u043b\u044b\u043a-pipeline (\u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u044e\u0441\u0435\u0440\u044b, \u0440\u0430\u0437\u043d\u044b\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430, \u0440\u0430\u0437\u043d\u044b\u0435 SLA). \u0412 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 \u0431\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 microservices \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438. \u0428\u0430\u0448\u043b\u044b\u043a \u2014 \u0441\u0430\u043c\u044b\u0439 \u0442\u044f\u0436\u0451\u043b\u044b\u0439 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 (real-time producer-consumer), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0444\u043e\u043a\u0443\u0441\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438. \u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433 \u0434\u043b\u044f \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u043e\u0432 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 trade-offs (\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c).\u0423\u0440\u043e\u043a \u0434\u043b\u044f backend: \u043f\u0440\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u044f\u0432\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u0428\u0430\u0448\u043b\u044b\u043a-pipeline \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u0435\u043d; \u043d\u0430\u043f\u0438\u0442\u043a\u0438 \u0438 \u0441\u0430\u043b\u0430\u0442\u044b \u2014 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b. \u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0441\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u0434 \u0432\u0441\u0435 use cases.2. \u041e\u0442\u043a\u0443\u0434\u0430 \u0432\u0437\u044f\u043b\u0438\u0441\u044c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445: \u043e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430 \u043a \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u044f\u0441\u0430 \u0437\u0430\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c.2.1. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430 (20 \u0433\u043e\u0441\u0442\u0435\u0439)Pareto distribution \u0430\u043f\u043f\u0435\u0442\u0438\u0442\u0430\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435, \u0430 \u043f\u0430\u0440\u0435\u0442\u043e-\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0435:\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0428\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0435\u043b\u041a\u043e\u043b-\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439\u0418\u0442\u043e\u0433\u043e \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432Non-meat (\u0432\u0435\u0433\u0435\u0442\u0430\u0440\u0438\u0430\u043d\u0435\u0446, \u0434\u0438\u0435\u0442\u0430, \u043f\u043e\u0435\u043b \u043f\u043b\u043e\u0442\u043d\u043e \u0434\u043e\u043c\u0430)01-20Light (\u0434\u0435\u0442\u0438, \u043f\u043e\u0435\u043b \u0434\u043e \u044d\u0442\u043e\u0433\u043e, \u0441\u043a\u0440\u043e\u043c\u043d\u044b\u0439 \u0430\u043f\u043f\u0435\u0442\u0438\u0442)0.5-15-6~5Average (\u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0430\u043f\u043f\u0435\u0442\u0438\u0442, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0433\u043e\u0441\u0442\u0435\u0439)2-39-10~22Heavy (\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u043c\u044f\u0441\u0430)4312Hot key (\u043e\u0434\u0438\u043d \u2014 \u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f)5-61~5-6Total consumed (avg ~2.2\/\u0447\u0435\u043b)20~44+ \u0420\u0435\u0437\u0435\u0440\u0432 \/ \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0441 \u0434\u0435\u0442\u044c\u043c\u0438 \/ \u0443\u043f\u0430\u043b\u043e~50+ \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb~55Total: ~50-55 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 = ~10-11 \u043a\u0433 \u043c\u044f\u0441\u0430 (200 \u0433 \u043d\u0430 \u0448\u0430\u043c\u043f\u0443\u0440).2.2. \u041e\u0434\u0438\u043d \u0448\u0430\u043c\u043f\u0443\u0440 (production primitive)\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u0412\u0435\u0441 \u043c\u044f\u0441\u0430 \u043d\u0430 \u0448\u0430\u043c\u043f\u0443\u0440\u0435200-250 \u0433 (6-8 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432)\u0412\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u043812-15 \u043c\u0438\u043d\u0443\u0442 (\u0441 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430\u043c\u0438 \u043a\u0430\u0436\u0434\u044b\u0435 3-4 \u043c\u0438\u043d)\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u043d\u0433\u0430\u043b\u04358-10 (\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 batch size)\u0428\u0435\u0444 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0441 \u043e\u0434\u043d\u0438\u043c \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u043c, \u0430 \u0441 \u043f\u0430\u0440\u0442\u0438\u0435\u0439 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435. \u041a\u043e\u0433\u0434\u0430 \u043f\u0430\u0440\u0442\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043c\u044f\u0441\u043e \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0443\u044e \u0442\u0430\u0440\u0435\u043b\u043a\u0443, \u0430 \u0448\u0430\u043c\u043f\u0443\u0440\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0443\u043b \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u0442\u0438\u0438.2.3. Producer rate (\u0448\u0435\u0444 + 1 \u043c\u0430\u043d\u0433\u0430\u043b)1 batch = 8-10 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e1 batch cycle = ~13 \u043c\u0438\u043d\u0443\u0442 (cook + \u0441\u043d\u044f\u0442\u044c \u043d\u0430 \u0431\u043b\u044e\u0434\u043e + \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043c\u0430\u043d\u0433\u0430\u043b)~4.6 batches\/\u0447\u0430\u0441 = ~38-46 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441 theoretical max\u042d\u0442\u043e \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 production\u2019\u0430. Realistic sustained 12-15 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432\/\u0447\u0430\u0441: \u0448\u0435\u0444 \u043e\u0442\u0434\u044b\u0445\u0430\u0435\u0442 \u043c\u0435\u0436\u0434\u0443 batches, \u043f\u044c\u0451\u0442 \u0447\u0430\u0439, \u0440\u0430\u0437\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0435\u0442 \u0441 \u0433\u043e\u0441\u0442\u044f\u043c\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0433\u043e\u0441\u0442\u0438 \u043d\u0435 \u0435\u0434\u044f\u0442 46\/\u0447\u0430\u0441: \u043e\u043d\u0438 \u0435\u0434\u044f\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 25-30 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0447\u0430\u0441, \u043f\u043e\u0442\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435. \u0411\u043b\u044e\u0434\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u0435\u0442.2.4. Single-host aggregate scenariosScenario\u0413\u043e\u0441\u0442\u0435\u0439Total \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432Active grilling time\u0421\u0435\u043c\u0435\u0439\u043d\u044b\u0439 \u0443\u0436\u0438\u043d (\u043c\u0430\u043c\u0430-\u043f\u0430\u043f\u0430-\u0434\u0435\u0442\u0438-\u0431\u0430\u0431\u0443\u0448\u043a\u0430)4-610-151-1.5 \u0447Friendly BBQ (\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0434\u0440\u0443\u0437\u0435\u0439)8-1218-301.5-2.5 \u0447\u0414\u0430\u0447\u043d\u044b\u0439 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u043d\u0430 20 (\u043d\u0430\u0448\u0430 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430)2045-553-4 \u0447\u0421\u0432\u0430\u0434\u044c\u0431\u0430 \/ \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u043250+100+6+ \u0447 (\u043a\u0435\u0439\u0442\u0435\u0440\u0438\u043d\u0433-\u0443\u0440\u043e\u0432\u0435\u043d\u044c)Tier 0 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 = ~50 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a \u043d\u0430 1 \u043c\u0430\u043d\u0433\u0430\u043b + \u043f\u0430\u043f\u0430\/\u0434\u044f\u0434\u044f \u043a\u0430\u043a \u0448\u0435\u0444 + \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0443-\u0448\u0435\u0444. \u0423\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 3-4 \u0447\u0430\u0441\u0430 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441 \u0440\u0430\u0441\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u043d\u044b\u043c \u0442\u0435\u043c\u043f\u043e\u043c.\u041f\u043e\u0441\u043b\u0435 50+ \u0433\u043e\u0441\u0442\u0435\u0439 \u043d\u0443\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 ticket-based ordering + 3+ \u043c\u0430\u043d\u0433\u0430\u043b\u043e\u0432 (\u043e\u0431\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435: \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e \u043d\u0430 \u043d\u0435\u0439 \u043c\u044f\u0441\u043e \u0441\u0442\u043e\u0438\u0442, food safety \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f).3. \u0410\u043d\u0430\u043b\u0438\u0437 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438: \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043a\u0430\u043a\u0438\u043c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c, \u043a\u0430\u043a\u0438\u043c\u0438 \u043f\u0438\u043a\u0430\u043c\u0438. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0443\u0433\u0430\u0434. \u0420\u0430\u0437\u0431\u0435\u0440\u0451\u043c 4 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u043d\u0430\u0448\u0435\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432 \u00a75.3.1. Retry rate vs effective production\u0412\u043e\u0437\u0432\u0440\u0430\u0442\u044b \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0431\u043b\u044e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438\u043d\u0430\u0447\u0435, \u0447\u0435\u043c \u0432 ticket-\u043c\u043e\u0434\u0435\u043b\u0438:\u00ab\u0425\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u043d\u0430 \u0431\u043b\u044e\u0434\u0435\u00bb: \u043a\u0443\u0441\u043e\u043a \u043e\u0441\u0442\u044b\u043b, \u0433\u043e\u0441\u0442\u044c \u043a\u043b\u0430\u0434\u0451\u0442 \u043d\u0430 \u043a\u0440\u0430\u0439 \u043c\u0430\u043d\u0433\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0433\u0440\u0435\u0442\u044c (~5%)\u00ab\u041e\u0434\u0438\u043d \u043a\u0443\u0441\u043e\u043a \u043d\u0435\u0434\u043e\u0436\u0430\u0440\u0438\u043b\u0441\u044f\u00bb: \u0433\u043e\u0441\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430 \u043c\u0430\u043d\u0433\u0430\u043b \u043d\u0430 2 \u043c\u0438\u043d (~3%)\u0420\u0435\u0437\u0435\u0440\u0432 (\u043e\u0441\u0442\u0430\u0442\u043a\u0438): \u043d\u0435\u0441\u044a\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043c\u044f\u0441\u043e \u043a \u043a\u043e\u043d\u0446\u0443 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a\u0430 \u0443\u0445\u043e\u0434\u0438\u0442 \u00ab\u0433\u043e\u0441\u0442\u044f\u043c \u0441 \u0441\u043e\u0431\u043e\u0439\u00bb (\u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b, \u0443\u0432\u0435\u0437\u043b\u0438). \u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f, \u044d\u0442\u043e feature (~10-15% \u043e\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430)\u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 ticket-\u043c\u043e\u0434\u0435\u043b\u0438 (\u0437\u0430\u043a\u0430\u0437 \u2192 \u0448\u0430\u043c\u043f\u0443\u0440 \u2192 \u0433\u043e\u0441\u0442\u044c) \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0442 per-guest retry. \u0415\u0441\u043b\u0438 \u043c\u044f\u0441\u043e \u043f\u043b\u043e\u0445\u043e\u0435, \u043e\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u044a\u0435\u0434\u0435\u043d\u043e \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u043e\u0441\u0442\u0430\u0442\u043a\u0438. \u041c\u0435\u0442\u0440\u0438\u043a\u0430: plate clearance rate (\u043a\u0430\u043a\u043e\u0439 % \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u044a\u0435\u043b\u0438 \u0437\u0430 \u043f\u0440\u0430\u0437\u0434\u043d\u0438\u043a).\u041f\u0440\u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 clearance ~85-90%. \u0415\u0441\u043b\u0438 &lt;70%, \u0447\u0442\u043e-\u0442\u043e \u0441 \u043c\u0430\u0440\u0438\u043d\u0430\u0434\u043e\u043c \u0438\u043b\u0438 \u043f\u0440\u043e\u0436\u0430\u0440\u043a\u043e\u0439 (\u043d\u043e \u043d\u0435 \u00abretry storm\u00bb: \u0433\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u044e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442\u044c).3.2. Backpressure \u2014 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0431\u0443\u0444\u0435\u0440\u0430Backpressure feedback loop\u0411\u043b\u044e\u0434\u043e \u2014 \u044d\u0442\u043e bounded buffer. Capacity ~10-15 \u043f\u043e\u0440\u0446\u0438\u0439 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u043c\u044f\u0441\u0430. \u0428\u0435\u0444 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043a\u043b\u0430\u0441\u0442\u044c \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e:\u0411\u043b\u044e\u0434\u043e \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0430\u0435\u0442\u0441\u044f (\u0433\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442) \u2192 \u0448\u0435\u0444 \u0433\u043e\u0442\u043e\u0432\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e, \u043d\u0430 \u043e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435\u0411\u043b\u044e\u0434\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u2192 \u0448\u0435\u0444 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 (\u043d\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c, \u043c\u044f\u0441\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0445\u043e\u043b\u043e\u0434\u043d\u044b\u043c)Steady state = \u0448\u0435\u0444 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0442\u0435\u043c\u043f: \u043a \u043c\u043e\u043c\u0435\u043d\u0442\u0443 \u043e\u043f\u0443\u0441\u0442\u043e\u0448\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u043f\u0430\u0440\u0442\u0438\u044f \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u0430\u0415\u0441\u043b\u0438 \u0431\u043b\u044e\u0434\u043e \u043e\u043f\u0443\u0441\u0442\u0435\u043b\u043e \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u0430\u0440\u0442\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u0430 \u2192 wait time spike (\u0445\u043e\u0440\u043e\u0448\u0430\u044f backpressure-\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u0442)\u0422\u0430\u043a \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 backpressure \u0432 \u0447\u0438\u0441\u0442\u043e\u0439 \u0444\u043e\u0440\u043c\u0435. \u0412 backend \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445: producer \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 buffer \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u044b\u0439, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 anticipation, \u043a\u043e\u0433\u0434\u0430 buffer drain\u2019\u0438\u0442\u0441\u044f.3.3. Hot keys \u2014 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0438\u0437\u043a\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0435\u00abHot key\u00bb \u2014 \u044d\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438\u0434\u0451\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0440\u0435\u0441\u0443\u0440\u0441. \u041d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0442\u0430\u0440\u0435\u043b\u043a\u0435 \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043e\u043f\u0430\u0441\u043d\u0435\u0435, \u0447\u0435\u043c \u0432 ticket-\u043c\u043e\u0434\u0435\u043b\u0438.\u0414\u044f\u0434\u044f \u041f\u0435\u0442\u044f \u0435\u0441\u0442 5-6 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 (~12-15% \u043e\u0442 ~44 \u0448\u0430\u043c\u043f\u0443\u0440\u043e\u0432 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f). \u041f\u0440\u0438 ticket-\u043c\u043e\u0434\u0435\u043b\u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c 6 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0432&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-479662","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479662","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=479662"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/479662\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=479662"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=479662"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=479662"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}