엔듀로/X
Enduro/X개발자 | 마비맥스 |
---|---|
안정된 릴리스 | 8.0.2 / 2022년 1월 ; 전( |
저장소 | |
기입처 | C, C++, Go, Java |
운영 체제 | Linux, FreeBSD, IBM AIX, Oracle Solaris, Cygwin, macOS |
유형 | 애플리케이션 서버, 메시지 지향 미들웨어, 엔터프라이즈 메시징 시스템, SOA |
면허증. | AGPL v3 또는 상용, LGPL v3(Java 및 Go용) |
웹 사이트 | [1] [2] [3] |
Enduro/X는 분산 트랜잭션 처리를 위한 오픈 소스 미들웨어 플랫폼입니다.X/Open 그룹의 XATMI 및 XA와 같은 검증된 API를 기반으로 구축되었습니다.이 플랫폼은 클러스터화 옵션을 사용하여 실시간 마이크로 서비스 기반 애플리케이션을 구축하도록 설계되었습니다.Enduro/X는 Oracle Tuxedo를 대체하는 확장 드롭인 기능을 합니다.이 플랫폼은 높은 프로세스 간 통신 스루풋을 보장하는 메모리 내 POSIX 커널 큐를 사용합니다.
서비스
이 플랫폼에서는 서비스를 중단하지 않고 런타임 시스템 패치를 적용할 수 있습니다.시스템은 실행 중인 프로세스를 감시하고 크래시 또는 행업 후 재시작합니다.시스템 설정은 동적으로 새로고침할 수 있으며, 여러 인스턴스를 피어 투 피어 방식으로 결합할 수 있는 클러스터 기능을 제공합니다.Enduro/X는 C로 작성되며 C/C++를 위한 네이티브 API를 제공하며, Mavimax는 Go, Java 프로그래밍 언어를 위한 바인딩을 제공합니다.커뮤니티는 Python, PHP 및 Perl에 대한 바인딩을 제공합니다.따라서 Enduro/X는 지원되는 프로그래밍 언어 간의 언어 상호 운용성 도구로 효과적으로 사용될 수 있습니다.
테크놀로지
현재 Enduro/X는 2.6.12 이후 Linux 커널에서 작동합니다.가장 중요한 Linux 기능은 POSIX 큐의 epoll()입니다.이 Linux 기능은 Enduro/X 서버가 큐를 폴링하는 하나의 큐(복수 서버)에 대한 메커니즘을 제공합니다.Enduro/X 개발자는 EPOLLEXSCLUCTIVE 플래그를 Linux 커널 메인라인(4.5 버전 이후)[1]에 포함시켰습니다.이 패치는 수백 개의 실행 파일이 동일한 서비스를 제공하는 경우에 대비하여 Enduro/X 응답을 개선했습니다.특히 커널은 큐에 대기 중인 모든 바이너리를 깨움으로써 천둥 치는 무리형 동작을 하지 않게 되었습니다.이제 서비스 콜의 단일 수신자만 웨이크업됩니다.일부 워크로드에서는 Enduro/X 애플리케이션이 크게 향상됩니다.패치의 테스트 케이스에서는 워크로드의 퍼포먼스가 860초에서 24초로 [2]향상되었습니다.
Enduro/X 버전 3.1.2부터 FreeBSD, IBM AIX(버전 6.1 및 7.1) 및 Oracle Solaris V11에 대한 프로덕션 등급 지원이 추가되었습니다.V3.1.2에서는 Apple macOS 및 Cygwin에 대한 실험적인 지원이 도입되었습니다.Posix 큐를 사용할 수 있는 Unix 플랫폼에서는 ATMI 서버/서비스 쌍마다 별도의 큐가 열리고 발신자 서비스가 라운드로빈 모드로 큐를 선택하도록 이들 큐가 사용됩니다.MacOS는 운영체제에서 Posix 큐를 지원하지 않습니다.Enduro/X는 Posix 스레드의 프로세스 공유 뮤텍스와 함께 메모리 매핑 파일에 기반한 에뮬레이트된 Posix 큐를 사용합니다.FreeBSD Posix 큐도 폴링할 수 있으므로 FreeB의 Enduro/X는SD는 1대의 큐에 여러 대의 서버가 있는 Linux와 같은 방법으로 동작합니다.FreeB 폴링SD는 kqueue의 도움으로 이루어집니다.
버전 6.0에서는 System V 큐는 FreeBSD 및 Linux 이외의 Unix 플랫폼에서는 권장되는 IPC 메커니즘입니다.또한 System V 큐는 효과적인 로드 밸런싱을 위해 단일 큐 - 다중 서버(SQMS) 메시지 배포 방식을 제공합니다.SQMS 모드에서 System V 큐와 로드밸런싱을 수행하려면 모든 XATMI 서버가 동일한 서비스를 애드버타이즈하는 요구 주소(논리 채널/큐)를 사용하도록 XATMI 서버를 설정해야 합니다.이 대기열 모드는 Oracle Solaris 및 IBM AIX에서 사용할 수 있습니다.MacOS의 경우 특정 운영 체제에서는 큐 용량을 조정할 수 없기 때문에 여전히 에뮬레이트된 Posix 큐가 사용됩니다.
특징들
- 표준 기반 API - SCA, 오픈 그룹 XATMI
- 통신 유형 - 동기, 비동기, 회화, 게시/구독
- 타입 버퍼
- UBF(Unified Buffer Format) - 턱시도 FML/FML32 포맷의 에뮬레이션을 제공합니다.UBF(고성능 바이너리 프로토콜 버퍼 형식인 경우).버퍼는 고정 데이터 유형에 대한 이진 검색에 의해 인덱싱됩니다.버전 v8.0부터는 재귀 UBF 버퍼, PTR 및 VIEW 필드에 대한 지원이 추가되었습니다.
- STRING 버퍼 형식.
- CARRAY(바이트 배열) 버퍼 형식.
- JSON 버퍼 형식, JSON과 UBF 간의 자동 변환 사용 가능.
- VIEW 버퍼(버전 5.0+ 이후).이 오퍼 C 구조는 크로스 플랫폼 방식으로 프로세스 간에 전송됩니다.또한 UBF 필드를 VIEW 필드에 매핑할 수 있으므로 UBF 버퍼와 VIEW 버퍼를 결합하여 개발자가 애플리케이션을 보다 빠르게 개발할 수 있습니다.
- 트랜잭션 관리 - 글로벌 트랜잭션 - 2단계 커밋 프로토콜 - X/Open XA
- 클러스터링 - 피어 투 피어 기반
- 이벤트 브로커(게시 및 구독 메시징이라고도 함)
- 시스템 프로세스 감시 및 자가 복구(ping 및 재시작)
- SOA 서비스 캐시. XATMI 서비스를 LMDB 데이터베이스에 캐시할 수 있습니다.그 결과 로컬클라이언트로부터의 다음 서비스 콜은 캐시로부터 직접(주로 다이렉트메모리 판독으로부터) 결과를 수신합니다.
- 동적 재구성
- 커스텀 서버 폴링 확장
- XATMI 서브시스템은 메인 애플리케이션 서버 데몬(ndrxd)을 사용하지 않고 동작 가능
- 메인 애플리케이션서버 데몬(ndrxd)을 재기동할 수 있습니다(크래쉬 했을 경우).백업 시작 시 일정 시간 동안 학습 모드가 됩니다.이 모드에서는 시스템, 실행 중인 서비스 등에 대한 정보가 수집됩니다.학습 기간이 지나면 정상 작동을 시작합니다.
- 사용 가능한 tpforward() 콜
- ATMI 서버 스레드는 클라이언트가 되어 tpcall()을 실행할 수 있습니다.
- tptoutset() API 콜을 통한 ATMI 콜타임아웃 설정
- 광범위한 로깅 및 디버깅Enduro/X 로깅은 로그 레벨이 다른 이진수별로 구성할 수 있습니다.ATMI 서버는 앱 서버 외부에서 시작할 수 있으므로 IDE 프로그래밍이나 Valgrind 등의 도구를 사용하여 디버깅할 수 있습니다.
- 자동 유닛 테스트 및 통합 테스트를 사용하는 품질 보증 프로젝트
- ATMI 서비스 프로파일링 내장.
- 응용 프로그램을 완전히 재부팅하지 않고도 XATMI 서버 프로세스에 대해 환경 변수를 업데이트할 수 있습니다.
- 범용 클라이언트프로세스 모니터(CPM).서브시스템은 클라이언트 실행 파일을 시작/정지/감시할 수 있습니다.클라이언트 프로세스가 크래시되면 cpm은 프로세스를 다시 시작합니다.대규모 클라이언트 관리 기능을 사용하면 많은 유사한 실행 파일(서브섹션 범위 포함)을 쉽게 정의할 수 있습니다.또, 같은 방법으로 regexp 마스크를 사용해 그것들을 모두 관리할 수 있습니다.
- Enduro/X 버전 5.2부터는 Enduro/X 위에 구축된 소프트웨어가 PCI/DSS(Payment Card Industry Data Security Standard)를 준수할 수 있도록 구성 데이터 암호화 기능을 제공합니다.
- XATMI 서버 및 클라이언트 프로세스의 경우 버전 6.0.17 이후 최대 상주 메모리 및 가상 메모리 제한을 설정할 수 있습니다.따라서 제한에 도달하면 프로세스가 정상적으로 재시작됩니다.이 특별한 기능은 메모리 누수가 있는 바이너리를 벤더가 납품한 환경에서 사용할 수 있습니다.따라서 실제 가동 환경에서는 개발자에 의해 해결될 때까지 이러한 제한이 일시적으로 상황에 대처하는 데 도움이 될 수 있습니다.
- 시스템 정보 수집용 TMIB API.
- 클라이언트 및 서버 프로세스, 큐, 서비스, 머신 및 클러스터를 감시하는 NetXMS 에이전트.
- 빌드 툴(buildserver, buildclient, buildtms)[3]을 완전히 지원합니다.
- XATMI 서비스 디스패치스레딩
- UBF 버퍼에 대한 데이터 의존 라우팅 지원.
- XATMI 서버의 자동 트랜잭션.
- 서비스 priority 처리
- Enduro/X 관련 프로그램에 대한 Fly Log 설정 변경 및 로그 회전.
- 프로세스에 커스텀 실시간 명령어를 퍼블리시하기 위한 잠재적인 명령어 프레임워크.
성능
Enduro/X 미들웨어에 대한 벤치마크가 몇 개 작성되었으며 Oracle Tuxedo 및 ZeroMQ와 상당히 잘 경쟁하고 있음을 보여줍니다.Enduro/X는 56KB 데이터 블록 [4]범위에서 Tuxedo보다 30% 더 빨랐다.Enduro/X는 [5]10~20KB 범위에서 ZeroMQ보다 상당히 빨랐다.Rabbit MQ Enduro/X로 실시한 테스트에서도 강점을 발휘해 경쟁사보다 앞섰다.RPC 콜에서는 Enduro/X가 여러 번 앞섰고, 송신 전용 콜에서는 Rabbit이 앞섰습니다.MQ는 Enduro/[6]X에 조금 더 가까웠다.
서브시스템
Enduro/X에는 애플리케이션 서버와 미들웨어 기능을 확장하는 다양한 하위 모듈이 포함되어 있습니다.
큐잉 서브시스템
Enduro/X는 TMQ(Transactional Message Queue)라는 큐잉 서브시스템을 제공합니다.이 기능을 통해 응용 프로그램은 이름 있는 큐에서 메시지를 명시적으로 큐잉 및 큐잉 해제할 수 있는 영속적인 큐를 제공합니다.큐는 LIFO 또는 FIFO 순서로 메시지 대기 시간으로 정렬할 수 있습니다.큐는 XA 준거 자원 매니저에 의해 관리되므로 큐 조작이 분산 트랜잭션에 참여할 수 있습니다.큐에서 엔트리를 삭제하고 관련 Enduro/X ATMI 서비스를 호출하여 응답 메시지를 관련 응답 큐에 배치하고 실패한 메시지를 오류 큐에 배치하는 자동 큐 전송 기능이 제공됩니다.
구성 서비스
Enduro/X는 "cconfsrv"라는 패키지로 제공되는 특수 XATMI 서버를 통해 ini 파일 기반 구성 읽기를 사용하는 애플리케이션을 제공합니다.기본적으로 표준 tpcall()을 통해 사용자 애플리케이션은 설정 파일을 읽을 수 있습니다(다른 ini 파일 또는 폴더와 함께 사용할 수 있습니다.기술을 사용하면 메인 섹션의 키/값 상속과 함께 하위 섹션을 사용할 수 있습니다.
추적 로깅 서비스
Enduro/X는 tplog라는 새로운 API 함수 세트를 도입했습니다.이를 통해 Enduro/X가 내부적으로 사용하는 것과 동일한 C 기반의 고성능 디버깅로깅 기능을 사용할 수 있습니다.모든 로깅을 스레드 기반 파일로 리디렉션할 수 있습니다.또한 "request logging"을 위한 API도 있습니다. 이는 사용자와 Enduro/X가 각 요청에 대해 별도의 파일(세션 ID에 의한 로그, 사용자 이름에 의한 로그 등)에 로그인할 수 있음을 의미합니다.
Enduro/X Connect 패키지
Enduro/X Connect 패키지는 XATMI 서비스를 외부에 공개하기 위한 일반적인 방법을 제공합니다.따라서 서비스는 REST 일반 서비스로 호출할 수 있습니다.이 패키지는 메시지 내부 메시지를 JSON 형식으로 변환하는 기능을 제공합니다.웹 서비스 모듈은 확장 가능하며 형식 간 데이터 변환을 위한 몇 가지 옵션을 제공합니다.모듈은 또한 웹 서비스 인터페이스를 통한 파일 업로드, 정적 콘텐츠 서비스 및 글로벌 트랜잭션 조정을 지원합니다.
Enduro/X Connect 패키지는 내부 XATMI 서비스 호출을 통해 외부 웹 서비스에 액세스할 수 있는 모듈도 제공합니다.
세 번째 연결 컴포넌트는 Enduro/X Connect 패키지에 포함되어 있습니다.일반 TCP/IP 커넥터는 양방향 XATMI 서비스 API를 TCP/IP 소켓에 제공합니다.이러한 기능은 다양한 이유로 데이터를 ISO8583과 [7]같은 맞춤형 바이너리 프로토콜로 전송해야 하는 IoT 및 뱅킹 업계의 애플리케이션 개발을 단순화합니다.
애플리케이션 서버 for Go(ASG)
ASG는 Enduro/X 위에 바인딩 프로젝트를 진행하고 있습니다.작성자는 Golang 프로젝트는 정적으로 링크되어 있으며 기본적으로는 컴포넌트와 같은 것이 없기 때문에 이러한 바인딩을 이동용 애플리케이션 서버로 간주합니다.Enduro/X를 사용하면 상태 비저장 서비스를 나타내는 별도의 실행 파일 이진 파일을 실행할 수 있습니다.이러한 서비스는 서비스를 중단하지 않고 바로 새로고침할 수 있습니다.또한 플랫폼은 골랑을 이용하여 분산 트랜잭션 처리를 실행할 수 있습니다.개발자는 XA 트랜잭션을 지원하는 Go용 수정된 Oracle DB OCI8 드라이버를 제공합니다.Enduro/X ASG는 골랑을 위한 최초의 분산 거래 시설을 제공합니다.
Enduro/X Java
Enduro/X 버전 7.0은 Java용 바인딩을 제공합니다.XATMI 서버 및 클라이언트프로세스의 풀기능은 Java로 기술할 수 있습니다.프레임워크는 멀티프로세싱 원리에 기초하고 있기 때문에 XATMI 서버와 클라이언트는 독자적인 JVM 복사본을 가지고 있습니다.XATMI 서버/서비스 클래스의 요건은 최소이므로 프레임워크는 POJO 애플리케이션 서버로 간주할 수 있습니다.XA 2단계 커밋은 표준 JDBC 드라이버에서도 사용할 수 있습니다.트랜잭션은 트랜잭션 조정을 위해 JDBC 드라이버가 로드되는 표준 Enduro/X Core 트랜잭션 매니저에 의해 관리됩니다.바인딩 패키지는 exjld라는 Java Linker 프로세스도 제공합니다.Java 객체(jar 파일)를 libjvm 및 libjava에 종속된 표준 실행 프로세스로 링크하는 옵션을 제공합니다.따라서 모든 jar가 실행 가능한 프로세스로 패킹되어 Java 소프트웨어 전송이 간단해집니다.이제 각 프로세스는 모든 의존성을 포함하므로 실행 파일마다 다른 버전의 공통 jar 의존성을 사용할 수 있습니다.
서버 프로세스가 클래스 패스를 사용한 Java 실행 파일 또는 링크된 Java 이진 파일을 모두 지원하므로 ndrxd 데몬은 둘 다 부팅할 수 있습니다.
엔듀로/X-PHP
PHP5에서 전체 클라이언트 바인딩을 사용할 수 있습니다.클라이언트 PHP 프로세스는 로드 가능한 모듈을 컴파일하거나 PHP 내에서 Enduro/X 프로세스를 컴파일할 수 있습니다.PHP 프로세스가 클라이언트로 실행 중일 때는 Enduro/X 애플리케이션 환경에 존재해야 합니다.이는 애플리케이션이 PHP 앱이 실행되는 동일한 사용자(Apache 등) 아래에서 호스트되는 경우 또는 PHP 사용자가 tpbridge 프로세스를 통해 메인 애플리케이션 서버에 더 연결되는 마이크로 환경을 생성할 때 수행될 수 있습니다.모듈은 이쪽[4]에서 입수할 수 있습니다.
엔듀로/X펄
Perl 스크립트 언어에서는 클라이언트 및 서버 바인딩을 사용할 수 있습니다.Perl 모듈은 이쪽 [5]에서 입수할 수 있습니다.
획득
Enduro/X는 2017년 2월 Mavimax Ltd에 의해 ATR Baltic, Ltd로부터 소스코드와 현행 [8]계약에 대한 완전한 권리를 가지고 인수되었습니다.
역사
Enduro/X는 ATR Baltic에 의해 클로즈드 소스 프로젝트로 개발되었습니다.개발은 2009년 12월에 시작되어 Enduro/X가 버전 1.0에 도달한 시점에서 2012년 말에 시스템을 도입한 최초의 생산 고객(주로 은행)이 되었다.이 프로젝트는 2015년에 버전 v2.3.2로 오픈 소스되었습니다.그 이벤트로부터, 모든 개발이 공개됩니다.메이저 버전릴리즈마다 항상 새로운 기능이 추가됩니다.버전 6.0 Enduro/X가 GNU GPLv2 라이선스로 제공될 때까지 Enduro/X 6.0부터 프로젝트는 GNU AGPLv3 라이선스로 이동되었습니다.버전 7.0부터는 Java 및 Go 프로그래밍 언어에서 미들웨어를 사용할 수 있도록 라이센스가 완화되었습니다.Enduro/X에서 사용되는 AGPL은 Enduro/X를 사용하는 Java 코드나 Go 코드에는 영향을 주지 않습니다.이러한 변경 덕분에 현재 Enduro/X Java 및 Enduro/X Go(ASG) 모듈은 LGPL v3로 출시되어 있기 때문에 Java 및 Go 프로젝트는 상업적으로 지원이 제공되는 동안 추가 라이센스를 사용하여 미들웨어를 상업적으로 사용할 수 있습니다.
「 」를 참조해 주세요.
레퍼런스
- ^ "Patchwork epoll: add EPOLLEXCLUSIVE flag". patchwork.kernel.org. Jason Baron.
- ^ "EPOLLEXCLUSIVE Linux Kernel patch testing". mvitolin.wordpress.com. mvitolin.
- ^ "Enduro/X 7.5 Release". mavimax.com. Mavimax.
- ^ "Enduro/X VS Oracle Tuxedo performance benchmark". publicwork.wordpress.com. Publicwork.
- ^ "High performance middleware wars: ZeroMQ vs Enduro/X benchmark". publicwork.wordpress.com. Publicwork.
- ^ "Enduro/X vs RabbitMQ review and benchmark". publicwork.wordpress.com. Publicwork.
- ^ "Enduro/X Connect". www.mavimax.com. Mavimax.
- ^ "ATR Baltic's Enduro/X middleware Acquisition". www.mavimax.com. Mavimax Ltd.