Paglabas ng rqlite 6.0, isang ipinamahagi na fault-tolerant na DBMS batay sa SQLite

Ang paglabas ng ipinamahagi na DBMS rqlite 6.0 ay ipinakita, na gumagamit ng SQLite bilang isang storage engine at nagbibigay-daan sa iyo upang ayusin ang gawain ng isang kumpol ng mga naka-synchronize na imbakan. Ang isa sa mga tampok ng rqlite ay ang kadalian ng pag-install, pag-deploy at pagpapanatili ng isang distributed fault-tolerant na storage, medyo katulad ng etcd at Consul, ngunit gumagamit ng relational data model sa halip na isang key/value format. Ang code ng proyekto ay nakasulat sa Go at ipinamahagi sa ilalim ng lisensya ng MIT.

Upang mapanatili ang lahat ng mga node sa isang naka-synchronize na estado, ang Raft consensus algorithm ay ginagamit. Ginagamit ng Rqlite ang orihinal na library ng SQLite at ang karaniwang driver ng go-sqlite3, kung saan inilunsad ang isang layer na nagpoproseso ng mga kahilingan ng kliyente, nagsasagawa ng pagtitiklop sa iba pang mga node at sinusubaybayan ang pagkamit ng consensus sa pagpili ng isang nangungunang node.

Ang mga pagbabago sa database ay maaari lamang gawin ng node na napili bilang pinuno, ngunit ang mga koneksyon na may mga operasyon sa pagsulat ay maaari ding ipadala sa iba pang mga node sa cluster, na magbabalik sa address ng pinuno upang ulitin ang kahilingan (sa susunod na bersyon ay pangako na magdagdag ng awtomatikong pagpapasa ng mga kahilingan sa pinuno). Ang pangunahing diin ay sa fault tolerance, kaya ang DBMS ay sumusukat lamang sa read operations, at write operations ang bottleneck. Posibleng magpatakbo ng rqlite cluster mula sa iisang node at ang solusyong ito ay magagamit para magbigay ng access sa SQLite sa HTTP nang hindi nagbibigay ng fault tolerance.

Ang data ng SQLite sa bawat node ay hindi nakaimbak sa isang file, ngunit sa memorya. Sa antas ng layer kasama ang pagpapatupad ng Raft protocol, isang log ng lahat ng SQLite command na humahantong sa mga pagbabago sa database ay pinananatili. Ginagamit ang log na ito sa panahon ng pagtitiklop (pagtitiklop sa antas ng pagpaparami ng mga kahilingan sa iba pang mga node), pagsisimula ng bagong node, o pagbawi mula sa pagkawala ng koneksyon. Upang bawasan ang laki ng log, ginagamit ang awtomatikong packaging, na magsisimula pagkatapos ng isang tinukoy na bilang ng mga pagbabago at humahantong sa isang snapshot na naayos sa disk, na may kaugnayan sa kung saan ang isang bagong log ay nagsimulang panatilihin (ang estado ng database sa memorya. ay kapareho ng snapshot + ang naipon na log ng pagbabago).

Mga tampok ng rqlite:

  • Madaling mag-deploy ng cluster, nang hindi nangangailangan ng hiwalay na pag-install ng SQLite.
  • Kakayahang mabilis na makakuha ng replicated na imbakan ng SQL.
  • Handa nang gamitin sa mga gumaganang proyekto (Production-grade).
  • Ang pagkakaroon ng HTTP(S) API na nagbibigay-daan sa iyong mag-update ng data sa batch mode at matukoy ang nangungunang node ng cluster. Nagbibigay din ito ng interface ng command line at ang kakayahang gumamit ng iba't ibang mga library ng kliyente na binuo para sa SQLite.
  • Availability ng isang serbisyo para sa pagtukoy ng iba pang mga node, na nagbibigay-daan sa iyong lumikha ng mga cluster nang dynamic.
  • Suporta para sa pag-encrypt ng pagpapalitan ng data sa pagitan ng mga node.
  • Kakayahang i-configure ang antas ng pagsuri sa kaugnayan at pagkakapare-pareho ng data kapag nagbabasa.
  • Opsyonal na kakayahang magkonekta ng mga node sa read-only na mode, na hindi nakikilahok sa pagtukoy ng consensus at ginagamit upang pataasin ang scalability ng cluster para sa mga read operation.
  • Suporta para sa sarili mong paraan ng mga transaksyon batay sa pagsasama-sama ng mga command sa isang kahilingan (hindi sinusuportahan ang mga transaksyon batay sa BEGIN, COMMIT, ROLLBACK, SAVEPOINT at RELEASE).
  • Suporta para sa paglikha ng mga maiinit na backup.

Ang bagong release ay nagpapakilala ng mga makabuluhang pagbabago sa arkitektura na naglalayong pataasin ang pagiging maaasahan ng cluster sa pamamagitan ng pagpapabuti sa proseso ng pagruruta ng mga kahilingan sa pagbasa at pagsulat sa mga tamang cluster node. Ang mga rqlite node ay maaari na ngayong multiplex ng maraming lohikal na koneksyon sa kanilang mga sarili gamit ang mga TCP na koneksyon na itinatag sa pagitan ng mga node ng Raft protocol. Kung ang isang kahilingan ay nangangailangan ng awtoridad ng pinuno ngunit ipinadala sa isang pangalawang node, maaaring matukoy ng pangalawang node ang address ng pinuno at ipasa ito sa kliyente nang hindi nagsasagawa ng mga kalkulasyon ng Raft consensus.

Inalis din ng pagbabago ang pangangailangan para sa isang hiwalay na bahagi ng pag-synchronize ng metadata at inalis ang hiwalay na pangangasiwa ng estado ng Raft at metadata. Ang mga pangalawang node ay nagpapadala na ngayon ng mga kahilingan sa node ng pinuno kung kinakailangan lamang, kapag kailangan nilang malaman ang address ng node ng pinuno. Ang API ay nagbibigay ng kakayahang makakuha ng impormasyon tungkol sa estado ng iba pang mga node sa cluster. Ang command na ".sysdump" ay naidagdag sa interface ng command line.

Pinagmulan: opennet.ru

Magdagdag ng komento