워크로드 관리 |
BeenThere 샘플에 대한 기술 노트 |
소스 코드 찾기 |
코딩 참고사항 검토 |
BeenThere 응용프로그램용 소스 코드는
z/OS 고객: 샘플 응용프로그램이 z/OS 플랫폼에서 빌드되지 않으므로 샘플에 대한 소스 코드 트리는 z/OS 플랫폼에 제공되지 않습니다.
BeenThere 응용프로그램은 IBM WebSphere Application Server Network Deployment Edition의 워크로드 관리(WLM) 성능을 보여줍니다. BeenThere 응용프로그램은 BeenThere Servlet 및 BeenThere Stateless 세션 엔터프라이즈 Bean을 포함합니다. BeenThere Servlet은 HTTP 요청이 디스패치되는 클러스터의 Application Server를 보여줍니다. BeenThere 엔터프라이즈 Bean은 엔터프라이즈 Bean 요청이 디스패치되는 클러스터의 Application Server를 보여줍니다. BeenThere 엔터프라이즈 Bean은 BeenThere Servlet에 의해 호출됩니다.
BeenThere Servlet은 다음 정보를 표시합니다.
또한 BeenThere Servlet은 다음 조치를 수행할 수 있습니다.
웹 컨테이너와 EJB 컨테이너 워크로드 관리를 보여주는 데 사용되는 샘플 환경은 다음 그림으로 묘사됩니다.
그림 1 샘플 환경
이 환경의 시스템은 다음을 포함합니다.
구성은 두 서버 클러스터인 MyWebCluster 및 MyEJBCluster를 포함합니다. 서버 클러스터는 Application Server의 그룹으로 구성됩니다. 구성원 서버 중 하나가 실패하면, 요청은 클러스터의 다른 구성원에게 라우트됩니다. 샘플 클러스터의 각각은 두 개의 클러스터 구성원으로 구성되어 있습니다. 클러스터 MyWebCluster는 클러스터 구성원, WebServer1 및 WebServer2로 구성되며, 클러스터 MyEJBCluster는 클러스터 구성원, EJBServer1 및 EJBServer2로 구성됩니다.
이 구성된 환경은 단지 BeenThere 응용프로그램을 실행하는 방법을 보여주기 위해 사용되는 샘플입니다. 생산 환경에서, 신중한 자원 용량 계획은 예상되는 클라이언트 요청 로드에 기반한 시스템의 특정 수를 통해 몇 명의 Application Server 구성원을 작성할지 판별하도록 완료되어야 합니다.
WebSphere Application Server Network Deployment Edition은 HTTP 요청 및 EJB 요청의 워크로드 관리(WLM)를 제공합니다.
HTTP 요청의 워크로드 관리는 웹 서버 플러그인에 의해 핸들됩니다.
그림 1의 구성을 참고하십시오. web 시스템은 MyWebCluster 클러스터의 구성원을 포함하는 Application Server WebServer1 및 WebServer2의 각각에 HTTP 요청을 디스패치하는 IBM HTTP Server를 실행하고 BeenThere Servlet을 실행하고 있습니다. 이러한 Application Server는 각각 app1 및 app2 시스템에 구성됩니다. 게다가, IBM HTTP Server 플러그인은 WebServer1이 2의 WLM 가중치를 가지고 WebServer2가 3의 WLM 가중치를 가지도록 구성됩니다. 사용자는 각 요청이 서비스된 후에 그들의 구성된 값으로 시작되는 카운터로 가중치를 간주하고 1까지 감소시킬 수 있습니다. 요청은 현재 가중치 카운터 값이 0보다 큰 Application Server의 라운드 로빙 프로세스를 사용하여 디스패치됩니다. 값이 0이면, Application Server는 생략됩니다. 모든 가중치 카운터가 0까지 감소된 후에, 모든 Application Server 가중치 카운터는 그들의 구성된 값으로 재설정되며 디스패치 프로세스는 처음부터 다시 한번 시작됩니다.
EJB 요청의 워크로드 관리는 WebSphere Application Server의 WLM Controller에 의해 내부적으로 핸들됩니다.
그림 1의 구성을 참고하십시오. MyEJBCluster 클러스터는 BeenThere Stateless 세션 엔터프라이즈 Bean 실행에 책임이 있는 Application Server 구성원 EJBServer1 및 EJBServer2를 포함하는 것으로 정의됩니다. BeenThere Servlet은 엔터프라이즈 Bean이 실행 중인 Application Server에 관한 실행 정보를 얻기 위해 엔터프라이즈 Bean을 호출합니다. 게다가, 이 서버는 1 및 3의 가중치 값으로 각각 구성되어 있습니다.
z/OS 플랫폼의 경우, 가중치 값은 HTTP 요청을 조절하는 데 사용되지만 IIOP(Internet Inter-ORB Protocol) 요청을 조절하는 데 사용되지는 않습니다.
BeenThere 응용프로그램은 WebSphere Application Server의 관리 API(Application Programming Interface)를 이용합니다. 이 인터페이스를 사용하여 응용프로그램은 런타임 및 구성 정보에 액세스할 수 있습니다.
표준 JMX MBean 관리 기능을 수행하는 능력뿐만 아니라 Application Server 속성 정보를 얻도록 서버측 인터페이스를 제공합니다.
클라이언트측 인터페이스를 원격 AdminService 오브젝트에 제공합니다. AdminClient 클래스는 지원되는 JMX(Java Management Extension) 커넥터 중 하나를 통해 원격 AdminService 오브젝트에 프록시를 제공합니다.
로컬로 또는 원격으로 구성 데이터를 조회하거나 수정하는 인터페이스를 제공하며, Application Server 구성 문서의 위치와 내용을 관리합니다.
WebSphere Application Server 관리 인터페이스를 사용할 때 응용프로그램이 가지는 힘과 유연성을 보여주기 위해 BeenThere 응용프로그램은 다음 방법으로 이 인터페이스 모두를 이용합니다.
AdminService 인터페이스는 실행 중인 Application Server에 대한 프로세스 ID, Application Server 이름 및 노드 이름을 얻기 위해 엔터프라이즈 Bean 및 BeenThere Servlet 둘 다에 의해 사용됩니다. 다음 코드 세그먼트는 서버 속성 정보를 얻는 방법을 보여줍니다.
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Get the WebSphere Admin Local Server MBean instance. ObjectName localServer = adminService.getLocalServer(); // Get the Node name. nodeName = (String) adminService.getAttribute(localServer, "nodeName"); // Get the Application Server name. serverName = (String) adminService.getAttribute(localServer, "name"); // Get the Application Server Process Id. serverPid = (String) adminService.getAttribute(localServer, "pid");
AdminClient 인터페이스는 BeenThere 엔터프라이즈 Bean을 실행 중인 클러스터의 모든 Application Server 구성원에 대한 클러스터 구성원 가중치 값을 검색하기 위해 Deployment Manager에 연결하는 데 사용됩니다. 다음 코드 세그먼트는 AdminClient 인터페이스의 인스턴스를 얻는 방법을 보여줍니다.
// Get the WebSphere AdminService. AdminService adminService = AdminServiceFactory.getAdminService(); // Get the AdminClient instance for the Deployment Manager. adminClient = adminService.getDeploymentManagerAdminClient();
ConfigService 인터페이스는 BeenThere 응용프로그램이 WebSphere Application Server Base Edition 또는 Network Deployment Edition 환경에서 실행 중인지 판별하기 위해 WebSphere Application Server cell.xml 구성 문서를 읽는 데 사용됩니다. 다음 코드 세그먼트는 응용프로그램이 실행 중인 환경을 판별하는 방법을 보여줍니다.
// Create a new WebSphere Management Session. Session session = new Session(); // Get the WebSphere ConfigService instance // for the application server executing this servlet. ConfigService configService = ConfigServiceFactory.getConfigService(); if (configService != null) { // Read the cell.xml document. ObjectName cellObj = ConfigServiceHelper.createObjectName(null, "Cell"); ObjectName[] cellObjs = configService.queryConfigObjects(session, null, cellObj, null); if (cellObjs.length != 0) { cellObj = cellObjs[0]; String cellName = (String) configService.getAttribute(session, cellObj, "name"); String cellType = (String) configService.getAttribute(session, cellObj, "cellType"); if (cellType.equals("DISTRIBUTED")) { websphereND = true; } } // Release the Session. configService.discard(session);Network Deployment 환경이 발견되면, 이 옵션이 단지 이 유형의 환경에서만 유효하므로 Display Bean 클러스터 구성원 가중치 옵션이 사용 가능하게 표시됩니다. 그렇지 않으면, 이 옵션은 선택 가능한 옵션으로 표시되지 않습니다.