SQLite๋ฅผ ์คํ ๋ฆฌ์ง ์์ง์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ก ๋๊ธฐํ๋ ์คํ ๋ฆฌ์ง์์ ํด๋ฌ์คํฐ ์์ ์ ๊ตฌ์ฑํ ์ ์๋ ๋ถ์ฐ DBMS rqlite 7.0์ด ์ถ์๋์์ต๋๋ค. 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์์ ์คํ๋๋ ๋ ๊ฑฐ์ ๊ฒ์ ๋ชจ๋ ์๋น์ค๊ฐ ์ค๋จ๋์์ต๋๋ค.
- CLI ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ๋ฒ์ ์ฌ๋ฌ ํธ์คํธ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ๋ค์ ํธ์คํธ์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
- rqlited ๋ช ๋ น์ค ์ธ์๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๋ ์ฝ๋๊ฐ ์ฌ์์ ๋์์ต๋๋ค.
- ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ protobuf ํจํค์ง๊ฐ ์ค๋จ๋์์ต๋๋ค.
- Raft ํ๋กํ ์ฝ ๊ตฌํ์ ์ฌ์ฉ๋๋ BoltDB ์คํ ๋ฆฌ์ง๋ etcd ํ๋ก์ ํธ์ ํฌํฌ์ธ bbolt๋ก ๋์ฒด๋์์ต๋๋ค.
์ถ์ฒ : opennet.ru