듣기 버전 : https://youtu.be/_JtfZzISH5g
역시 한국의 유투브 방송에는 NoSQL이랑 RDBMS랑 비교하면서 초심자 분들에게
NoSQL이 좋아 하는 식으로 방송하는게 많이 보이는데요,
이건 잘못하면 RDBMS는 안써도 되 라는 느낌으로 들립니다.
실제로 그런 사례도 몇 번 일어난 것을 보면 제대로 알려드려야 할 것 같아서 이 주제를 가지고 나왔습니다.
넌 뭐가 잘났는데 하시는 분들을 위해 제 자랑을 또 해드려야지요.
전 하둡으로 4000만 dau가 있는 서비스의 1.76PB 짜리를 설계 구축 해봤습니다.
카우치베이스로 32TB 데이터 올리다가 터뜨려 먹은 적도 있습니다.
몽고디비 운영중에 이건뭐지 하고 리밸런싱 커맨드 날렸다가 락걸려서 8시간 서비스 정지도 시켜봤습니다.
저를 nosql의 n자도 모른다고 하시려는 분들!
사실 전 nosql을 제대로 못써봤습니다!
Nosql의 진가는 최소 일간 10억 유니크 엑세스 부터가 아닐까요?
Nosql을 처음 봤을 때 그 구조에 대해 경악 했지요.
NoSQL이 대단한 것은 데이터 저장 구조가 아닙니다. MySQL도 SQL Server도, ORACLE도 JSON Query를 지원하기 때문에 하나의 필드에 다 때려 넣고 표준 SQL에 JSON Query구문만 추가하면 필드처럼 인식 가능합니다. 비정형 데이터를 RDBMS가 못넣는다는 것은 이미 10년 전 이야기지요..
많은 영상에서 하드웨어 구조 같은것은 설명을 하나도 못봤는데요..
NoSQL은 만약 100개의 노드에 데이터가 뿌려져 있다고 합시다.
그러면 Namenode에 검색용 쿼리를 날립니다.
그러면 Namenode는 100개의 노드에 동일 쿼리를 던집니다.
그리고 그 중에 해당 쿼리에 데이터가 있으면 그 데이터만 Name node에 가져옵니다.
그걸 머지해서 리턴을 해주지요.
어떤 내용이냐면,
만약 100GB의 하드를 가진 서버 100대에 NoSQL을 설치하고 데이터를 마구 넣었습니다.
동일하게 10TB의 하드디스크 한대에 RDBMS를 설치하고 데이터를 넣었습니다.
그러면 용량은 같겠지요..
여기에서 데이터 검색을 던집니다.
그러면 RDBMS는 1대에서 Disk IO성능만큼 읽어내려가야 합니다.
모든 하드 디스크의 100GB를 읽어내려가는 데 걸리는 시간을 1 이라고 가정하면,
RDBMS의 경우 10TB를 읽어야 하므로 100이란 시간이 걸립니다.
100개 노드를 가진 NoSQL은 디스크는 100대가 병렬로 자기가 가진 데이터만 계산하면 되므로 1 이면 전체 읽기가 끝납니다. 그걸 Namenode에 가져와서 소팅 하여 리턴하면 약 1.2 정도면 끝납니다.
이 부분이 엄청난 것입니다.
하지만, 이걸 설명하는 NoSQL강의 있었나요?
하지만 NoSQL의 eula를 보고 다시 경악 했습니다.
데이터의 무결성은 보장 안한다.
세상에 어떤 dbms가 데이터 유실해도 모르지만 너 쓸래? 라고 합니까?
그래서 생각했죠.
이넘은 데이터가 유실되도 상관없는 고속 셀렉트 용이구나.
데이터 노드가 많아질 수록 고속으로 Write, Update를 했을 때 3replica라고 해도 노드간 인서트와 업데이트가 반복되는 과정에서 어떤 노드는 인서트보다 업데이트가 먼저 되는 문제가 발생할 수 있습니다.
그러면 데이터 정합성이 깨지게 되는 것이지요. 이걸 다수결로 할거냐 먼저 넣은걸로 할거냐를 선택하는 옵션도 있습니다. 그렇다고 그게 맞다고 보장할 수는 없는 것이지요. 먼저 넣었지만 나중에 업데이트 친게 맞을 수도 있고, 틀린게 두 개 들어갈 수도 있으니까요..
만약 rdbms를 메인으로 유저의 담벼락만 nosql화 해서 수백 노드에 넣어두면 수억 리퀘스트가 와도 문제 없고 담벼락 쯤이야 작성하다 날라가도 욕은 안하겠지요..
이런 용도로 사용하는게 명확히기 때문에 페북이나 트위터에서 nosql을 채택한 것 입니다.
양쪽다 초기 과금 서비스가 없었잖아요?
그들이 광고 시스템 내의 결제 및 정산도 nosql을 쓸거라 보나요?
전체를 보지 않고 극히 일부 도입해도 전체가 그런양 선동하는 영상이 많은데요,
초심자를 상대로 잘못된 정보를 주입하시면,
그들이 cto가 되서 제 고객이 되었을 때 고스란히 제가 피해를 봅니다.
이 무지를 어디서 주워들은 정보 하나로 진실이라 여기는데 절대 안바뀌거든요...
Nosql이 좋다고 교육 영상 올리시는 분들, 성능 비교 같은 것은 하나도 못봤는데요..
입출력 교육 조금 하고 최고네 하는 것보다,
실제로 써보시는 분들을 위한 실전 정보가 더 중요하지 않나요?
최소 몇 노드부터 해야 하는지,
리밸런싱 이슈라던가,
도쿄 본사가 지원해 준다고 mongodb쓰라고 해놓고 6노드로 시작 했는데 서비스가 3000명에서 터진 적이 있습니다.
도쿄 본사에서도 매출은 한국돈으로 매달 수십억을 벌지만 단일 서비스당 동접 3000을 경험하지 못랬거든요.. 그래서 도쿄에서도 첮고 난리 났는데 못찾고 있어서 제가 그 미팅에 들어가서 보자마자 뭔가 이상해서 질문을 했습니다.
레플리카는 6개인데 왜 하나만 쓰시나요?
그 질문을 하자 도쿄에선 당연히 6개 써야 하는거 아니냐고 하네요..
그니까 니네들이 지원해 준대매..
후쿠오카 지사는 이번에 처음 쓴느거니 3년이나 썼던 너네들이 그런거 봐줬어야 하는거 아냐?
그래서 또 모른척 하고 래플리카는 읽기만 할탠데 어떻게 쓰면되죠?
하니까, 각 노드의 ip를 넣어줘야 한다더랍니다.
그러니까 지금 개발포함 오픈까지 거의 1년이 다 되었는데 구축부터 봐줬다던 사람들이 지금까지 이야기 안해줬냐구?
혹시 이렇게 생각하신분들은 nosql이 뭔지 모르는 분입니다.
Nosql은 name node와 data node가 있고 name node는 어디서 써도 상관 없으므로 dns rr이면 됩니다.
왜 elb같은거 안쓰냐구요?
이 질문 하신분!
Nosql로 깔짝 대려고 하시는 겁니까?
엄청난 데이터를 처리하려고 nosql쓰는거 아닌가요?
거기서 무슨 병목을 유발시키려고 elb를 붙이나요?
문재 없었다규요?
그러니까 천만단위 유저를 nosql로 받아보시고 하는 말이냐구요..
이미 동접 100만을 넘어가면 1GB짜리 L4/L7으론 터집니다.
그럼 10GB짜리 쓰면 되잖아요?
그게 얼마나 비싼지는 알고 하시는 말씀인가요?
자기 돈 아니라고 인프라에 얼마나 쳐바를 생각이신가요?
왜 1/10 비용으로 커버 가능한 시스템을 굳이 비싼 돈을 들이려고 하는 건가요?
그리고, Nosql조차 namenode 병목을 막고자 안간힘인데..
그래서 couchbase가 무한히 namenode를 만들 수 있어 병목 현상이 없다고 광고 하잖아요..
엄청난 규모가 되면 이런 고민을 하게 되고 이런 고민할 정도가 아니면 그냥 rdbms로도 충분하단 말입니다.
누군가의 영상에 혹해서 rdbms때려치고 nosql을 배우시려는 분들!
그 강사한테 얼마나 먾은 유저를 커버 해봤냐고 물어봐 주세요. 페북이나 트위터 말고 그 강사 본인 경험 말입니다.
실제로 몽고db로 100노드 1PB를 리밸런싱 돌려서 얼마나 오랫동안 락 걸려서 서비스 정지 되었는지 경험을 해보시면 nosql은 아무나 쓰는게 아니란 것을 알겁니다.
그리고 전통 rdbms의 위대함도 새삼 느끼게 되겠지요.
조금 열냈지만,
전 NoSQL의 N자도 모르는 그냥 IT컨설턴트 였습니다.
댓글
댓글 쓰기