---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.6
alternate:
  - https://ydb.tech/docs/en/contributor/general-schema.md?version=main
  - https://ydb.tech/docs/ru/contributor/general-schema.md?version=main
sourcePath: ru/core/contributor/general-schema.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Общая схема YDB

Примерная общая схема YDB представлена ниже.

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="771px" height="814px" viewBox="-0.5 -0.5 771 814" content="&lt;mxfile host=&quot;draw.io&quot; modified=&quot;2021-07-15T14:50:26.556Z&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36&quot; etag=&quot;ZU8BhaNDal54XeL1MvRJ&quot; version=&quot;12.7.0&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;0HZmCEQLlPINtnbGPtoa&quot; name=&quot;Page-1&quot;&gt;7Zxdl6I4EIZ/jZc9BxK+vBx1puecOd3HGXd3Zq72RIjCNoobsdX99RuUIKTo9psgTt80KTTIW4+VqiTSwt3J6pGRmf8UeTRsIc1btXCvhZCOnDb/l1jWW4utWVvDmAVe+qKdYRD8R1OjlloXgUfnhRfGURTGwaxodKPplLpxwUYYi5bFl42isHjVGRlTYBi4JITWH4EX+1urg+yd/QsNxr64sm6lNzwh4sXpncx94kXLnAl/auEui6J4ezRZdWmYiCd02b7v8xtnsw/G6DQ+5A3+n/Tx6fnpBaOnUdd9oN/+cXsPzraXVxIu0hsef+93k35ZtFrzzr5+66cfP14LTVi0mHo06VZr4c7SD2I6mBE3ObvkFHCbH09C3tL54SgIw24URmzzXjxyXOq63D6PWfRCc2eGjmmYSYdjRryA31T+XZs/fg7edKrDK2UxXeVMqQiPNJrQmPFb0dKzRuqPtUA0bS937s1sfs61VmojKVHjrOed6Pwg1f0IH7SBD3okJgOfMO8d6fXjpR+NULn0njW0TKty6ZGmWnoRZe5Qe0e59jrQ/kvwSi8qu2dSxzPKZHfQEFvVy44t5bKj+wv5WaCpTczX8d0EHln8GkR9A4q/npJJ4LaQFfKrd4aMH42To2ee0fKX6sAp/O7jovJFhafRlEruSE0kDMZT3nS5ppTbO4mWAU85P6YnJoHnJZcpdXXxm3gB/zhF95SMC0aJc9DVnGMe7RzUXOfI44dy71j3N3pkY3Z9Rg9YtjV19JDFr8HoAeu1BuatQHfl9YK42BEDA27uwIDbuFYDA4LVXOMHBhPVbWBAsLjrDLoNC02y7OqHBASruUFM4vusJ2T3HDpwXC80wXKv8aHJcmoXmmBd130aNCw0ybLXIDTBgm1PaGpwNS27R31osoF3Ei90EnVZ078b6isKWEYDzec+mSWH7oKF6w4j7guN94tf9BSLkm9clPDevhDJul0U88GGYpaS7FxNTFgW/0GnhN9ho7MdHZsFR2Doh3aVEUVc/waZNnTtQ1FMW7T3UK2L5OLycsKyNqO6wQMltmtGNUzhb4Vqy7Alqh9sdCDXyLka1zAbF2lhU5m2dNkRJVQ7lVINc/NOGA0HccSSXWmyJ3iPwWye6JWhHkYL7/hUkFBnVFqdWq5Dh1eapSnb+VAaRHT9anqXZ9s/CPPoFMh92xMAsvyG8mwbw2y7serLtY569Q2YyJyn+RUYNZVvjjIQUKnfC+Yv6qXCklQl9V7FUsEMQrlK8teuBkDBIb4eQFnt2gEFR2flKskRyjKUqwRH0b9qAZQcoSxTuVRwRkq5SnKEUg+UcFPtgJIjlHqgzBvIoWzlC30mzKF6g1a22KpaLylM2SWTABXrBTcPKFdJDlM1oKpkz3Z9qJJjVQ2oOiA9p1PvY/ITyVY2ZeeRuZ9NhuYk4sqw9c9Ezg9t0fy1aZqi2Vulam9b63yrT1nAbyuZBHx/Ni8mbEzjd25LLNlRr/CzTeiYnPBmie7CxmhI4mT3Zv5TlDkjvUI/CjZz/4IKeUHZkPw5jxbMpem7di4FHUn8OPIc2FYY0M8Gjeyuz6AFlik3QEtNIMDyHn0xi3AsBKCjiiE4oAD7DcEbvjO1C0EAOqoYggP2RPyG4A3fWeIrdC4EoKNqIbAOWG7NQeCGZD4P3Dddr9lF3xun+J6ugvin6Jsf5zDirV1PSWO9j5etH95RQD80IRFreDUhUBpB2nIecWo+Iuep1wbwuOx1H4A6dooEYq19Awxqt8mgvDfN0E6E0DS5p4pdiZ/uVsXhcXnxPg6NIoX6OQzuuPuVI7KcwTmXKYYfcmP+HIR7C+G9qApZbg3VpoTL4zL3fZgis8gpOilZKw+W7XdBTRoHJ337A2j7Nqk0JZyQfSKWllh+FHtwHOmzXJvL44qJfVxaAMyqAugZkdG+TQYNLG/GNU8NjoYjd2VcLz6un7tjtP57+X3of6SDl+6/X/v9B7huU+edR2DauYS8N2eipRGt0o1Hpdqj+9FeftKNevHh0lJjxZcfWKBe/AMmUU5Yp7pkdKh0f1SpRiUP+7noqt5ZapmSWlVukSpV64BqtGqN5JinHilYC9UIqey5trVh6oAUvWqR5FCunqmSR7TWhylsV8cUb+6eWLxNz3fPfcaf/gc=&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0"><stop offset="0%" style="stop-color:#f8cecc"/><stop offset="100%" style="stop-color:#ffffff"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="svg-f8poee0r__mx-gradient-fff2cc-1-ffffff-1-s-0"><stop offset="0%" style="stop-color:#fff2cc"/><stop offset="100%" style="stop-color:#ffffff"/></linearGradient><linearGradient x1="0%" y1="0%" x2="0%" y2="100%" id="svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0"><stop offset="0%" style="stop-color:#d5e8d4"/><stop offset="100%" style="stop-color:#ffffff"/></linearGradient></defs><g><rect x="0" y="90" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">gRPC proxy/KQP</div></div></div></foreignObject><text x="60" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">gRPC proxy/KQP</text></switch></g><rect x="0" y="170" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-fff2cc-1-ffffff-1-s-0)" stroke="#d6b656" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DataShard</div></div></div></foreignObject><text x="60" y="204" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DataShard</text></switch></g><rect x="0" y="250" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-fff2cc-1-ffffff-1-s-0)" stroke="#d6b656" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 280px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DataShard</div></div></div></foreignObject><text x="60" y="284" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DataShard</text></switch></g><rect x="0" y="330" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0)" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 360px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Hive</div></div></div></foreignObject><text x="60" y="364" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Hive</text></switch></g><rect x="160" y="90" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 161px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">gRPC proxy/KQP</div></div></div></foreignObject><text x="220" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">gRPC proxy/KQP</text></switch></g><rect x="160" y="170" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-fff2cc-1-ffffff-1-s-0)" stroke="#d6b656" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 161px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DataShard</div></div></div></foreignObject><text x="220" y="204" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DataShard</text></switch></g><rect x="40" y="50" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 60px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Dynamic<br/>Node 1</div></div></div></foreignObject><text x="60" y="64" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Dynami...</text></switch></g><rect x="200" y="50" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 60px; margin-left: 201px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Dynamic<br/>Node 2</div></div></div></foreignObject><text x="220" y="64" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Dynami...</text></switch></g><rect x="320" y="90" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">gRPC proxy/KQP</div></div></div></foreignObject><text x="380" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">gRPC proxy/KQP</text></switch></g><rect x="320" y="170" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-fff2cc-1-ffffff-1-s-0)" stroke="#d6b656" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DataShard</div></div></div></foreignObject><text x="380" y="204" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DataShard</text></switch></g><rect x="320" y="250" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0)" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 280px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Hive</div></div></div></foreignObject><text x="380" y="284" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Hive</text></switch></g><rect x="353" y="50" width="40" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 60px; margin-left: 354px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Dynamic<br/>Node 3</div></div></div></foreignObject><text x="373" y="64" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Dynami...</text></switch></g><rect x="480" y="90" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 481px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">gRPC proxy/KQP</div></div></div></foreignObject><text x="540" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">gRPC proxy/KQP</text></switch></g><rect x="480" y="170" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0)" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 481px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">BSC</div></div></div></foreignObject><text x="540" y="204" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">BSC</text></switch></g><rect x="480" y="50" width="120" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 60px; margin-left: 481px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Static<br/>Node 1</div></div></div></foreignObject><text x="540" y="64" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Static...</text></switch></g><rect x="640" y="90" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 120px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">gRPC proxy/KQP</div></div></div></foreignObject><text x="700" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">gRPC proxy/KQP</text></switch></g><rect x="640" y="170" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0)" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 200px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">CMS</div></div></div></foreignObject><text x="700" y="204" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">CMS</text></switch></g><rect x="640" y="50" width="120" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 60px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Static<br/>Node 2</div></div></div></foreignObject><text x="700" y="64" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Static...</text></switch></g><rect x="640" y="250" width="120" height="60" rx="9" ry="9" fill="url(#svg-f8poee0r__mx-gradient-d5e8d4-1-ffffff-1-s-0)" stroke="#82b366" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 280px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeBroker</div></div></div></foreignObject><text x="700" y="284" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeBroker</text></switch></g><path d="M 150 -100 L 145 -100 Q 140 -100 140 -90 L 140 30 Q 140 40 135 40 L 132.5 40 Q 130 40 135 40 L 137.5 40 Q 140 40 140 50 L 140 170 Q 140 180 145 180 L 150 180" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,140,40)" pointer-events="all"/><rect x="95" y="0" width="90" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 10px; margin-left: 96px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Tenant 1</div></div></div></foreignObject><text x="140" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Tenant 1</text></switch></g><path d="M 390.5 -22.5 L 385.5 -22.5 Q 380.5 -22.5 380.5 -12.5 L 380.5 30 Q 380.5 40 375.5 40 L 373 40 Q 370.5 40 375.5 40 L 378 40 Q 380.5 40 380.5 50 L 380.5 92.5 Q 380.5 102.5 385.5 102.5 L 390.5 102.5" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,380.5,40)" pointer-events="all"/><rect x="335" y="0" width="90" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 10px; margin-left: 336px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Tenant 2</div></div></div></foreignObject><text x="380" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Tenant 2</text></switch></g><path d="M 627.5 -102.5 L 622.5 -102.5 Q 617.5 -102.5 617.5 -92.5 L 617.5 30 Q 617.5 40 612.5 40 L 610 40 Q 607.5 40 612.5 40 L 615 40 Q 617.5 40 617.5 50 L 617.5 172.5 Q 617.5 182.5 622.5 182.5 L 627.5 182.5" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(90,617.5,40)" pointer-events="all"/><rect x="577.5" y="0" width="80" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 10px; margin-left: 579px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Static</div></div></div></foreignObject><text x="618" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Static</text></switch></g><path d="M 552.5 357.5 C 494.5 357.5 480 385 526.4 390.5 C 480 402.6 532.2 429 569.9 418 C 596 440 683 440 712 418 C 770 418 770 396 733.75 385 C 770 363 712 341 661.25 352 C 625 335.5 567 335.5 552.5 357.5 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 288px; height: 1px; padding-top: 385px; margin-left: 481px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">BlobStorage</div></div></div></foreignObject><text x="625" y="389" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">BlobStorage</text></switch></g><rect x="480" y="450" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 480px; margin-left: 481px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeWarden</div></div></div></foreignObject><text x="540" y="484" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeWarden</text></switch></g><rect x="640" y="450" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 480px; margin-left: 641px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeWarden</div></div></div></foreignObject><text x="700" y="484" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeWarden</text></switch></g><rect x="480" y="530" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="490" y="540" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 570px; margin-left: 491px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">PDisk</div></div></div></foreignObject><text x="550" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">PDisk</text></switch></g><rect x="640" y="530" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="650" y="540" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 570px; margin-left: 651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">PDisk</div></div></div></foreignObject><text x="710" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">PDisk</text></switch></g><rect x="480" y="610" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="490" y="620" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 650px; margin-left: 491px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">VDisk</div></div></div></foreignObject><text x="550" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">VDisk</text></switch></g><rect x="640" y="610" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="650" y="620" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 650px; margin-left: 651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">VDisk</div></div></div></foreignObject><text x="710" y="654" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">VDisk</text></switch></g><rect x="480" y="690" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="490" y="700" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 730px; margin-left: 491px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DS proxy</div></div></div></foreignObject><text x="550" y="734" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DS proxy</text></switch></g><rect x="640" y="690" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="650" y="700" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 730px; margin-left: 651px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DS proxy</div></div></div></foreignObject><text x="710" y="734" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DS proxy</text></switch></g><path d="M 140 810 L 140 48" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 300 812 L 300 50" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 460 812 L 460 50" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 617 812 L 617 50" fill="none" stroke="#000000" stroke-miterlimit="10" stroke-dasharray="3 3" pointer-events="stroke"/><path d="M 120 360 L 493.94 373.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 499.18 373.96 L 492.06 377.2 L 493.94 373.77 L 492.32 370.2 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 120 280 L 513.79 362.68" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 518.93 363.76 L 511.36 365.75 L 513.79 362.68 L 512.79 358.9 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 542.87 235.69 L 593.13 335.31" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 540.5 231 L 546.78 235.67 L 542.87 235.69 L 540.53 238.82 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 595.5 340 L 589.22 335.33 L 593.13 335.31 L 595.47 332.18 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 440 304 L 546.75 354.77" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 551.49 357.02 L 543.67 357.17 L 546.75 354.77 L 546.67 350.85 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><path d="M 700 310 L 665.57 347.32" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 662.01 351.18 L 664.18 343.66 L 665.57 347.32 L 669.33 348.41 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="0" y="450" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 480px; margin-left: 1px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeWarden</div></div></div></foreignObject><text x="60" y="484" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeWarden</text></switch></g><rect x="160" y="450" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 480px; margin-left: 161px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeWarden</div></div></div></foreignObject><text x="220" y="484" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeWarden</text></switch></g><rect x="320" y="450" width="120" height="60" fill="url(#svg-f8poee0r__mx-gradient-f8cecc-1-ffffff-1-s-0)" stroke="#b85450" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 480px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">NodeWarden</div></div></div></foreignObject><text x="380" y="484" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">NodeWarden</text></switch></g><rect x="0" y="530" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="10" y="540" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 570px; margin-left: 11px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DS proxy</div></div></div></foreignObject><text x="70" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DS proxy</text></switch></g><rect x="160" y="530" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="170" y="540" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 570px; margin-left: 171px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DS proxy</div></div></div></foreignObject><text x="230" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DS proxy</text></switch></g><rect x="320" y="530" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="330" y="540" width="120" height="60" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 570px; margin-left: 331px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">DS proxy</div></div></div></foreignObject><text x="390" y="574" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">DS proxy</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>

## Узлы {#nodes}

Одна инсталляция YDB состоит из *кластера*, который разбит на *узлы*. Узел — это один процесс в системе, как правило, ydbd. Этот узел входит в кластер и может обмениваться данными с другими узлами в этом кластере через *Interconnect*. Каждый *узел* имеет свой идентификатор, который обычно называется NodeId. NodeId — целое число от 1, состоящее из 20 бит. NodeId 0 зарезервирован для внутренних нужд и, как правило, обозначает текущий узел либо отсутствие узла.

На каждом узле выполняется ряд сервисов, реализованных через *акторы*.

Узлы могут быть статическими или динамическими.

Конфигурация статических узлов, то есть их полный перечень с указанием адресов для подключения по Interconnect, хранится в конфигурационном файле и вычитывается единожды при запуске процесса. Набор статических узлов меняется очень редко. Как правило, это происходит при расширении кластеров или при переезде узлов с одних физических машин на другие. Для того чтобы изменить набор статических узлов, необходимо разложить на **всех** узлах обновлённую конфигурацию, после чего выполнить rolling restart всего кластера.

Динамические узлы заранее неизвестны и добавляются в систему по мере запуска новых процессов. Это может быть связано, например, с созданием новых тенантов в инсталляциях YDB как базы данных. При регистрации динамического узла его процесс сначала подключается к одному из статических узлов через gRPC и через специальный сервис, который называется Node Broker, передаёт информацию о себе, получая в ответ NodeId, под которым ему можно будет войти в систему. Механизм назначения узлов во многом похож на DHCP в контексте раздачи IP-адресов.


## Таблетки {#tablets}

На каждом узле выполняются специальные микросервисы, которые называются [таблетками](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#tablet). Каждая таблетка имеет определённый тип и идентификатор и является singleton'ом, что означает, что в каждый момент времени во всём кластере может работать только одна таблетка с конкретным идентификатором. Таблетка может запускаться на любом из подходящих для неё узлов. Важной характеристикой таблетки является её поколение — [Generation](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#tablet-generation) — которое увеличивается при каждом следующем запуске. Стоит отметить, что в силу распределённости системы и наличия различного рода проблем, например, сетевого партиционирования, может сложиться ситуация, когда одна и та же таблетка будет фактически выполняться на двух разных узлах одновременно. Однако distributed storage гарантирует, что только одна из них сможет успешно завершить операции, изменяющие её состояние, и при этом поколение, в котором выполнена каждая успешная операция, не будет убывать со временем.

Для [системных таблеток](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#tablet-types) кластера узел, на котором запускается таблетка, выбирается с помощью механизма Bootstrapper, реализующего [распределённый консенсус](https://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BD%D1%81%D0%B5%D0%BD%D1%81%D1%83%D1%81_%D0%B2_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%D1%85). Пользовательскими таблетками управляет специальная таблетка [Hive](https://ydb.tech/docs/ru/contributor/hive.md?version=main). Hive следит за тем, что все таблетки запущены, распределяет таблетки между узлами и [каналы](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#channel) таблеток между группами хранения.

Узнать, на каком узле выполняется таблетка в актуальном поколении, можно через сервис *StateStorage*. Для отправки сообщений в таблетку существует специальный набор библиотек, который называется *tablet pipe*. С его помощью, зная идентификатор целевой таблетки, можно легко послать ей нужное сообщение.

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

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

Пользовательская логика находится между базовой таблеткой и пользователем и позволяет обрабатывать специфические запросы для данного типа таблеток, надёжно сохраняя изменения в distributed storage. Часто используемый шаблон работы таблетки — хранение всех данных в памяти, их вычитка только на старте и синхронное изменение данных в памяти и в хранилище после успешного коммита.

### Как таблетка хранит данные и какие они {#storage}

Базовая таблетка представляет собой LSM-дерево, в котором находятся все данные её таблицы. Уровнем ниже базовой таблетки находится distributed storage, который, грубо говоря, является KeyValue-хранилищем, в котором лежат блобы. *Блоб* — это бинарный фрагмент размером от 1 байта до 10 мегабайт, который имеет идентификатор фиксированной структуры (обычно он называется *BlobId* и имеет тип TLogoBlobID) и связанные с ним данные. Хранилище иммутабельно, то есть каждому идентификатору соответствует только одно значение, которое не может изменяться со временем. Блоб можно записать, прочитать и затем удалить, когда он станет не нужен.

Подробнее о блобах и распределённом хранилище можно прочитать в разделе [Дисковая подсистема кластера aka YDB distributed storage](https://ydb.tech/docs/ru/contributor/distributed-storage.md?version=main).

Для distributed storage блобы являются непрозрачной сущностью. Таблетка может хранить несколько типов блобов. Наиболее часто записываемый блоб — блоб лога (имеется в виду recovery log, журнал восстановления). Лог таблетки устроен в виде списка блобов, в каждом из которых содержится информация о вносимом изменении в таблицы. При запуске таблетка находит последний блоб лога и затем рекурсивно по ссылкам вычитывает все связанные с ним блобы. В логе могут также содержаться ссылки на блобы снапшотов, которые содержат данные нескольких блобов лога после слияния (операция merge в LSM-дереве).

Блобы разных типов таблетка записывает в разные *каналы*. Канал указывает ветвь хранилища, в которой следует хранить блобы, и выполняет несколько функций, а именно:

1. Выбор типа хранилища (разные каналы могут быть привязаны к разным типам устройств — SSD, HDD, NVMe).
2. Балансировка нагрузки, так как каждый канал имеет лимит по IOPS, доступному месту и пропускной способности.
3. Указание типа данных. При восстановлении лога читаются только блобы из нулевого канала, что позволяет отделить их от прочих блобов.

### История каналов в таблетке {#history}

Как уже говорилось, каждая группа имеет фиксированный объём данных, которые в неё могут помещаться, а также делит полосу пропускания и число операций в секунду между всеми потребителями. Нагрузка на таблетки может меняться, и в результате может сложиться так, что группа станет перегруженной и возникнет необходимость использовать для записи другую группу. Для этого вводится понятие истории, которое позволяет для каждой таблетки, зная Channel и Generation блоба, определить, в какую группу записан данный блоб.

Иллюстрация работы этого механизма приведена ниже:

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="691px" height="551px" viewBox="-0.5 -0.5 691 551" content="&lt;mxfile host=&quot;draw.io&quot; modified=&quot;2021-07-15T16:05:40.464Z&quot; agent=&quot;Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36&quot; etag=&quot;HF0g-8VF_2eGPBkH-fRg&quot; version=&quot;12.7.0&quot; type=&quot;device&quot;&gt;&lt;diagram id=&quot;LqqcKPgxwdzCRuipa-4Q&quot; name=&quot;Page-1&quot;&gt;3ZtRc5s4EMc/DTO9h3SQBBg/GidNc3PXyYw7vV7fFKMYWox8shzb/fQnjADDUocktpH74qBFYPhp/9LuKrbIeL65FXQR/c1DlljYDjcWubYwxraH1Z/Mss0tCA2d3DITcahtlWES/2TaaGvrKg7ZstZRcp7IeFE3Tnmasqms2agQfF3v9siT+rcu6IwBw2RKE2j9Jw5llFt9PKjsH1k8i4pvRt4wPzOnRWf9JsuIhny9ZyI3FhkLzmV+NN+MWZLRK7jk1334xdnywQRLZZcLxt6Hb1+Cu/8E+7ZBn/5EH++/Ply5bn6bJ5qs9Bvrp5XbAoHgqzRk2V1siwTrKJZssqDT7OxajbqyRXKeqBZSh488lXoUka/aNIlnqWok7FE9ZQAfWr/HExOSbfZM+iVuGZ8zKbaqiz5LNE/tUaTwlHU1PG7BPNobGmJrI9UuMStvXVFTBxrcSyAOnofIQuVWusmFjPiMpzS5qaxBHXPV5y/OFxrudyblVtOlK8kPo1eIxfZrdr/3btH8V99+17je1Fpb3frlGC35SkzZARCFQKmYMdnB6zIoB4dcsITK+Kmuxbbx05fe81g9c+kq2K77Cm66QP6k+qqGF5SP8XrHQMAvPtOHhMm78G0iO4KKkFdH40MV+S0ick6lIYcYoaHzawZ31Awankkz/us0MxKCbve6LbIOy+7fgwaN5avRH9nuof7qIH+CowoYA6ccR1QFGknv+i2VaIp+OwQSv6V+SUf94jOtecQ7j37B95DD+iUN/Tb6n0a/cFG5ZSkTii9Pe5cwwYZJGMCaSLboHZNjm4UJTnRjzn/ErH9QvlmgPAAqSPjDburuG5VrWPQLE8h7KkxIEzzDwgwfgAKIlhFdZIfTlUi2gaDTH9m6/ByrCmzekvkaQa6vhgfjgxfIs1G4uEIOhNlWuCid9eg0h60KbXE79Yqyzquo60wVECaUIQMRT2ky0ifmcRjmMR1bxj+ztFc7rQ4s1H3dwHKvs3upMG6pCxdHYo0ayYLbUiRqQY1PRbooUu2h9pyLx4z8OmYPUiZnpQwLLv7FQ8YD+znIbbPG6SDDpJjAWfjSKBPHMFeGqctvQNnBhlGGOQ++/GnZtQ2jDMPbbF6232Hvj8uHPXgW9nkjDRgiX75He6atgTBy/pxv7UwkF3TG7tJHDqi/KHlr8pdZBfQoc3DdX8sq1B5L1ArTPxVNbMb+aVU7rlWO3+Oyknz8zR+N1JjqMSYN7xg0Bv3EO6YY5knljktRB+yzbtSg05JWIrtFOyerh2CY8VS8kHG8hr3zgslLxQvOOj3zKktG/fGCaUjF65NpvNz+9Qh3B3RgoLEZHBg0IwOna2SAThYZEDN2ld+wwA87LvDEOfYC/zY/hgGubd1gyx9aI2fGUgt7dJ75XZLlEaj/lRlMnb1PBQTWFm4VlUW2MFflpj73C4lxyMxIBF4vd9I1nieeUXInMOxGh/SO+/desPbbvXsv3PAuBO86BPcfjTcFbwAyuMxcmOC7/ssz8c0SPMwbM1HXFG+awPtfnmBp1ewVvX9kbss/bCgYo91nYO8+0e4z2H26lmLh52dHuk+T6lmL180fVRxjlJpVkZY8a9gySOTlg6Sa1Q+M8hpd9TstcvM/&lt;/diagram&gt;&lt;/mxfile&gt;" style="background-color: rgb(255, 255, 255);"><defs/><g><rect x="0" y="250" width="520" height="300" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 170 60 L 170 155 L 260 155 L 260 243.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 260 248.88 L 256.5 241.88 L 260 243.63 L 263.5 241.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="130" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 131px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">TabletId</div></div></div></foreignObject><text x="170" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">TabletId</text></switch></g><path d="M 250 60 L 250 110 L 75 110 L 75 253.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 75 258.88 L 71.5 251.88 L 75 253.63 L 78.5 251.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="210" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 211px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Channel</div></div></div></foreignObject><text x="250" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Channel</text></switch></g><path d="M 330 60 L 330 170 L 275 170 L 275 353.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 275 358.88 L 271.5 351.88 L 275 353.63 L 278.5 351.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="290" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 291px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Generation</div></div></div></foreignObject><text x="330" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Generation</text></switch></g><rect x="370" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 371px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Step</div></div></div></foreignObject><text x="410" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Step</text></switch></g><rect x="450" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Cookie</div></div></div></foreignObject><text x="490" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Cookie</text></switch></g><rect x="530" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 531px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">BlobSize</div></div></div></foreignObject><text x="570" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">BlobSize</text></switch></g><rect x="610" y="20" width="80" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 40px; margin-left: 611px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">PartId</div></div></div></foreignObject><text x="650" y="44" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">PartId</text></switch></g><path d="M 420 -200 L 415 -200 Q 410 -200 410 -190 L 410 70 Q 410 80 405 80 L 402.5 80 Q 400 80 405 80 L 407.5 80 Q 410 80 410 90 L 410 350 Q 410 360 415 360 L 420 360" fill="none" stroke="#000000" stroke-miterlimit="10" transform="rotate(-90,410,80)" pointer-events="all"/><rect x="385" y="90" width="50" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 100px; margin-left: 410px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">BlobId</div></div></div></foreignObject><text x="410" y="104" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">BlobId</text></switch></g><rect x="155" y="0" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 170px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">64</div></div></div></foreignObject><text x="170" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">64</text></switch></g><rect x="240" y="0" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 250px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">8</div></div></div></foreignObject><text x="250" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">8</text></switch></g><rect x="315" y="0" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 330px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">32</div></div></div></foreignObject><text x="330" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">32</text></switch></g><rect x="395" y="0" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 410px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">32</div></div></div></foreignObject><text x="410" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">32</text></switch></g><rect x="475" y="0" width="30" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 490px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">24</div></div></div></foreignObject><text x="490" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">24</text></switch></g><rect x="545" y="0" width="50" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 570px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">28 (26)</div></div></div></foreignObject><text x="570" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">28 (26)</text></switch></g><rect x="640" y="0" width="20" height="20" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 10px; margin-left: 650px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">4</div></div></div></foreignObject><text x="650" y="14" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">4</text></switch></g><rect x="15" y="260" width="120" height="280" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 267px; margin-left: 16px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">TTabletStorageInfo</div></div></div></foreignObject><text x="75" y="279" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">TTabletStorageInfo</text></switch></g><path d="M 125 310 L 170 310 L 170 405 L 208.63 405" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 213.88 405 L 206.88 408.5 L 208.63 405 L 206.88 401.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="25" y="290" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 310px; margin-left: 26px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Channel 0</div></div></div></foreignObject><text x="75" y="314" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Channel 0</text></switch></g><rect x="25" y="330" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 350px; margin-left: 26px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Channel 1</div></div></div></foreignObject><text x="75" y="354" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Channel 1</text></switch></g><rect x="25" y="370" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 390px; margin-left: 26px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Channel 2</div></div></div></foreignObject><text x="75" y="394" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Channel 2</text></switch></g><rect x="25" y="490" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 510px; margin-left: 26px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Channel N</div></div></div></foreignObject><text x="75" y="514" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Channel N</text></switch></g><rect x="215" y="360" width="120" height="180" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe flex-start; justify-content: unsafe center; width: 118px; height: 1px; padding-top: 367px; margin-left: 216px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">TTabletChannelInfo</div></div></div></foreignObject><text x="275" y="379" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">TTabletChannelInfo</text></switch></g><path d="M 325 410 L 398.63 410" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 410 L 396.88 413.5 L 398.63 410 L 396.88 406.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="225" y="390" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 410px; margin-left: 226px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">0≤gen&lt;10</div></div></div></foreignObject><text x="275" y="414" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">0≤gen&lt;10</text></switch></g><rect x="405" y="390" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 410px; margin-left: 406px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Group 12345</div></div></div></foreignObject><text x="455" y="414" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Group 12345</text></switch></g><path d="M 325 460 L 398.63 460" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 460 L 396.88 463.5 L 398.63 460 L 396.88 456.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="225" y="440" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 460px; margin-left: 226px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">10≤gen&lt;125</div></div></div></foreignObject><text x="275" y="464" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">10≤gen&lt;125</text></switch></g><rect x="405" y="440" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 460px; margin-left: 406px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Group 54321</div></div></div></foreignObject><text x="455" y="464" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Group 54321</text></switch></g><path d="M 325 510 L 398.63 510" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 403.88 510 L 396.88 513.5 L 398.63 510 L 396.88 506.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="225" y="490" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 510px; margin-left: 226px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">125≤gen</div></div></div></foreignObject><text x="275" y="514" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">125≤gen</text></switch></g><rect x="405" y="490" width="100" height="40" fill="#ffffff" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 510px; margin-left: 406px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Group 12345</div></div></div></foreignObject><text x="455" y="514" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">Group 12345</text></switch></g><rect x="425" y="260" width="90" height="30" fill="none" stroke="none" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 275px; margin-left: 470px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 18px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: nowrap; ">Таблетка</div></div></div></foreignObject><text x="470" y="280" fill="#000000" font-family="Helvetica" font-size="18px" text-anchor="middle">Таблетка</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg>

Для каждого канала в структуре TTabletStorageInfo содержится подструктура TTabletChannelInfo, которая содержит диапазоны поколений и номер группы, соответствующий каждому диапазону. Диапазоны строго примыкают друг к другу, последний диапазон открыт. Номера групп могут пересекаться в разных диапазонах и даже между разными каналами — это не запрещено и достаточно часто встречается.

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

<!-- source: ru/contributor/_includes/career.md -->
{% note tip "Хотите присоединиться к команде разработки YDB?" %}

Ознакомьтесь с разделами о [команде YDB и открытых вакансиях](https://ydb.tech/ru/careers/), а также о [возможностях для студентов](https://ydb.tech/ru/students/).

{% endnote %}
<!-- endsource: ru/contributor/_includes/career.md -->