Ang data compression sa Apache Ignite. Ang kasinatian ni Sber

Ang data compression sa Apache Ignite. Ang kasinatian ni SberKung nagtrabaho uban ang daghang mga volume sa datos, ang problema sa kakulang sa espasyo sa disk usahay motungha. Ang usa ka paagi aron masulbad kini nga problema mao ang pag-compress, salamat nga, sa parehas nga kagamitan, mahimo nimong madugangan ang gidaghanon sa pagtipig. Niini nga artikulo, atong tan-awon kung giunsa ang pag-compress sa data sa Apache Ignite. Kini nga artikulo maghulagway lamang sa mga pamaagi sa kompresiyon sa disk nga gipatuman sulod sa produkto. Ang ubang mga pamaagi sa data compression (sa network, sa memorya), gipatuman man o wala, magpabilin sa gawas sa kasangkaran.

Mao nga, kung gi-aktibo ang mode nga pagpadayon, ingon usa ka sangputanan sa mga pagbag-o sa datos sa mga cache, ang Ignite nagsugod sa pagsulat sa disk:

  1. Mga sulod sa mga cache
  2. Isulat ang Ahead Log (pagkahuman niini yano nga WAL)

Adunay usa ka mekanismo alang sa WAL compression sa dugay na nga panahon, nga gitawag WAL compaction. Ang bag-o lang gipagawas nga Apache Ignite 2.8 nagpaila sa duha pa ka mekanismo nga nagtugot kanimo sa pag-compress sa data sa disk: disk page compression para sa pag-compress sa mga sulod sa mga cache ug WAL page snapshot compression para sa pag-compress sa pipila ka WAL entries. Dugang nga mga detalye bahin sa tanan nga tulo niini nga mga mekanismo sa ubos.

Pag-compress sa panid sa disk

Unsa nga paagi nga kini nga buhat

Una, atong tan-awon ang mubo kaayo nga pagtan-aw kung giunsa pagtipig sa Ignite ang datos. Ang panumduman sa panid gigamit alang sa pagtipig. Ang gidak-on sa panid gitakda sa pagsugod sa node ug dili na mausab sa ulahi nga mga yugto; usab, ang gidak-on sa panid kinahanglan nga usa ka gahum sa duha ug usa ka multiple sa file system block gidak-on. Ang mga panid gikarga sa RAM gikan sa disk kung gikinahanglan; ang gidak-on sa datos sa disk mahimong molapas sa gidaghanon sa gigahin nga RAM. Kung walay igo nga espasyo sa RAM aron makarga ang usa ka panid gikan sa disk, ang daan, wala na gigamit nga mga panid papahawaon gikan sa RAM.

Ang datos gitipigan sa disk sa mosunod nga porma: usa ka separado nga payl gihimo alang sa matag partisyon sa matag cache nga grupo; niini nga payl, ang mga panid makita sunodsunod sa pagsaka sa han-ay sa indeks. Ang tibuok page identifier naglangkob sa cache group identifier, partition number, ug page index sa file. Busa, gamit ang bug-os nga page identifier, mahimo natong talagsaon nga mahibal-an ang file ug ang offset sa file alang sa matag panid. Makabasa ka ug dugang bahin sa paging memory sa artikulo sa Apache Ignite Wiki: Ignite Persistent Store - sa ilawom sa hood.

Ang mekanismo sa kompresiyon sa panid sa disk, ingon sa imong pagtag-an gikan sa ngalan, molihok sa lebel sa panid. Sa diha nga kini nga mekanismo mahimo, ang data sa RAM giproseso sama sa, nga walay bisan unsa nga compression, apan sa diha nga ang mga panid maluwas gikan sa RAM ngadto sa disk, sila gi-compress.

Apan ang pag-compress sa matag panid nga tagsa-tagsa dili solusyon sa problema; kinahanglan nimo nga pakunhuran ang gidak-on sa resulta nga mga file sa datos. Kung ang gidak-on sa panid dili na gitakda, dili na namo masulat ang mga panid sa file sunodsunod, tungod kay kini makamugna og daghang mga problema:

  • Gamit ang index sa panid, dili namo makalkulo ang offset diin kini nahimutang sa file.
  • Dili klaro kung unsa ang buhaton sa mga panid nga wala sa katapusan sa file ug usbon ang ilang gidak-on. Kung ang gidak-on sa panid mokunhod, ang luna nga gibuhian niini mawala. Kung ang gidak-on sa panid modako, kinahanglan nimo pangitaon ang usa ka bag-ong lugar sa file alang niini.
  • Kung ang usa ka panid molihok sa daghang mga byte nga dili usa ka multiple sa gidak-on sa block sa file system, unya ang pagbasa o pagsulat niini magkinahanglan og paghikap sa usa pa ka block sa file system, nga mahimong mosangpot sa pagkadaut sa performance.

Aron malikayan ang pagsulbad niini nga mga problema sa kaugalingon nga lebel, ang disk page compression sa Apache Ignite naggamit sa mekanismo sa file system nga gitawag ug sparse files. Ang usa ka gamay nga file mao ang usa diin ang pipila ka mga rehiyon nga puno sa zero mahimong markahan nga "mga lungag". Sa kini nga kaso, walay mga bloke sa file system nga igahin sa pagtipig niini nga mga lungag, nga moresulta sa pagdaginot sa disk space.

Makataronganon nga aron mapahigawas ang usa ka bloke sa sistema sa file, ang gidak-on sa lungag kinahanglan nga mas dako o katumbas sa bloke sa file system, nga nagpahamtang ug dugang nga limitasyon sa gidak-on sa panid ug Apache Ignite: aron adunay bisan unsang epekto ang compression, ang gidak-on sa panid kinahanglang mas dako kay sa gidak-on sa block sa file system. Kung ang gidak-on sa panid parehas sa gidak-on sa bloke, nan dili gyud kami makapagawas sa usa ka bloke, tungod kay aron mapahigawas ang usa ka bloke, ang gi-compress nga panid kinahanglan nga mag-okupar sa 0 bytes. Kung ang gidak-on sa panid parehas sa gidak-on sa 2 o 4 ka bloke, mahimo na namon nga buhian ang labing menos usa ka bloke kung ang among panid ma-compress sa labing menos 50% o 75%, matag usa.

Sa ingon, ang katapusan nga paghulagway kung giunsa ang mekanismo molihok: Sa pagsulat sa usa ka panid sa disk, usa ka pagsulay ang gihimo aron ma-compress ang panid. Kung ang gidak-on sa gi-compress nga panid nagtugot sa usa o daghan pa nga mga bloke sa file system nga mapagawas, nan ang panid gisulat sa compressed nga porma, ug usa ka "lungag" ang gihimo puli sa gipagawas nga mga bloke (usa ka tawag sa sistema ang gipatuman. fallocate() uban ang bandera sa punch hole). Kung ang gidak-on sa gi-compress nga panid dili motugot sa mga bloke nga mapahigawas, ang panid gitipigan nga wala’y pag-compress. Ang tanan nga mga offset sa panid gikalkula sa parehas nga paagi nga wala’y pag-compress, pinaagi sa pagpadaghan sa indeks sa panid sa gidak-on sa panid. Walay relokasyon sa mga panid ang gikinahanglan sa imong kaugalingon. Ang mga pag-offset sa panid, sama sa walay compression, nahulog sa mga utlanan sa mga bloke sa file system.

Ang data compression sa Apache Ignite. Ang kasinatian ni Sber

Sa kasamtangan nga implementasyon, ang Ignite mahimo lamang nga magtrabaho uban sa pipila ka mga file ubos sa Linux OS; sumala niana, ang disk page compression mahimo lamang nga magamit kung gamiton ang Ignite niini nga operating system.

Mga algorithm sa compression nga mahimong magamit alang sa pag-compress sa panid sa disk: ZSTD, LZ4, Snappy. Dugang pa, adunay usa ka operating mode (SKIP_GARBAGE), diin ang wala magamit nga wanang sa panid ilabay nga wala mag-apply sa compression sa nahabilin nga datos, nga makapamenos sa load sa CPU kumpara sa nalista kaniadto nga mga algorithm.

Epekto sa Pagganap

Ikasubo, wala ako nagpahigayon mga aktuwal nga pagsukod sa pasundayag sa tinuod nga mga baroganan, tungod kay wala kami nagplano nga gamiton kini nga mekanismo sa produksiyon, apan mahimo namon nga teorya kung asa kami mapildi ug kung asa kami modaog.

Aron mahimo kini, kinahanglan natong hinumdoman kung giunsa pagbasa ug pagsulat ang mga panid kung gi-access:

  • Kung nagpahigayon usa ka operasyon sa pagbasa, una kini nga gipangita sa RAM; kung ang pagpangita dili molampos, ang panid gikarga sa RAM gikan sa disk sa parehas nga hilo nga naghimo sa pagbasa.
  • Kung gihimo ang usa ka operasyon sa pagsulat, ang panid sa RAM gimarkahan nga hugaw, apan ang panid dili pisikal nga ma-save sa disk dayon pinaagi sa hilo nga naghimo sa pagsulat. Ang tanan nga hugaw nga mga panid gitipigan sa disk sa ulahi sa proseso sa checkpoint sa lainlaing mga hilo.

Busa ang epekto sa mga operasyon sa pagbasa mao ang:

  • Positibo (disk IO), tungod sa pagkunhod sa gidaghanon sa read file system blocks.
  • Negatibo (CPU), tungod sa dugang nga load nga gikinahanglan sa operating system sa pagtrabaho uban sa mga talagsa nga mga file. Posible usab nga ang dugang nga mga operasyon sa IO tin-aw nga makita dinhi aron maluwas ang usa ka labi ka komplikado nga istruktura sa file (sa kasubo, dili ako pamilyar sa tanan nga mga detalye kung giunsa ang pagtrabaho sa mga gamay nga file).
  • Negatibo (CPU), tungod sa panginahanglan sa pag-decompress sa mga panid.
  • Walay epekto sa pagsulat nga mga operasyon.
  • Epekto sa proseso sa checkpoint (ang tanan dinhi susama sa mga operasyon sa pagbasa):
  • Positibo (disk IO), tungod sa pagkunhod sa gidaghanon sa sinulat nga mga bloke sa sistema sa file.
  • Negatibo (CPU, posible nga disk IO), tungod sa pagtrabaho uban sa pipila ka mga file.
  • Negatibo (CPU), tungod sa panginahanglan alang sa pag-compress sa panid.

Asa nga bahin sa timbangan ang mag-tip sa timbangan? Kini tanan nagdepende kaayo sa palibot, apan hilig ko nga motuo nga ang pag-compress sa panid sa disk lagmit nga mosangput sa pagkadaot sa pasundayag sa kadaghanan nga mga sistema. Dugang pa, ang mga pagsulay sa ubang mga DBMS nga naggamit sa usa ka susama nga pamaagi sa mga talagsa nga mga file nagpakita sa usa ka pagkunhod sa pasundayag kung ang compression gipagana.

Unsaon pag-enable ug pag-configure

Sama sa gihisgutan sa ibabaw, ang minimum nga bersyon sa Apache Ignite nga nagsuporta sa disk page compression mao ang 2.8 ug ang Linux operating system lamang ang gisuportahan. I-enable ug i-configure sama sa mosunod:

  • Kinahanglan adunay usa ka ignite-compression module sa class-path. Sa kasagaran, kini nahimutang sa Apache Ignite distribution sa libs/opsyonal nga direktoryo ug wala maapil sa class-path. Mahimo nimo nga ibalhin ang direktoryo sa usa ka lebel sa libs ug pagkahuman kung imong gipadagan kini pinaagi sa ignite.sh awtomatiko kini nga mahimo.
  • Ang pagpadayon kinahanglan nga ma-enable (Gi-enable pinaagi sa DataRegionConfiguration.setPersistenceEnabled(true)).
  • Ang gidak-on sa panid kinahanglang mas dako kay sa gidak-on sa block sa file system (mahimo nimong itakda kini gamit ang DataStorageConfiguration.setPageSize() ).
  • Alang sa matag cache kansang data kinahanglan nga i-compress, kinahanglan nimo nga i-configure ang pamaagi sa pag-compress ug (opsyonal) ang lebel sa compression (mga pamaagi CacheConfiguration.setDiskPageCompression() , CacheConfiguration.setDiskPageCompressionLevel()).

WAL compaction

Unsa nga paagi nga kini nga buhat

Unsa ang WAL ug nganong gikinahanglan kini? Sa mubo kaayo: kini usa ka log nga adunay tanan nga mga panghitabo nga sa katapusan nagbag-o sa pagtipig sa panid. Panguna nga gikinahanglan kini aron makabawi sa kaso sa pagkahulog. Ang bisan unsang operasyon, sa dili pa ihatag ang kontrol sa user, kinahanglan una nga magrekord sa usa ka panghitabo sa WAL, aron sa kaso sa kapakyasan, mahimo kini nga i-play balik sa log ug ibalik ang tanan nga mga operasyon diin ang user nakadawat og malampuson nga tubag, bisan kung kini nga mga operasyon wala'y panahon nga makita sa pagtipig sa panid sa disk (naa na sa ibabaw Gihulagway nga ang aktuwal nga pagsulat sa tindahan sa panid gihimo sa usa ka proseso nga gitawag nga "checkpointing" nga adunay pipila ka paglangan sa lainlain nga mga hilo).

Ang mga entri sa WAL gibahin sa lohikal ug pisikal. Ang mga Boolean mao ang mga yawe ug mga bili sa ilang kaugalingon. Pisikal - nagpakita sa mga pagbag-o sa mga panid sa tindahan sa panid. Samtang ang lohikal nga mga rekord mahimong mapuslanon alang sa ubang mga kaso, ang pisikal nga mga rekord gikinahanglan lamang alang sa pagbawi kung adunay pagkahagsa ug ang mga rekord gikinahanglan lamang sukad sa katapusang malampuson nga checkpoint. Dinhi dili kami magdetalye ug magpatin-aw kung ngano nga kini molihok sa ingon niini nga paagi, apan ang mga interesado mahimong mag-refer sa nahisgutan na nga artikulo sa Apache Ignite Wiki: Ignite Persistent Store - sa ilawom sa hood.

Kanunay adunay daghang pisikal nga mga rekord matag lohikal nga rekord. Kana mao, pananglitan, ang usa nga nagbutang sa operasyon sa cache makaapekto sa daghang mga panid sa panumduman sa panid (usa ka panid nga adunay data mismo, mga panid nga adunay mga indeks, mga panid nga adunay libre nga mga lista). Sa pipila ka mga sintetikong pagsulay, akong nakita nga ang pisikal nga mga rekord nag-okupar hangtod sa 90% sa WAL file. Bisan pa, gikinahanglan sila sa mubo nga panahon (sa default, ang agwat tali sa mga checkpoints 3 minuto). Makataronganon nga tangtangon kini nga datos pagkahuman nawala ang kalabotan niini. Mao gyud kini ang gibuhat sa mekanismo sa compaction sa WAL: gitangtang niini ang mga pisikal nga rekord ug gi-compress ang nahabilin nga lohikal nga mga rekord gamit ang zip, samtang ang gidak-on sa file gikunhuran pag-ayo (usahay sa napulo ka beses).

Sa pisikal, ang WAL naglangkob sa daghang mga bahin (10 sa default) sa usa ka piho nga gidak-on (64MB sa default), nga gisapawan sa usa ka lingin nga paagi. Sa diha nga ang kasamtangan nga bahin napuno, ang sunod nga bahin gi-assign ingon nga kasamtangan, ug ang napuno nga bahin gikopya ngadto sa archive pinaagi sa usa ka lain nga hilo. Ang WAL compaction nagtrabaho na sa mga bahin sa archive. Usab, isip usa ka bulag nga hilo, gimonitor niini ang pagpatuman sa checkpoint ug gisugdan ang compression sa mga bahin sa archive diin dili na kinahanglan ang pisikal nga mga rekord.

Ang data compression sa Apache Ignite. Ang kasinatian ni Sber

Epekto sa Pagganap

Tungod kay ang WAL compaction nagdagan ingon usa ka bulag nga hilo, kinahanglan nga wala’y direktang epekto sa mga operasyon nga gihimo. Apan nagbutang gihapon kini og dugang nga background load sa CPU (compression) ug disk (pagbasa sa matag bahin sa WAL gikan sa archive ug pagsulat sa mga compressed segment), mao nga kung ang sistema nagdagan sa labing taas nga kapasidad niini, kini usab mosangpot sa pagkadaut sa performance.

Unsaon pag-enable ug pag-configure

Mahimo nimong ma-enable ang WAL compaction gamit ang property WalCompactionEnabled Π² DataStorageConfiguration (DataStorageConfiguration.setWalCompactionEnabled(true)). Usab, gamit ang DataStorageConfiguration.setWalCompactionLevel() nga pamaagi, mahimo nimong itakda ang compression level kung dili ka matagbaw sa default value (BEST_SPEED).

WAL nga panid snapshot compression

Unsa nga paagi nga kini nga buhat

Nahibal-an na namon nga sa WAL nga mga rekord gibahin sa lohikal ug pisikal. Alang sa matag pagbag-o sa matag panid, usa ka pisikal nga rekord sa WAL ang gihimo sa memorya sa panid. Ang pisikal nga mga rekord, sa baylo, gibahin usab sa 2 nga mga subtype: rekord sa snapshot sa panid ug rekord sa delta. Matag higayon nga usbon namo ang usa ka butang sa usa ka panid ug ibalhin kini gikan sa usa ka limpyo nga kahimtang ngadto sa usa ka hugaw nga kahimtang, usa ka kompleto nga kopya niini nga panid gitipigan sa WAL (panid snapshot record). Bisan og usa lang ka byte ang atong giusab sa WAL, ang rekord mas dako og gamay kay sa gidak-on sa panid. Kung usbon nato ang usa ka butang sa usa ka hugaw nga panid, usa ka delta record ang maporma sa WAL, nga nagpakita lamang sa mga pagbag-o kumpara sa miaging kahimtang sa panid, apan dili ang tibuok panid. Tungod kay ang pag-reset sa kahimtang sa mga panid gikan sa hugaw ngadto sa limpyo gihimo sa panahon sa proseso sa checkpoint, diha-diha dayon pagkahuman sa pagsugod sa checkpoint, hapit tanan nga pisikal nga mga rekord naglangkob lamang sa mga snapshot sa mga panid (tungod kay ang tanan nga mga panid pagkahuman sa pagsugod sa checkpoint limpyo) , unya sa atong pagduol sa sunod nga checkpoint, ang delta record fraction magsugod sa pagtubo ug reset pag-usab sa sinugdanan sa sunod nga checkpoint. Ang mga pagsukod sa pipila ka sintetikong mga pagsulay nagpakita nga ang bahin sa mga snapshot sa panid sa kinatibuk-ang gidaghanon sa pisikal nga mga rekord moabot sa 90%.

Ang ideya sa WAL page snapshot compression mao ang pag-compress sa mga snapshot sa panid gamit ang andam nga himan sa pag-compress sa panid (tan-awa ang disk page compression). Sa parehas nga oras, sa WAL, ang mga rekord gitipigan nga sunud-sunod sa mode nga append-only ug wala’y kinahanglan nga ibugkos ang mga rekord sa mga utlanan sa mga bloke sa file system, busa dinhi, dili sama sa mekanismo sa kompresiyon sa panid sa disk, wala namon kinahanglana ang mga gamay nga file sa tanan; sa ingon, kini nga mekanismo molihok dili lamang sa OS Linux. Dugang pa, dili na igsapayan kanamo kung unsa kadaghan ang among nahimo sa pag-compress sa panid. Bisan kung gibuhian namon ang 1 byte, kini usa na ka positibo nga resulta ug mahimo namon nga ma-save ang mga compressed data sa WAL, dili sama sa disk page compression, diin among gitipigan ang na-compress nga panid kung among gipagawas ang labaw sa 1 nga bloke sa file system.

Ang mga panid labi ka ma-compress nga datos, ang ilang bahin sa kinatibuk-ang gidaghanon sa WAL taas kaayo, busa kung wala’y pagbag-o sa format sa file sa WAL makakuha kita usa ka hinungdanon nga pagkunhod sa gidak-on niini. Ang kompresiyon, lakip ang lohikal nga mga rekord, magkinahanglan ug pagbag-o sa pormat ug pagkawala sa pagkaangay, pananglitan, alang sa gawas nga mga konsumidor nga mahimong interesado sa lohikal nga mga rekord, apan dili mosangpot sa dakong pagkunhod sa gidak-on sa file.

Sama sa disk page compression, ang WAL page snapshot compression mahimong mogamit sa ZSTD, LZ4, Snappy compression algorithm, ingon man ang SKIP_GARBAGE mode.

Epekto sa Pagganap

Dili lisud ang pagmatikod nga ang direktang pagpagana sa WAL page snapshot compression makaapekto lamang sa mga thread nga nagsulat og data ngadto sa page memory, nga mao, kadtong mga thread nga nag-usab sa datos sa mga cache. Ang pagbasa sa pisikal nga mga rekord gikan sa WAL mahitabo kas-a ra, sa higayon nga ang node gipataas pagkahuman sa pagkahulog (ug kung kini mahulog sa usa ka checkpoint).

Kini makaapekto sa mga hilo nga nag-usab sa datos sa mosunod nga paagi: kita makakuha og negatibong epekto (CPU) tungod sa panginahanglan sa pag-compress sa panid matag higayon sa dili pa mosulat sa disk, ug usa ka positibo nga epekto (disk IO) tungod sa pagkunhod sa gidaghanon sa gisulat nga datos. Tungod niini, ang tanan yano dinhi: kung ang pasundayag sa sistema limitado sa CPU, makakuha kami usa ka gamay nga pagkadaot, kung kini limitado sa disk I / O, makakuha kami usa ka pagtaas.

Sa dili direkta, ang pagkunhod sa gidak-on sa WAL makaapekto usab sa (positibo) nga mga sapa nga naghulog sa mga bahin sa WAL sa archive ug mga sapa sa compaction sa WAL.

Ang tinuod nga mga pagsulay sa performance sa atong palibot gamit ang sintetikong datos nagpakita ug gamay nga pagtaas (throughput misaka sa 10% -15%, latency mikunhod sa 10% -15%).

Unsaon pag-enable ug pag-configure

Minimum nga bersyon sa Apache Ignite: 2.8. Pag-enable ug pag-configure sama sa mosunod:

  • Kinahanglan adunay usa ka ignite-compression module sa class-path. Sa kasagaran, kini nahimutang sa Apache Ignite distribution sa libs/opsyonal nga direktoryo ug wala maapil sa class-path. Mahimo nimo nga ibalhin ang direktoryo sa usa ka lebel sa libs ug pagkahuman kung imong gipadagan kini pinaagi sa ignite.sh awtomatiko kini nga mahimo.
  • Ang pagpadayon kinahanglan nga ma-enable (Gi-enable pinaagi sa DataRegionConfiguration.setPersistenceEnabled(true)).
  • Ang compression mode kinahanglan nga itakda gamit ang pamaagi DataStorageConfiguration.setWalPageCompression(), ang compression gi-disable pinaagi sa default (DISABLED mode).
  • Opsyonal, mahimo nimong itakda ang lebel sa compression gamit ang pamaagi DataStorageConfiguration.setWalPageCompression(), tan-awa ang javadoc alang sa pamaagi alang sa balido nga mga kantidad alang sa matag mode.

konklusyon

Ang gikonsiderar nga mga mekanismo sa kompresiyon sa datos sa Apache Ignite mahimong magamit nga independente sa usag usa, apan ang bisan unsang kombinasyon niini madawat usab. Ang pagsabut kung giunsa nila pagtrabaho magtugot kanimo nga mahibal-an kung unsa sila angay sa imong mga buluhaton sa imong palibot ug kung unsa ang kinahanglan nimong isakripisyo kung gamiton kini. Ang compression sa panid sa disk gidesinyo sa pag-compress sa main storage ug makahatag ug medium nga compression ratio. Ang WAL page snapshot compression maghatag ug aberids nga ang-ang sa compression para sa WAL files, ug lagmit makapauswag pa sa performance. Ang WAL compaction walay positibong epekto sa performance, apan makapakunhod sa gidak-on sa WAL files kutob sa mahimo pinaagi sa pagtangtang sa pisikal nga mga rekord.

Source: www.habr.com

Idugang sa usa ka comment