Bloom filter
Published at 2024. 6. 17.
7 min read
Table of Contents
Bloom filter ๋?
์ผ๋ง ์ ์, ์๋ฃ๊ตฌ์กฐ ๊ด๋ จ ๊ณต๋ถ๋ฅผ ํ๋ค๊ฐ bloom filter์ ๋ํด์ ์๊ฒ ๋์๋ค.
์กฐ๊ธ ๋ ๊ณต๋ถํด๋ณด๋ ํ๋ฅ ์ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ํ๋๋ฐ ์๋ฃ๊ตฌ์กฐ๋ฉด ์๋ฃ๊ตฌ์กฐ์ง โํ๋ฅ ์ โ ์๋ฃ๊ตฌ์กฐ๋ ๋ ๋ญ์ง? ์ถ์ด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์๋ค.
Wikipedia์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ํ์๋ค.
A Bloom filter is a space-efficient probabilistic data structure, conceived by Burton Howard Bloom in 1970, that is used to test whether an element is a member of a set. False positive matches are possible, but false negatives are not โ in other words, a query returns either โpossibly in setโ or โdefinitely not in setโ. Elements can be added to the set, but not removed (though this can be addressed with the counting Bloom filter variant); the more items added, the larger the probability of false positives.
์์ฝํด๋ณด์๋ฉด Burton Howard Bloom
์ด๋ผ๋ ๋ถ์ด ๊ณ ์ํ๊ณ , ์ด๋ค set์ ํน์ ์์๊ฐ ํฌํจ๋๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋(์ด๊ฑธ membership query๋ผ๊ณ ๋ถ๋ฆ)๋ฐ์ ์ฌ์ฉ๋๋ค๊ณ ํ๋ค.
๋ช๊ฐ์ง ์ฃผ์ํ ํน์ง์ด๋ผ๊ณ ํ๋ค๋ฉด,
- ๋ชจ๋ ์์๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ์ง ์๊ณ ๋ membership test๋ฅผ ํ ์ ์๋ค.
- ์์๋ฅผ bloom filter์ ๋ํ ์ ์์ด๋, ๋บ ์ ์๋ค.
- ์ด๋ค ์์๊ฐ ์งํฉ์ ์ํ๋ค๋ ๊ฒ์ ํ์คํ๊ฒ ์ ์ ์์ง๋ง, ์ํ์ง ์๋๋ค๋ ๊ฒ์ ํ์คํ๊ฒ ์ ์ ์๋ค. ์ฆ, false positive๋ ์กด์ฌํ๋ false negative๋ ์กด์ฌํ์ง ์๋๋ค.
์ด ์ ๋๊ฐ ์๋๊น ํ๋ค.
โํ๋ฅ ์ โ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ์ด๋ฆ ๋ถ์ ๊ฒ์ ์๋ง false positive๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด์ง ์์๊น ์๊ฐํ๋ค. ํน์ ์งํฉ์ ์ํ๋ ๊ฒ์ ํ์คํ ์ ์ ์๋ค๋ฉด โํ๋ฅ ์ โ ์ด ์๋๋ผ โ๊ฒฐ์ ์ โ ์ผ ํ ๋๊น?
bloom filter์ ๊ดํ ์์ธํ ์ค๋ช
์ Naver D2 ๋ธ๋ก๊ทธ์ ์ ์ ๋ฆฌ๋์ด ์์ด์ ๋งํฌ๋ก ๊ฐ์ํด๋๋ค.
Hash function์ ๊ดํ ๊ธฐ๋ณธ์ ์ธ ์ดํด์ ์ด๊ณผ ๊ณ ๋ฑ์ํ ์ ๋ ์๊ณ ์์ผ๋ฉด ์ดํดํ๋ ๋ฐ์ ํฐ ์ด๋ ค์์ ์๋ ์ํฐํด์ด๋ค.
์ด๋์ ์ฐ์ด๊ณ ์๋์ง?
ํ๋ฅ ์ ์๋ฃ๊ตฌ์กฐ๋ผ๋ ๊ฐ๋ ์ด ์ฌ๋ฏธ์๊ธฐ๋ ํด๋ ์ค์ ์์ง๋์ด๋ง ํ๋์์ ์ฐ์์ด ์๋ค๋ฉด ๊ณต๋ถํ๋ ์๋ฏธ๊ฐ ๋ณ๋ก ์์์ ํ ์ง๋ง, ์ด๋ฏธ ์ฌ๋ฌ ๋๋ฉ์ธ์์ ํ๋ฐํ ์ฌ์ฉ๋๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์๋ค.
์ค๋ฌด์์ ํํ ๋ณผ ์ ์๋ Redis์์๋ ์ฌ์ฉํ๊ณ ์๊ณ , Kafka ๊ฐ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ํด์์๋ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ๋ค.
NHN Cloud๋ผ๋ ์กฐ์ง์์๋ bloom filter ํ์ฉ๊ธฐ๋ฅผ ํฌ์คํ
์ผ๋ก ๋ง๋ค์ด ๋์๋ค.
๋๋ ์๋ฌด๋๋ ํ๋ก ํธ์๋ ์์ง๋์ด๋ค ๋ณด๋ ์ฌ๋ฌ use-case๋ค ์ค์์ Chrome Browser ์์์ use-case์ ๊ด์ฌ์ด ๊ฐ๋๋ฐ, ์ด use-case์ ๊ดํด ์กฐ๊ธ ๋ ๊น๊ฒ ์ดํด๋ณด๊ณ ๊ธ์ ๋ง์น ๊น ํ๋ค.
์ฐ์ , ๋ด๊ฐ Chrome ๊ฐ๋ฐ์๋ผ๊ณ ์๊ฐํด๋ณด์. Chrome์ Browser ์์ฅ์์ 60%๊ฐ ๋๋ ์ ์ ์จ์ ๊ธฐ๋กํ๊ณ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ DAU๋ ๋ง๋ ์๋๊ฒ ๋์ ๊ฒ์ด๋ค. ์ด๋ฐ ์ํฉ์์ Chrome์ ์ ์ฑ URL์ filtering ํ๋ ๊ธฐ๋ฅ์ ํ์ฌํ๋ ค๋ ์๋๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํด๋ณด์(์ด๋ฏธ ์๋ ๊ธฐ๋ฅ์ด์ง๋ง).
๊ฐ์ฅ ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ solution์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ด๋ค. ์ ์ ๊ฐ ์ฃผ์์ฐฝ์ URL์ ์
๋ ฅํ๋ฉด ํด๋น URL์ด ์
์ฑ URL์ธ์ง ์๋์ง๋ฅผ ํ๋จํ๋ HTTP request๋ฅผ Chrome ์๋ฒ์ ๋ณด๋ด์ ํ์ธํ๋ ๋ฐฉ๋ฒ.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์กฐ๊ธ๋ง ์๊ฐํด๋ด๋ ๊ต์ฅํ ๋นํจ์จ์ ๋ฐ์์ํฌ ๊ฒ์ด๋ผ๋ ๊ฒ์ client-server ์ํคํ
์ณ๋ฅผ ํ์ฉํ ๊ฐ๋ฐ์ ํด๋ณธ ๊ฐ๋ฐ์๋ผ๋ฉด ์ฝ๊ฒ ์์ธกํ ์ ์๋ค. ๋น์ฅ ์๊ฐ๋๋ ๋นํจ์จ์ ๋ช ๊ฐ์ง ์ ์ด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก, ๋คํธ์ํฌ ํต์ ๋น์ฉ(HTTP request/response round trip time)์ ๋น์ธ๋ค. ์ฌ๊ธฐ์ Chrome์ DAU๊น์ง ๊ณ ๋ คํ๋ฉด ์ด ๋น์ฉ์ ๊ธฐํ๊ธ์์ ์ผ๋ก ์น์์ ๊ฒ์ด๋ค.
- ์ด๋ ๊ฒ๋ ๋ง์ ํธ๋ํฝ์ ๊ฐ๋นํ๊ธฐ ์ํ ์๋ฒ๋ฅผ ์์ ์ ์ผ๋ก(high availability๋ฅผ ํ๋ณด) ์ ์งํ๊ธฐ ์ํ ๋น์ฉ๋ ๋ง๋ง์น ์์ ๊ฒ์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ ํ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก bloom filter์ด๋ค.
์ ํํ Chrome์์ bloom filter๋ฅผ ํ์ฉํ๋ ๋ก์ง์ ์ ์ ์์ง๋ง, ์๋ง ๋ค์๊ณผ ๊ฐ์ ํํ์ด์ง ์์๊น?
- Chrome ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์นํ ๋, ์ ์ฑ URL๊ณผ ๊ด๋ จํ blacklist data๋ฅผ ์ ์ ์ local machine์ ๋ค์ด๋ก๋ ๋ฐ์๋๋ค.
- ์ ์ ๊ฐ Chrome์ ํตํด ์๋ก์ด URL์ ์ ๊ทผํ ๋, ์ ์ ์ machine์ ์กด์ฌํ๋ blacklist data๋ฅผ ํ์ฉํ์ฌ ๋ง๋ bloom filter๋ก ์ ์ฑ URL์ธ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค.
- ๋ง์ฝ bloom filter์ URL์ ํต๊ณผ์ํจ ๊ฒฐ๊ณผ๊ฐ ์ฐธ์ด๋ผ๋ฉด, ์ ์ฑ URL์ธ์ง ํ์ค์น ์๋ค๋ ๋ป์ด๋ฏ๋ก ์ด ๊ฒฝ์ฐ์๋ง ์๋ฒ์ HTTP request๋ฅผ ๋ณด๋ด์ ์ ์ฑ URL์ธ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค. ๊ฒฐ๊ณผ๊ฐ ๊ฑฐ์ง์ด๋ผ๋ฉด, ์ ์ฑ URL์์ด ํ์คํ๋ฏ๋ก(bloom filter ์๋ฃ๊ตฌ์กฐ์๋ false negative์ธ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ฏ๋ก) ํด๋น URL๋ก์ ์ ๊ทผ์ ์ฐจ๋จํด์ค๋ค.