아파치 이그니트

Apache Ignite
아파치 이그니트
Apache Ignite logo.svg
원저작자그리드게인 시스템
개발자Apache 소프트웨어 재단
초기 릴리즈2015년 3월 24일, 7년 전(2015-03-24)
안정된 릴리스
2.12.0 / 2022년 1월 14일; 4개월 전(2022-01-14)[1]
프리뷰 릴리즈
3.0.0 (alpha 4) / 2022년 1월 28일; 4개월 전 (2022-01-28)[1]
저장소저장소 점화
기입처Java, C#, C++, SQL
운영 체제크로스 플랫폼
플랫폼IA-32, x86-64, PowerPC, SPARC, Java 플랫폼,NET 프레임워크
유형데이터베이스, 컴퓨팅 플랫폼
면허증.Apache 라이센스 2.0
웹 사이트ignite.apache.org

Apache Ignite는 고성능 컴퓨팅을 위한 분산 데이터베이스 관리 시스템입니다.

Apache Ignite의 데이터베이스는 RAM을 기본 스토리지 및 처리 계층으로 사용하므로 메모리 [2]컴퓨팅 플랫폼 클래스에 속합니다.디스크 계층은 옵션이지만 활성화되면 전체 데이터 세트가 유지되는 반면 메모리[3] 계층은 용량에 따라 전체 또는 부분 데이터 세트를 캐시합니다.

Ignite의 데이터는 키-값 쌍의 형태로 저장됩니다.데이터베이스 구성 요소는 모든 노드가 전체 데이터 세트의 일부를 소유하도록 클러스터 전체에 키와 값 쌍을 배포합니다.클러스터에서 노드를 추가하거나 제거할 때마다 데이터가 자동으로 재조정됩니다.

Apache Ignite 클러스터는 일반 하드웨어, 클라우드(예: Microsoft Azure, AWS, Google Compute Engine) 또는 Kubernetes, Docker, Apache Mesos, VMWare[4][5]같은 컨테이너형 프로비저닝 환경에 사내에서 구현할 수 있습니다.

역사

미국 회사인 GridGain Systems, Inc.는 2010년 Nikita Ivanov와 Dmitriy Setrakyan이 캘리포니아 플레전튼에서 설립한 회사입니다.2011년 [6]11월에 200만~300만달러의 자금 조달 라운드가 개시되었습니다.2013년에는 캘리포니아주 포스터시티에 위치하여 1,000만 [7]달러의 자금을 조달했습니다.GridGain은 2014년에 핵심 기술을 오픈 소스 소프트웨어로 만들었습니다.2014년 [8][9]10월 Apache Incubator 프로그램에서 승인되었습니다.Ignite 프로젝트는 2015년 [9]9월 18일에 종료되었습니다.

클러스터링

Apache Ignite 클러스터링 구성 요소는 공유 없음 아키텍처를 사용합니다.서버 노드는 데이터와 인덱스를 모두 보관하고 들어오는 요청을 계산과 함께 처리하는 클러스터의 스토리지 및 계산 단위입니다.서버 노드는 데이터 [10]노드라고도 합니다.

클라이언트 노드는 애플리케이션 및 서비스에서 서버 노드 클러스터 상의 분산 데이터베이스로의 연결 지점입니다.클라이언트 노드는 보통 Java, C# 또는 C++로 작성된 애플리케이션 코드에 포함되어 있으며 특수 라이브러리가 개발되어 있습니다.Apache Ignite는 분산 기반 외에도 JCache 호환 키 값 API, 조인 포함 ANSI-99 SQL, ACID 트랜잭션 및 MapReduce와 같은 계산을 포함한 인터페이스를 지원합니다.Ignite는 ODBC,[11] JDBC[12] REST 드라이버를 다른 프로그래밍 언어 또는 도구에서 데이터베이스로 작업할 수 있는 방법으로 제공합니다.드라이버는 클러스터와 통신하기 위해 내부적으로 클라이언트 노드 또는 로우 레벨 소켓 연결을 사용합니다.

파티션화 및 레플리케이션

Ignite 데이터베이스는 분산된 "캐시"에서 키-값 쌍의 형태로 데이터를 구성합니다(캐시 개념은 초기에 데이터베이스가 메모리 계층을 지원했기 때문에 과거 이유로 사용됨).일반적으로 각 캐시는 직원이나 조직과 같은 하나의 엔티티 유형을 나타냅니다.

모든 캐시는 랑데부해시 알고리즘을 사용하여 클러스터 노드 간에 균등하게 분산된 고정 세트의 "파티션"으로 분할됩니다.파티션에는 항상 1개의 프라이머리 복사본과 0개 이상의 백업 복사본이 있습니다.복사본 수는 복제 팩터 [13]매개 변수로 구성됩니다.전체 복제 모드가 구성된 경우 모든 클러스터 노드가 파티션의 복사본을 저장합니다.균등하게 데이터를 분산하고 워크로드를 분산하기 위해 노드를 클러스터에 추가하거나 클러스터에서 제거하면 파티션이 자동으로 재조정됩니다[14].

키와 값의 쌍은 파티션에 보관됩니다.Apache Ignite는 키 값을 가져와 특별한 해시 함수에 전달함으로써 한 쌍을 파티션에 매핑합니다.

메모리 아키텍처

Apache Ignite의 메모리 아키텍처는 두 개의 스토리지 계층으로 구성되며 "내구성 메모리"라고 불립니다.내부적으로는 Unix 등의 시스템의 가상 메모리와 마찬가지로 메모리 공간 관리 및 데이터 [15]참조에 페이징을 사용합니다.그러나 내구성이 뛰어난 메모리와 가상 메모리 아키텍처의 중요한 차이점 중 하나는 데이터 세트 전체를 항상 인덱스와 함께 디스크에 보관하는 것입니다(디스크 계층이 활성화되어 있다고 가정함). 반면 가상 메모리는 RAM이 부족할 때 스왑 목적으로만 디스크를 사용합니다.

메모리 아키텍처의 첫 번째 계층인 메모리 계층은 RAM 내의 데이터와 인덱스를 소위 "오프히프 영역"의 Java 힙에서 분리합니다.영역은 데이터베이스 자체에서 사전 할당 및 관리되므로 스토리지 요구에 대한 Java 힙 활용률이 방지되므로 장기간 가비지 수집이 일시 중지되는 것을 방지할 수 있습니다.영역은 데이터, 인덱스 및 시스템 [16]메타데이터를 저장하는 고정 크기의 페이지로 분할됩니다.

Apache Ignite는 메모리 계층에서 완전히 작동하지만 내구성을 위해 두 번째 계층인 디스크 계층을 사용할 수 있습니다.데이터베이스에는 자체 기본 지속성이 있으며 RDBMS, NoSQL 또는 Hadoop 데이터베이스를 디스크 계층으로 사용할 수 있습니다.

네이티브 퍼시스턴스

Apache Ignite 네이티브 퍼시스턴스는 분산된 강력한 일관성을 가진 디스크 저장소로, 항상 디스크에 있는 데이터 및 인덱스의 슈퍼셋을 보유하고 있습니다.메모리 계층은 용량에 따라 가능한 한 많은 데이터만 캐시합니다.예를 들어 엔트리가 1000개이고 메모리 계층이 300개만 수용할 수 있는 경우 1000개 모두가 디스크에 저장되며 300개만 RAM에 캐시됩니다.

지속성은 [17]WAL(Write-Ahead Logging) 기술을 사용하여 디스크에 즉각적인 데이터 수정을 유지합니다.백그라운드에서 스토어는 메모리 계층에서 파티션 파일로 더러운 페이지를 복사하는 것을 목적으로 하는 "체크포인트 처리"를 실행합니다.더티 페이지는 메모리에 수정되어 WAL에 기록되지만 각 파티션 파일에 기록되지 않은 페이지입니다.체크포인트를 사용하면 오래된 WAL 세그먼트를 시간이 지남에 따라 삭제할 수 있으며 파티션 [18]파일에 적용되지 않은 WAL 부분만 재생하는 클러스터 재시작 시간을 단축할 수 있습니다.

서드 파티의 지속성

네이티브 퍼시스턴스는 버전 [19]2.1부터 사용할 수 있게 되었습니다.이전에는 Apache Ignite가 디스크 계층으로 타사 데이터베이스만 지원했습니다.

Apache Ignite는 [20]RDBMS, NoSQL 또는 Hadoop 데이터베이스 상의 인메모리 계층으로 구성할 수 있습니다.그러나 네이티브의 지속성에 비해 몇 가지 제한이 있습니다.예를 들어 SQL 쿼리는 RAM에 있는 데이터에만 실행되므로 모든 데이터 세트를 디스크에서 메모리로 미리 로드해야 합니다.

스왑 공간

순수 메모리 스토리지를 사용하면 데이터 크기가 물리적 RAM 크기를 초과하여 메모리 부족 오류(OOE)가 발생할 수 있습니다.이를 피하기 위해서는 Ignite 네이티브 지속성을 활성화하거나 타사 지속성을 사용하는 것이 이상적입니다.그러나 기본 또는 타사 지속성을 사용하지 않으려면 스왑을 사용하도록 설정할 수 있습니다. 이 경우 Ignite in-memory 데이터가 디스크에 있는 스왑 공간으로 이동합니다.Ignite는 스왑 공간의 자체 구현을 제공하지 않습니다.대신 운영체제(OS)에서 제공하는 스왑 기능을 활용합니다.스왑 공간을 활성화하면 Ignite는 데이터를 메모리 매핑 파일(MMF)에 저장합니다.이 MMF의 콘텐츠는 현재 RAM 사용량에 따라 디스크로 스왑됩니다.

일관성.

Apache Ignite는 2단계 커밋 [21]프로토콜을 구현하는 강력한 일관된 플랫폼입니다.메모리 계층과 디스크 계층 모두에 대해 일관성 보증이 충족됩니다.Apache Ignite의 트랜잭션은 ACID와 호환되며 여러 클러스터 노드와 캐시에 걸쳐 있을 수 있습니다.데이터베이스는 비관적이고 낙관적인 동시성 모드, 교착 상태가 없는 트랜잭션 및 교착 상태 감지 기술을 지원합니다.

트랜잭션 보증이 선택 사항인 시나리오에서 Apache Ignite는 더 나은 성능을 제공하는 원자 모드에서 쿼리를 실행할 수 있습니다.

분산 SQL

Apache Ignite는 JDBC 및 ODBC 드라이버를 통해 노출된 SQL API와 Java, C#, C++ 프로그래밍 언어용으로 개발된 네이티브 라이브러리를 사용하여 액세스할 수 있습니다.데이터 조작과 데이터 정의 언어의 구문은 모두 ANSI-99 사양을 준수합니다.

Apache Ignite는 분산 데이터베이스이므로 분산된 결합 및 비결합 [22]결합을 모두 지원합니다.데이터가 코로케이션되면 클러스터 노드의 로컬 데이터에 대해 조인(join)이 실행되어 네트워크 간의 데이터 이동을 방지합니다.비콜로케이션 조인은 일관성 있는 결과 세트를 준비하기 위해 네트워크 내에서 데이터 세트를 이동할 수 있습니다.

기계 학습

Apache Ignite는 데이터 전처리 및 모델 품질 [23]평가뿐만 아니라 머신 러닝 훈련 및 추론 기능을 제공합니다.기본적으로 선형 회귀, 의사결정 트리, 랜덤 포레스트, 그라데이션 부스팅, SVM, K-평균 등의 기존 교육 알고리즘을 지원합니다.또한 Apache Ignite는 Tensor [24]Flow와 긴밀하게 통합되어 있습니다.이러한 통합을 통해 단일 노드 또는 분산 방식으로 Apache Ignite에 저장된 데이터에 대한 신경 네트워크를 훈련할 수 있습니다.

Apache Ignite Machine Learning 툴킷의 주요 아이디어는 대규모 데이터 전송 없이 즉시 분산 교육 및 추론을 수행할 수 있는 능력입니다.MapReduce 접근방식을 기반으로 노드 장애 및 데이터 재조정 시 복원력이 뛰어나 데이터 전송을 회피하고 사전 처리 및 모델 교육 속도를 [25]높일 수 있습니다.

레퍼런스

  1. ^ a b "Downloads - Apache Ignite". ignite.apache.org. Retrieved 2021-01-27.
  2. ^ "Nikita Ivanov on Apache Ignite In-Memory Computing Platform". InfoQ. Retrieved 2017-10-11.
  3. ^ a b "Apache Ignite Native Persistence, a Brief Overview - DZone Big Data". dzone.com. Retrieved 2017-10-11.
  4. ^ "Deploying Apache Ignite in Kubernetes on Microsoft Azure - DZone Cloud". dzone.com. Retrieved 2017-10-11.
  5. ^ "Real-time in-memory OLTP and Analytics with Apache Ignite on AWS Amazon Web Services". Amazon Web Services. 2016-05-14. Retrieved 2017-10-11.
  6. ^ "Form D - Notice of Exempt Offering of Securities". United States Securities and Exchange Commission. November 8, 2011. Retrieved February 16, 2022.
  7. ^ "Form D - Notice of Exempt Offering of Securities". United States Securities and Exchange Commission. May 7, 2013. Retrieved February 16, 2022.
  8. ^ "Nikita Ivanov on Apache Ignite In-Memory Computing Platform". InfoQ. Retrieved 2017-11-02.
  9. ^ a b "Ignite Status - Apache Incubator". incubator.apache.org. Retrieved 2017-11-02.
  10. ^ "Clients and Servers". apacheignite.readme.io. Retrieved 2017-10-11.
  11. ^ "ODBC Driver". apacheignite.readme.io. Retrieved 2017-10-11.
  12. ^ "JDBC Driver". apacheignite.readme.io. Retrieved 2017-10-11.
  13. ^ "Primary & Backup Copies". apacheignite.readme.io. Retrieved 2017-10-11.
  14. ^ "Data Rebalancing". apacheignite.readme.io. Retrieved 2017-10-11.
  15. ^ "Apache Ignite 2.0: Redesigned Off-heap Memory, DDL and Machine Learning : Apache Ignite". blogs.apache.org. Retrieved 2017-10-11.
  16. ^ "Memory Architecture". apacheignite.readme.io. Retrieved 2017-10-11.
  17. ^ "Ignite Persistence". apacheignite.readme.io. Retrieved 2017-10-11.
  18. ^ "Ignite Persistence". apacheignite.readme.io. Retrieved 2017-10-11.
  19. ^ "Apache Ignite 2.1 - A Leap from In-Memory to Memory-Centric Architecture : Apache Ignite". blogs.apache.org. Retrieved 2017-10-11.
  20. ^ "Apache Ignite for Database Caching - DZone Database". dzone.com. Retrieved 2017-10-11.
  21. ^ "Distributed Thoughts". Retrieved 2017-10-11.
  22. ^ "Apache Ignite 1.7: Welcome Non-Collocated Distributed Joins! - DZone Database". dzone.com. Retrieved 2017-10-11.
  23. ^ "Machine Learning". apacheignite.readme.io. Retrieved 2018-12-27.
  24. ^ "TensorFlow: Apache Ignite Integration". github.com. Retrieved 2018-12-27.
  25. ^ "Partition Based Dataset". apacheignite.readme.io. Retrieved 2018-12-27.