NOSQL의 특징과 역할
-NOSQL 자체가 비복잡 대용량 데이터를 저장하기 위한 도구로 쓰이고 있다.
-로그데이터를 저장할 때, 실시간 데이터 스트림을 저장할때
-부하 분산이 가능하다,(sharding) 데이터의 스키마제약을 받지않는다.(flexible schema)
-replicaset 을 통한 HA(High Availability) 높은 가용성
(write,read 구분 및 장애시 사용할 예비 DB 복제 및 마련)
MongoDB 알고리즘
- MongoDB의 경우 확장된 형태의 Raft 컨세서스 모델 사용을 사용하면 컨세서스 알고리즘에는 paxos와 raft가 있다.
- 레플리카 셋에 참여하는 각 멤버들이 서로 데이터를 동기화하고 노드들 간에 하트비트가 되지 않을때 어떻게 할지 결정하는 알고리즘
Replication
- Replication을 통해서 특정멤버에서 데이터 손실이 발생해도 다른 멤버의 데이터로 대체할수 있으므로 고가용성 이점을 가져올 수 있다.
- 각 각의 멤버는 heart-beat를 통해서 통신을 하는데 만약 primary 노드의 멤버가 통신이 되지 않으면 나머지 노드들 끼리 primary를 선출한다.
- Primary 노드는 read/write가 가능하며 Secondary노드는 read만 가능하고 secondary노드가 늘어나면 읽기에 대한 분산 처리가 가능하다.
- Primary노드와 Secondary노드는 데이터를 모두 가지고 있지만 Arbiter노드의 경우 데이터를 가지고 있지 않고 primary노드 선출에 필요한 투표권만 가지고 있다. 그래서 보통 arbiter의 경우 별도의 서버에 두는것이 바람직하다.
Sharding
- 데이터의 분산을 통해서 부하를 줄일수가 있다.
- Shard Cluster에 Shard를 를 추가하면 Scale-out(수평확장) 가능하고 서버 운영 중에 N대의 서버를 붙여서 사용하며 되므로 유지보수 측면에서도 용이하다. (Shard Rebalancing)
Config Server
- 3개의 mongod 인스턴스로 구성하는것을 문서상에는 추천하고 있다. 왜냐하면 primary을 선출하기 위해서 적어도 3개 이상의 노드 멤버가 필요하기 때문인다.
- mongod 인스턴스 이므로 데이터를 가지고 있으며 해당 데이터에는 shard에 대한 정보와 replication에 대한 메타 정보를 가지고 있으므로 mongos인스턴스에서는 config server의 정보를 통해 query routing기능을 수행한다.
Mongos
- mongos 인스턴스 이며 DB데이터는 가지고 있지 않으며 단순 query routing기능을 수행한다.
- 물리 서버가 여러대 이며 클러스터로 구성 되어져 있다면 각각의 물리 서버에 mongos인스턴스를 띄워서 분산 처리를 하는 것이 성능상의 이점을 가져올수 있다.
MongoDB 의 이중화
- Sharding과 Replication은 필수적으로 해야 함.
- 3개 이상의 서버에 각각의 서버에 Sharding된 데이터에 Replica Set을 다른 서버에 분산 저장을 해야함
- 2개에서도 구축이 가능하지만 한쪽가 완전에 shutdown이 될 경우에 failover를 지원할 수가 없다 왜냐하면 각 각의 replica set은 3개의 노드 멤버로 구성되는데 2개의 노드가 죽게되면 primary로 뜰수 없기 때문이다.
- 적어도 3대 이상의 서버가 필요 하는데 그 이유는 PSA또는 PSS구조를 사용하기 위함
- PSA : Primary Secondary Arbiter
- PSS : Primary Secondary Secondary
MongoDB Failover RollBack
- Failover이후에 replica member가 다시 rejoin 했을 경우 이전 primary의 쓰기는 rollback한다.
- Rollback은 primary가 쓰기 작업을 완료했지만 secondary가 replication을 못했을 경우에만 필요한다.
- Primary가 secondary로 다시 rejoin했을때 쓰기는 roll back을 하고 다른 member와 같은 데이터 일관성을 유지한다.
- MongoDB는 가급적 rollback이 일어나지 않도록 한다.
- 네트워크문제로 rollback이 발생할 수가 있다. ( secondary에서 primary의 opertion 처리량을 유지 시킬수가 없을 때)
- primary가 stepdown되었을때 다른 secondary d에게 쓰기 operation이 replication되었다면 rollback은 일어나지 않는다.
- rollback data는 bson 형태로 mongod dbpath / rollback 하위에 구성된다.
- journaling 옵션을 통해서 데이터가 무결성을 지켜주도록한다.
- 비정상 종료 또는 crash에도 자동 복구 작업이 동작한다.
MongoDB Failover 구성
- Replica set의 primary가 사용할수 없을때 나머지 replica set member를 통해서 새로운 primary를 선정한다.
- Replica set으로 구성된 각각의 member는 10초 동안 heartbeat이 되지 않으면 connection을 잃게 된다. (10초는 디폴트 값)
- Heartbeat는 각각의 replica set member에게 매 2초마다 ping을 한다.
- 10초내에 응답이 오지 않으면 해당 member는 접근이 불가능하다고 마크한다.
- primary와 heartbeat이 되지 않아서 새로운 primary를 선출해야하는 도중에는 쓰기가 불가하고 읽기만 가능하다.
- 새로운 primary를 선출하는 과정은 보통 12초를 초과하지 않는다.
- Replica set은 P-S-A(Primary, Secondary, Arbiter) 구조로 구성한다.
아래의 이미지는 3대의 서버에 이중화를 구축할때의 구성
MongoDB의 사례
사례1)
전자 상거래 플랫폼
-자체 전자상거래 플랫폼에 몽고DB를 사용한다. 모든 자체 채널들에 기능과 서비스를 제공하는 이 플랫폼은 회사가 빠르게 새로운 앱을 설계 배포하면서도 지속적인 고객 경험을 제공
사례2)
소셜 기술 기업
-1,000 곳이 넘는 클라이언트들의 소셜 활동을 저장한다. 스프링클러의 몽고DB 플랫폼은 분당 300만 건 이상의 트랜젝션을 처리한다. 또 매달 최소 한가지 주요 기능 및 100 종 이상의 일반 기능을 선보일 수 있도록 지원
사례3)
게임 퍼블리셔
-몽고DB로 이전하기 전까지 관계형 데이터베이스를 이용했으며, 이로 인해 확장성에 어려움을 겪었다. 이 기업은 멀티-테넌트 서비스로서의 데이터베이스(database-as-a-service)를 채택함으로써 데이터베이스 인스턴스들을 통합해 성능과 안정성 향상을 가져왔다.
-고급 운영 툴링(Advanced operational tooling)은 수요에 맞춰 10여개의 데이터베이스 클러스터들을 확장하고, 단 한 명의 운영자만으로 전세계의 게이머들에게 끊기지 않는 가용성을 제공
사례4)
엔지니어링 기업의 사물인터넷
-성공적인 사물인터넷이란 새로운 통찰을 얻고 자동화된 결정을 주도하기 위해 실시간으로 복잡한 애널리틱스를 수행할 수 있는 애플리케이션을 의미
-사물인터넷 솔루션의 일환으로 몽고DB 엔터프라이즈 어드밴스드(Enterprise Advanced)를 이용하고 있다. 수백 만 부품들에 걸쳐 결함을 감지하기 위해 제조 라인 IoT 프로젝트에서부터 3억 개 차량에 텔레매틱스를 구현하려는 계획까지 아우른다.
사례5)
사용자들을 위해 회의 스케줄을 잡는 인공지능 기반의 개인 비서 서비스
-몽고DB는 전체 인공지능 플랫폼을 위한 기록 시스템을 담당하면서 자연어 프로세싱, 지도 학습, 애널리틱스, 이메일 커뮤니케이션 등 모든 서비스를 지원
사례6)
마케팅 자동화회사의 예측적 마케팅 지원
-이상적인 고객 프로필을 발견하고, 가장 높은 구매 가능성을 가진 이들을 대상화하고 알맞은 채널을 통해 알맞은 메시지로의 관여를 돕기 위해 예측적 애널리틱스를 활용한다.
-수천 개의 마케팅 지표들을 통합해야 하며, 막대한 양의 데이터를 놀라운 다양성과 함께 처리하고 빠르게 소화하기 위해 몽고DB를 활용하고 있다.
-몽고DB의 표현적 쿼리 언어와 데이터 프로세싱 파이프라인을 적극 이용
'DataBase > NoSQL' 카테고리의 다른 글
[NoSQL] MongoDB capped collection, TTL collection (0) | 2021.01.19 |
---|---|
[NoSQL] python에서 MongoDB연동시키기 (0) | 2021.01.14 |
[NOSQL] MongoDB Shell(명령어)로 CSV, JSON import 해보기 (0) | 2021.01.11 |
[NOSQL]MongoDB 기본 명령어 (1) | 2021.01.07 |
[NoSQL]NoSQL(Not Only SQL) 종류와 특징 간단히 정리 (0) | 2020.10.08 |
댓글