서비스를 운영할 때, Client가 원하는 데이터를 찾을 때 DB에 저장되어 있는 Data를 찾아서 제공해야 합니다. Data와 요청이 많아질수록 검색 속도는 점점 느려지게 됩니다.
이러한 문제를 극복하고, 더 빠른 속도로 검색 결과를 제공하기 위해서 여러가지 다른 특성을 지닌 DB를 조합하여 성능을 향상시킬 수 있습니다.Redis : 인메모리 기반의 DB로써 저장 공간으로 주기억장치를 사용하여 저장공간으로 보조기억장치를 사용하는 DB보다 빠른 속도로 검색 결과를 찾아서 제공합니다.
Elasticsearch : 검색에 특화된 DB로써 역인덱싱을 활용하여 빠른 검색결과를 제공합니다.
MySQL : index형태의 Relational DataBase입니다. 가장 보편적으로 사용되는 형태입니다.
- 사용자가 검색어를 입력하면 가장 빠른 응답속도를 보이는 Redis에서 데이터가 있는지 조회합니다.
- 검색 결과가 있으면 바로 결과를 반환합니다.(Cache-Hit)
- 검색결과가 없으면(Cache-Miss) ElasticSearch에서 검색하여 데이터가 있는지 확인합니다.
- Elasticsearch에 데이터가 있으면 결과를 반환합니다.
- Elasticsearch에 데이터가 없으면 결과 없음을 반환합니다.
DB(MySQL)에 담긴 데이터는 ELK스택에 포함되어 있는 Logstash를 통하여 Elasticsearch에 저장됩니다.
Logstash는 서로 다른 형태의 DB인 MySQL과 Elasticsearch를 연결시켜주는 역할을 해줍니다.
이를 위해서 logstash.conf파일을 작성하여 input과 output을 SQL문으로 작성하여 데이터를 전달해 줄 수 있습니다.