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

Ang paglabas ng ipinamahagi na DBMS rqlite 7.0 ay naganap, na gumagamit ng SQLite bilang isang storage engine at nagbibigay-daan sa iyo upang ayusin ang gawain ng isang kumpol mula sa mga storage na naka-synchronize sa isa't isa. Ang isa sa mga tampok ng rqlite ay ang kadalian ng pag-install, pag-deploy at pagpapanatili ng isang distributed fault-tolerant 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 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, ang 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), kapag nagsisimula ng bagong node, o para makabawi mula sa pagkawala ng koneksyon. Upang bawasan ang laki ng log, ginagamit ang awtomatikong pag-iimpake, na magsisimula pagkatapos ng isang tinukoy na bilang ng mga pagbabago at humahantong sa pag-aayos ng isang snapshot, na may kaugnayan sa kung saan ang isang bagong log ay nagsisimulang mapanatili (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 proyekto ng produksyon (grade-produksyon).
  • 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. Ang interface ng command line at mga library ng kliyente para sa iba't ibang mga programming language ay ibinibigay din.
  • 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.

Sa bagong release:

  • Nagdagdag ng suporta para sa awtomatikong pag-cluster ng rqlite gamit ang isang bagong serbisyo sa pag-detect ng node na maaaring gumana batay sa Consul at etcd na ibinahagi na storage. Ang serbisyo ay nagbibigay-daan sa mga rqlite node na awtomatikong mahanap ang isa't isa - kailangan lang ng administrator na maglunsad ng ilang node sa iba't ibang server, na tumutukoy sa karaniwang Consul o etcd cluster address (halimbawa, "example.com:8500"), at ang mga node ay awtomatikong magiging pinagsama sa isang kumpol. Ang nangungunang node ay pana-panahong nag-a-update ng impormasyon tungkol sa address nito sa imbakan ng Consul o etcd, na nagbibigay-daan sa iyong palitan ang pinuno nang hindi na kailangang muling i-configure ang iba pang mga node, pati na rin magdagdag ng mga bagong node kahit na pagkatapos na baguhin ang pinuno. Ang legacy Discovery mode service na tumatakbo sa AWS Lambda ay hindi na ipinagpatuloy.
  • Ang CLI interface ay nagbibigay-daan sa pagtukoy ng ilang mga host nang sabay-sabay - kung ang unang node ay hindi magagamit, ang susunod na mga host ay makikipag-ugnay.
  • Ginawa muli ang code para sa pag-parse ng rqlited command line arguments.
  • Ang hindi na ginagamit na protobuf package ay hindi na ipinagpatuloy.
  • Ang imbakan ng BoltDB na ginamit sa pagpapatupad ng Raft protocol ay pinalitan ng bbolt, isang tinidor mula sa etcd project.

Pinagmulan: opennet.ru

Magdagdag ng komento