Выпуск СКБД libmdbx 0.11.7. Перанос распрацоўкі на GitFlic пасля блакавання ў GitHub

Адбыўся выпуск бібліятэкі libmdbx 0.11.7 (MDBX) з рэалізацыяй высокапрадукцыйнай кампактнай убудаванай базы дадзеных класа ключ-значэнне. Код libmdbx распаўсюджваецца пад ліцэнзіяй OpenLDAP Public License. Падтрымліваюцца ўсе актуальныя аперацыйныя сістэмы і архітэктуры, а таксама расейскі Эльбрус 2000.

Рэліз адметны міграцыяй праекта на сэрвіс GitFlic пасля таго, як 15 красавіка 2022 г. адміністрацыя GitHub без якіх-небудзь папярэджанняў і тлумачэнні прычын выдаліла libmdbx разам з масай іншых праектаў, адначасова заблакаваўшы доступ многім распрацоўшчыкам, звязаным з кампаніямі, якія трапілі пад санкцыі ЗША. З пункту гледжання карыстальнікаў, усе старонкі, рэпазітар і форкі праекта раптам ператварыліся ў старонку "404", без магчымасці якіх-небудзь камунікацый і высвятлення прычын.

На жаль, страчаны амаль усе issues, у якіх было шмат пытанняў з падрабязнымі адказамі, а таксама нямала абмеркаванняў. Страта гэтай інфармацыі з'яўляецца адзінай аб'ектыўнай шкодай, якую адміністрацыяй GitHub атрымалася нанесці праекту. Часткова копіі абмеркаванняў застаюцца даступнымі ў архіве archive.org.

Страта адбудаваных CI-сцэнарыяў і інфраструктуры (даступнай для OpenSource-праектаў бясплатна) прымусіла заняцца рэвізіяй, уніфікацыяй і ўхіленнем невялікага тэхдоўгу. Цяпер CI адноўлены амаль у ранейшым аб'ёме, за выключэннем зборкі і прагон-тэстаў для ўсіх варыянтаў BSD і Solaris. Што характэрна, пасля дзеянняў з боку GitHub не паступіла якія-небудзь тлумачэнняў або апавяшчэнняў, не лічачы напамінкі аб неабходнасці аплаты і спроб спісаць грошы.

З моманту мінулай навіны пра рэліз libmdbx v0.11.3, апроч аднаўлення пасля дзеянняў GitHub, варта адзначыць наступныя дапрацоўкі і выпраўленні:

  • Дададзены абыход выяўленага эфекту/дэфекту некагерэнтнасці ў аб'яднаным кэшы старонак і буфераў у ядры Linux. У сістэмах дзе кэш старонак і буфераў сапраўды аб'яднаны, ядру няма сэнсу марнаваць памяць пад дзве копіі дадзеных пры запісе ва ўжо адлюстраваны ў памяць файл. Таму якія запісваюцца дадзеныя становяцца бачнымі праз адлюстраванне ў памяці да завяршэння сістэмнага выкліку write(), нават калі дадзеныя яшчэ не запісаныя на дыск.

    Сумарна іншыя паводзіны не рацыянальна, бо пры адкладзеным зліцці ўсё роўна давядзецца захопліваць блакіроўкі для спісаў старонак, капіяваць дадзеныя або карэктаваць PTE. Таму сакрэтнае правіла кагерэнтнасці дзейнічала з 1989 гады, калі ў SRV4 з'явіўся unified buffer cache. Таму выяўленне дзіўных збояў у нагружаных сцэнарах эксплуатацыі libmdbx запатрабавала вялікай працы. Спачатку па ўзнаўленні праблемы, потым па верыфікацыі гіпотэз і праверцы дапрацовак.

    Цяпер можна ўпэўнена сказаць што праблема дакладна ідэнтыфікаваная, лакалізаваная і надзейна ўхіленая, нягледзячы на ​​ўсю складанасць і спецыфічнасць сцэнара прайгравання. Дадаткова праца механізму абыходу была пацверджана адным з распрацоўнікаў Erigon (Ethereum), у яго выпадку на адладкавай зборцы спрацоўванне абароны выяўлялася ў выглядзе рэгрэсу з-за лішняй assert-праверкі.

    Варта адзначыць, што ў кантэксце шырокага ўжывання libmdbx у працоўных праектах, прынцыпова важней забеспячэнне надзейнай працы, а не высвятленне "памылка гэта ці асаблівасць" і ці можна спадзявацца на такую ​​кагерэнтнасць, тым больш не пошук чыннікаў некагерэнтнасці ўсярэдзіне ядраў Linux. Таму тут гаворка аб ухіленні праблемы, якая магла закранаць карыстачоў.

  • Ухілены рэгрэс узнікнення памылкі EXDEV (Cross-device link) пры гарачым капіяванні БД без кампафікацыі на іншую файлавую сістэму, як праз API, так і ўтылітай mdbx_copy.
  • Kris Zyp рэалізаваў падтрымку libmdbx у Deno. Kai Wetlesen аформіў пакетаванне RPM для Fedora. David Bouyssié рэалізаваў прывязкі для Scala.
  • Папраўлена апрацоўка значэння, якое задаецца опцыяй MDBX_opt_rp_augment_limit пры апрацоўцы велізарных транзакцый у вялікіх БД. Раней з-за памылкі маглі праводзіцца лішнія дзеянні, што часам адбівалася на прадукцыйнасці ў рэалізацыях Ethereum (Erigon / Akula / Silkworm) і праектах Binance Chain.
  • Выпраўлена маса недахопаў, у тым ліку ў C++ API. Ухілена шмат праблем са зборкай у рэдкіх і экзатычных канфігурацыях. Поўны пералік усіх значных дапрацовак даступны ў ChangeLog.
  • Сумарна занесена 185 змен у 89 файлаў, дададзена ≈3300 радкоў, выдалена ≈4100. Выдалена больш у асноўным з-за чысткі ад ужо бескарысных тэхналагічных файлаў злучаных з GitHub і залежных сэрвісаў.

Гістарычна libmdbx з'яўляецца глыбокай перапрацоўкай СКБД LMDB і пераўзыходзіць свайго прабацьку па надзейнасці, набору магчымасцяў і прадукцыйнасці. У параўнанні з LMDB, у libmdbx вялікая ўвага надаецца якасці кода, стабільнай працы API, тэставанню і аўтаматычным праверкам. Пастаўляецца ўтыліта праверкі цэласнасці структуры БД з некаторымі магчымасцямі аднаўлення.

Тэхналагічна libmdbx прапануе ACID, строгую серыялізацыю змен і неблакавальнае чытанне з лінейным маштабаваннем па ядрах ЦПУ. Падтрымліваецца аўтакампактыфікацыя, аўтаматычнае кіраванне памерам БД, ацэнка аб'ёму выбарак па дыяпазонах (range query estimation). З 2016 года праект фінансуецца кампаніяй Positive Technologies і з 2017 года выкарыстоўваецца ў яе прадуктах.

Для libmdbx прапануецца развітае C++ API, а таксама падтрымліваюцца энтузіястамі прывязкі да моў Rust, Haskell, Python, NodeJS, Ruby, Go, Nim, Deno, Scala.

Крыніца: opennet.ru

Дадаць каментар