데이터베이스가 Docker 및 컨테이너화에 적합하지 않은 데에는 여러 가지 이유가 있습니다.
1. 데이터가 안전하지 않습니다.
Docker 데이터를 호스트에 저장하려고 해도 데이터가 손실되지 않는다는 보장은 없습니다. . Docker 볼륨은 영구 스토리지를 제공하기 위해 Union FS 이미지 계층을 중심으로 설계되었지만 여전히 보장이 부족합니다.
현재 스토리지 드라이버를 사용하면 Docker는 여전히 불안정할 위험이 있습니다. 컨테이너가 충돌하고 데이터베이스가 제대로 종료되지 않으면 데이터가 손상될 수 있습니다.
2. 데이터베이스 실행을 위한 환경 요구 사항
DBMS 컨테이너와 기타 서비스가 동일한 호스트에서 실행되는 것을 흔히 볼 수 있습니다. 그러나 이러한 서비스의 하드웨어 요구 사항은 매우 다릅니다.
데이터베이스(특히 관계형 데이터베이스)의 IO 요구 사항은 더 높습니다. 일반적으로 데이터베이스 엔진은 동시 리소스에 대한 경합을 피하기 위해 전용 환경을 사용합니다. 데이터베이스를 컨테이너에 넣으면 프로젝트 리소스가 낭비됩니다. 이 인스턴스에 대해 많은 추가 리소스를 구성해야 하기 때문입니다. 퍼블릭 클라우드에서는 34G 메모리가 필요할 때 시작하는 인스턴스에 64G 메모리가 있어야 합니다. 실제로 이러한 리소스는 완전히 활용되지 않습니다.
어떻게 해결하나요? 레이어로 설계하고 고정 리소스를 사용하여 다양한 계층에서 여러 인스턴스를 시작할 수 있습니다. 수평으로 크기를 조정하는 것이 수직으로 크기를 조정하는 것보다 항상 더 좋습니다.
3. 네트워크 문제
Docker 네트워킹을 이해하려면 네트워크 가상화에 대한 심층적인 이해가 필요합니다. 또한 예상치 못한 상황에 대처할 준비도 되어 있어야 합니다. 지원이나 추가 도구 없이 버그 수정을 수행해야 할 수도 있습니다.
4. 상태
컨테이너를 조정하고 단일 실패 지점을 해결할 수 있는 Docker에 상태 비저장 서비스를 패키징하는 것이 좋습니다. 하지만 데이터베이스는 어떻습니까? 데이터베이스를 동일한 환경에 배치하면 상태 저장이 되며 시스템 오류의 범위가 더 커집니다. 다음에 애플리케이션 인스턴스나 애플리케이션이 충돌하면 데이터베이스에 영향을 미칠 수 있습니다.
5. 추가적인 격리는 데이터베이스에 해를 끼칩니다
사실 저는 두 번째와 세 번째 이유에서 이것을 언급했습니다. 하지만 이 사실을 다시 한번 강조하고 싶어서 이를 별도의 이유로 기재합니다. 격리 수준이 높을수록 더 많은 리소스 오버헤드가 발생합니다. 쉽게 수평으로 확장하면 전용 환경보다 더 많은 이점을 얻을 수 있습니다. 그러나 Docker의 수평 확장은 데이터베이스가 아닌 상태 비저장 컴퓨팅 서비스에만 사용할 수 있습니다.
데이터베이스에 대한 격리 기능이 없는데 왜 컨테이너에 넣어야 할까요?
추천 튜토리얼: docker 튜토리얼
위 내용은 데이터베이스가 Docker 및 컨테이너화에 적합하지 않은 이유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!