Hacker News

Три слоеви на кеш помеѓу изберете и диск

Три слоеви на кеш помеѓу изберете и диск Ова истражување навлегува во три, испитувајќи го неговото значење и потенцијалното влијание. Опфатени основни концепти Оваа содржина истражува: Основни принципи и теории Практикувајте...

1 min read Via frn.sh

Mewayz Team

Editorial Team

Hacker News

Кога вашата апликација ќе пушти изјава SELECT, тоа барање речиси никогаш не допира до диск што се врти или дури и необработено флеш складирање - тој поминува низ три различни слоеви на кешот што тивко одредуваат дали вашиот одговор ќе пристигне за микросекунди или милисекунди. Разбирањето на овие слоеви е разликата помеѓу деловната платформа што се скали без напор и онаа што се закопчува под оптоварување во реалниот свет.

Што се случува во моментот кога SELECT барање ја напушта вашата апликација?

Во моментот кога вашата апликација ќе испрати барање SELECT, таа влегува во цевка која повеќето програмери никогаш не ја проверуваат. Моторот на базата на податоци го пресретнува барањето пред да се појави каков било I/O, анализирајќи го SQL во внатрешен план за извршување и веднаш консултирајќи се со неговата прва линија на одбрана: кешот на резултатите од барањето. Ако неодамна беше извршено идентично барање со идентични параметри, моторот може да врати сет на кеширани резултати без да допре ниту една страница со податоци. Ова понекогаш се нарекува кеш за пребарување или кеш на резултати, а при оптоварување со високо читање и ниско пишување - како што се контролните табли за аналитика и модулите за известување - може целосно да го елиминира огромното мнозинство на читања на дискот.

Критичкиот увид овде е дека кешот за пребарување е многу чувствителен на мутации на податоци. Секое INSERT, UDATE или DELETE во однос на основната табела ги поништува релевантните кеширани резултати. Ова е причината зошто трансакционите системи со тешки записи честопати целосно го оневозможуваат кешот за пребарување и наместо тоа се потпираат на подлабоките слоеви.

Што е баферот и зошто е важно повеќе отколку што мислите?

Вториот кеш слој - и веројатно најважниот во системите за производство - е тампон базен (наречен споделен бафер во PostgreSQL, бафер на InnoDB во MySQL). Ова е регион на RAM меморијата што моторот на базата на податоци го користи за да ги задржи страниците со податоци до кои неодамна се пристапи. Кога барањето не може да се сервира од кешот на резултатите, моторот проверува дали бараните страници со податоци веќе се сместени во баферот пред да издаде какво било читање на дискот.

Баферниот базен работи на принципот на временска и просторна локалитет: до податоците до кои се пристапи неодамна веројатно ќе се пристапи повторно, а податоците складирани во близина на достапните податоци најверојатно ќе се пристапат наскоро. Администраторите на базата на податоци ја прилагодуваат големината на баферот како една од конфигурациските одлуки со највисока моќ што ги носат. Премалиот бафер на баферот предизвикува постојано исфрлање на страницата, создавајќи феномен наречен thrashing, каде што системот троши повеќе време на управување со промашувања на кешот отколку на извршување на прашања.

Клучен увид: Во повеќето оптоварувања на OLTP, баферот со добра големина значи дека 95-99% од сите читања на податоци се сервираат од RAM меморијата. Работното множество - подмножеството на вашите податоци што барањата всушност често го допираат - често е далеку помало од вкупната големина на базата на податоци. Големината на вашиот тампон базен за да одговара на вашиот работен сет, а не на целата ваша база на податоци, е единственото дејство за подесување со највисоко враќање што можете да го преземете.

Како кешот на оперативниот систем ја пополнува празнината помеѓу RAM и дискот?

Дури и кога промашува баферот на сопствената база на податоци, барањето сè уште не е наменето за вистинско читање на дискот. Оперативниот систем одржува кеш на страница (исто така наречен кеш на датотечниот систем), регион на RAM-от управуван од јадрото, кој го баферира читањето и запишувањето за да блокира уреди. Кога моторот на базата на податоци бара страница што е отсутна од неговиот бафер, кернелот на ОС ја проверува сопствената кеш на страницата пред да издаде физичка I/O команда на контролорот за складирање.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Овој трет слој е во голема мера невидлив за развивачите на апликации, но е многу важен за системите каде баферот на базата на податоци е недоволно обезбеден. Кешот на страницата на ОС се дели на сите процеси, така што се натпреварува со вашиот сервер за апликации, веб-сервер и кој било друг софтвер што работи на истиот хост. На посветените сервери за бази на податоци, оваа конкуренција е минимална, а кешот на ОС обезбедува значаен бафер за втора шанса. Кај споделените домаќини или контејнери со строги ограничувања на меморијата, кешот на ОС често е премногу мал за да помогне.

Кој слој на кеш е одговорен за најмногу перформанси победи во пракса?

Во реалните системи за производство, тампон базенот доминира со резултатите од перформансите со голема разлика. Еве зошто секој слој различно придонесува во случаите на употреба:

  • Кеш за резултатите од барањето: Највисока придобивка од збирките на податоци за читање, главно статични - барања за известување, кеширани контролни табли, крајни точки на јавна содржина. Бескорисно на табели со тешки записи.
  • Бафер на бази на податоци: Универзален работник. Секој производствен сервер за бази на податоци треба прво да се подеси овде. Ефикасно се справува со обрасците за случаен и последователен пристап.
  • Кеш на страницата на ОС: Обезбедува заштитна мрежа кога баферот е помал од големината. Исто така, значително помага при секвенцијално скенирање на големи табели кои инаку би ги исфрлиле жешките страници од баферот.
  • Кеш на контролорот за складирање (хардверски слој): Четврт, често занемарен слој - NVMe SSD-дисковите и контролорите RAID одржуваат кеш за запишување на одборот со резервна копија од батерија или кондензатор. Ова ја штити издржливоста без да се жртвува протокот на запишување на сметка на латентноста на fsync.
  • Кеш на слојот на апликацијата (Redis, Memcached): Се наоѓа целосно над базата на податоци, кеширајќи сериски резултати од пребарување или пресметани објекти за да не дојде до базата на податоци воопшто - идеален за SaaS платформи со повеќе закупци кои опслужуваат илјадници истовремени корисници.

Како модерните деловни платформи можат да ја искористат архитектурата на кешот за доверливост на размер?

За бизниси кои работат низ многу функционални модули - CRM, управување со проекти, е-трговија, аналитика - архитектурата на кешот директно ја одредува одговорноста на платформата како што растат тимовите. Платформите изградени на добро слоевита стратегија за кеш може да опслужат десетици илјади истовремени корисници без пропорционални трошоци за инфраструктура. Клучот е дизајнирање обрасци за пристап до податоци кои ги почитуваат границите на кешот: одржување на мали податоци за топли податоци и предвидливи шаблони за пристап, користење на копии за читање за дистрибуирање на оптоварување на баферот на баферот и позиционирање на кешот на слојот на апликацијата како Redis пред базата на податоци за крајни точки кои опслужуваат идентични податоци за повеќе корисници истовремено.

Мевејз е архитектиран токму со оваа филозофија на ум. Со 207 интегрирани деловни модули кои напојуваат над 138.000 корисници, податочниот слој на платформата е дизајниран така што огромното мнозинство на читања се сервираат од кешот - со тоа што времето на одговор е брзо и трошоците за инфраструктура се предвидливи без разлика дали работите на стартниот план од 19 $/месец или професионалниот степен од 49 $/месец.

Често поставувани прашања

Дали оневозможувањето на кешот за пребарување секогаш ги подобрува перформансите на базата на податоци?

Не секогаш, но за оптоварувања со тешки записи тоа обично го прави. Кешот за пребарување бара глобален мутекс за да се одржи конзистентноста, што станува тесно грло при висока истовременост. MySQL 8.0 целосно го отстрани кешот за пребарување поради оваа причина. PostgreSQL никогаш не имплементирал вграден кеш за пребарување, потпирајќи се наместо тоа на баферот на баферот и кеширањето во апликацискиот слој. Ако вашиот сооднос читање-запишување е висок и вашите прашања се многу повторувани, кешот за пребарување може да донесе вистински придобивки - во спротивно, вложете го тој напор за подесување во баферот.

Како да знам дали мојот тампон базен е со правилна големина?

Следете го соодносот на удари во баферот: процентот на барања за страница сервирани од базенот наспроти оние за кои е потребно читање на дискот. Соодносот на удари под 95% на обемот на работа OLTP е сигнал за зголемување на големината на базенот. Во MySQL, побарајте ПОКАЖЕТЕ СТАТУС НА ИННОДБ НА МОТОРОТ и погледнете ја стапката на удари во баферот. Во PostgreSQL, приказот pg_statio_user_tables ги изложува блоковите на купиштата прочитани од дискот наспроти сервираните од баферот. Целта е да го задржите целиот работен сет — а не целосниот сет на податоци — да биде во RAM меморија.

Каква е врската помеѓу слоевите на кешот и доверливоста на SaaS со повеќе закупци?

Во SaaS со повеќе закупци, слоевите на кешот ги спречуваат проблемите со „шумниот сосед“ каде што големото оптоварување на барањето на еден станар ги влошува перформансите на сите други станари. Кеширањето на апликациите свесни за станарите со неважење базирано на TTL ги задржува жешките податоци по закупец во Redis, драстично намалувајќи го притисокот во баферот од големите сметки. Здружувањето на поврзување на ниво на база на податоци, комбинирано со топол баферски бафер, гарантира дека активноста на рафал од која било сметка нема да ги измие споделените страници од кешот и да предизвика скокови на латентност низ платформата.


Слоевите на кешот не се ситници на базата на податоци - тие се архитектонска основа што ги одвојува платформите што остануваат брзи во обем од оние за кои е потребно постојано инфраструктурно гаснење пожари. Ако градите или водите бизнис на кој му е потребна веќе оптимизирана платформа за овие реалности, истражете го Mewayz на app.mewayz.com — 207 модули, една кохерентна платформа, изградена да работи со сигурност од вашиот прв корисник до вашиот стоилјадити.

.

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime