SQLite๋ฅผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ์ฌ์ฉํ๊ณ ๋๊ธฐํ๋ ์คํ ๋ฆฌ์ง ํด๋ฌ์คํฐ์ ์์ ์ ๊ตฌ์ฑํ ์ ์๋ ๋ถ์ฐ DBMS rqlite 6.0์ ๋ฆด๋ฆฌ์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค. rqlite์ ๊ธฐ๋ฅ ์ค ํ๋๋ etcd ๋ฐ Consul๊ณผ ๋ค์ ์ ์ฌํ์ง๋ง ํค/๊ฐ ํ์ ๋์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ถ์ฐ ๋ด๊ฒฐํจ์ฑ ์คํ ๋ฆฌ์ง์ ์ค์น, ๋ฐฐํฌ ๋ฐ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
๋ชจ๋ ๋ ธ๋๋ฅผ ๋๊ธฐํ๋ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด Raft ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. Rqlite๋ ์๋ณธ SQLite ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ค go-sqlite3 ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ทธ ์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ๋ค๋ฅธ ๋ ธ๋๋ก ๋ณต์ ๋ฅผ ์ํํ๋ฉฐ ์ ๋ ๋ ธ๋ ์ ํ์ ๋ํ ํฉ์ ๋ฌ์ฑ์ ๋ชจ๋ํฐ๋งํ๋ ๋ ์ด์ด๊ฐ ์์๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ ๋ฆฌ๋๋ก ์ ํ๋ ๋ ธ๋์ ์ํด์๋ง ์ด๋ฃจ์ด์ง ์ ์์ง๋ง ์ฐ๊ธฐ ์์ ์ด ํฌํจ๋ ์ฐ๊ฒฐ์ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ์ก๋ ์๋ ์์ผ๋ฉฐ, ์ด๋ ์์ฒญ์ ๋ฐ๋ณตํ๊ธฐ ์ํด ๋ฆฌ๋์ ์ฃผ์๋ฅผ ๋ฐํํฉ๋๋ค(๋ค์ ๋ฒ์ ์์๋ ๋ฆฌ๋์๊ฒ ์์ฒญ ์๋ ์ ๋ฌ์ ์ถ๊ฐํ๊ฒ ๋ค๊ณ ์ฝ์ํฉ๋๋ค). ๋ด๊ฒฐํจ์ฑ์ ์ค์ ์ ๋๋ฏ๋ก DBMS๋ ์ฝ๊ธฐ ์์ ์ผ๋ก๋ง ํ์ฅ๋๊ณ ์ฐ๊ธฐ ์์ ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํฉ๋๋ค. ๋จ์ผ ๋ ธ๋์์ rqlite ํด๋ฌ์คํฐ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ ์ด ์๋ฃจ์ ์ ์ฌ์ฉํ๋ฉด ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํ์ง ์๊ณ HTTP๋ฅผ ํตํด SQLite์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
๊ฐ ๋ ธ๋์ SQLite ๋ฐ์ดํฐ๋ ํ์ผ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. Raft ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๋ ์ด์ด ์์ค์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ ์ด๋ํ๋ ๋ชจ๋ SQLite ๋ช ๋ น์ ๋ก๊ทธ๊ฐ ์ ์ง๋ฉ๋๋ค. ์ด ๋ก๊ทธ๋ ๋ณต์ (๋ค๋ฅธ ๋ ธ๋์์ ์์ฒญ์ ์ฌ์์ฐํ๋ ์์ค์ ๋ณต์ ), ์ ๋ ธ๋ ์์ ๋๋ ์ฐ๊ฒฐ ๋๊น ๋ณต๊ตฌ ์ค์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ก๊ทธ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์๋ ํจํค์ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจํค์ง์ ์ง์ ๋ ์์ ๋ณ๊ฒฝ ํ์ ์์๋์ด ๋์คํฌ์ ์ค๋ ์ท์ด ๊ณ ์ ๋๊ณ ์ ๋ก๊ทธ๊ฐ ์ ์ง๋๊ธฐ ์์ํฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ). ์ค๋ ์ท + ๋์ ๋ณ๊ฒฝ ๋ก๊ทธ์ ๋์ผํฉ๋๋ค.)
rqlite์ ํน์ง:
- ๋ณ๋์ SQLite ์ค์น ์์ด ํด๋ฌ์คํฐ ๋ฐฐํฌ๊ฐ ์ฝ์ต๋๋ค.
- ๋ณต์ ๋ SQL ์คํ ๋ฆฌ์ง๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ณดํ๋ ๊ธฐ๋ฅ.
- ์์ ํ๋ก์ ํธ์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค(ํ๋ก๋์ ๋ฑ๊ธ).
- ์ผ๊ด ๋ชจ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํด๋ฌ์คํฐ์ ์ ๋ ๋ ธ๋๋ฅผ ๊ฒฐ์ ํ ์ ์๋ HTTP(S) API๊ฐ ์์ต๋๋ค. ๋ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ SQLite์ฉ์ผ๋ก ๊ตฌ์ถ๋ ๋ค์ํ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์๋ณํ๋ ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋ฌ์คํฐ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค.
- ๋ ธ๋ ๊ฐ ๋ฐ์ดํฐ ๊ตํ ์ํธํ๋ฅผ ์ง์ํฉ๋๋ค.
- ์ฝ์ ๋ ๋ฐ์ดํฐ์ ๊ด๋ จ์ฑ๊ณผ ์ผ๊ด์ฑ์ ํ์ธํ๋ ์์ค์ ๊ตฌ์ฑํ๋ ๊ธฐ๋ฅ์ ๋๋ค.
- ํฉ์ ๊ฒฐ์ ์ ์ฐธ์ฌํ์ง ์๊ณ ์ฝ๊ธฐ ์์ ์ ์ํ ํด๋ฌ์คํฐ์ ํ์ฅ์ฑ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฝ๊ธฐ ์ ์ฉ ๋ชจ๋์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์ ํ์ ๊ธฐ๋ฅ์ ๋๋ค.
- ํ๋์ ์์ฒญ์ ๋ช ๋ น์ ๊ฒฐํฉํ์ฌ ๊ณ ์ ํ ํํ์ ํธ๋์ญ์ ์ ์ง์ํฉ๋๋ค(BEGIN, COMMIT, ROLLBACK, SAVEPOINT ๋ฐ RELEASE ๊ธฐ๋ฐ ํธ๋์ญ์ ์ ์ง์๋์ง ์์).
- ํซ ๋ฐฑ์ ์์ฑ์ ์ง์ํฉ๋๋ค.
์ ๋ฆด๋ฆฌ์ค์๋ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ฒญ์ ์ฌ๋ฐ๋ฅธ ํด๋ฌ์คํฐ ๋ ธ๋๋ก ๋ผ์ฐํ ํ๋ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ํ์ฌ ํด๋ฌ์คํฐ ์์ ์ฑ์ ๋์ด๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ค์ํ ์ํคํ ์ฒ ๋ณ๊ฒฝ ์ฌํญ์ด ๋์ ๋์์ต๋๋ค. rqlite ๋ ธ๋๋ ์ด์ Raft ํ๋กํ ์ฝ์ ์ํด ๋ ธ๋ ๊ฐ์ ์ค์ ๋ TCP ์ฐ๊ฒฐ์ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ ผ๋ฆฌ์ ์ฐ๊ฒฐ์ ๋ค์คํํ ์ ์์ต๋๋ค. ์์ฒญ์ ๋ฆฌ๋ ๊ถํ์ด ํ์ํ์ง๋ง ๋ณด์กฐ ๋ ธ๋๋ก ์ ์ก๋๋ ๊ฒฝ์ฐ ๋ณด์กฐ ๋ ธ๋๋ Raft ํฉ์ ๊ณ์ฐ์ ์ํํ์ง ์๊ณ ๋ ๋ฆฌ๋์ ์ฃผ์๋ฅผ ๊ฒฐ์ ํ๊ณ ์ด๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ ์ ์์ต๋๋ค.
๋ํ ์ด๋ฌํ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ๋ณ๋์ ๋ฉํ๋ฐ์ดํฐ ๋๊ธฐํ ๊ตฌ์ฑ ์์๊ฐ ํ์ ์๊ณ Raft ์ํ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ณ๋๋ก ์ฒ๋ฆฌํ ํ์๊ฐ ์์ด์ก์ต๋๋ค. ์ด์ ๋ณด์กฐ ๋
ธ๋๋ ๋ฆฌ๋ ๋
ธ๋์ ์ฃผ์๋ฅผ ์ฐพ์์ผ ํ๋ ๊ฒฝ์ฐ์๋ง ๋ฆฌ๋ ๋
ธ๋์ ์์ฒญ์ ๋ณด๋
๋๋ค. API๋ ํด๋ฌ์คํฐ์ ์๋ ๋ค๋ฅธ ๋
ธ๋์ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ป๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ".sysdump" ๋ช
๋ น์ด ๋ช
๋ น์ค ์ธํฐํ์ด์ค์ ์ถ๊ฐ๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru