๋ถ์ฐ DBMS rqlite 7.0์ด ์ถ์๋์์ต๋๋ค. SQLite๋ฅผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ์ฌ์ฉํ์ฌ ๋๊ธฐํ๋ ์คํ ๋ฆฌ์ง ํด๋ฌ์คํฐ์ ์์ ์ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. rqlite์ ์ฃผ์ ๊ธฐ๋ฅ ์ค ํ๋๋ etcd ๋ฐ Consul๊ณผ ์ ์ฌํ ๋ถ์ฐ ์ฅ์ ํ์ฉ ์คํ ๋ฆฌ์ง๋ฅผ ์ฝ๊ฒ ์ค์น, ๋ฐฐํฌ ๋ฐ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๋จ, ํค/๊ฐ ํ์ ๋์ ๊ด๊ณํ ๋ชจ๋ธ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ Go ์ธ์ด๋ก ์์ฑ๋์์ผ๋ฉฐ MIT ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
๋ชจ๋ ๋ ธ๋์ ๋๊ธฐํ๋ฅผ ์ ์งํ๊ธฐ ์ํด Raft ํฉ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค. Rqlite๋ ๊ธฐ์กด SQLite ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ go-sqlite3 ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๊ทธ ์์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ค๋ฅธ ๋ ธ๋๋ก ๋ณต์ ๋ฅผ ์ํํ๋ฉฐ, ์ ๋ ๋ ธ๋ ์ ์ถ์ ๋ํ ํฉ์ ๋ฌ์ฑ์ ๋ชจ๋ํฐ๋งํ๋ ๊ณ์ธต์ด ์คํ๋ฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ ๋ฆฌ๋๋ก ์ ํ๋ ๋ ธ๋์์๋ง ์ํํ ์ ์์ง๋ง, ์ฐ๊ธฐ ์์ ์ด ํฌํจ๋ ์ฐ๊ฒฐ์ ํด๋ฌ์คํฐ์ ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌ๋ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๋ฆฌ๋์ ์ฃผ์๋ฅผ ๋ฐํํ์ฌ ์์ฒญ์ ๋ฐ๋ณตํฉ๋๋ค(๋ค์ ๋ฒ์ ์์๋ ๋ฆฌ๋๋ก์ ์๋ ์์ฒญ ์ ๋ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์์ ์ ๋๋ค). ์ฃผ์ ์ด์ ์ ๋ด๊ฒฐํจ์ฑ์ด๋ฏ๋ก DBMS๋ ์ฝ๊ธฐ ์์ ์ ์ํด์๋ง ํ์ฅ๋๋ฉฐ, ์ฐ๊ธฐ ์์ ์ ๋ณ๋ชฉ ํ์์ ๋๋ค. ๋จ์ผ ๋ ธ๋์์ rqlite ํด๋ฌ์คํฐ๋ฅผ ์คํํ ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ฉด ๋ด๊ฒฐํจ์ฑ์ ์ ๊ณตํ์ง ์๊ณ ๋ HTTP๋ฅผ ํตํด SQLite์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ฐ ๋ ธ๋์ SQLite ๋ฐ์ดํฐ๋ ํ์ผ์ด ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. Raft ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๊ณ์ธต ์์ค์์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ ๋ชจ๋ SQLite ๋ช ๋ น์ ๋ก๊ทธ๊ฐ ์ ์ง๋ฉ๋๋ค. ์ด ๋ก๊ทธ๋ ๋ณต์ (๋ค๋ฅธ ๋ ธ๋์์ ์ฟผ๋ฆฌ๋ฅผ ์ฌํํ๋ ์์ค์ ๋ณต์ ), ์ ๋ ธ๋ ์์ ์ ๋๋ ์ฐ๊ฒฐ ๋๊น ํ ๋ณต๊ตฌ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ก๊ทธ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ์๋ ํจํน์ด ์ฌ์ฉ๋๋๋ฐ, ์ด ํจํน์ ์ง์ ๋ ๊ฐ์์ ๋ณ๊ฒฝ ํ ์์๋์ด ์ค๋ ์ท์ ์์ ํ๊ณ , ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ก๊ทธ๊ฐ ์์๋ฉ๋๋ค(๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ ์ค๋ ์ท + ๋์ ๋ ๋ณ๊ฒฝ ๋ก๊ทธ์ ๋์ผํฉ๋๋ค).
rqlite์ ํน์ง:
- ๋ณ๋์ SQLite ์ค์น๊ฐ ํ์ ์์ด ํด๋ฌ์คํฐ๋ฅผ ์ฝ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
- ์ ์ํ๊ฒ ๋ณต์ ๋ SQL ์คํ ๋ฆฌ์ง๋ฅผ ํ๋ณดํ ์ ์๋ ๊ธฐ๋ฅ
- ์์ฐ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ค๋น๊ฐ ๋์์ต๋๋ค(์์ฐ ๋ฑ๊ธ).
- HTTP(S) API๋ฅผ ํตํด ์ผ๊ด ๋ชจ๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ ํด๋ฌ์คํฐ์ ์ ๋ ๋ ธ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ๋ํ ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ๋ช ๋ น์ค ์ธํฐํ์ด์ค์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๊ณต๋ฉ๋๋ค.
- ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๊ฐ์งํ๊ณ ํด๋ฌ์คํฐ๋ฅผ ๋์ ์ผ๋ก ์์ฑํ ์ ์๋ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ๋ ธ๋ ๊ฐ ๋ฐ์ดํฐ ๊ตํ ์ํธํ ์ง์
- ์ฝ์ ๋ ๋ฐ์ดํฐ ๊ด๋ จ์ฑ ๋ฐ ์ผ๊ด์ฑ ๊ฒ์ฌ ์์ค์ ์ฌ์ฉ์ ์ ์ํ ์ ์๋ ๊ธฐ๋ฅ.
- ํฉ์ ๊ฒฐ์ ์ ์ฐธ์ฌํ์ง ์๊ณ ์ฝ๊ธฐ ์์ ์ ์ํ ํด๋ฌ์คํฐ์ ํ์ฅ์ฑ์ ๋์ด๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฝ๊ธฐ ์ ์ฉ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ์ ํ์ ๊ธฐ๋ฅ์ ๋๋ค.
- ๋จ์ผ ์์ฒญ์์ ๋ช ๋ น์ ๊ฒฐํฉํ๋ ๋ฐฉ์์ ๊ธฐ๋ณธ ํธ๋์ญ์ ํ์ ์ง์(BEGIN, COMMIT, ROLLBACK, SAVEPOINT, RELEASE ๊ธฐ๋ฐ ํธ๋์ญ์ ์ ์ง์๋์ง ์์).
- ํซ ๋ฐฑ์ ์์ฑ ์ง์
์ ๋ฆด๋ฆฌ์ค์์:
- Consul ๋ฐ etcd์ ๊ฐ์ ๋ถ์ฐ ์คํ ๋ฆฌ์ง์์ ์คํ๋ ์ ์๋ ์๋ก์ด ๋ ธ๋ ๊ฒ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ rqlite ํด๋ฌ์คํฐ๋ง์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ์๋น์ค๋ฅผ ํตํด rqlite ๋ ธ๋๋ ์๋์ผ๋ก ์๋ก๋ฅผ ์ฐพ์ ์ ์์ผ๋ฉฐ, ๊ด๋ฆฌ์๋ ์๋ก ๋ค๋ฅธ ์๋ฒ์ ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์คํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์๋ฒConsul ๋๋ etcd ํด๋ฌ์คํฐ์ ๊ณต์ ์ฃผ์(์: "example.com:8500")๋ฅผ ์ง์ ํ๋ฉด ๋ ธ๋๊ฐ ์๋์ผ๋ก ํด๋ฌ์คํฐ์ ์ฐธ์ฌํ๊ฒ ๋ฉ๋๋ค. ๋ฆฌ๋ ๋ ธ๋๋ Consul ๋๋ etcd ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋ ์ฃผ์ ์ ๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ฏ๋ก, ๋ค๋ฅธ ๋ ธ๋๋ฅผ ์ฌ๊ตฌ์ฑํ์ง ์๊ณ ๋ ๋์ค์ ๋ฆฌ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ, ๋ฆฌ๋๊ฐ ๋ณ๊ฒฝ๋ ํ์๋ ์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. AWS Lambda ๊ธฐ๋ฐ์ ๊ธฐ์กด ๋ ธ๋ ๊ฒ์ ์๋น์ค(Discovery ๋ชจ๋)๋ ๋ ์ด์ ์ง์๋์ง ์์ต๋๋ค.
- CLI ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํธ์คํธ๋ฅผ ๋์์ ์ง์ ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์ ํธ์คํธ์ ์ ์ํฉ๋๋ค.
- rqlited ๋ช ๋ น์ค ์ธ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ๋ค์ ์์ ํ์ต๋๋ค.
- ๋ ์ด์ ์ง์๋์ง ์๋ protobuf ํจํค์ง๊ฐ ๋ ์ด์ ์ง์๋์ง ์์ต๋๋ค.
- Raft ํ๋กํ ์ฝ ๊ตฌํ์ ์ฌ์ฉ๋ BoltDB ์คํ ๋ฆฌ์ง๋ etcd ํ๋ก์ ํธ์ ํฌํฌ์ธ bbolt๋ก ๋์ฒด๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru
