KR101044173B1 - Architecture for distributed computing system and automated design, deployment, and management of distributed applications - Google Patents

Architecture for distributed computing system and automated design, deployment, and management of distributed applications Download PDF

Info

Publication number
KR101044173B1
KR101044173B1 KR1020040015346A KR20040015346A KR101044173B1 KR 101044173 B1 KR101044173 B1 KR 101044173B1 KR 1020040015346 A KR1020040015346 A KR 1020040015346A KR 20040015346 A KR20040015346 A KR 20040015346A KR 101044173 B1 KR101044173 B1 KR 101044173B1
Authority
KR
South Korea
Prior art keywords
type
sdm
name
component
application
Prior art date
Application number
KR1020040015346A
Other languages
Korean (ko)
Other versions
KR20040079337A (en
Inventor
틸다 브라운
샬리에디. 챠세
케빈 그레리시
갈렌씨 헌트
히드리에아머
데이비드 노블
제프리 아드레드
글렌알. 피터슨
바삼 타바라
알렉산더 토론
로버트브이. 웰랜드
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Priority to KR1020040015346A priority Critical patent/KR101044173B1/en
Publication of KR20040079337A publication Critical patent/KR20040079337A/en
Application granted granted Critical
Publication of KR101044173B1 publication Critical patent/KR101044173B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs

Abstract

설계 도구는 분산형 컴퓨팅 시스템 및 분산형 애플리케이션의 추상화 기술을 가능하게 하는 서비스 정의 모델을 포함한다. 설계 도구는 또한 서비스 정의 모델 내에서 어떻게 기능적 동작들이 지정되어야 하는지를 지시하기 위한 스키마를 포함한다. 기능적 동작은 분산형 애플리케이션의 설계, 분산형 애플리케이션의 배포, 분산형 애플리케이션의 관리를 포함한다.

Figure R1020040015346

설계 도구, 분산형 애플리케이션, 추상화 기술, 서비스 정의 모델

Design tools include a service definition model that enables the abstraction of distributed computing systems and distributed applications. The design tool also includes a schema for indicating how functional operations should be specified within the service definition model. Functional operations include designing distributed applications, deploying distributed applications, and managing distributed applications.

Figure R1020040015346

Design tools, distributed applications, abstraction technologies, service definition models

Description

분산형 컴퓨팅 시스템상에서 분산형 애플리케이션들을 설계, 배포 및 관리하기 위한 방법 및 장치, 자원 관리자 및 컴퓨터 판독가능 기록 매체{ARCHITECTURE FOR DISTRIBUTED COMPUTING SYSTEM AND AUTOMATED DESIGN, DEPLOYMENT, AND MANAGEMENT OF DISTRIBUTED APPLICATIONS}A method and apparatus for designing, deploying, and managing distributed applications on a distributed computing system, a resource manager, and a computer readable recording medium.

도 1은 인터넷 데이터 센터의 일예를 나타내는 도면.1 is a diagram illustrating an example of an internet data center.

도 2는 서비스의 일예를 나타내는 도면.2 is a diagram illustrating an example of a service.

도 3 내지 8은 계층 추상화(layer abstractions)의 예를 나타내는 도면.3-8 illustrate examples of layer abstractions.

도 9 내지 10은 SDM 형 스페이스(SDM type space)의 일예를 나타내는 도면.9 to 10 are diagrams showing an example of an SDM type space.

도 11 내지 15는 계층 추상화의 예를 나타내는 도면.11-15 illustrate examples of hierarchical abstraction.

도 16은 프로세스의 예를 나타내는 도면.16 shows an example of a process.

도 17 내지 19는 여기서 논의되는 컴포넌트들의 예를 나타내는 도면.17-19 illustrate examples of components discussed herein.

도 20 내지 21은 그래픽 사용자 인터페이스(graphical user interface)의 일예를 나타내는 도면.20-21 illustrate one example of a graphical user interface.

도 22는 SDM 모델의 일예를 나타내는 도면.22 is a diagram illustrating an example of an SDM model.

도 23은 배포의 일예를 나타내는 도면.Fig. 23 shows an example of distribution;

도 24는 유형들의 예를 나타내는 도면.24 shows an example of types.

도 25는 인스턴스 요청들(instance requests)의 예를 나타내는 도면.FIG. 25 illustrates an example of instance requests. FIG.

도 26은 제약의 유효성 재검증(revalidation of constraints)의 예를 나타내 는 도면.FIG. 26 illustrates an example of validation of constraints. FIG.

도 27은 SDM 런타임(SDM runtime)의 논리 아키텍처의 일예를 나타내는 도면.FIG. 27 illustrates an example of a logical architecture of an SDM runtime. FIG.

도 28은 서비스의 그래픽 표현의 일예를 나타내는 도면.28 illustrates an example of a graphical representation of a service.

도 29는 인스턴스 스페이스의 일예를 나타내는 도면.29 shows an example of an instance space.

도 30은 데이터를 SDU로 포장하는 일예를 나타내는 도면.30 is a diagram illustrating an example of packaging data into an SDU.

도 31은 유형 스페이스, 멤버 스페이스, 및 인스턴스 스페이스의 일예를 나타내는 도면.31 is a diagram illustrating an example of a type space, a member space, and an instance space.

도 32는 멤버 트리의 일예를 나타내는 도면.32 is a diagram illustrating an example of a member tree.

도 33은 인스턴스 트리의 일예를 나타내는 도면.33 is a diagram illustrating an example of an instance tree.

도 34는 여기서 설명되는 시스템을 구현한 일예를 나타내는 도면.34 illustrates an example implementation of the system described herein.

도 35는 컴포넌트 인스턴스(component instances)의 생성을 추적하는 일예를 나타내는 도면.FIG. 35 illustrates an example of tracking the creation of component instances. FIG.

도 36 내지 39는 컴포넌트 인스턴스 이벤트의 예를 나타내는 도면.36-39 illustrate examples of component instance events.

도 40은 분할된 런타임의 일예를 나타내는 도면.40 illustrates an example of a segmented runtime.

도 41은 멤버 스페이스의 일예를 나타내는 도면.41 shows an example of a member space.

도 42는 인스턴스 계층의 일예를 나타내는 도면.42 illustrates an example of an instance hierarchy.

도 43은 인스턴스 스페이스를 분할하는 일예를 나타내는 도면.43 is a diagram illustrating an example of dividing an instance space.

도 44는 다양한 컴포넌트들 간의 관계의 예를 나타내는 도면.44 illustrates an example of a relationship between various components.

도 45는 고정 아이덴티티 신뢰 관계(fixed identity trust relationship)의 일예를 나타내는 도면.FIG. 45 illustrates an example of a fixed identity trust relationship. FIG.

도 46 내지 47은 컴포넌트들의 배열의 일예를 나타내는 도면.46-47 illustrate an example of an arrangement of components.

도 48은 플랫폼 아키텍처의 일예를 나타내는 도면.48 illustrates an example of a platform architecture.

도 49는 애플리케이션 배포를 위한 사용 흐름(usage flow)의 예를 나타내는 도면.FIG. 49 illustrates an example of a usage flow for application distribution. FIG.

도 50은 애플리케이션 설정 및 호스트 설정의 예를 나타내는 도면.50 shows an example of an application setting and a host setting;

도 51은 배포 도구에 대한 국면(phases)의 예를 나타내는 도면.FIG. 51 illustrates an example of phases for a deployment tool. FIG.

도 52는 데이터 센터 기술의 시각화의 일예를 나타내는 도면.52 illustrates an example of visualization of a data center technology.

도 53 내지 54는 흐름도의 예를 나타내는 도면.53 to 54 show examples of flowcharts.

도 55는 SDU를 처리하는 일예를 나타내는 도면.55 illustrates an example of processing an SDU.

도 56 내지 58은 흐름도의 예를 나타내는 도면.56 to 58 show examples of flowcharts.

도 59는 모델 아키텍처의 일예를 나타내는 도면.59 illustrates an example of model architecture.

도 60은 관리의 계층들(layers of management)의 예를 나타내는 도면.60 illustrates an example of layers of management.

도 61은 시스템의 동작의 일예를 나타내는 도면.61 shows an example of the operation of the system.

도 62는 커넥터 배열의 일예를 나타내는 도면.62 shows an example of a connector arrangement;

도 63 내지 67은 디바이스들의 물리적 구성의 일예를 나타내는 도면.63-67 illustrate an example of a physical configuration of devices.

도 68은 요청 그래프(request graph)의 일예를 나타내는 도면.FIG. 68 illustrates an example of a request graph. FIG.

도 69는 응답 그래프의 일예를 나타내는 도면.69 is a diagram showing an example of a response graph.

도 70 내지 86은 본 발명이 사용될 수 있는 시나리오의 예를 나타내는 도면.70-86 illustrate examples of scenarios in which the present invention may be used.

도 87은 서비스 플랫폼 아키텍처의 일예를 나타내는 도면.87 illustrates an example of a service platform architecture.

도 88은 시스템에서의 컴포넌트들의 예를 나타내는 도면.88 illustrates an example of components in a system.

도 89는 여기서 설명된 시스템에 포함될 수 있는 제품들의 예를 나타내는 도면.89 illustrates an example of products that may be included in the system described herein.

도 90은 다양한 자원 관리 컴포넌트들을 나타내는 도면.90 illustrates various resource management components.

도 91은 다수의 LAN들의 배열의 일예를 나타내는 도면.91 illustrates an example of an arrangement of multiple LANs.

도 92는 ADS 아키텍처의 일예를 나타내는 도면.92 illustrates an example of an ADS architecture.

도 93은 ADS 원격 부트 및 이미징 시스템(ADS remote boot and imaging system)의 일예를 나타내는 도면.FIG. 93 illustrates an example of an ADS remote boot and imaging system. FIG.

도 94는 토폴로지 배열의 일예를 나타내는 도면.94 shows an example of a topology arrangement;

도 95는 SDML의 일예를 나타내는 도면.95 is a diagram illustrating an example of SDML.

도 96은 SDU에서의 데이터 집합의 일예를 나타내는 도면.96 shows an example of a data set in an SDU;

도 97은 SDM 실행 시간 API들을 사용하는 동적 바인딩(dynamic binding)의 일예를 나타내는 도면.FIG. 97 illustrates an example of dynamic binding using SDM runtime APIs. FIG.

도 98은 SDM 배열의 일예를 나타내는 도면.98 is a diagram showing an example of an SDM array;

도 99는 배포의 일예를 나타내는 도면.99 shows an example of distribution;

도 100은 시스템 아키텍처의 일예를 나타내는 도면.100 illustrates an example of a system architecture.

도 101은 다양한 배포 계층들의 일예를 나타내는 도면.101 illustrates an example of various distribution layers.

도 102는 동작 논리의 예를 나타내는 도면.102 illustrates an example of operation logic.

도 103 내지 105는 인터넷으로 인한 변화의 예를 나타내는 도면.103 to 105 show examples of changes caused by the Internet.

도 106은 애플리케이션 라이프사이클의 일예를 나타내는 도면.106 illustrates an example of an application lifecycle.

도 107은 새로운 아키텍처의 이점의 예를 나타내는 도면.107 illustrates an example of the benefits of a new architecture.

도 108은 복잡한 시스템을 단순한 다이어그램으로 변화하는 일예를 나타내는 도면.108 shows an example of changing a complex system into a simple diagram.

도 109는 서비스의 일예를 나타내는 도면.109 illustrates an example of a service;

도 110은 SQL 클러스터의 일예를 나타내는 도면.110 is a diagram illustrating an example of an SQL cluster.

도 111은 SDM 데이터 센터 모델의 일예를 나타내는 도면.111 illustrates an example of an SDM data center model.

도 112는 설계 애플리케이션 외면(design application surface)의 일예를 나타내는 도면.FIG. 112 illustrates an example of a design application surface. FIG.

도 113은 데이터 센터에서의 SDM 서비스의 일예를 나타내는 도면.113 is a diagram illustrating an example of SDM service in a data center.

도 114는 자원 관리자의 예를 나타내는 도면.114 is a diagram illustrating an example of a resource manager.

도 115는 자원 시각화의 일예를 나타내는 도면.115 is a diagram illustrating an example of resource visualization.

도 116은 프로그래밍 동작 논리의 예를 나타내는 도면.116 illustrates an example of programming operation logic.

도 117은 동작 논리와의 상호작용의 예를 나타내는 도면.117 illustrates an example of interaction with operational logic.

도 118 내지 119는 이질적 환경(heterogeneous environments)을 관리하는 일예를 나타내는 도면.118-119 illustrate an example of managing heterogeneous environments.

*도면의 주요부분에 대한 부호의 설명** Description of the symbols for the main parts of the drawings *

100 인터넷 데이터 센터100 internet data centers

102 서버 컴퓨터102 server computer

104 부가적 컴퓨터의 풀104 Pool of Additional Computers

관련 출원Related application

본 출원은, 2003년 3월 6일자로 출원되어 여기서 일부로서 참조되는 미국 가출원 제60/452,736호의 이익을 주장한다.This application claims the benefit of US Provisional Application No. 60 / 452,736, filed March 6, 2003, incorporated herein by reference.

또한, 본 출원은 (여기서 일부로서 참조되는) 다음의 미국 특허 출원들에 관계된다:In addition, the present application relates to the following US patent applications (incorporated herein as part of):

2003년 3월 6일 출원된, 발명의 명칭이 "Virtual Network Topology Generation"인 미국 특허 출원 제10/382,942호;US Patent Application No. 10 / 382,942, filed March 6, 2003, entitled "Virtual Network Topology Generation";

2000년 10월 24일 출원된, 발명의 명칭이 "System and Method for Distributed Management of Shared Computers"인 미국 특허 출원 제09/695,812호;US patent application Ser. No. 09 / 695,812, filed Oct. 24, 2000, entitled "System and Method for Distributed Management of Shared Computers";

2000년 10월 24일 출원된, 발명의 명칭이 "System and Method for Logical Modeling of Distributed Computer Systems"인 미국 특허 출원 제09/695,813호;US patent application Ser. No. 09 / 695,813, filed Oct. 24, 2000, entitled "System and Method for Logical Modeling of Distributed Computer Systems";

2000년 10월 24일 출원된, 발명의 명칭이 "System and Method for Restricting Data Transfers and Managing Software Components of Distributed Computers"인 미국 특허 출원 제09/695,820호;US Patent Application No. 09 / 695,820, filed October 24, 2000, entitled "System and Method for Restricting Data Transfers and Managing Software Components of Distributed Computers";

2000년 10월 24일 출원된, 발명의 명칭이 "Using Packet Filters and Network Virtualization to Restrict Network Communications"인 미국 특허 출원 제09/695,821호;US Patent Application No. 09 / 695,821, filed October 24, 2000, entitled "Using Packet Filters and Network Virtualization to Restrict Network Communications";

2000년 10월 24일 출원된, 발명의 명칭이 "System and Method for Designing a Logical Model of Distributed Computer Systems and Deploying Physical Resources According to the Logical Model"인 미국 특허 출원 제09/696,707호; 및US Patent Application No. 09 / 696,707, filed Oct. 24, 2000, entitled "System and Method for Designing a Logical Model of Distributed Computer Systems and Deploying Physical Resources According to the Logical Model"; And

2000년 10월 24일 출원된, 발명의 명칭이 "System and Method Providing Automatic Policy Enforcement in a Multi-Computer Service Application"인 미국 특허 출원 제09/696,752호.US patent application Ser. No. 09 / 696,752, filed Oct. 24, 2000, entitled "System and Method Providing Automatic Policy Enforcement in a Multi-Computer Service Application."

본 발명은 분산형 컴퓨팅 시스템을 위한 아키텍처 및 그 분산형 컴퓨팅 시스템 상의 분산형 애플리케이션의 자동화된 설계, 배포와 관리에 관한 것이다.The present invention relates to an architecture for a distributed computing system and to the automated design, deployment, and management of distributed applications on the distributed computing system.

인터넷 사용은 지난 수년 동안 폭발적으로 증가하였으며, 계속 증가하고 있다. 사람들은 전자 메일, 온라인 쇼핑, 뉴스 및 정보의 수집, 음악의 청취, 비디오 클립의 감상, 구직 등과 같은 월드 와이드 웹(World Wide Web, 단순히 "Web") 상에서 제공되는 다양한 서비스들에 매우 만족하게 되었다. 인터넷-기반 서비스들의 성장 수요와 보조를 맞추기 위해서, 호스팅 웹사이트들을 위한 백엔드 서비스(backend service)를 제공하고 그 사이트와 관련된 데이터를 저장하는, 호스팅 웹사이트용 컴퓨터 시스템들에서 대단한 성장이 있어 왔다.Internet usage has exploded over the years and continues to grow. People are very satisfied with the variety of services offered on the World Wide Web (or simply "Web"), such as e-mail, online shopping, news and information collection, listening to music, watching video clips, and finding a job. . In order to keep pace with the growing demand of Internet-based services, there has been a tremendous growth in computer systems for hosting websites that provide a backend service for hosting websites and store data associated with that site.

분산형 컴퓨터 시스템의 일 유형은 인터넷 데이터 센터(Internet data center; IDC)인데, IDC는 인터넷-기반 서비스들을 호스팅하기 위한 다수의 컴퓨터들에게 장소를 제공하는 특별히 설계된 복합체(complex)이다. "웹농장(Webfarms)" 및 "서버 농장(server farms)"이라는 이름으로도 통하는 IDC들은 일반적으로 수백에서 수천개의 컴퓨터들에게 기후가 제어되고 물리적으로 안전한 건물내에 장소를 제공한다. 이들 컴퓨터들은 상호 연결되어, 하나 이상의 인터넷 서비스 또는 웹사이트를 지원하는 하나 이상의 프로그램을 실행시킨다. IDC들은 신뢰할 수 있는 인 터넷 액세스, 신뢰할 수 있는 전원, 및 안전한 운영 환경을 제공한다.One type of distributed computer system is the Internet data center (IDC), which is a specially designed complex that provides a place for multiple computers to host Internet-based services. IDCs, also known as "Webfarms" and "server farms," generally provide places for hundreds to thousands of computers in climate-controlled and physically secure buildings. These computers are interconnected to run one or more programs that support one or more Internet services or websites. IDCs provide reliable Internet access, reliable power, and a secure operating environment.

도 1은 인터넷 데이터 센터(100)를 도시한다. 그것은 특별하게 구성된 스페이스에 배열된 다수의 서버 컴퓨터들(102)을 가진다. 컴퓨터들은 범용 컴퓨터이며, 일반적으로 서버들로서 구성된다. 인터넷 데이터 센터는 하나의 엔티티를 위한 하나의 사이트에 장소를 제공하도록(예를 들어, Yahoo! 또는 MSN을 위한 데이터 센터) 또는 다수의 엔티티들을 위한 다수의 사이트들을 수용하도록(예를 들어, 다수의 회사들을 위한 사이트들을 호스트하는 Exodus 센터) 구성될 수 있다.1 illustrates an internet data center 100. It has a number of server computers 102 arranged in a specially configured space. Computers are general purpose computers and are generally configured as servers. Internet data centers can provide a place on one site for one entity (eg, a data center for Yahoo! or MSN) or to accommodate multiple sites for multiple entities (eg, Exodus centers that host sites for companies.

IDC(100)는 컴퓨터 자원을 공유하는 3개의 엔티티들 -엔티티 A, 엔티티 B, 엔티티 C-을 가진 것으로 예시되고 있다. 이들 엔티티는 Web 상에 존재하기를 희망하는 다수의 회사들을 나타낸다. IDC(100)는 격심한 트래픽(heavy traffic)의 상황에서 엔티티들에 의해 사용될 수 있는 추가적인 컴퓨터들(104)을 가지고 있다. 예를 들어, 온라인 소매에 종사하는 엔티티는 크리스마스 시즌 동안 훨씬 더 많은 수요를 경험할 수 있다. 추가적인 컴퓨터는 IDC에게 이러한 수요를 충족시킬 수 있는 유연성을 제공한다.IDC 100 is illustrated as having three entities that share computer resources: entity A, entity B, entity C. These entities represent a number of companies that wish to exist on the Web. IDC 100 has additional computers 104 that can be used by entities in the context of heavy traffic. For example, entities engaged in online retailing may experience even more demand during the Christmas season. Additional computers give IDC the flexibility to meet this demand.

오늘날, 큰 IDC들은 복합체이며, 종종 다수의 애플리케이션들을 호스트하도록 요청된다. 예를 들어, 일부 웹사이트들은 수천개의 컴퓨터들을 운영할 수 있고, 많은 분산형 애플리케이션들을 호스트할 수 있다. 이들 분산형 애플리케이션은 종종 복잡한 애플리케이션들을 지원할 수 있도록 오퍼레이터가 IDC 내에 와이어링 구성을 수동적으로 배열할 뿐 아니라 어떤 네트워크 스위치들에 연결하도록 요 청하는 필수품들(requirements)과 네트워크로 접속된 복합체를 가진다. 그 결과, 애플리케이션 요청들에 따르기 위해 물리적 네트워크 토폴로지를 세우는 이 작업은 사람들의 오류를 일으키기 쉬운 성가시고, 시간 소모적인 프로세스일 수 있다. 따라서, 물리적 컴퓨팅 시스템 상에 분산형 애플리케이션을 설계하고 배포하기 위한 개량된 기술에 대한 필요가 존재한다.Today, large IDCs are complex and are often required to host multiple applications. For example, some websites can run thousands of computers and host many distributed applications. These distributed applications often have complex networked requirements and requirements that require operators to connect to some network switches, as well as manually arrange wiring configurations within IDC to support complex applications. As a result, this task of establishing a physical network topology to comply with application requests can be a cumbersome and time-consuming process that is prone to human error. Accordingly, there is a need for improved techniques for designing and deploying distributed applications on physical computing systems.

분산형 컴퓨팅 시스템 상에 분산형 애플리케이션을 설계하고, 배포하며, 관리하기 위한 아키텍처 및 방법이 설명된다.An architecture and method for designing, deploying, and managing distributed applications on a distributed computing system are described.

다음 개시는 대규모 애플리케이션 서비스와 함께 분산형 컴퓨팅 시스템을 설계하고 구현하기 위한 아키텍처에 어울리는 다수의 양상들을 설명한다. 그 개시는 서비스 정의 모델(service definition model; SDM) 및 SDM 런타임 환경에 대한 논의를 포함한다. 그 개시는 어떻게 데이터 센터 컴포넌트들을 모델링할 것인지, 어떻게 분산형 애플리케이션 기술을 모델링할 것인지, 및 모델링된 데이터 센터 상으로 모델링된 애플리케이션을 논리적으로 배포하고 설계 시에 이 논리적 배포를 확인하기 위한 기술들과 같은 설계 양상들을 더 포함한다. 그 개시는 물리적 데이터 센터에 애플리케이션 배포를 용이하게 하기 위해서 어떻게 물리적 자원들 상에 분산형 애플리케이션의 물리적 배포, 물리적 자원들을 사용하는 모델을 실증할 것인지와 같은 배포 양상들을 더 설명한다. 또한, 그 개시는 SDM을 사용하여 문맥적 관리 피드백(contextual management feedback), 추적, 및 운영 피드백을 사용하는 것을 포함하는 관리 양상도 언급한다. 그 개시는 물리적 자원을 가로질러 애플리 케이션의 배포에 사용되며, 상기 관리 양상들을 지원하기 위한 다수의 자원 관리자들에 대해서 논의한다.The following disclosure describes a number of aspects suitable for an architecture for designing and implementing distributed computing systems with large application services. The disclosure includes a discussion of the service definition model (SDM) and the SDM runtime environment. The disclosure includes techniques for modeling data center components, how to model distributed application technologies, and techniques for logically deploying modeled applications onto a modeled data center and verifying this logical deployment at design time. The same design aspects are further included. The disclosure further describes deployment aspects, such as how to demonstrate a physical distribution of distributed applications on physical resources, a model of using physical resources to facilitate application deployment to a physical data center. The disclosure also refers to management aspects that include using contextual management feedback, tracking, and operational feedback using SDM. The disclosure is used to distribute applications across physical resources and discusses a number of resource managers for supporting the above aspects of management.

서비스 정의 모델(SDM)Service Definition Model (SDM)

서비스 정의 모델(SDM)은 애플리케이션 설계자가 추상적인 방법으로 데이터 센터 및 분산형 컴퓨터 애플리케이션을 설계하기 위한 문맥과 도구를 제공한다. 그 모델은 결국 물리적 컴퓨터 자원 및 소프트웨어에 의해 구현될 애플리케이션들의 기능 유닛들을 나타내는 요소들의 집합을 정의한다. 컴포넌트들에 의해 표현되는 기능 동작들을 어떻게 지정할 것인지를 지시하는 스키마는 모델 요소들과 관련되어 있다.The Service Definition Model (SDM) provides application designers with the context and tools to design data centers and distributed computer applications in an abstract way. The model defines a set of elements that ultimately represent functional units of applications to be implemented by physical computer resources and software. A schema indicating how to specify the functional actions represented by the components is associated with the model elements.

SDM 개괄SDM Overview

- 인터넷 시대(Internet Era)Internet Era

지난 십년 동안, 우리는 인터넷이 컴퓨팅 플랫폼으로서 판명되는 것을 목격해 왔다. 더 많은 소프트웨어 회사들이 그 소프트웨어를 서비스 모델로서 채택하고 있다. 이들 서비스는 일반적으로 서버, 네트워크 장비 및 다른 전문 하드웨어를 포함하는 다수의 기계들을 운행시키는 다수의 컴포넌트들로 이루어진다. 느슨하게 연결된 비동기 프로그래밍 모델(loosely coupled, asynchronous programming models)은 표준이 되어 가고 있다. 계량성(scalability), 유용성(availability), 및 신뢰성은 이들 분산형 서비스의 성공에 중요하다.Over the past decade, we have seen the Internet turn out to be a computing platform. More software companies are adopting the software as a service model. These services typically consist of a number of components that run a number of machines, including servers, network equipment and other specialized hardware. Loosely coupled, asynchronous programming models are becoming the norm. Scalability, availability, and reliability are critical to the success of these decentralized services.

우리는 또한 하드웨어 유행에서의 변화를 목격하고 있다. 고밀도 서버들 및 전문 네트워크 하드웨어는 데이터 센터에서 널리 보급되어 있다. 스위치형 구조물(switched fabrics)이 시스템 버스를 대신하여 시스템 구성에 보다 큰 유연성을 제공하고 있다. 이제, 하드웨어 비용은 전용 운영 직원을 교육하고 관리하는 비용에 비하면 소유권의 총 비용(Total Cost of Ownership; TCO) 측정 기준에서 작은 역할만 할 뿐이다. 바위처럼 단단한 운영 실행(rock-solid operational practices)은 임의의 고 유용성 서비스에 극히 중요하지만, 수동적인 프로시저들을 실행하는 사람들로 인하여 오류를 범하기 쉽기 때문에 이들 실행을 지속적으로 반복하기는 어렵다. 서비스 시대로서 신흥 소프트웨어에서, 개발의 초점은 데스크탑에서 서버로 옮겨가고 있다. 이러한 초점의 변화와 함께, 소프트웨어 개발자, 하드웨어 벤더, 및 IT 전문가들에게 다음과 같은 새로운 문제들이 대두되고 있다:We are also witnessing a change in hardware trends. High density servers and specialized network hardware are widespread in data centers. Switched fabrics replace the system bus and provide greater flexibility in system configuration. Now, hardware costs only play a small role in the Total Cost of Ownership (TCO) metric compared to the cost of training and managing dedicated operations staff. Rock-solid operational practices are extremely important for any high-availability service, but it is difficult to continually repeat these practices because they are prone to errors due to the people who perform the manual procedures. In emerging software as a service age, the focus of development is shifting from desktop to server. With this shift in focus, new issues arise for software developers, hardware vendors, and IT professionals:

- 서비스들이 보다 크고 보다 복잡하다 - 서비스들이 개발하기에 시간-소모적이고, 유지하기 어렵고 비싸며, 추가적인 기능을 확장하기 위험하다.Services are larger and more complex-they are time-consuming to develop, difficult to maintain and expensive, and risk extending additional functionality.

- 서비스들이 획일적이 되기 쉽다 - 서비스들이 습관이 된 컴포넌트들 및 특정 구성에 의존하기 쉽다. 많은 서비스들 중 일부분이 서비스의 유용성에 영향을 주지 않고 제거되거나, 독립적으로 개선되거나, 또는 대체물로 교체될 수 없다.-Services are likely to be uniform-Services are likely to depend on the specific components and the components that have become habits. Some of many services cannot be removed, independently improved, or replaced with replacements without affecting the usefulness of the service.

- 서비스들이 특정 하드웨어 구성에 의존한다 - 특정 네트워크 토폴로지 또는 특정 네트워크 장치에 대한 의존성이 있는지, 하드웨어와 소프트웨어 간의 바인딩은 다양한 데이터 센터에서 서비스를 호스트할 수 있는 능력을 상당히 감소시킨다.-Services depend on specific hardware configuration-Whether there is a dependency on a specific network topology or a specific network device, the binding between hardware and software significantly reduces the ability to host services in various data centers.

- 서비스들이 운영적인 일관성을 요구한다 - 대부분의 서비스들은 동작을 위해 운영 직원을 필요로 한다. 일반적인 플랫폼의 부족은 서비스들을 가로질러 코 드를 재사용하고 운영상의 최상의 실시를 제정할 수 있는 능력을 감소시킨다. 불행하게도, 운영 직원은 각 서비스의 특징들을 훈련받아야 하고, 각 서비스가 발전될 때 다시 훈련받아야 한다.-Services require operational consistency-Most services require operations staff to operate. Lack of a common platform reduces the ability to reuse code across services and establish best practices for operation. Unfortunately, operations staff must be trained on the characteristics of each service and again when each service is developed.

"서비스"와 "애플리케이션"이라는 용어들은 본 명세서에서 호환할 수 있는 의미로 사용된다. 일반적으로, 애플리케이션은 분산형 서비스들의 집합으로 간주될 수 있다. 예를 들어, Hotmail은 각 서비스가 다른 기능을 수행하는 다양한 서비스들로 구성된 애플리케이션일 수있다.The terms "service" and "application" are used herein in a interchangeable sense. In general, an application can be considered a collection of distributed services. For example, Hotmail can be an application that consists of various services, each of which performs a different function.

이들 문제는 데스크탑과 DOS 시대(약 1980년대경)의 문제들과 다른 것 같지 않다. DOS는 디스크 관리, 파일 시스템, 콘솔 기능(console facilities) 등과 같은 애플리케이션 개발자들을 위한 매우 유용한 코어 서비스들을 정의하였다. 그러나, DOS는 많은 복잡한 작업들을 ISV들에게 남겨 놓았다. 일 예로서, WordPerfect와 Lotus 123은 프린트 기능을 지원하기 위해 각 애플리케이션들 내에 모두 독립적으로 프린터 드라이버를 기록해야만 했다. 유사하게, 프린터 하드웨어 벤더들은 성공적인 제품을 가지기 위하여 소프트웨어 회사들과 거래해야만 했다. ISV들과 하드웨어 벤드들에 대한 가입에 대한 장벽은 이례적으로 높았다. 이것은 그 시대 동안 단지 소수의 소프트웨어 및 하드웨어 회사들만이 성공할 수 있는 결과를 초래하였다.These problems are unlikely to be different from those in the desktop and DOS era (around 1980s). DOS defines very useful core services for application developers such as disk management, file system, console facilities, and so on. However, DOS has left many complex tasks to ISVs. As an example, WordPerfect and Lotus 123 had to write printer drivers independently within each application to support the print function. Similarly, printer hardware vendors had to deal with software companies to have a successful product. Barriers to joining ISVs and hardware bends were exceptionally high. This has resulted in only a few software and hardware companies succeeding during that era.

Microsoft는 Windows 플랫폼을 생성하는 데 있어서 이 문제를 처리하여, 가입에 대한 장벽을 극적으로 감소시켰다. Windows는 PC 플랫폼 상의 대부분의 하드웨어 장치에 대하여 추상화 계층(abstraction layer)을 정의하였다. 이것은 ISV들 이 특정 하드웨어 장치들을 지원하기 위하여 걱정해야만 하는 것을 덜어 주었다. Windows는 메모리, 디스크 및 네트워크를 포함하는 PC 내부의 모든 자원을 관리하였다. 또한, Windows는 ISV들에 의해 사용될 수 있는 수많은 추가적인 서비스들을 부가하였다. 이 플랫폼은 당 산업계에서 커다란 성장을 유발하였다. Windows 플랫폼을 타겟으로 한 ISV들은 지극히 생산적이었다. 많은 새로운 하드웨어 벤더들이 공통 플랫폼, Windows를 가지는 유용한 효과에 기인한 보다 저렴한 하드웨어를 제공하면서 생겨났다.Microsoft addressed this issue in creating the Windows platform, dramatically reducing the barrier to subscription. Windows has defined an abstraction layer for most hardware devices on the PC platform. This relieved ISVs from having to worry about supporting specific hardware devices. Windows managed all the resources inside the PC, including memory, disks, and the network. In addition, Windows added a number of additional services that could be used by ISVs. This platform has led to huge growth in the industry. ISVs targeting the Windows platform were extremely productive. Many new hardware vendors have emerged from offering cheaper hardware due to the useful effects of having a common platform, Windows.

서비스 정의 모델(SDM)Service Definition Model (SDM)

SDM 원리SDM principle

SDM은:SDM is:

- 분산형 애플리케이션들/서비스들을 설계하는 것을 보다 쉽게 하는 추상화를 정의한다.Defines an abstraction that makes it easier to design distributed applications / services.

- 운영 실시의 자동화 및 재사용을 위한 프레임워크를 가능하게 한다.Enable a framework for automation and reuse of operational practices

- 분산형 애플리케이션 및 서비스들의 운영 및 배포를 단순화한다.Simplify the operation and deployment of distributed applications and services.

오늘날 서비스의 오퍼레이터 부근의 벽 상에서 복잡한 다이어그램으로서 흔히 보여지는 것을 캡쳐하는 것을 고려함으로써, SDM이 무엇인지를 이해하는 것이 더 쉬워질 수 있다. 이들 다이어그램에서, 박스는 일반적으로 서비스의 실행 요소를 나타내며, 박스들을 연결하는 선들은 서비스 요소들 간의 통신 경로를 나타낸다. 예를 들어, 다시 하나 이상의 중간-층(middle-tier) 또는 백-엔드 서비스들에 연결되는 일부 IIS 프론트-엔드 기계들에 연결된 로드 밸런서(load balancer)가 있 다.By considering capturing what is commonly seen as a complex diagram on the wall near the operator of today's service, it can be easier to understand what SDM is. In these diagrams, the boxes generally represent the elements of service execution, and the lines connecting the boxes represent the communication path between the elements of service. For example, there is a load balancer connected to some IIS front-end machines that in turn connect to one or more middle-tier or back-end services.

SDM에 대하여 생각하는 또다른 방법은 SDM은 분산형 애플리케이션/서비스의 동작에 대한 메타-모델(meta-model)과 컴퓨팅 환경에서 실행하는 애플리케이션/서비스의 "생생한" 청사진 모두라는 것이다. 가능한 소프트웨어 동작들을 포함하여, 선언적이고 스케일-불변의 방식으로, SDM은 컴퓨팅 환경에서 애플리케이션의 구조를 캡처한다. 하드웨어와 네트워크 자원 간의 바인딩을 포함하여 서비스의 토폴로지 및 소프트웨어 컴포넌트의 유효한 동작들을 선언적으로 기술하는 능력은 매우 강력하다.Another way to think about SDM is that it is both a meta-model for the behavior of distributed applications / services, and a "live" blueprint for the applications / services you run in your computing environment. In a declarative and scale-invariant way, including possible software operations, SDM captures the structure of an application in a computing environment. The ability to declaratively describe the service's topology and valid behavior of software components, including bindings between hardware and network resources, is very powerful.

유사한 것으로서, Microsoft의 Common Object Model(COM)을 살펴보자. COM은 컴포넌트들이 어떻게 패키지되고, 등록되고, 활성화되고, 발견되는지 등을 표준화하였다. COM은 라이프타임, 메모리 관리, 및 인터페이스 구현에 관한 엄격한 룰들을 명령한다. 이들 원형(primitives)은, 컴포넌트들이 블랙 박스로서 처리될 수 있도록 하기 때문에, 정보처리 상호운용(interoperability)에 필수적이다. COM은 이벤팅, 자동화 및 OLE와 같은 보다 정교한 서비스들을 위한 기초이다.As a similar one, take a look at Microsoft's Common Object Model (COM). COM has standardized how components are packaged, registered, activated, and discovered. COM imposes strict rules on lifetime, memory management, and interface implementation. These primitives are necessary for information processing interoperability because they allow components to be treated as black boxes. COM is the basis for more sophisticated services such as eventing, automation, and OLE.

마찬가지로, SDM은 보다 정교한 특성을 만들기 위한 일부 기본 원형들을 정의하는 것을 필요로 한다. 이들 원형들은:Similarly, SDM needs to define some basic prototypes to make more sophisticated characteristics. These prototypes are:

- 컴포넌트 - 구현, 배포 및 관리의 유닛-Components-units of implementation, deployment and management

- 포트 - 관련 유형 및 유효한 동작들의 집합을 가지는 지정된 종단점Port-a specified endpoint with an associated type and a set of valid actions

- 와이어 - 포트들간의 허용되는 통신 경로Allowed communication paths between wires and ports

- 계층 - 자원 관리 소유권 및 바인딩의 분리-Hierarchy-Separation of resource management ownership and binding

- 맵핑 - 각 계층에서 컴포넌트, 포트 및 와이어 간의 바인딩-Mapping-binding between components, ports and wires in each layer

본 명세서의 나머지는 이들 원형들 각각을 보다 상세하게 설명할 것이다.The remainder of this specification will describe each of these circles in more detail.

컴포넌트, 포트 및 와이어Components, ports, and wires

본 명세서의 목적을 위하여, 컴포넌트, 포트 및 와이어를 사용하여 그려진 MyService라고 불리는 단순한 서비스의 그래픽적인 표현을 고려하는 것이 유용하다. 도 2을 참조하자. 다이어그램에서, 박스들은 컴포넌트들을 나타내고, 다이아몬드들은 포트들을 나타내며, 파선은 와이어들을 나타낸다.For the purposes of this specification, it is useful to consider a graphical representation of a simple service called MyService that is drawn using components, ports, and wires. See FIG. 2. In the diagram, boxes represent components, diamonds represent ports, and dashed lines represent wires.

- MyService는, MyFrontEnd와 MyBackEnd라는 컴포넌트들을 사용하기 때문에 복합 컴포넌트이다.MyService is a composite component because it uses components called MyFrontEnd and MyBackEnd.

- MyService는 MyFrontEnd 컴포넌트에 의해 구현된 위임 포트(delegated port)인 web이라고 불리는 하나의 가시적 포트를 가진다.MyService has one visible port called web, which is a delegated port implemented by the MyFrontEnd component.

- MyFrontEnd는 2개의 포트, 즉 위임 포트와 catalog라고 라벨이 붙은 포트를 가진다.MyFrontEnd has two ports, a delegation port and a port labeled catalog.

- MyBackEnd는 data라고 라벨이 붙은 하나의 포트를 가진다.MyBackEnd has a single port labeled data.

- MyFrontEnd와 MyBackEnd 컴포넌트들은 catalog 포트와 data포트를 와이어를 통하여 묶는 잠재적인 통신 관계를 가진다.The MyFrontEnd and MyBackEnd components have a potential communication relationship that wires the catalog and data ports over wires.

컴포넌트component

컴포넌트들은 구현, 배포 및 관리의 유닛들이다. 컴포넌트들의 예들은 Windows Server를 실행하는 전용 서버, IIS 가상 웹 사이트 또는 SQL 데이터베이스이다. 컴포넌트들은 일반적으로 기계 경계를 가지나, 단일 IIS 서버 상에서 호스 팅되는 웹 서비스들에 의해 증명되어질 것이 요청되지는 않는다.Components are the units of implementation, deployment and management. Examples of components are dedicated servers running Windows Server, IIS virtual Web sites, or SQL databases. Components generally have machine boundaries, but are not required to be proven by web services hosted on a single IIS server.

컴포넌트들은 포트들을 통하여 기능들을 공개하며, 와이어들을 통하여 통신한다. 단순한 컴포넌트들은 단지 멤버들로서 포트들을 가질 수 있다. 다른 컴포넌트들을 사용하는 컴포넌트들은 복합 컴포넌트(compound component)라고 불리며, 다른 컴포넌트들에 덧붙여 포트들과 와이어들을 가질 수 있다.Components expose functions through ports and communicate over wires. Simple components can only have ports as members. Components that use other components are called compound components and may have ports and wires in addition to other components.

복합 컴포넌트들은 합성을 통하여 생성되며, 그와 관련된 어떠한 구현도 가지지 않는다. 복합 컴포넌트 포트들은 내부 컴포넌트들로부터의 위임 포트들이다. 복합 컴포넌트들은 배열(collocation), 캡슐화(encapsulation) 및 재사용을 가능하게 하며, 따라서 애플리케이션/서비스 및 그 행동을 조직화하는 하나의 방법으로 생각될 수 있다.Composite components are created through synthesis and have no implementation associated with them. Composite component ports are delegate ports from internal components. Composite components enable collocation, encapsulation and reuse, and thus can be thought of as one way to organize applications / services and their behavior.

컴포넌트의 단지 공용 포트들(public ports)만이 컴포넌트 외부에서 가시적이다. 복합 컴포넌트들은 캡슐화를 통하여 자신이 사용하는 컴포넌트들의 내부 구조를 숨긴채 외부 세계에는 단순 컴포넌트들(simple components)로 보인다. 사실, 양자에 의해 지원되는 행동들과 포트 유형들이 완전히 동일하기만 하다면, 단순 컴포넌트는 복합 컴포넌트로 교체될 수 있으며, 그 역도 가능하다. Only public ports of the component are visible outside the component. Complex components appear as simple components to the outside world, encapsulating the internal structure of the components they use. In fact, as long as the behaviors and port types supported by both are exactly the same, a simple component can be replaced with a composite component and vice versa.

포트port

포트들은 행동들의 집합을 정의하는 지정된 종단점(named end-points)이다. 포트들은 관련 유형 및 역할을 가지며, 일반적으로 허용되는 동작들의 집합과 관련된다. 포트들의 예들은 허용되는 동작들의 집합을 가지는 SOAP 포트, HTTP 서버 포트 등이 있다. 포트들은 위임될 수 있는데, 이는 외부 컴포넌트가 내부 컴포넌 트의 포트를 자신의 것인양 공개할 수 있다는 것을 의미한다. 포트들은 하나의 컴포넌트에 대한 공용 인터페이스(행동)를 형성한다. 포트들은 공용으로(가시적으로) 될 수 있는 컴포넌트의 유일한 멤버들이다.Ports are named end-points that define a set of behaviors. Ports have an associated type and role and are generally associated with a set of operations that are allowed. Examples of ports are a SOAP port, an HTTP server port, etc., with a set of allowed operations. Ports can be delegated, which means that external components can publish ports of internal components as their own. Ports form a public interface (behavior) for one component. Ports are the only members of a component that can be made public.

와이어wire

와이어들은 포트들간의 허용되는 바인딩들이며, 포트들 (및 컴포넌트들) 간의 토폴로지적 관계를 나타낸다. 와이어들은 임의의 인스턴스 상호연결 토폴로지(instance interconnect topology)를 지정하지 않으며, 대신 인스턴스 상호연결 토폴로지를 위한 "잠재성(potentiality)"을 표현한다.Wires are allowed bindings between ports and represent a topological relationship between ports (and components). The wires do not specify any instance interconnect topology, but instead represent a "potentiality" for the instance interconnect topology.

와이어들은 본질적으로 버스들이며, 하나 이상의 포트 멤버들을 포함할 수 있다. 와이어들은 포인트-투-포인트 관계로 오해되어서는 안 된다. 주어진 포트는 동일한 와이어 내에서 한번 이상 나타날 수 없다.The wires are essentially buses and may include one or more port members. Wires should not be mistaken for a point-to-point relationship. A given port may not appear more than once in the same wire.

스키마(Schema)Schema

애플리케이션/서비스를 설명하기 위해서는, SDM을 위한 표준 스키마를 가질 필요가 있다. SDM 스키마는 XSD 및 XML 문법을 이용하여 표현될 수 있어야 한다. SDM 스키마를 상세히 설명하는 것은 본 명세서의 범위를 벗어나는 것이지만, 본 명세서에서 이후에 설명할 주제를 위한 맥락으로서 간략한 설명을 하는 것이 필요하다. 이하는 SDM 스키마를 간략하게 나타낸 것이다.To describe an application / service, you need to have a standard schema for SDM. SDM schemas must be able to be expressed using XSD and XML grammar. Describing the SDM schema in detail is beyond the scope of this specification, but it is necessary to provide a brief description as context for the subject matter described later herein. The following is a simplified representation of the SDM schema.

<sdm><sdm>

<identityReference /><identityReference />

<portClasses/><portClasses />

<wireClasses /><wireClasses />

<componentClasses /><componentClasses />

<hostRelations /><hostRelations />

<portTypes /><portTypes />

<wireTypes /><wireTypes />

<componentTypes /><componentTypes />

</sdm></ sdm>

SDM 스키마에 대한 더욱 상세한 정보를 얻고자 하면 http://big/에 있는 SDM 스키마 사양(specification)을 읽고 샘플 XSD 파일을 검토하도록 한다.For more detailed information on the SDM schema, read the SDM schema specification at http: // big / and review the sample XSD file.

SDM 클래스SDM class

애플리케이션/서비스에서 모든 컴포넌트, 포트 및 와이어는 클래스의 사용을 통하여 생성되는 타입이다. 새로운 타입은 기존의 클래스들 및 타입들로부터 생성될 수 있다. 예컨대, 웹 서비스는 SQL 데이터베이스와 마찬가지로 클래스로서 모델링될 수 있다. SDM 클래스는 기본적으로 공통 특징에 대한 추상화이다. MyService 애플리케이션에서는, MyFrontEnd는 클래스 웹 서비스로부터 파생되는 새로운 타입이고, MyBackEnd는 클래스 SQL 데이터베이스로부터 파생되는 새로운 타입이다.All components, ports, and wires in an application / service are of a type created through the use of classes. The new type can be created from existing classes and types. For example, a web service can be modeled as a class like a SQL database. SDM classes are basically abstractions of common features. In the MyService application, MyFrontEnd is a new type derived from the class Web service, and MyBackEnd is a new type derived from the class SQL database.

아래는 포트들, 와이어들 및 컴포넌트들에 대한 클래스 스키마의 일예이다.Below is an example of a class schema for ports, wires and components.

<portClass name="ServerDataAccess" layer="Application"><portClass name = "ServerDataAccess" layer = "Application">

<settingSchema>  <settingSchema>

<xs:element name="databaseName" type="xs:string" />     <xs: element name = "databaseName" type = "xs: string" />

</settingSchema>   </ settingSchema>

</portClass></ portClass>

<wireClass name="DataConnection" layer="Application"><wireClass name = "DataConnection" layer = "Application">

<settingSchema>  <settingSchema>

<xs:element name="useSSL" type="xs:boolean" />     <xs: element name = "useSSL" type = "xs: boolean" />

</settingSchema>  </ settingSchema>

<portClassesAllowed>  <portClassesAllowed>

<portClassRef name="ServerDataAccess" maxOccurs="1" />     <portClassRef name = "ServerDataAccess" maxOccurs = "1" />

<portClassRef name="ClientDataAccess" />     <portClassRef name = "ClientDataAccess" />

</portClassesAllowed>  </ portClassesAllowed>

</wireClass></ wireClass>

<componentClass name="Database" layer="Application"><componentClass name = "Database" layer = "Application">

<deploymentSchema>  <deploymentSchema>

<xs:element name="sqlScriptFilePath" type="xs:string" maxOccurs="unbounded" />     <xs: element name = "sqlScriptFilePath" type = "xs: string" maxOccurs = "unbounded" />

</deploymentSchema>  </ deploymentSchema>

<settingSchema>  <settingSchema>

<xs:element name="databaseName" type="xs:string"/>     <xs: element name = "databaseName" type = "xs: string" />

</settingSchema>  </ settingSchema>

<portClassesAllowed closed="true">  <portClassesAllowed closed = "true">

<portClassRef name="ServerDataAccess" />    <portClassRef name = "ServerDataAccess" />

</portClassesAllowed>  </ portClassesAllowed>

</componentClass></ componentClass>

componentClass 및 wireClass 스키마 각각은 허용되는 설정 스키마(settings schema), 배포 스키마(deployment schema) 및 포트 클래스들을 포함할 수 있다는 것에 주의하자. portClass는 포트 클래스가 허용되는 섹션을 갖지 않는다. 이들 스키마는 다음과 같이 정의된다:Note that each of the componentClass and wireClass schemas can contain the allowed settings schema, deployment schema, and port classes. portClass does not have a section where port classes are allowed. These schemas are defined as follows:

- 설정 스키마는 설계시(design-time)에 확증(validate)될 수 있는 컴포넌트, 포트 및 와이어 상의 구성 파라미터(configuration parameter)들에 대한 XSD이다.The configuration schema is an XSD for configuration parameters on components, ports and wires that can be validated at design time.

- 배포 스키마는 컴포넌트, 포트, 또는 와이어가 설치되려면 어느 설치 파라미터들이 설정될 필요가 있는지를 표현하는 XSD이다. 이 목록은 Fusion 또는 그 밖의 어떠한 설치자(installer) 기술에 대한 스키마일 수 있다.-The deployment schema is an XSD representing which installation parameters need to be set before the component, port, or wire can be installed. This list can be a schema for Fusion or any other installer technology.

- 포트 Classes Allowed는 컴포넌트 및 와이어가 선언(declare)된 포트 클래스를 참조함으로써 허용 가능한 포트를 선언하는 위치이다.Port Classes Allowed is a location that declares an allowable port by referring to the port class where the component and wire are declared.

클래스 스키마에 대한 더욱 상세한 정보를 얻고자 하면 http://big에 있는 SDM 스키마 설계 사양을 참조하면 된다.For more information on class schemas, see the SDM Schema Design Specification at http: // big.

클래스 관계들Class relationships

다른 컴포넌트들을 호스팅할 수 있는 컴포넌트, 포트 또는 와이어는 설치자 및 자신이 호스팅할 수 있는 컴포넌트 클래스를 식별하는 hostRelations 스키마를 사용하여 선언된다. hostRelations 요소는 컴포넌트들, 포트들 또는 와이어들 중 하나가 다른 것들에 대한 호스트로서 작동하고 있는 클래스들 간의 방향성 링크로 생각될 수 있다.Components, ports, or wires that can host other components are declared using the hostRelations schema, which identifies installers and component classes that they can host. The hostRelations element can be thought of as a directional link between classes in which one of the components, ports or wires is acting as the host for the other.

컴포넌트를 호스팅한다는 것은 컴포넌트의 코드에 대한 실행 환경을 제공하는 것을 의미한다. 예를 들어, 아래에 예로서 도시된 바와 같이 SQL은 클래스 Database에 대한 호스트일 수 있다.Hosting a component means providing an execution environment for the component's code. For example, SQL may be a host for a class database, as shown by way of example below.

<hostRelations><hostRelations>

<installer name="DatabaseInstaller" codeType="InstallerPlugIn" />  <installer name = "DatabaseInstaller" codeType = "InstallerPlugIn" />

<hostRelation classRef="database" componentHostClassRef="host:SQL" installerRef="DatabaseInstaller" />     <hostRelation classRef = "database" componentHostClassRef = "host: SQL" installerRef = "DatabaseInstaller" />

</hostRelations></ hostRelations>

SDM 유형들SDM Types

SDM이 자원, 애플리케이션 및 인스턴스를 모델링하는 3가지 별개 스페이스들이 있다. 인스턴스 스페이스는 본 명세서에서 나중에 설명된다. 자원 스페이스는 그 스페이스에서 클래스들이 살아 있고, 클래스들이 애플리케이션들이 구성되는 재료가 되는 빌딩 블럭들인 곳이다. 애플리케이션 스페이스는 유형들이 존재하는 곳이다. 아래는 포트, 와이어 및 컴포넌트 유형들에 대한 XML의 일예이다.There are three distinct spaces for SDM to model resources, applications, and instances. Instance spaces are described later herein. The resource space is where the classes live in that space, and the classes are the building blocks from which the applications are constructed. The application space is where the types exist. Below is an example of XML for ports, wires, and component types.

<portType name="UserDataServer" class="ServerDataAccess"><portType name = "UserDataServer" class = "ServerDataAccess">

<deployment />  <deployment />

<setttings />  <setttings />

</portType></ portType>

<wireType name="UserData" class="DataConnection"><wireType name = "UserData" class = "DataConnection">

<deployment />   <deployment />

<settings>    <settings>

<useSSL>false</useSSL>      <useSSL> false </ useSSL>

</settings>    </ settings>

<portTypeRefs>    <portTypeRefs>

<portTypeRef name="UserDataServer"/>      <portTypeRef name = "UserDataServer" />

<portTypeRef name="UserDataClient"/>      <portTypeRef name = "UserDataClient" />

</portTypeRefs>    </ portTypeRefs>

</wireType></ wireType>

<componentType name="SQLBackEnd" class="Database"><componentType name = "SQLBackEnd" class = "Database">

<deployment>          <deployment>

<sqlScriptFilePath>%install%\mydatabaseDfn.sql</sqlScriptFilePath> <sqlScriptFilePath>% install% \ mydatabaseDfn.sql </ sqlScriptFilePath>

</deployment>          </ deployment>

<settings>          <settings>

<databaseName>UserData</databaseName>               <databaseName> UserData </ databaseName>

</settings>          </ settings>

<ports>          <ports>

<port name="UserData" type="UserDataServer"/>               <port name = "UserData" type = "UserDataServer" />

</ports>          </ ports>

</componentType></ componentType>

SDM 스키마에서 portType, wireType 및 componentType 각각은 설정 및 배포 값들을 가진다는 것에 주의해야 한다.Note that portType, wireType, and componentType each have configuration and deployment values in the SDM schema.

- 설정은 컴포넌트, 포트 및 와이어에 대한 구성값을 제공하는 설정 스키마에 대한 XML이고, 설계 시에 유효성이 검증될 수 있다.-The configuration is XML to a configuration schema that provides configuration values for components, ports, and wires, and can be validated at design time.

- 배포는 컴포넌트, 포트, 또는 와이어가 제대로 설치하기 위해 설정될 필요가 있는 구성 파라미터의 값을 표현하는 배포 목록에 대한 XML이다.-A distribution is XML to a distribution list that represents the value of a configuration parameter that a component, port, or wire needs to be set for proper installation.

유형들에 대한 더욱 상세한 정보를 얻고자 하면 http://big에 있는 SDM 스키마 설계 사양을 참조하면 된다.For more information on types, see the SDM Schema Design Specification at http: // big.

복합 컴포넌트Composite component

애플리케이션 및 그것의 다른 컴포넌트들, 포트들 및 와이어들에 대한 토폴로지적인 관계를 정의하기 위해 복합 컴포넌트들이 사용될 수 있다. 복합 컴포넌트들은 관련 구현을 갖지 않으며, 대신에 포트들의 위임 및 호스트 관계들을 사용 하여 포트들과 멤버 컴포넌트들의 행동을 드러낸다. 아래의 XML은 복합 컴포넌트 MyService가 SDM을 사용하여 어떻게 기술될 수 있는지를 도시한다.Composite components can be used to define the topological relationship to the application and its other components, ports and wires. Composite components do not have an associated implementation, instead they use port delegation and host relationships to expose the behavior of ports and member components. The XML below shows how the composite component MyService can be described using SDM.

<compoundComponentType name="MyService"><compoundComponentType name = "MyService">

<components>     <components>

  <component name="MyFrontEnd" type="IISFrontEnd" /> <component name = "MyFrontEnd" type = "IISFrontEnd" />

  <component name="MyBackEnd" type="SQLBackEnd" /> <component name = "MyBackEnd" type = "SQLBackEnd" />

  </components></ components>

<wires>     <wires>

<wire name="data" type="UserData">          <wire name = "data" type = "UserData">

<members>               <members>

  <member componentName="MyFrontEnd" portName="serverData" /> <member componentName = "MyFrontEnd" portName = "serverData" />

  <member componentName="MyBackEnd" portName="userData" /><member componentName = "MyBackEnd" portName = "userData" />

  </members></ members>

  </wire></ wire>

  </wires></ wires>

</compoundComponentType></ compoundComponentType>

인스턴스Instance

컴포넌트, 포트 및 와이어는 애플리케이션/서비스의 구조 및 행동을 정의하 지만, 실행되는 인스턴스를 정의하지는 않는다. 매 구성요소, 포트 및 와이어 타입 선언은 하나 또는 그 이상의 인스턴스를 가질 수 있다. 인스턴스들은, 물리적 자원(서버, 네트워크 스위치 포트 및 디스크)이 할당되고 소프트웨어 자원(운영 체제, 런타임 호스트, 애플리케이션 코드)이 설치 및 구성되도록 애플리케이션/서비스를 배포한 결과이다.Components, ports, and wires define the structure and behavior of an application / service, but not the instances on which they run. Every component, port, and wire type declaration can have one or more instances. Instances are the result of deploying an application / service so that physical resources (servers, network switch ports, and disks) are allocated and software resources (operating system, runtime hosts, application code) are installed and configured.

모든 인스턴스들을 생성시부터 삭제시까지 추적하는 것은 SDM 런타임이 할 일이다.It is up to the SDM runtime to track all instances from creation to deletion.

SDM 런타임SDM runtime

SDM 런타임은 그 자신이 컴포넌트, 포트 및 와이어의 인스턴스들을 생성하지는 않고, 대신 SDM 인스턴스들의 생성 및 관리를 조정하는 데 사용되는 일단의 API들을 제공한다. 웹 서비스 컴포넌트에 대한 호스트로서 IIS와 함께 Windows Server를 실행시키는 서버와 같이, 인스턴스를 실제로 생성하는 데에는 통상적으로 복수의 엔티티가 관련되며, 완료되기까지는 수시간 또는 수일이 걸릴 수 있다.The SDM runtime does not itself create instances of components, ports and wires, but instead provides a set of APIs used to coordinate the creation and management of SDM instances. Like a server running Windows Server with IIS as a host for a Web service component, the actual creation of an instance typically involves multiple entities, which can take hours or days to complete.

SDM 런타임은 언제 "SDM 인스턴스 생성" 프로세스가 개시되고, 언제 성공 또는 실패로 종료될지를 알고 있다. 또한 SDM 런타임은 SDM 인스턴스에 대하여 그 존속 기간(lifetime)동안 어떤 변경이 가해져야 하는지를 알고 있다. SDM 런타임은 지정된 SDM과 관련된 인스턴스들에 관한 정보에 대하여 질의(query)를 받을 수 있도록 소정의 애플리케이션/서비스와 관련된 모든 트랜잭션(transaction)들을 기록하는 어카운턴트(accountant)라고 간주될 수 있다.The SDM runtime knows when the "create SDM instance" process begins and when it ends with success or failure. The SDM runtime also knows what changes should be made to the SDM instance during its lifetime. An SDM runtime can be considered an accountant that records all transactions associated with a given application / service so that it can be queried for information about instances associated with a given SDM.

SDM 인스턴스를 생성하는 제1 단계는 애플리케이션/서비스 SDM을 SDM 런타임 으로 등록하는 것이다. 일단 SDM 런타임이 주어진 SDM을 알게 되면, 인스턴스 생성 프로세스가 팩토리(Factory)들과 자원 관리자(Resource Manager; 이하 설명할 것임)들을 이용하여 호출될 수 있다.The first step in creating an SDM instance is to register an application / service SDM with the SDM runtime. Once the SDM runtime knows a given SDM, the instance creation process can be invoked using factories and Resource Managers (described below).

API 및 런타임 설계에 관한 더욱 상세한 정보를 얻기 위해서는 http://big/에 있는 SDM 런타임 아키텍처 사양을 참조하면 된다.For more information on the API and runtime design, see the SDM runtime architecture specification at http: // big /.

호스트 및 팩토리(Hosts and Factories)Hosts and Factories

다른 컴포넌트들을 "호스팅"할 수 있는 컴포넌트는 호스트라고 불리며, 이들이 지원하는 클래스들에 대한 팩토리로서 작용한다. 컴포넌트는 앞서 설명한 SDM 스키마의 hostRelations 요소를 이용하여 하나 또는 그 이상의 컴포넌트 클래스들의 호스트로서 선언될 수 있다.Components that can "host" other components are called hosts and act as factories for the classes they support. A component may be declared as a host of one or more component classes using the hostRelations element of the SDM schema described above.

호스트는 컴포넌트의 코드를 위한 실행 환경을 제공하지만, 팩토리는 소정 타입의 SDM 인스턴스들을 생성하고 SDM 런타임 API들을 통해 SDM 런타임과 상호작용하는 실제 서비스이다. 팩토리는 하나 이상의 컴포넌트 클래스를 지원할 수 있고, 어느 컴포넌트 클래스가 지원되는지를 지정하는 SDM 런타임으로 등록해야 한다.The host provides an execution environment for the code of the component, but the factory is the actual service that creates some type of SDM instances and interacts with the SDM runtime through the SDM runtime APIs. The factory can support more than one component class and must register with the SDM runtime specifying which component classes are supported.

소정의 팩토리는 상이한 구성을 갖는 동일한 타입의 호스트를 복수 개 지원할 수 있고, 또한 개개의 팩토리는 호스트 구성의 타입 각각에 대하여 존재할 수도 있다. 예컨대 IIS 팩토리는 웹 서비스 및 웹 애플리케이션과 같은 복수의 클래스를 지원할 수 있다. 마찬가지로, SQL 팩토리는 데이터베이스, 분할된 데이터베이스(Partitioned Database) 및 고가용 데이터베이스(Highly Available Database)와 같은 상이한 데이터베이스 타입을 지원할 수 있다.A given factory may support a plurality of hosts of the same type having different configurations, and individual factories may also exist for each type of host configuration. For example, an IIS factory can support multiple classes, such as web services and web applications. Similarly, an SQL factory can support different database types, such as databases, partitioned databases, and highly available databases.

팩토리는 기억장치(storage), 네트워크 및 서버와 같은 물리적 자원을 그 자신이 관리하지는 않는다. 팩토리는 자원 관리자를 통해 물리적 자원(그리고 이들의 논리적 등가물)과 상호작용한다.The factory does not manage physical resources such as storage, network and servers by itself. Factories interact with physical resources (and their logical equivalents) through resource managers.

자원 관리자Resource manager

자원 관리자는 (1) 부트스트랩(bootstrap) 프로세스의 일부로서 발견(discover) 또는 생성되거나, (2) 물리적 환경의 소정의 선언적 XML 기반의 기술을 통해 지정된 물리적 및 논리적 자원을 관리한다. 자원 관리자는 모든 기억장치, 네트워크 및 서버 자원을 보유하며, 공통의 자원 관리 API를 공개하여 자원 할당 요청을 처리하고 이러한 자원들의 소유권(ownership)을 추적한다.The resource manager manages the specified physical and logical resources either (1) discovered or created as part of the bootstrap process, or (2) via some declarative XML-based description of the physical environment. The resource manager holds all storage, network, and server resources and exposes common resource management APIs to handle resource allocation requests and track the ownership of these resources.

자원 관리자의 예는 NRM(Network Resource Manager), SRM(Storage Resource Manager) 및 PRM(PC Resource Manager)이다. 이들 자원 관리자들 각각은 물리적 포트나 디스크 또는 서버 및 이들이 공개하는 VLAN, 논리적 디스크 볼륨(logical disk volumes), 공유 파일(file shares), 웹 서버 등과 같은 논리적 자원의 할당을 담당한다. 자원 관리자는 또한 할당 및 해제(de-allocation)를 달성하도록 물리적 장치들을 프로그래밍하는 역할을 한다.Examples of resource managers are Network Resource Manager (NRM), Storage Resource Manager (SRM), and PC Resource Manager (PRM). Each of these resource managers is responsible for allocating logical resources such as physical ports or disks or servers and the VLANs they expose, logical disk volumes, file shares, web servers, and so on. The resource manager is also responsible for programming the physical devices to achieve allocation and de-allocation.

물리적 하드웨어를 프로그램하기 위해, 자원 관리자는 하드웨어 장치의 구현 세부 사항을 숨기고 있는 자원 제공자들을 통해 하드웨어와 상호작용함으로써, 예컨대 복수의 벤더로부터 제공된 네트워크 스위치들이 서로 바뀌어 쓰일 수 있도록 한다(제조자의 장치에 대한 제공자가 존재하는 경우). Windows의 하드웨어 추상화 계층(HAL; hardware abstraction layer) 및 장치 드라이버 모델과 마찬가지로, 서버, 네트워크 및 저장 장치에 이르는 데이터 센터 환경에 대해서도 동등한 추상화 계층이 존재한다.To program the physical hardware, the resource manager interacts with the hardware through resource providers that hide the implementation details of the hardware device, for example, so that network switches from multiple vendors can be used interchangeably (for the device of the manufacturer). If a provider exists). Similar to Windows' hardware abstraction layer (HAL) and device driver models, there is an equivalent abstraction layer for data center environments ranging from servers, networks, and storage devices.

계층 및 매핑Hierarchy and Mapping

컴포넌트, 포트 및 와이어는 호스트, 팩토리, 자원 관리자 및 SDM 런타임과 결합되는 경우 강력한 추상화이지만, 이들은 분산형 애플리케이션/서비스를 배치 및 관리하기에는 충분하지 않다. 이러한 논리적 추상화의 물리적 인스턴스를 생성 및 관리하기 위해서는, 어떠한 추가적인 구축물(construct)이 필요하다. 이러한 추가적인 구축물은 계층 및 매핑이다.Components, ports, and wires are powerful abstractions when combined with hosts, factories, resource managers, and SDM runtimes, but they are not enough to deploy and manage distributed applications / services. In order to create and manage physical instances of this logical abstraction, some additional constructs are needed. These additional constructs are layers and mappings.

계층hierarchy

계층에 대한 필요는 애플리케이션/서비스의 배치 요건(deployment requirement)들을 설계시에 확증하고자 하는 욕구가 그 동기가 된다. 도 3은 SDM에 의해 정의된 계층 추상화를 나타내고 있다.The need for tiers is motivated by the desire to establish at design time the deployment requirements of an application / service. 3 illustrates the hierarchical abstraction defined by SDM.

- 애플리케이션 계층은 분산 가능한 컴포넌트, 이들의 배치 요건 및 제한(constraints), 그리고 이들의 통신 관계(communication relationship)를 애플리케이션/서비스의 맥락에서 기술한다.The application layer describes the distributable components, their deployment requirements and constraints, and their communication relationships in the context of the application / service.

- 호스트 계층은 다른 것들 중에서도 IIS, CLR 및 SQL과 같은 호스트에 대한 구성 및 정책(policy) 설정 및 제한을 기술한다.The host layer describes configuration and policy settings and restrictions for hosts such as IIS, CLR, and SQL, among others.

- 가상 데이터 센터(VDC; Virtual Data Center) 계층은 운영 체제로부터 네트워크 토폴로지(topology)를 통해 서버, 네트워크 및 저장 장치에 이르기까지의 데이터 센터 환경 설정 및 제한을 기술한다.The Virtual Data Center (VDC) layer describes the data center configuration and limitations from the operating system through the network topology to servers, networks, and storage devices.

- 하드웨어 계층은 물리적 데이터 센터 환경을 기술하고, 이는 발견되거나 예컨대 XML을 이용하여 선언적 방식으로 지정된다. 이 계층은 스케일 불변이 아니므로 SDM에서 모델링되지 않으나, 완전함을 위해 포함되었다.The hardware layer describes the physical data center environment, which is found or specified in a declarative manner, for example using XML. This layer is not modeled in SDM because it is not scale invariant, but is included for completeness.

매핑(Mappings)Mappings

SDM이 계층화되어 있으므로, 다양한 계층을 바인딩(binding)할 필요가 존재한다. 매핑은 본질적으로 어떤 계층에 있는 컴포넌트 또는 포트를 아래의 다음 계층에 있는 컴포넌트 또는 포트와 바인딩한 것이다. 매핑은 다음과 같이 기술될 수 있다.Since SDM is layered, there is a need to bind various layers. A mapping is essentially a binding of a component or port in one layer to a component or port in the next layer below. The mapping can be described as follows.

MT = [Tn->Tn-1] + [Tn-1->Tn-2] + [Tn-2 ->Tn-3] + [...]M T = [T n- > T n-1 ] + [T n-1- > T n-2 ] + [T n-2- > T n-3 ] + [...]

여기서 M은 컴포넌트, 포트, 또는 와이어를 나타내며, n은 계층을 나타낸다. 화살표는 매핑의 방향을 나타내며, 항상 높은 계층으로부터 낮은 계층 쪽으로 향한다.Where M represents a component, port, or wire, and n represents a hierarchy. Arrows indicate the direction of the mapping and always point from the higher layer to the lower layer.

예컨대, 도 4에서 MyFrontEnd라는 이름의 애플리케이션 계층에 있는 컴포넌트는 IIS라 불리는 호스트 계층에 있는 컴포넌트에 매핑된다. 마찬가지로 MyBackEnd라는 이름의 컴포넌트는 호스트 계층에 있는 SQL 컴포넌트에 매핑된다.For example, the component in the application layer named MyFrontEnd in FIG. 4 is mapped to the component in the host layer called IIS. Similarly, a component named MyBackEnd is mapped to an SQL component in the host layer.

설계시 유효성검증(Design-time Validation)Design-time Validation

컴포넌트와 아래쪽 계층에 있는 그 컴포넌트의 호스트 컴포넌트 사이의 바인딩은, 애플리케이션/서비스가 실제로 라이브 데이터 센터(live data center)에 배 치되기 전에 개발자에게 문제를 안겨줄 수 있다. 이러한 문제는 타입의 비호환, 구성의 충돌(conflict), 동작의 불일치(mismatch), 토폴로지 관계(topological relationship)의 결여 등에 기인한 것일 수 있다. 도 5는 컴포넌트와 입증에 관한 그것의 호스트 간의 설정 및 제한 체크 에러를 도시한다.The binding between the component and its component in the lower layer can cause problems for the developer before the application / service is actually deployed to the live data center. This problem may be due to type incompatibility, conflict of configuration, mismatch of operation, lack of topological relationship, and the like. 5 shows the configuration and limit check error between a component and its host for verification.

도 6에서, 다이어그램으로 도시된 매핑 시도는 오류를 낳을 수 있는 바, 배포 계층에 있는 IIS 및 SQL 컴포넌트 사이에는 잠재적인 통신 관계가 존재하지 않기 때문이다.In FIG. 6, the mapping attempt shown in the diagram can be error prone because there is no potential communication relationship between IIS and SQL components in the deployment layer.

MyBackEnd 컴포넌트로부터 SQL 호스트 컴포넌트로의 매핑은 컴포넌트 및 호스트 타입의 호환성이 있고 구성 충돌이 없다는 점에서 유효한 바인딩이었을 수 있지만, MyFrontEnd와 지정된 배포 계층에 존재하지 않는 MyBackEnd 사이의 토폴로지 관계를 MyServiceSDM이 정의하였으므로 이는 유효하지 않다.The mapping from the MyBackEnd component to the SQL host component might have been a valid binding in that the component and host type were compatible and there was no configuration conflict, but since MyServiceSDM defined the topological relationship between MyFrontEnd and MyBackEnd that does not exist in the specified deployment layer, not valid.

설정 및 제약 체크(Settings and Constraints Checking)Settings and Constraints Checking

애플리케이션 계층으로부터 배치 계층(그리고 기타 등등)으로 매핑할 수 있는 능력은, 호스트의 제한에 대하여 컴포넌트의 설정을 설계시에 확증할 수 있도록 해 주고, 또한 컴포넌트의 제약에 대하여 호스트의 설정을 확증할 수 있도록 해 주므로 상당히 강력하다.The ability to map from the application layer to the deployment layer (and so on) allows you to verify the configuration of a component at design time against host constraints, and also to verify the configuration of the host against component constraints. It's quite powerful because it helps.

도 7은 상이한 계층에 있는 컴포넌트들 및 호스트 사이의 관계를 더욱 상세히 나타내고 있다. 이 도면에서, VDC 계층에 이르기까지 쭉, 어떤 계층에 있는 컴포넌트와 아래의 다음 계층에 있는 호스트 컴포넌트간에 바인딩이 존재함에 주목하자.7 illustrates in more detail the relationship between components and hosts in different layers. In this figure, note that there is a binding between a component in one layer and a host component in the next layer below, all the way down to the VDC layer.

도 7에서, MyFrontEnd는 IIS에 의해 호스팅되는 웹 서비스이며, IIS는 윈도우 서버에 의해 호스팅되는 윈도우 애플리케이션(Windows Application)이다. IIS 및 SQL의 인스턴스들의 생성 및 삭제를 담당하는 윈도우 애플리케이션 팩토리가 존재하는 것과 마찬가지로, 웹 서비스 및 웹 애플리케이션 컴포넌트의 인스턴스들의 생성 및 삭제를 지원하는 IIS 팩토리가 존재한다.In FIG. 7, MyFrontEnd is a web service hosted by IIS, and IIS is a Windows application hosted by a Windows server. Just as there is a Windows application factory responsible for creating and deleting instances of IIS and SQL, there is an IIS factory that supports the creation and deletion of instances of web services and web application components.

도 8은 앞서 설명한 SDM 설정 및 제한 시멘틱(semantics)을 이용하여 상이한 계층에 있는 컴포넌트들 사이에서 설계 시 확증이 어떻게 동작하는지를 나타내고 있다.FIG. 8 illustrates how validation works when designing between components in different layers using the SDM configuration and constraint semantics described above.

여기서 위쪽 계층에 있는 컴포넌트의 제약은 아래쪽 계층에 있는 호스트 컴포넌트의 설정에 대하여 유효성이 검증됨에 주목하자. 또한 호스트 컴포넌트의 제약은 호스팅될 컴포넌트의 설정에 대하여 유효성이 검증됨에 주목하자.Note that the constraints of the component in the upper layer are validated against the configuration of the host component in the lower layer. Also note that the constraints of the host component are validated against the configuration of the component to be hosted.

양방향 설정 및 제약 체크는 개발자로 하여금, 아래 방향으로 쭉 SDM 시멘틱을 이용하여 기술된 동작 환경의 맥락에서 자신의 애플리케이션/서비스를 신뢰성있게 개발할 수 있도록 해 준다. 개발 프로세스 도중 데이터 센터에 관한 기술(description)이 신뢰받을 수 있도록 데이터 센터를 기술하기 위해서는, VDC(Virtual Data Center)라 일컬어지는 데이터 센터의 추상화를 생성할 필요가 있다.Bidirectional configuration and constraint checking allows developers to reliably develop their applications / services in the context of the described operating environment using SDM semantics all the way down. To describe a data center so that the description of the data center can be trusted during the development process, it is necessary to create an abstraction of the data center called a virtual data center (VDC).

가상 데이터 센터(VDC)Virtual data center (VDC)

VDC는 개발자가 데이터 센터를 보는 시점을 간략하게 해 주는 물리적 데이터 센터 환경의 논리적 표현이다. 이상적으로 IT 전문가 또는 설계자(Architect)는 개발자가 분산형 애플리케이션/서비스를 기술할 수 있는 스케일 불변 방식과 동일한 방식으로 데이터 센터를 기술할 수 있어야 한다. VDC는 데이터 센터 내의 서버, 네트워크 및 저장 자원 및 이들의 토폴로지 관계의 추상화인 것으로 간주될 수 있다. 통상적인 데이터 센터의 도표(diagram)는, 복수의 상호 연결된 서버, 네트워크 장비, IP 주소, VLAN, 운영 체제, 저장 장치 등이 Visio나 유사한 도구를 이용하여 그린 단일 도표상에 모두 표현되어 상당히 복잡하다. 이 도표에 추가하여, 데이터 센터가 어떻게 분할, 구성 및 관리되는지를 정확히 규정(prescribe)하는 통상적으로 긴 문서가 존재한다.VDC is a logical representation of the physical data center environment that simplifies the point at which developers see the data center. Ideally, an IT professional or architect should be able to describe the data center in the same way that developers can describe distributed applications / services in a scale-invariant way. A VDC may be considered an abstraction of servers, networks, and storage resources and their topology relationships within a data center. A typical data center diagram is quite complex because multiple interconnected servers, network equipment, IP addresses, VLANs, operating systems, storage devices, etc. are all represented on a single diagram drawn using Visio or similar tools. . In addition to this diagram, there is usually a long document that prescribes exactly how the data center is divided, configured and managed.

이러한 복잡함의 예로서는 MSA(Microsoft Systems Architecture) EDC(Enterprise Data Center)가 있다. 업데이트(update) 및 업그레이드(upgrade)가 적용됨에 따라 데이터 센터의 상태를 반영하여, 손으로 그린 도표 및 문서를 최신으로 유지하는 것은 불가능한 것은 아니더라도 비용이 많이 드는 일임이 분명하다. 마찬가지로, 문서의 규정 사항에 대하여 환경의 유효성을 검증하는 것은 어려울 뿐만 아니라 사람에 의한 오류가 발생할 수 있다.An example of this complexity is the Microsoft Systems Architecture (MSA) Enterprise Data Center (EDC). As updates and upgrades are applied, it is clear that keeping the hand-drawn charts and documents up-to-date, reflecting the state of the data center, is expensive, if not impossible. Similarly, validating the environment against documentation requirements is difficult and human error can occur.

스케일 불변 방식으로 MSA EDC와 같은 복잡한 데이터 센터를 표시하는 능력은 설계자 및 IT 전문가 모두에게 매우 강력한 것이다. 데이터 센터를 컴포넌트, 포트 및 와이어로 기술할 수 있는 능력은, 오늘날의 설계 및 배포 프로세스에서 결여되어 있는 배포 요건의 모델링 및 유효성 검증이 가능한 강력한 프레임워크를 제공한다.The ability to mark complex data centers like the MSA EDC in a scale-invariant way is very powerful for both designers and IT professionals. The ability to describe data centers as components, ports, and wires provides a powerful framework for modeling and validating deployment requirements that are lacking in today's design and deployment processes.

SDM 원리SDM principle

SDM은:SDM is:

- 분산형 애플리케이션들/서비스들을 설계하는 것을 보다 쉽게 하는 추상화를 정의한다.Defines an abstraction that makes it easier to design distributed applications / services.

- 운영 실시의 자동화 및 재사용을 위한 프레임워크를 가능하게 한다.Enable a framework for automation and reuse of operational practices

- 분산형 애플리케이션 및 서비스들의 운영 및 배포를 단순화한다.Simplify the operation and deployment of distributed applications and services.

오늘날 서비스의 오퍼레이터 부근의 벽 상에서 복잡한 다이어그램으로서 흔히 보여지는 것을 캡쳐하는 것을 고려함으로써, SDM이 무엇인지를 이해하는 것이 더 쉬워질 수 있다. 이들 다이어그램에서, 박스는 일반적으로 서비스의 실행 요소를 나타내며, 박스들을 연결하는 선들은 서비스 요소들 간의 통신 경로를 나타낸다. 예를 들어, 다시 하나 이상의 중간-층(middle-tier) 또는 백-엔드 서비스들에 연결되는 일부 IIS 프론트-엔드 기계들에 연결된 로드 밸런서(load balancer)가 있다.By considering capturing what is commonly seen as a complex diagram on the wall near the operator of today's service, it can be easier to understand what SDM is. In these diagrams, the boxes generally represent the elements of service execution, and the lines connecting the boxes represent the communication path between the elements of service. For example, there is a load balancer connected to some IIS front-end machines, which in turn are connected to one or more middle-tier or back-end services.

SDM에 대하여 생각하는 또다른 방법은 SDM은 분산형 애플리케이션/서비스의 동작에 대한 메타-모델(meta-model)과 컴퓨팅 환경에서 실행하는 애플리케이션/서비스의 "생생한" 청사진 모두라는 것이다. 가능한 소프트웨어 동작들을 포함하여, 선언적이고 스케일-불변의 방식으로, SDM은 컴퓨팅 환경에서 애플리케이션의 구조를 캡처한다. 하드웨어와 네트워크 자원 간의 바인딩을 포함하여 서비스의 토폴로지 및 소프트웨어 컴포넌트의 유효한 동작들을 선언적으로 기술하는 능력은 매우 강력하다.Another way to think about SDM is that it is both a meta-model for the behavior of distributed applications / services, and a "live" blueprint for the applications / services you run in your computing environment. In a declarative and scale-invariant way, including possible software operations, SDM captures the structure of an application in a computing environment. The ability to declaratively describe the service's topology and valid behavior of software components, including bindings between hardware and network resources, is very powerful.

유사한 것으로서, Microsoft의 Common Object Model(COM)을 살펴보자. COM 은 컴포턴트들이 어떻게 패키지되고, 등록되고, 활성화되고, 발견되는지 등을 표준화하였다. COM은 라이프타임, 메모리 관리, 및 인터페이스 구현에 관한 엄격한 룰들을 명령한다. 이들 원형(primitives)은, 컴포넌트들이 블랙 박스로서 처리될 수 있도록 하기 때문에, 정보처리 상호운용(interoperability)에 필수적이다. COM은 이벤팅, 자동화 및 OLE와 같은 보다 정교한 서비스들을 위한 기초이다.As a similar one, take a look at Microsoft's Common Object Model (COM). COM has standardized how components are packaged, registered, activated, and discovered. COM imposes strict rules on lifetime, memory management, and interface implementation. These primitives are necessary for information processing interoperability because they allow components to be treated as black boxes. COM is the basis for more sophisticated services such as eventing, automation, and OLE.

마찬가지로, SDM은 보다 정교한 특성을 만들기 위한 일부 기본 원형들을 정의하는 것을 필요로 한다. 이들 원형들은:Similarly, SDM needs to define some basic prototypes to make more sophisticated characteristics. These prototypes are:

- 컴포넌트 - 구현, 배포 및 관리의 유닛-Components-units of implementation, deployment and management

- 포트 - 관련 유형 및 유효한 동작들의 집합을 가지는 지정된 종단점Port-a specified endpoint with an associated type and a set of valid actions

- 와이어 - 포트들간의 허용되는 통신 경로Allowed communication paths between wires and ports

- 계층 - 자원 관리 소유권 및 바인딩의 분리-Hierarchy-Separation of resource management ownership and binding

- 맵핑 - 각 계층에서 컴포넌트, 포트 및 와이어 간의 바인딩-Mapping-binding between components, ports and wires in each layer

본 명세서의 나머지는 이들 원형들 각각을 보다 상세하게 설명할 것이다.The remainder of this specification will describe each of these circles in more detail.

컴포넌트, 포트 및 와이어Components, ports, and wires

본 명세서의 목적을 위하여, 컴포넌트, 포트 및 와이어를 사용하여 그려진 MyService라고 불리는 단순한 서비스의 그래픽적인 표현을 고려하는 것이 유용하다. 도 2에서, 박스들은 컴포넌트들을 나타내고, 다이아몬드들은 포트들을 나타내며, 파선은 와이어들을 나타낸다.For the purposes of this specification, it is useful to consider a graphical representation of a simple service called MyService that is drawn using components, ports, and wires. In FIG. 2, boxes represent components, diamonds represent ports, and dashed lines represent wires.

- MyService는, MyFrontEnd와 MyBackEnd라는 컴포넌트들을 사용하기 때문에 복합 컴포넌트이다.MyService is a composite component because it uses components called MyFrontEnd and MyBackEnd.

- MyService는 MyFrontEnd 컴포넌트에 의해 구현된 위임 포트(delegated port)인 web이라고 불리는 하나의 가시적 포트를 가진다.MyService has one visible port called web, which is a delegated port implemented by the MyFrontEnd component.

- MyFrontEnd는 2개의 포트, 즉 위임 포트와 catalog라고 라벨이 붙은 포트를 가진다.MyFrontEnd has two ports, a delegation port and a port labeled catalog.

- MyBackEnd는 data라고 라벨이 붙은 하나의 포트를 가진다.MyBackEnd has a single port labeled data.

- MyFrontEnd와 MyBackEnd 컴포넌트들은 catalog 포트와 data포트를 와이어를 통하여 묶는 잠재적인 통신 관계를 가진다.The MyFrontEnd and MyBackEnd components have a potential communication relationship that wires the catalog and data ports over wires.

컴포넌트component

컴포넌트들은 구현, 배포 및 관리의 유닛들이다. 컴포넌트들의 예들은 Windows Server를 실행하는 전용 서버, IIS 가상 웹 사이트 또는 SQL 데이터베이스이다. 컴포넌트들은 일반적으로 기계 경계를 가지나, 단일 서버 상에서 호스팅되는 다수의 IIS 가상 웹 사이트들에 의해 증명되어질 것을 요청되지는 않는다.Components are the units of implementation, deployment and management. Examples of components are dedicated servers running Windows Server, IIS virtual Web sites, or SQL databases. Components generally have machine boundaries, but are not required to be verified by multiple IIS virtual Web sites hosted on a single server.

컴포넌트들은 포트들을 통하여 기능들을 공개하며, 와이들을 통하여 통신한다. 단순한 컴포넌트들은 단지 멤버들로서 포트들을 가질 수 있다. 다른 컴포넌트들을 사용하는 컴포넌트들은 복합 컴포넌트(compound component)라고 불리며, 다른 컴포넌트들에 덧붙여 포트들과 와이어들을 가질 수 있다.Components expose their functions through ports and communicate over the wires. Simple components can only have ports as members. Components that use other components are called compound components and may have ports and wires in addition to other components.

복합 컴포넌트들은 합성을 통하여 생성되며, 그와 관련된 어떠한 구현도 가지지 않는다. 복합 컴포넌트 포트들은 내부 컴포넌트들로부터의 위임 포트들이다. 복합 컴포넌트들은 배열(collocation), 캡슐화(encapsulation) 및 재사용을 가능하게 하며, 따라서 애플리케이션/서비스 및 그 행동을 조직화하는 하나의 방법으로 생각될 수 있다.Composite components are created through synthesis and have no implementation associated with them. Composite component ports are delegate ports from internal components. Composite components enable collocation, encapsulation and reuse, and thus can be thought of as one way to organize applications / services and their behavior.

컴포넌트의 단지 공용 포트들(public ports)만이 컴포넌트 외부에서 가시적이다. 복합 컴포넌트들은 캡슐화를 통하여 자신이 사용하는 컴포넌트들의 내부 구조를 숨긴채 외부 세계에는 단순 컴포넌트들(simple components)로 보인다. 사실, 양자에 의해 지원되는 행동들과 포트 유형들이 완전히 동일하기만 하다면, 단순 컴포넌트는 복합 컴포넌트로 교체될 수 있으며, 그 역도 가능하다. Only public ports of the component are visible outside the component. Complex components appear as simple components to the outside world, encapsulating the internal structure of the components they use. In fact, as long as the behaviors and port types supported by both are exactly the same, a simple component can be replaced with a composite component and vice versa.

포트port

포트들은, 관련 유형을 가지며 일반적으로 프로토콜 역할(protocol role)과 허용되는 동작들의 집합과 관련되는, 명명된 종단점(named end-points)이다. 포트들은 포트들의 예들은 허용되는 동작들의 집합을 가지는 SOAP 포트, HTTP 서버 포트 등이 있다. 포트들은 위임될 수 있는데, 이는 외부 컴포넌트가 내부 컴포넌트의 포트를 자신의 것인양 공개할 수 있다는 것을 의미한다. 포트들은 하나의 컴포넌트에 대한 공용 인터페이스(행동)를 형성한다. 포트들은 공용으로(가시적으로) 될 수 있는 컴포넌트의 유일한 멤버들이다.Ports are named end-points that have an associated type and are generally associated with a protocol role and a set of operations that are allowed. Examples of ports are SOAP port, HTTP server port, etc., which have a set of operations allowed. Ports can be delegated, which means that an external component can publish an internal component's port as its own. Ports form a public interface (behavior) for one component. Ports are the only members of a component that can be made public.

와이어wire

와이어들은 포트들간의 허용되는 바인딩들이며, 포트들 (및 컴포넌트들) 간의 토폴로지적 관계를 나타낸다. 와이어들은 임의의 인스턴스 상호연결 토폴로지(instance interconnect topology)를 지정하지 않으며, 대신 인스턴스 상호연결 토폴로지를 위한 "잠재성(potentiality)"을 표현한다.Wires are allowed bindings between ports and represent a topological relationship between ports (and components). The wires do not specify any instance interconnect topology, but instead represent a "potentiality" for the instance interconnect topology.

와이어들은 본질적으로 버스들이며, 하나 이상의 포트 멤버들을 포함할 수 있다. 와이어들은 포인트-투-포인트 관계로 오해되어서는 안 된다. 주어진 포트는 동일한 와이어 내에서 한번 이상 나타날 수 없다.The wires are essentially buses and may include one or more port members. Wires should not be mistaken for a point-to-point relationship. A given port may not appear more than once in the same wire.

스키마(Schema)Schema

애플리케이션/서비스를 설명하기 위해서는, SDM을 위한 표준 스키마를 가질 필요가 있다. SDM 스키마는 XSD 및 XML 문법을 이용하여 표현될 수 있어야 한다. SDM 스키마를 상세히 설명하는 것은 본 명세서의 범위를 벗어나는 것이지만, 본 명세서에서 이후에 설명할 주제를 위한 맥락으로서 간략한 설명을 하는 것이 필요하다. 이하는 SDM 스키마를 간략하게 나타낸 것이다.To describe an application / service, you need to have a standard schema for SDM. SDM schemas must be able to be expressed using XSD and XML grammar. Describing the SDM schema in detail is beyond the scope of this specification, but it is necessary to provide a brief description as context for the subject matter described later herein. The following is a simplified representation of the SDM schema.

<sdm><sdm>

<import /><import />

<identityReference /><identityReference />

<information /><information />

<portImplementationType /><portImplementationType />

<wireImplementationType /><wireImplementationType />

<componentImplementationType /><componentImplementationType />

<hostRelations /><hostRelations />

<portTypes /><portTypes />

<wireTypes /><wireTypes />

<componentTypes /><componentTypes />

</sdm></ sdm>

SDM 스키마에 대한 더욱 상세한 정보를 얻고자 하면 http://big/에 있는 SDM 스키마 사양(specification)을 읽고 샘플 XSD 파일을 검토하도록 한다.For more detailed information on the SDM schema, read the SDM schema specification at http: // big / and review the sample XSD file.

유형(Types)Types

애플리케이션/서비스에서 사용되는 모든 컴포넌트, 포트 및 와이어(wire)는 유형이다. 유형은 본질적으로 C+ 및 C# 등과 같은 객체지향형 언어에서의 클래스에 상당하는 것이며, 클래스와 마찬가지로 새로운 유형은 기존의 유형들로부터 생성(create)될 수 있다. 스케일 불변(scale-invariant) 스페이스는 SDM 스키마에서 portTypes, wireTypes 및 componentTypes로 나타내어진다. 스케일 불변이라 함은, 컴포넌트, 포트, 또는 와이어는 실제의 데이터 센터에 이들 각각의 복수의 인스턴스가 존재하는 경우라 하더라도 애플리케이션/서비스 SDM에서 일단 표현될 수 있음을 의미한다.All components, ports, and wires used in an application / service are types. Types are essentially equivalent to classes in object-oriented languages such as C + and C #, and, like classes, new types can be created from existing types. Scale-invariant spaces are represented by portTypes, wireTypes, and componentTypes in the SDM schema. Scale invariant means that a component, port, or wire can be represented once in an application / service SDM even if there are multiple instances of each of these in an actual data center.

유형은 궁극적으로 구현 유형(implementation type)으로부터 파생되며, 이는 본질적으로 공통된 기술 특징에 대한 추상화(abstraction)이다. 예컨대 웹 서비스(Web Service)는 SQL 데이터베이스와 마찬가지로 구현 유형으로서 모델링될 수 있다. MyService 애플리케이션에서는, MyFrontEnd는 구현 유형 웹 서비스로부터 파생되는 새로운 유형이고, MyBackEnd는 구현 유형 SQL 데이터베이스로부터 파생되는 새로운 유형이다.Types are ultimately derived from an implementation type, which is essentially an abstraction of common technical features. For example, a Web service can be modeled as an implementation type, just like a SQL database. In the MyService application, MyFrontEnd is a new type derived from the implementation type Web service, and MyBackEnd is a new type derived from the implementation type SQL database.

componentImplementationType 및 wireImplementationType SDM 스키마 요소(element) 각각은 설정 스키마(settings schema), 배포 목록(deployment manifest) 및 포트 구현 참조(reference)를 포함할 수 있다. portImplemenationType 요소는 포트 구현 참조를 갖지 않는다. 도 9는 SDM 구현 유형 스페이스가 어떻게 생겼는지를 나타내고 있다.Each of the componentImplementationType and wireImplementationType SDM schema elements may include a settings schema, a deployment manifest, and a port implementation reference. The portImplemenationType element does not have a port implementation reference. 9 shows what the SDM implementation type space looks like.

- 설정 스키마는 설계시(design-time) 유효성이 검증될 수 있는 컴포넌트, 포트 및 와이어 상의 구성 파라미터(configuration parameter)들에 대한 XSD이다.The configuration schema is an XSD for configuration parameters on components, ports and wires that can be validated at design time.

- 배포 목록은 컴포넌트, 포트, 또는 와이어가 설치되려면 어느 설치 파라미터들이 설정될 필요가 있는지를 표현하는 XSD이다. 이 목록은 Fusion 또는 그 밖의 어떠한 설치자(installer) 기술에 대한 스키마일 수 있다.-The distribution list is an XSD representing which installation parameters need to be set before the component, port, or wire can be installed. This list can be a schema for Fusion or any other installer technology.

- 포트 구현 참조는 컴포넌트 및 와이어가 선언(declare)된 포트 구현 유형을 참조함으로써 허용 가능한 포트를 선언하는 위치이다.A port implementation reference is where to declare an acceptable port by referring to the port implementation type in which the component and wire are declared.

또한, 다른 컴포넌트들을 호스팅할 수 있는 컴포넌트는, 설치자 및 자신이 호스팅할 수 있는 컴포넌트 구현 유형을 식별하는 hostRelations SDM 스키마 요소를 이용하여 선언된다. hostRelations 요소는 컴포넌트들 중 하나가 다른 컴포넌트(들)을 위한 호스트로서 작용하는 경우 컴포넌트 구현 유형간의 방향성 링크(directional link)로서 간주될 수 있다. 컴포넌트를 호스팅한다는 것은 컴포넌트의 코드를 위한 실행 환경을 제공한다는 것을 의미한다. 예컨대 IIS는 구현 유형 웹 서비스 및 웹 애플리케이션(Web Application)의 컴포넌트들을 위한 호스트이다. 호스트는 본 명세서에서 이후에 더욱 상세히 설명하기로 한다.In addition, components that can host other components are declared using a hostRelations SDM schema element that identifies the installer and the component implementation type that it can host. The hostRelations element may be considered as a directional link between component implementation types when one of the components acts as a host for the other component (s). Hosting a component means providing an execution environment for the component's code. IIS, for example, is a host for components of implementation type web services and web applications. The host will be described in more detail later in this specification.

SDM 스키마에서 portType, wireType 및 componentType 요소 각각은 애플리케이션 제약값(application constraint value), 배포 값(deployment value) 및 호스트 제약값(host constraint value)을 포함한다. 또한 wireType 요소는 지정된 와 이어 유형 상에서 허용 가능한 포트 유형을 정의하는 포트 유형 요소를 포함하며, componentType 요소는 지정된 컴포넌트 유형 상에서 호스팅될 수 있는 구현 유형을 식별하는 호스팅된 유형 리스트(hosted types list) 요소를 포함한다. 도 10은 SDM 유형 스페이스를 나타낸다.In the SDM schema, each of the portType, wireType, and componentType elements includes an application constraint value, a deployment value, and a host constraint value. The wireType element also contains a port type element that defines the acceptable port types on the specified wire type, and the componentType element contains a hosted types list element that identifies implementation types that can be hosted on the specified component type. Include. 10 illustrates an SDM type space.

- 설정값은 컴포넌트, 포트 및 와이어에 대한 구성값을 제공하는 설정 스키마에 대한 XML이고, 호스트의 제약값에 대하여 설계시에 유효성이 검증될 수 있다.Configuration values are XML to configuration schemas that provide configuration values for components, ports and wires, and can be validated at design time against host constraints.

- 배포값은 컴포넌트, 포트, 또는 와이어가 제대로 기능하기 위해 설정될 필요가 있는 구성 파라미터의 값을 표현하는 배포 목록에 대한 XML이다.-A distribution value is XML for a distribution list that represents the value of a configuration parameter that a component, port, or wire needs to be set for to function properly.

- 제약값은 호스트의 컴포넌트, 포트, 또는 와이어가 설정되어야 하는 구성 파라미터 값을 제공하는 설정 스키마를 위한 XML이다. 제약값은 설계시에 기저 호스트(underlying host)의 설정값에 대하여 유효성이 검증될 수 있다.Constraints are XML for a configuration schema that provides configuration parameter values for which components, ports, or wires of the host should be set. Constraints can be validated against the settings of an underlying host at design time.

- 포트 유형은 지정된 와이어의 멤버일 수 있는 허용 가능한 포트 유형을 열거하는 XML이다.Port type is an XML listing the allowable port types that may be members of the specified wire.

- 호스팅된 유형 리스트는 어떤 컴포넌트가 호스팅할 수 있는 컴포넌트 구현 유형의 리스트를 그 컴포넌트가 선언하는 XML이다.A hosted type list is an XML that declares a list of component implementation types that a component can host.

인스턴스(Instances)Instances

컴포넌트, 포트 및 와이어는 애플리케이션/서비스의 구조 및 양상(behavior)을 정의하지만, 실행되는 인스턴스를 정의하지는 않는다. 매 구성요소, 포트 및 와이어 유형 선언은 하나 또는 그 이상의 인스턴스를 가질 수 있다. 인스턴스들은, 물리적 자원(서버, 네트워크 스위치 포트 및 디스크)이 할당되고 소프트웨어 자원(운영 체제, 런타임 호스트, 애플리케이션 코드)이 설치 및 구성되도록 애플리케이션/서비스를 배포한 결과이다.Components, ports, and wires define the structure and behavior of an application / service, but do not define the instances on which they run. Every component, port, and wire type declaration can have one or more instances. Instances are the result of deploying an application / service so that physical resources (servers, network switch ports, and disks) are allocated and software resources (operating system, runtime hosts, application code) are installed and configured.

모든 인스턴스들을 생성시부터 삭제시까지 추적하는 것은 SDM 런타임이 할 일이다.It is up to the SDM runtime to track all instances from creation to deletion.

SDM 런타임(SDM Runtime)SDM Runtime

SDM 런타임은 그 자신이 컴포넌트, 포트 및 와이어의 인스턴스들을 생성하지는 않고, 대신 SDM 인스턴스들의 생성 및 관리를 조정하는 데 사용되는 일단의 API들을 제공한다. 웹 서비스 컴포넌트에 대한 호스트로서 IIS와 함께 윈도우 서버(Windows Server)를 실행시키는 서버와 같이, 인스턴스를 실제로 생성하는 데에는 통상적으로 복수의 엔티티(entity)가 관련되며, 완료되기까지는 수시간 또는 수일이 걸릴 수 있다.The SDM runtime does not itself create instances of components, ports and wires, but instead provides a set of APIs used to coordinate the creation and management of SDM instances. Like the server running Windows Server with IIS as the host for the Web service component, the actual creation of an instance usually involves multiple entities, which can take hours or days to complete. Can be.

SDM 런타임은 언제 "SDM 인스턴스 생성" 프로세스가 개시되고, 언제 성공 또는 실패로 종료될지를 알고 있다. 또한 SDM 런타임은 SDM 인스턴스에 대하여 그 존속 기간(lifetime)동안 어떤 변경이 가해져야 하는지를 알고 있다. SDM 런타임은 지정된 SDM과 관련된 인스턴스들에 관한 정보에 대하여 질의(query)를 받을 수 있도록 소정의 애플리케이션/서비스와 관련된 모든 트랜잭션(transaction)들을 기록하는 어카운턴트(accountant)라고 간주될 수 있다.The SDM runtime knows when the "create SDM instance" process begins and when it ends with success or failure. The SDM runtime also knows what changes should be made to the SDM instance during its lifetime. An SDM runtime can be considered an accountant that records all transactions associated with a given application / service so that it can be queried for information about instances associated with a given SDM.

SDM 인스턴스를 생성하는 제1 단계는 애플리케이션/서비스 SDM을 SDM 런타임으로 등록하는 것이다. 일단 SDM 런타임이 주어진 SDM을 알게 되면, 인스턴스 생성 프로세스가 팩토리(Factory)들과 자원 관리자(Resource Manager; 이하 설명할 것임)들을 이용하여 호출될 수 있다.The first step in creating an SDM instance is to register an application / service SDM with the SDM runtime. Once the SDM runtime knows a given SDM, the instance creation process can be invoked using factories and Resource Managers (described below).

API 및 런타임 설계에 관한 더욱 상세한 정보를 얻기 위해서는 http://big/에 있는 SDM 런타임 아키텍쳐 사양을 참조하면 된다.For more information on the API and runtime design, refer to the SDM runtime architecture specification at http: // big /.

호스트 및 팩토리(Hosts and Factories)Hosts and Factories

다른 컴포넌트들을 "호스팅"할 수 있는 컴포넌트는 호스트라고 불리며, 이들이 지원하는 구현 유형에 대한 팩토리로서 작용한다. 컴포넌트는 앞서 설명한 SDM 스키마의 hostRelations 요소를 이용하여 하나 또는 그 이상의 컴포넌트 구현 유형의 호스트로서 선포될 수 있다.Components that can "host" other components are called hosts and act as factories for the implementation types they support. A component may be declared as a host of one or more component implementation types using the hostRelations element of the SDM schema described above.

호스트는 컴포넌트의 코드를 위한 실행 환경을 제공하지만, 팩토리는 소정 유형의 SDM 인스턴스들을 생성하고 SDM 런타임 API들을 통해 SDM 런타임과 상호작용하는 실제 서비스이다. 팩토리는 하나 또는 그 이상의 컴포넌트 구현 유형을 지원할 수 있고, 어느 컴포넌트 구현 유형이 지원되는지를 지정하는 SDM 런타임으로 등록해야 한다. 소정의 팩토리는 상이한 구성을 갖는 동일한 유형의 호스트를 복수 개 지원할 수 있고, 또한 개개의 팩토리는 호스트 구성의 유형 각각에 대하여 존재할 수도 있다. 예컨대 IIS 팩토리는 웹 서비스 및 웹 애플리케이션과 같은 복수의 구현 유형을 지원할 수 있다. 마찬가지로, SQL 팩토리는 데이터베이스, 분할된 데이터베이스(Partitioned Database) 및 고가용 데이터베이스(Highly Available Database)와 같은 상이한 데이터베이스 유형을 지원할 수 있다.The host provides an execution environment for the code of the component, but the factory is the actual service that creates some type of SDM instances and interacts with the SDM runtime through the SDM runtime APIs. The factory can support one or more component implementation types, and must register with the SDM runtime specifying which component implementation types are supported. A given factory may support a plurality of hosts of the same type having different configurations, and individual factories may also exist for each type of host configuration. For example, an IIS factory can support multiple implementation types, such as web services and web applications. Similarly, an SQL factory can support different database types, such as databases, partitioned databases, and highly available databases.

팩토리는 기억장치(storage), 네트워크 및 서버와 같은 물리적 자원을 그 자신이 관리하지는 않는다. 팩토리는 자원 관리자를 통해 물리적 자원(그리고 이들 의 논리적 등가물)과 상호작용한다.The factory does not manage physical resources such as storage, network and servers by itself. Factories interact with physical resources (and their logical equivalents) through resource managers.

자원 관리자(Resource Managers)Resource Managers

자원 관리자는 (1) 부트스트랩(bootstrap) 프로세스의 일부로서 발견(discover) 또는 생성되거나, (2) 물리적 환경의 소정의 선언적 XML 기반의 기술(description)을 통해 지정된 물리적 및 논리적 자원을 관리한다. 자원 관리자는 모든 기억장치, 네트워크 및 서버 자원을 보유하며, 공통의 자원 관리 API를 공개하여 자원 할당 요청을 처리하고 이러한 자원들의 소유권(ownership)을 추적한다.The resource manager manages the specified physical and logical resources either (1) discovered or created as part of the bootstrap process, or (2) via some declarative XML-based description of the physical environment. The resource manager holds all storage, network, and server resources and exposes common resource management APIs to handle resource allocation requests and track the ownership of these resources.

자원 관리자의 예는 NRM(Network Resource Manager), SRM(Storage Resource Manager) 및 PRM(PC Resource Manager)이다. 이들 자원 관리자들 각각은 물리적 포트나 디스크 또는 서버 및 이들이 공개하는 VLAN, 논리적 디스크 볼륨(logical disk volumes), 공유 파일(file shares), 웹 서버 등과 같은 논리적 자원의 할당을 담당한다. 자원 관리자는 또한 할당 및 해제(de-allocation)를 달성하도록 물리적 장치들을 프로그래밍하는 역할을 한다.Examples of resource managers are Network Resource Manager (NRM), Storage Resource Manager (SRM), and PC Resource Manager (PRM). Each of these resource managers is responsible for allocating logical resources such as physical ports or disks or servers and the VLANs they expose, logical disk volumes, file shares, web servers, and so on. The resource manager is also responsible for programming the physical devices to achieve allocation and de-allocation.

물리적 하드웨어를 프로그램하기 위해, 자원 관리자는 하드웨어 장치의 구현 세부 사항을 숨기고 있는 자원 제공자들을 통해 하드웨어와 상호작용함으로써, 예컨대 복수의 공급자(vendor)로부터 제공된 네트워크 스위치들이 서로 바뀌어 쓰일 수 있도록 한다(제조자의 장치에 대한 제공자가 존재하는 경우). 윈도우(Windows)의 하드웨어 추상화 계층(HAL; hardware abstraction layer) 및 장치 드라이버 모델과 마찬가지로, 서버, 네트워크 및 저장 장치에 이르는 데이터 센터 환경에 대해 서도 동등한 추상화 계층이 존재한다.To program the physical hardware, the resource manager interacts with the hardware through resource providers that hide the implementation details of the hardware device, for example, allowing network switches provided from multiple vendors to be interchanged (manufacturer's If a provider exists for the device). Similar to the hardware abstraction layer (HAL) and device driver models of Windows, there is an equivalent abstraction layer for data center environments ranging from servers, networks, and storage devices.

계층 및 매핑(Layers and Mappings)Layers and Mappings

컴포넌트, 포트 및 와이어는 호스트, 팩토리, 자원 관리자 및 SDM 런타임과 결합되는 경우 강력한 추상화(abstraction)이지만, 이들은 분산형 애플리케이션/서비스를 배포 및 관리하기에는 충분하지 않다. 이러한 논리적 추상화의 물리적 인스턴스를 생성 및 관리하기 위해서는, 어떠한 추가적인 구축물(construct)이 필요하다. 이러한 추가적인 구축물은 계층 및 매핑이다.Components, ports, and wires are powerful abstractions when combined with hosts, factories, resource managers, and the SDM runtime, but they are not sufficient to deploy and manage distributed applications / services. In order to create and manage physical instances of this logical abstraction, some additional constructs are needed. These additional constructs are layers and mappings.

계층(Layers)Layers

계층에 대한 필요는 애플리케이션/서비스의 배포 요건(deployment requirement)들의 유효성을 설계시에 검증하고자 하는 욕구가 그 동기가 된다. 도 11은 SDM에 의해 정의된 계층 추상화를 나타내고 있다.The need for layers is motivated by the desire to validate the design / deployment requirements of the application / service at design time. 11 shows the hierarchical abstraction defined by SDM.

- 애플리케이션 계층은 분산 가능한 컴포넌트, 이들의 배포 요건 및 제약(constraints), 그리고 이들의 통신 관계(communication relationship)를 애플리케이션/서비스의 맥락에서 기술한다.The application layer describes distributable components, their deployment requirements and constraints, and their communication relationships in the context of an application / service.

- 배포 계층은 다른 것 들 중에서도 IIS, CLR 및 SQL과 같은 호스트에 대한 구성 및 정책(policy) 설정 및 제약을 기술한다.The deployment layer describes, among other things, configuration and policy settings and constraints for hosts such as IIS, CLR, and SQL.

- 가상 데이터 센터(VDC; Virtual Data Center) 계층은 운영 체제로부터 네트워크 토폴로지(topology)를 통해 서버, 네트워크 및 저장 장치에 이르기까지의 데이터 센터 환경 설정 및 제약을 기술한다.The Virtual Data Center (VDC) layer describes data center configuration and constraints from the operating system through the network topology to servers, networks, and storage devices.

- 하드웨어 계층은 물리적 데이터 센터 환경을 기술하고, 이는 발견되거나 예컨대 XML을 이용하여 선언적 방식으로 지정된다. 이 계층은 스케일 불변이 아니므로 SDM에서 모델링되지 않으나, 완전함을 위해 포함되었다.The hardware layer describes the physical data center environment, which is found or specified in a declarative manner, for example using XML. This layer is not modeled in SDM because it is not scale invariant, but is included for completeness.

매핑(Mappings)Mappings

SDM이 계층화되어 있으므로, 다양한 계층을 바인딩(binding)할 필요가 존재한다. 매핑은 본질적으로 어떤 계층에 있는 컴포넌트 또는 포트를 아래의 다음 계층에 있는 컴포넌트 또는 포트와 바인딩한 것이다. 매핑은 다음과 같이 기술될 수 있다.Since SDM is layered, there is a need to bind various layers. A mapping is essentially a binding of a component or port in one layer to a component or port in the next layer below. The mapping can be described as follows.

MT = [Tn->Tn-1] + [Tn-1->Tn-2] + [Tn-2 ->Tn-3] + [...]M T = [T n- > T n-1 ] + [T n-1- > T n-2 ] + [T n-2- > T n-3 ] + [...]

여기서 M은 컴포넌트, 포트, 또는 와이어를 나타내며, n은 계층을 나타낸다. 화살표는 매핑의 방향을 나타내며, 항상 높은 계층으로부터 낮은 계층 쪽으로 향한다.Where M represents a component, port, or wire, and n represents a hierarchy. Arrows indicate the direction of the mapping and always point from the higher layer to the lower layer.

예컨대, 도 12에서 MyFrontEnd라는 이름의 애플리케이션 계층에 있는 컴포넌트는 IIS라 불리는 배포 계층에 있는 컴포넌트에 매핑된다. 마찬가지로 MyBackEnd라는 이름의 컴포넌트는 배포 계층에 있는 SQL 컴포넌트에 매핑된다.For example, in FIG. 12 a component in the application layer named MyFrontEnd is mapped to a component in a distribution layer called IIS. Similarly, a component named MyBackEnd is mapped to an SQL component in the deployment layer.

설계시 유효성 검증 (Design-time Validation)Design-time Validation

컴포넌트와 아래쪽 계층에 있는 그 컴포넌트의 호스트 컴포넌트 사이의 바인딩은, 애플리케이션/서비스가 실제로 라이브 데이터 센터(live data center)에 배포되기 전에 개발자에게 문제를 안겨줄 수 있다. 이러한 문제는 유형의 비호환, 구성의 충돌(conflict), 동작의 불일치(mismatch), 토폴로지 관계(topological relationship)의 결여 등에 기인한 것일 수 있다. 예컨대 도 13에 도시된 매핑 시도는 오류를 낳을 수 있는 바, 배포 계층에 있는 IIS 및 SQL 컴포넌트 사이에는 잠재적인 통신 관계가 존재하지 않기 때문이다.The binding between the component and its component in the lower layer can cause problems for the developer before the application / service is actually deployed to the live data center. This problem may be due to type incompatibility, conflict of configuration, mismatch of operation, lack of topological relationship, and the like. For example, the mapping attempt shown in FIG. 13 can be error prone because there is no potential communication relationship between IIS and SQL components in the distribution layer.

MyBackEnd 컴포넌트로부터 SQL 호스트 컴포넌트로의 매핑은 컴포넌트 및 호스트 유형의 호환성이 있고 구성 충돌이 없다는 점에서 유효한 바인딩이었을 수 있지만, MyFrontEnd와 지정된 배포 계층에 존재하지 않는 MyBackEnd 사이의 토폴로지 관계를 MyServiceSDM이 정의하였으므로 이는 유효하지 않다.The mapping from the MyBackEnd component to the SQL host component might have been a valid binding in that the component and host type were compatible and there was no configuration conflict, but since MyServiceSDM defined the topological relationship between MyFrontEnd and MyBackEnd that does not exist in the specified deployment layer, not valid.

설정 및 제약 체크(Settings and Constraints Checking)Settings and Constraints Checking

애플리케이션 계층으로부터 배포 계층(그리고 기타 등등)으로 매핑할 수 있는 능력은, 호스트의 제약에 대하여 컴포넌트의 설정의 유효성을 설계시에 검증할 수 있도록 해 주고, 또한 컴포넌트의 제약에 대하여 호스트 설정의 유효성을 검증할 수 있도록 해 주므로 상당히 강력하다.The ability to map from the application layer to the distribution layer (and so on) allows you to verify, at design time, the validity of a component's configuration against host constraints, and also to validate the host configuration against component constraints. It is quite powerful because it allows us to verify it.

도 14는 상이한 계층에 있는 컴포넌트들 및 호스트 사이의 관계를 더욱 상세히 나타내고 있다. 이 도면에서, VDC 계층에 이르기까지 쭉, 어떤 계층에 있는 컴포넌트와 아래의 다음 계층에 있는 호스트 컴포넌트간에 바인딩이 존재함에 주목하자.14 illustrates in more detail the relationship between components and hosts in different layers. In this figure, note that there is a binding between a component in one layer and a host component in the next layer below, all the way down to the VDC layer.

도 14에서, MyFrontEnd는 IIS에 의해 호스팅되는 웹 서비스이며, IIS는 윈도우 서버에 의해 호스팅되는 윈도우 애플리케이션(Windows Application)이다. IIS 및 SQL의 인스턴스들의 생성 및 삭제를 담당하는 윈도우 애플리케이션 팩토리가 존재하는 것과 마찬가지로, 웹 서비스 및 웹 애플리케이션 컴포넌트의 인스턴스 들의 생성 및 삭제를 지원하는 IIS 팩토리가 존재한다.In FIG. 14, MyFrontEnd is a web service hosted by IIS, and IIS is a Windows application hosted by a Windows server. Just as there is a Windows application factory that is responsible for creating and deleting instances of IIS and SQL, there is an IIS factory that supports the creation and deletion of instances of web services and web application components.

도 15는 앞서 설명한 SDM 설정 및 제약 시멘틱(semantics)을 이용하여 상이한 계층에 있는 컴포넌트들 사이에서 설계시 유효성 검증이 어떻게 동작하는지를 나타내고 있다.FIG. 15 illustrates how validation in design works between components in different layers using SDM configuration and constraint semantics described above.

여기서 위쪽 계층에 있는 컴포넌트의 제약은 아래쪽 계층에 있는 호스트 컴포넌트의 설정에 대하여 유효성이 검증됨에 주목하자. 또한 호스트 컴포넌트의 제약은 호스팅될 컴포넌트의 설정에 대하여 유효성이 검증됨에 주목하자.Note that the constraints of the component in the upper layer are validated against the configuration of the host component in the lower layer. Also note that the constraints of the host component are validated against the configuration of the component to be hosted.

양방향 설정 및 제약 체크는 개발자로 하여금, 아래 방향으로 쭉 SDM 시멘틱을 이용하여 기술된 동작 환경의 맥락에서 자신의 애플리케이션/서비스를 신뢰성있게 개발할 수 있도록 해 준다. 개발 프로세스 도중 데이터 센터에 관한 기술(description)이 신뢰받을 수 있도록 데이터 센터를 기술하기 위해서는, VDC(Virtual Data Center)라 일컬어지는 데이터 센터의 추상화를 생성할 필요가 있다.Bidirectional configuration and constraint checking allows developers to reliably develop their applications / services in the context of the described operating environment using SDM semantics all the way down. To describe a data center so that the description of the data center can be trusted during the development process, it is necessary to create an abstraction of the data center called a virtual data center (VDC).

가상 데이터 센터(VDC)Virtual data center (VDC)

VDC는 개발자가 데이터 센터를 보는 시점을 간략하게 해 주는 물리적 데이터 센터 환경의 논리적 표현이다. 이상적으로 IT 전문가 또는 설계자(Architect)는 개발자가 분산형 애플리케이션/서비스를 기술할 수 있는 스케일 불변 방식과 동일한 방식으로 데이터 센터를 기술할 수 있어야 한다. VDC는 데이터 센터 내의 서버, 네트워크 및 저장 자원 및 이들의 토폴로지 관계의 추상화인 것으로 간주될 수 있다. 통상적인 데이터 센터의 도표(diagram)는, 복수의 상호 연결된 서버, 네트 워크 장비, IP 주소, VLAN, 운영 체제, 저장 장치 등이 Visio나 유사한 도구를 이용하여 그린 단일 도표상에 모두 표현되어 상당히 복잡하다. 이 도표에 추가하여, 데이터 센터가 어떻게 분할, 구성 및 관리되는지를 정확히 규정(prescribe)하는 통상적으로 긴 문서가 존재한다.VDC is a logical representation of the physical data center environment that simplifies the point at which developers see the data center. Ideally, an IT professional or architect should be able to describe the data center in the same way that developers can describe distributed applications / services in a scale-invariant way. A VDC may be considered an abstraction of servers, networks, and storage resources and their topology relationships within a data center. A typical data center diagram is quite complex because multiple interconnected servers, network equipment, IP addresses, VLANs, operating systems, and storage devices are all represented on a single diagram drawn using Visio or similar tools. Do. In addition to this diagram, there is usually a long document that prescribes exactly how the data center is divided, configured and managed.

이러한 복잡함의 예로서는 MSA(Microsoft Systems Architecture) EDC(Enterprise Data Center)가 있다. 업데이트(update) 및 업그레이드(upgrade)가 적용됨에 따라 데이터 센터의 상태를 반영하여, 손으로 그린 도표 및 문서를 최신으로 유지하는 것은 불가능한 것은 아니더라도 비용이 많이 드는 일임이 분명하다. 마찬가지로, 문서의 규정 사항에 대하여 환경의 유효성을 검증하는 것은 어려울 뿐만 아니라 사람에 의한 오류가 발생할 수 있다.An example of this complexity is the Microsoft Systems Architecture (MSA) Enterprise Data Center (EDC). As updates and upgrades are applied, it is clear that keeping the hand-drawn charts and documents up-to-date, reflecting the state of the data center, is expensive, if not impossible. Similarly, validating the environment against documentation requirements is difficult and human error can occur.

스케일 불변 방식으로 MSA EDC와 같은 복잡한 데이터 센터를 표시하는 능력은 설계자 및 IT 전문가 모두에게 매우 강력한 것이다. 데이터 센터를 컴포넌트, 포트 및 와이어로 기술할 수 있는 능력은, 오늘날의 설계 및 배포 프로세스에서 결여되어 있는 배포 요건의 모델링 및 유효성 검증이 가능한 강력한 프레임워크를 제공한다.The ability to mark complex data centers like the MSA EDC in a scale-invariant way is very powerful for both designers and IT professionals. The ability to describe data centers as components, ports, and wires provides a powerful framework for modeling and validating deployment requirements that are lacking in today's design and deployment processes.

아젠다(Agenda): 개요, SDM 빌딩 블록(Building Blocks), 예시 애플리케이션, 예시 호스트, 논리적 배치(Logical Placement), 배포, 상태(Status)Agenda: Overview, SDM Building Blocks, Example Applications, Example Hosts, Logical Placement, Deployment, Status

SDM은 분산형 애플리케이션 및 이들의 배포 환경의 요소 부분을 캡쳐(capture)하는 데에 적합한 메타모델(meta-model)이다. SDM은 권한을 갖는다. 즉 애플리케이션 및 환경은 이들의 SDM으로부터 구축되고, 애플리케이션 및 환경에 대한 변경은 SDM을 통해 이루어지며, 관리 프로세스를 위한 네임스페이스 (namespace)가 제공된다.SDM is a meta-model suitable for capturing the component parts of distributed applications and their deployment environments. SDM has authority. That is, applications and environments are built from their SDMs, changes to applications and environments are made through SDMs, and namespaces are provided for management processes.

서비스 정의 모델(Service Definition Model)은 상호 관련된 스키마, 즉The Service Definition Model is an interrelated schema,

클래스, 클래스 관계 및 설치자 스키마Classes, class relationships, and installer schemas

컴포넌트, 포트 및 와이어 유형 스키마Component, Port, and Wire Type Schemas

논리적 배치 스키마Logical deployment schema

물리적 배치 스키마Physical deployment schema

인스턴스화(instantiation) 요청 스키마Instantiation request schema

인스턴스 스키마Instance schema

의 집합을 지칭한다.Refers to the set of.

SDM 클래스는 모든 분산형 애플리케이션 및 배포 환경에 대한 기본 빌딩 블록이다. Application 클래스에는 ASP.Net Web Service, ASP.Net Web Site, BizTalk Orchestration Schedule, Services Components(COM+) 등이 있다. Service 클래스에는 IIS Server, SQL Sever, BizTalk Server가 있다. OS, Network & Storage 클래스에는 Windows VLAN, Filter, Disk 등이 있다. Hardware 클래스에는 Server, Switch, Firewall, Load Balancer, SAN 등이 있다. 클래스는 시스템 레벨 개발자에 의해 만들어지며, 자주 바뀌지 않는다. 클래스는 SDM의 모든 컴포넌트, 포트 및 와이어 각각의 배후에 있다. 클래스 각각은 공개 설정(public settings; 설정이라고 간단히 불림) 및 개인 설정(private settings; 배포라고 불림)을 포함한다. 관계(relationship)는 클래스 사이, 즉 포트 클래스에 대한 컴포넌트 클래 스, 포트 클래스에 대한 와이어 클래스 및 컴포넌트 클래스에 대한 컴포넌트 클래스에서 캡쳐된다.SDM classes are the basic building blocks for all distributed applications and deployment environments. Application classes include ASP.Net Web Service, ASP.Net Web Site, BizTalk Orchestration Schedule, and Services Components (COM +). The Service class includes IIS Server, SQL Sever, and BizTalk Server. OS, Network & Storage classes include Windows VLAN, Filter, and Disk. Hardware classes include Server, Switch, Firewall, Load Balancer, and SAN. Classes are created by system-level developers and do not change often. The class is behind each and every component, port, and wire of the SDM. Each class includes public settings (called simply settings) and private settings (called deployments). Relationships are captured between classes: component classes for port classes, wire classes for port classes, and component classes for component classes.

ASP.Net Web Site 클래스ASP.Net Web Site Class

<componentClass name="WebSite" layer="Application">http://big/<componentClass name = "WebSite" layer = "Application"> http: // big /

<settingSchema><xs:schema><xs:complexType><xs:sequence>  <settingSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="webSiteName" type="xs:string"/>    <xs: element name = "webSiteName" type = "xs: string" />

<xs:element name="authentication" type="xs:string"/>    <xs: element name = "authentication" type = "xs: string" />

<xs:element name="sessionState" type="xs:boolean"/>    <xs: element name = "sessionState" type = "xs: boolean" />

</xs:sequence></xs:complexType></xs:schema></settingSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ settingSchema>

<deploymentSchema><xs:schema><xs:complexType><xs:sequence>  <deploymentSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="fusionManifest" type="xs:string"/>    <xs: element name = "fusionManifest" type = "xs: string" />

</xs:sequence></xs:complexType></xs:schema></deploymentSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ deploymentSchema>

<portClassesAllowed closed="true">  <portClassesAllowed closed = "true">

<portClassRef name="ClientDataAccess" />     <portClassRef name = "ClientDataAccess" />

<portClassRef name="WebServer" maxOccurs="1"/>     <portClassRef name = "WebServer" maxOccurs = "1" />

<portClassRef name="SoapClientInterface" />     <portClassRef name = "SoapClientInterface" />

<portClassRef name="RemotingClientInterface" />     <portClassRef name = "RemotingClientInterface" />

</portClassesAllowed>  </ portClassesAllowed>

</componentClass></ componentClass>

SOAP Client Port 클래스SOAP Client Port Class

<portClass name="SoapClientInterface" layer="Application">http://big/<portClass name = "SoapClientInterface" layer = "Application"> http: // big /

<settingSchema><xs:schema><xs:complexType><xs:sequence>  <settingSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="formatter" type="xs:string"/>    <xs: element name = "formatter" type = "xs: string" />

<xs:element name="transport" type="xs:string"/>    <xs: element name = "transport" type = "xs: string" />

</xs:sequence></xs:complexType></xs:schema></settingSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ settingSchema>

<deploymentSchema><xs:schema><xs:complexType><xs:sequence>  <deploymentSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="wsdlFile" type="xs:string"/>    <xs: element name = "wsdlFile" type = "xs: string" />

</xs:sequence></xs:complexType></xs:schema></deploymentSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ deploymentSchema>

</portClass></ portClass>

SOAP Wire 클래스SOAP Wire class

<wireClass name="SoapConnnection" layer="Application"><wireClass name = "SoapConnnection" layer = "Application">

<settingSchema/> <settingSchema />

<deploymentSchema/> <deploymentSchema />

<portClassesAllowed> <portClassesAllowed>

<portClassRef name="SoapServerInterface"/>    <portClassRef name = "SoapServerInterface" />

<portClassRef name="SoapClientInterface"/>    <portClassRef name = "SoapClientInterface" />

</portClassesAllowed> </ portClassesAllowed>

</wireClass></ wireClass>

IIS Component 클래스IIS Component class

<componentClass name="IIS" layer="Service"><componentClass name = "IIS" layer = "Service">

<settingSchema><xs:schema><xs:complexType><xs:sequence>  <settingSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="certificateAuth" type="xs:boolean"/>    <xs: element name = "certificateAuth" type = "xs: boolean" />

<xs:element name="ntlmAuth" type="xs:boolean"/>    <xs: element name = "ntlmAuth" type = "xs: boolean" />

<xs:element name="sessionStateType" type="xs:string"/>    <xs: element name = "sessionStateType" type = "xs: string" />

</xs:sequence></xs:complexType></xs:schema></settingSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ settingSchema>

<deploymentSchema><xs:schema><xs:complexType><xs:sequence>  <deploymentSchema> <xs: schema> <xs: complexType> <xs: sequence>

<xs:element name="fusionManifest" type="xs:string"/>    <xs: element name = "fusionManifest" type = "xs: string" />

</xs:sequence></xs:complexType></xs:schema></deploymentSchema>  </ xs: sequence> </ xs: complexType> </ xs: schema> </ deploymentSchema>

- <portClassesAllowed>-<portClassesAllowed>

<portClassRef name="HTTPServer"/>     <portClassRef name = "HTTPServer" />

<portClassRef name="HTTPClient"/>     <portClassRef name = "HTTPClient" />

<portClassRef name="TDSClient"/>     <portClassRef name = "TDSClient" />

</portClassesAllowed>  </ portClassesAllowed>

</componentClass></ componentClass>

클래스 관계 및 설치자Class relationships and installers

<hostRelation classRef="WebSite" hostClassRef="IIS" installerRef="WebSiteInstaller"/> <hostRelation classRef = "WebSite" hostClassRef = "IIS" installerRef = "WebSiteInstaller" />

<installer name="WebSiteInstaller" code="WebSiteInstaller, IISInstaller" codeType="assembly" /><installer name = "WebSiteInstaller" code = "WebSiteInstaller, IISInstaller" codeType = "assembly" />

<HostRelation>은 클래스들 사이의 호스팅 관계를 캡쳐한다. 즉 IIS는 Web Sites를 호스팅할 수 있다.<HostRelation> captures the hosting relationship between classes. IIS can host Web Sites.

설치자는 SDM 런타임으로의 "플러그인(plugin)"이며, 컴포넌트, 포트 및/또는 와이어 클래스의 새로운 인스턴스를 생성하는 역할을 한다. 설치자는 또한 클래스의 인스턴스들을 구성하는 역할도 한다. 상이한 설치자들은 동일한 기저 배포 및 구성 기술, 예컨대 Fusion 또는 WMI.Config을 사용할 수 있다.The installer is a "plugin" to the SDM runtime and is responsible for creating new instances of components, ports and / or wire classes. The installer also plays a role in configuring instances of the class. Different installers can use the same underlying deployment and configuration technology, such as Fusion or WMI.Config.

분산형 애플리케이션(Distributed Application)Distributed Application

분산형 애플리케이션은 컴포넌트, 포트 및 와이어로부터 구축된다. 개발자는 컴포넌트, 포트 및 와이어 유형을 클래스로부터 생성한다. 유형은 클래스의 "용도(uses)"이며, 설정 및 배포 스키마의 값들을 공급한다. 유형은 재활용의 단위이다. 유형은 Visual Studio에서의 단일 프로젝트에 대하여 매핑된다.Distributed applications are built from components, ports, and wires. Developers create components, ports, and wire types from classes. The type is the "uses" of the class and supplies the values of the configuration and deployment schemas. Type is a unit of recycling. Types are mapped to a single project in Visual Studio.

SDM은 복합 컴포넌트 유형(compound component type)을 통해 유형의 합성(composition)을 지원한다. 합성에 의해 작은 애플리케이션으로부터 더욱 큰 분산형 애플리케이션을 구축할 수 있다. 복합 컴포넌트 유형은 Visual Studio의 새로운 프로젝트 유형, 즉 Whitehorse에 대하여 매핑된다.SDM supports composition of types through compound component types. Synthesis allows you to build larger distributed applications from smaller applications. Composite component types are mapped to the new project type in Visual Studio, Whitehorse.

FMStocks.Web 컴포넌트 유형FMStocks.Web component type

<componentType name="FMStocks.Web" class="WebSite"><componentType name = "FMStocks.Web" class = "WebSite">

<ports>  <ports>

<port name="web" type="webServer"/>     <port name = "web" type = "webServer" />

<port name="stock" type="StockClient"/>     <port name = "stock" type = "StockClient" />

<port name="accounts" type="AccountClient"/>     <port name = "accounts" type = "AccountClient" />

<port name="trades" type="TradeClient"/>     <port name = "trades" type = "TradeClient" />

</ports>  </ ports>

<settings><settings>

<webSiteName>FMStocks.Web</webSiteName><webSiteName> FMStocks.Web </ webSiteName>

<authentication>Certificate</authentication><authentication> Certificate </ authentication>

<sessionState>true</sessionState>    <sessionState> true </ sessionState>

</settings></ settings>

<deployment>  <deployment>

<fusionManifest>fmstocks.web.manifest</fusionManifest> <fusionManifest> fmstocks.web.manifest </ fusionManifest>

</deployment></ deployment>

</componentType></ componentType>

FMStocks7 복합 컴포넌트 유형FMStocks7 composite component type

<compoundComponentType name="FMStocks"><compoundComponentType name = "FMStocks">

<components>  <components>

<component name="web" type="FMStocks.Web"/>   <component name = "web" type = "FMStocks.Web" />

<component name="svc" type="FMStocks.WebService"/>   <component name = "svc" type = "FMStocks.WebService" />

<component name="biz" type="FMStocks.BusinessService"/>   <component name = "biz" type = "FMStocks.BusinessService" />

<component name="custdb" type="FMStocks.CustomerDatabase"/>   <component name = "custdb" type = "FMStocks.CustomerDatabase" />

</components>  </ components>

<wires/>  <wires />

<delegatePorts>  <delegatePorts>

<port name="web" componentname="web" portname="web"/>    <port name = "web" componentname = "web" portname = "web" />

<port name="svc" componentname="svc" portname="svc"/>    <port name = "svc" componentname = "svc" portname = "svc" />

</delegateports>  </ delegateports>

</componentType></ componentType>

SDU 및 배포 환경(SDU and Deployment Environment)SDU and Deployment Environment

분산형 애플리케이션에 대한 컴포넌트, 포트 및 와이어 유형은 서비스 배포 유닛(SDU; Service Deployment Unit) 내에 바이너리(binary)와 함께 패키징될 수 있다. 바이너리는 모든 .DLL, .EXE, .config 및 정적 콘텐츠(static content) 등을 포함한다. SDU는 이동 가능(portable)하고, 독립적으로 설치 가능한 분산형 애플리케이션을 나타낸다. 데스크탑 애플리케이션을 위한 Windows Installer MSI 파일과 유사하다. 그러나 균일한 환경(Windows)을 주로 목표(target)로 삼는 데스크탑 애플리케이션과 달리, 분산형 애플리케이션은 현저하게 바뀌는 상이한 배포 환경에서 호스팅될 수 있고, 배포 환경 상에서의 이들의 요건을 표현할 수 있어야 하며, 배포 환경의 모든 정책에 따라야 한다.Components, ports, and wire types for distributed applications may be packaged together with binaries in a service deployment unit (SDU). Binaries include all .DLLs, .EXEs, .configs, and static content. SDUs represent distributed applications that are portable and can be installed independently. It is similar to the Windows Installer MSI file for desktop applications. However, unlike desktop applications that primarily target a uniform environment (Windows), distributed applications can be hosted in different deployment environments that change significantly, and must be able to express their requirements in the deployment environment. All policies of the environment should be followed.

따라서 애플리케이션 및 배포 환경 모두의 요건 및 제약을 표현할 수 있는 모델이 필요하다. MyWebSite 컴포넌트 유형은 SQL 데이터베이스에 저장된 세션 상태로 구성되어 있는 IIS 서버를 필요로 한다. 웹 존(web zone)은 자격 인증(certificate authentication)을 이용하는 webSites 컴포넌트만을 호스팅한다.Therefore, a model is needed that can represent the requirements and constraints of both the application and the deployment environment. The MyWebSite component type requires an IIS server configured with session state stored in a SQL database. The web zone only hosts webSites components that use certificate authentication.

IIS 컴포넌트 유형IIS component type

<componentType name="WebTierIIS" class="IIS"><componentType name = "WebTierIIS" class = "IIS">

<ports/>  <ports />

<settings><settings>

<certificateAuth>true</certificateAuth><certificateAuth> true </ certificateAuth>

<ntlmAuth>false</ntlmAuth><ntlmAuth> false </ ntlmAuth>

<sessionStateType>true</sessionStateType>    <sessionStateType> true </ sessionStateType>

</settings>  </ settings>

<deployment/>  <deployment />

<hostedClasses>  <hostedClasses>

<hostedClass class="WebSite"><hostedClass class = "WebSite">

<!-- constraint language expressed using XPath -->       <!-constraint language expressed using XPath->

<constraint>/[authentication="certificate"</constraint> <constraint> / [authentication = "certificate" </ constraint>

</hostedClass>    </ hostedClass>

</hostedClasses></ hostedClasses>

</componentType></ componentType>

FMStocks.Web 컴포넌트 유형 (재방문)FMStocks.Web component type (Revisit)

<componentType name="FMStocks.Web" class="WebSite"><componentType name = "FMStocks.Web" class = "WebSite">

<ports/>  <ports />

<settings><settings>

<webSiteName>FMStocks.Web</webSiteName><webSiteName> FMStocks.Web </ webSiteName>

<authentication>Certificate</authentication><authentication> Certificate </ authentication>

<sessionState>true</sessionState>    <sessionState> true </ sessionState>

</settings></ settings>

<deployment>  <deployment>

<fusionManifest>fmstocks.web.manifest</fusionManifest> <fusionManifest> fmstocks.web.manifest </ fusionManifest>

</deployment></ deployment>

<hostConstraints>  <hostConstraints>

<hostConstraint hostClass="IIS"><hostConstraint hostClass = "IIS">

<constraints>/[sessiontStateType="SQL"]</constraints><constraints> / [sessiontStateType = "SQL"] </ constraints>

</hostConstraint></ hostConstraint>

</hostConstraints></ hostConstraints>

</componentType></ componentType>

논리적 배치(Logical Placement)Logical Placement

SDU가 배포되기에 앞서, 우선 목표 배포 환경 상에서 유형들을 논리적으로 배치(placement)해야 한다. 논리적 배치는 설계시에 이루어질 수 있다. 요구 및 제약 사항이 체크되며, 개발자는 오류 또는 경고를 알게 된다. 논리적 배치의 결과는 SDU와는 별개의 파일에 캡쳐된다. SDU는 상이한 배포 환경(개발, 테스트, 생산 등)에 대한 상이한 논리적 배치를 가질 수 있다.Before SDUs can be distributed, the types must be logically placed on the target deployment environment. Logical layout can be made at design time. Requirements and constraints are checked, and developers notice errors or warnings. The result of the logical placement is captured in a file separate from the SDU. SDUs can have different logical arrangements for different deployment environments (development, test, production, etc.).

제약 체크는 각 컴포넌트, 포트 및 와이어 클래스에 지정된 XPath 및 XSD를 이용하여 구현된다.Constraint checks are implemented using XPath and XSD assigned to each component, port, and wire class.

배포 환경 구축(Building the Deployment Environment)Building the deployment environment

배포 환경은 SDM 모델을 이용하여 구축된다. 도 22를 참조하자. 본질적으로, 이러한 환경은 상이한 계층에 있는 SDM 애플리케이션이다. 컴포넌트, 포트 및 와이어 유형은 서비스 호스트, 네트워크 아키텍쳐 및 하드웨어를 구성하는 데 있어 동일한 방식으로 이용된다. Whidbey 타임프레임(timeframe)에서는 오직 애플리케이션 계층의 배포를 지원한다. ADS V2.0에서는 Service Host, Network 및 Hardware 계층을 배포할 수 있다. Visual Studio는 배포 환경을 제작하기 위한 설계자(designer)를 구축한다. Visual Studio는 이를 논리적 인프라스트럭처(Logical Infrastructure)라 칭한다. 도 23은 예시 배포를 나타낸 것이다.The deployment environment is built using the SDM model. See FIG. 22. In essence, this environment is an SDM application at a different layer. Components, ports, and wire types are used in the same way to configure service hosts, network architecture, and hardware. The Whidbey timeframe only supports deployment of the application layer. In ADS V2.0, Service Host, Network and Hardware layers can be deployed. Visual Studio builds designers for building deployments. Visual Studio refers to this as Logical Infrastructure. 23 illustrates an example distribution.

인스턴스 요청 문서(Instance Request Document)Instance Request Document

SDM 유형은 스케일 불변이며 어떤 스케일로도 생성될 수 있다. 인스턴스 요청 문서는 생성될 필요가 있는 인스턴스들의 선언적 정의이며, 와이어링 토폴로지(wiring topology)를 포함한다. 도 24는 예시 유형을 도시하고 있으며, 도 25는 예시 인스턴스 요청을 나타내고 있다.The SDM type is scale invariant and can be generated on any scale. The instance request document is a declarative definition of the instances that need to be created and includes a wiring topology. FIG. 24 illustrates example types and FIG. 25 illustrates example instance requests.

물리적 배치(Physical Placement)Physical Placement

물리적 배치는 배포의 목표인 특정 호스트 인스턴스를 골라내는 동작이다. 물리적 배치는 논리적 배치에 의해 제약된다. 제약은 물리적 배치 도중에 유효성이 재검증(revalidate)된다. 도 26을 참조한다.Physical placement is the act of picking out specific host instances that are intended for deployment. Physical placement is constrained by logical placement. Constraints are revalidated during physical deployment. See FIG. 26.

배포(Deployment)Deployment

SDU, 논리적 배치 파일, 인스턴스 요청 및 물리적 배치 파일이 SDM 런타임에 공급된다. SDM 런타임은 클래스 및 호스트 관계에 기초하여 적합한 설치자를 호출한다. 설치자는 새로운 인스턴스를 호스트상에 생성하고 이것이 유형상의 설정값에 일치하도록 구성하는 역할을 맡는다. SDM 런타임은 모든 인스턴스, 이들의 최종 설정값 및 배치의 데이터베이스를 유지한다. 런타임 API는 인스턴스 스페이스의 질의를 지원한다.SDUs, logical batch files, instance requests, and physical batch files are supplied to the SDM runtime. The SDM runtime invokes the appropriate installer based on the class and host relationships. The installer is responsible for creating a new instance on the host and configuring it to match the type settings. The SDM runtime maintains a database of all instances, their final settings, and batches. The runtime API supports instance space queries.

SDM 스키마 설계 사양(SDM Schema Design Specification)SDM Schema Design Specification

SDM 스키마의 세 가지 핵심 요소는 포트, 와이어 및 컴포넌트이다. 포트는 통신 종단점(endpoint)을 나타내고, 컴포넌트는 분산형 애플리케이션의 부분을 나타내고, 와이어는 애플리케이션 부분 사이의 통신 링크를 나타낸다. 이들은 세 가지 별개의 스페이스, 즉 자원 스페이스, 애플리케이션 스페이스 및 인스턴스 스페이스에서 상이한 형태로 나타난다.Three key elements of the SDM schema are ports, wires, and components. Ports represent communication endpoints, components represent parts of distributed applications, and wires represent communication links between application parts. They appear in different forms in three distinct spaces: resource space, application space, and instance space.

자원 스페이스에서는 자원 클래스(이것으로부터 애플리케이션 스페이스 내의 애플리케이션이 구축됨)가 정의된다. 이들 클래스는 애플리케이션 부분들의 공통의 카테고리화를 제공하며, 이에 의해 넓은 범위의 애플리케이션에 대한 도구 지원을 가능하게 하며, 설계시에 유형 체크의 기초를 제공한다. 이러한 핵심 클래스는 서비스 설계를 위한 포괄적인 피처(feature) 세트를 제공하고, 시간에 따라 천천히 변화하는 간주된다.In a resource space, resource classes (from which applications within the application space are built) are defined. These classes provide a common categorization of application parts, thereby enabling tool support for a wide range of applications, and providing a basis for type checking at design time. These core classes provide a comprehensive set of features for service design and are considered to change slowly over time.

애플리케이션 스페이스에서는 애플리케이션 유형이 구축된다. 자원 클래스를 택하여 세부 사항을 채워 넣는 바, 예컨대 콘텐츠에 대한 링크를 제공하거나, 특성(property)들에 대한 설정값들을 제공하는 것이 그것이다. 그 후 포트 유형을 컴포넌트 유형과 연관시킴으로써 애플리케이션 유형으로부터 분산형 애플리케이션을 구축하는 바, 이는 복합 컴포넌트 유형 내의 컴포넌트 유형을 이용하고, 복합 컴포넌트 유형의 멤버들 사이의 통신 관계를 와이어 유형을 이용하여 기술함으로써 이루어진다.In the application space, the application type is built. Select a resource class to fill in the details, such as providing a link to the content, or providing settings for properties. You then build a distributed application from the application type by associating the port type with the component type, using component types within the composite component type, and describing the communication relationships between members of the composite component type using wire types. Is done.

인스턴스 스페이스는 애플리케이션의 배포 및 실행 프로세스 도중에 생성되는 인스턴스들로 이루어진다. 애플리케이션 스페이스에서 정의한 통신 관계를 SDM 런타임을 통해 공개함으로써 인스턴스들이 다른 인스턴스들을 찾을 수 있도록 해 준다.Instance space consists of instances created during the process of deploying and running an application. By exposing the communication relationships defined in the application space through the SDM runtime, the instances can find other instances.

자원 클래스(Resource Classes)Resource Classes

설계시에 구성을 체크한 후 실행시에 배포하기 위해 알아야 할 필요가 있는 애플리케이션의 요소를 정의하기 위해 자원 클래스를 이용한다. 이들 요소는 다음과 같다.You use resource classes to check the configuration at design time and then define the elements of the application that you need to know to deploy at run time. These elements are as follows.

a) 애플리케이션이 통신하는 대상이다. 분산형 애플리케이션을 네트워크 토폴로지에 대하여 검증(verify)하기 위해서는, 애플리케이션의 부분들이 서로 통신하는 데 사용할 수 있는 프로토콜에 관하여 알아야 할 필요가 있다. 포트 클래스는 프로토콜 종단점을 기술하는 데 이용된다. 와이어 클래스는 이들 종단점 사이에 구축될 수 있는 관계를 기술하는 데 이용된다.a) The application is the target of communication. To verify a distributed application against a network topology, you need to know about the protocols that parts of the application can use to communicate with each other. Port classes are used to describe protocol endpoints. Wire classes are used to describe the relationships that can be established between these endpoints.

b) 애플리케이션에 적용되는 설정 및 애플리케이션이 배포되는 방법이다. 컴포넌트 클래스는 애플리케이션을 구축하는 데 이용될 수 있는 빌딩 블록을 정의 한다. 컴포넌트 클래스는 그 컴포넌트에 특유한 양상을 제어하는 데 이용될 수 있는 설정을 정의하며, 상기 컴포넌트를 배포하는 데 제공될 수 있는 파일 및 스크립트들에 대한 스키마를 정의한다.b) Settings that apply to the application and how the application is distributed. Component classes define building blocks that can be used to build applications. Component classes define settings that can be used to control aspects specific to that component, and define a schema for files and scripts that can be provided to distribute the component.

c) 애플리케이션이 정확히 기능하기 위해 의존하는 대상이다. 정확히 동작하기 위해서 컴포넌트는 목표 환경에 이미 존재하는 소정의 기능에 의존할 수 있다. 그 예로서는 IIS에 의존하는 웹 서비스가 있다. 이러한 요건은 자원간의 호스팅 관계로서 표현한다. 이러한 관계를 이용하여, 특정한 애플리케이션이 특정 환경에서 실행될지 여부를 미리 체크할 수 있도록 해 주는 일단의 자원 유형에 대하여 의존 관계 트리(dependency tree)를 구축할 수 있다. c) The application depends on to function correctly. In order to function correctly, a component may rely on certain functionality already present in the target environment. An example is a web service that depends on IIS. This requirement is expressed as a hosting relationship between resources. Using this relationship, you can build a dependency tree for a set of resource types that allow you to check in advance whether a particular application will run in a particular environment.

애플리케이션 유형(Application Types)Application Types

애플리케이션 유형은 자원 스페이스에서 정의된 자원 클래스를 이용하여 구축될 수 있다. 포트 유형 및 와이어 유형은 이들 클래스로부터 파생되어 애플리케이션에 특유한 통신 링크가 모델링되고, 컴포넌트 유형이 구축되어 애플리케이션의 별개의 부분들이 모델링된다.Application types can be built using resource classes defined in the resource space. Port types and wire types are derived from these classes to model communication links specific to the application, and component types are built to model separate parts of the application.

포트 유형은 애플리케이션에 특유한 양상을 기술하는 통신 종단점이다. 포트 자원을 취하여 이것의 애플리케이션 내에서의 용도에 특유한 정보를 제공한다. SOAP 자원을 취하여 애플리케이션이 공개하는 기능을 정의하는 WSDL 파일을 제공하는 포트 유형이 그 예이다.Port types are communication endpoints that describe aspects that are specific to the application. It takes port resources and provides information specific to their use within the application. An example is a port type that takes a SOAP resource and provides a WSDL file that defines the functionality that the application publishes.

와이어 유형은 애플리케이션 특유의 통신 경로를 정의한다. 와이어 유형은 특정한 와이어 자원을 호환 가능한 두 애플리케이션 종단점을 연결하는 것으로 한 정시킨다. 예컨대 SOAP 와이어 자원을 취하여 이를 앞서 정의한 SOAP 포트 유형을 연결하는 것으로 한정시킬 수 있다.Wire types define application-specific communication paths. The wire type defines a particular wire resource as connecting two compatible application endpoints. For example, you can take a SOAP wire resource and confine it to concatenating the SOAP port types defined earlier.

컴포넌트 유형은 독립적으로 배포될 수 있고 머신의 경계에 걸쳐 분산될 수 있는 애플리케이션의 부분들을 모델링하는 데 사용된다. 예컨대 웹 프론트엔드(web frontend) 및 데이터베이스 백엔드(database backend)를 갖는 애플리케이션은 몇몇의 컴포넌트 유형으로 이루어질 수 있다. 이러한 경우 웹 서비스 자원을 취하여 이를 웹 프론트엔드 컴포넌트 유형을 생성하는 데 사용할 수 있고, 데이터베이스 자원을 취하여 데이터베이스 백엔드 컴포넌트 유형을 생성하는 데 사용할 수 있다. 그 후 적합한 포트 유형을 컴포넌트 유형에 추가함으로써 애플리케이션 인터페이스를 모델링한다. 이것을 포트 멤버라 칭한다.Component types are used to model parts of an application that can be deployed independently and distributed across machine boundaries. For example, an application with a web frontend and a database backend may consist of several component types. In this case, you can take a web service resource and use it to generate a web frontend component type, and you can take a database resource and use it to generate a database backend component type. You then model the application interface by adding the appropriate port type to the component type. This is called a port member.

여기서 사용되는 복합 컴포넌트 유형은 새로운 컴포넌트 유형을 함께 형성하는 그룹 컴포넌트 유형이다. 컴포넌트 유형을 복합 컴포넌트 유형 내에서 사용한 것을 컴포넌트 멤버라 칭한다. 앞서 정의한 와이어 유형을 이용하여, 컴포넌트 멤버가 공개하는 인터페이스를 다른 멤버에 대하여 연결시킨다. 이들은 복합 컴포넌트의 와이어 멤버가 된다.The composite component type used here is a group component type that together form a new component type. The use of a component type within a composite component type is called a component member. Using the wire type defined above, connect the interface exposed by the component member to other members. These become wire members of the composite component.

복합 컴포넌트가 컴포넌트와 같이 보이도록 하기 위해서는, 이들이 인터페이스, 성능(capability) 및 요건을 컴포넌트와 마찬가지로 공개해야 할 필요가 있다. 이는 복합 컴포넌트의 컴포넌트 멤버로부터 포트 멤버들의 부분 집합(subset)을 위임하여 보냄(delegate out)으로써 이루어진다.In order for composite components to look like components, they need to expose their interfaces, capabilities, and requirements just like components. This is done by delegating a subset of port members from the component member of the composite component.

컴포넌트의 요건을 충족하기 위해서는 일치하는 성능을 갖는 다른 컴포넌트 에 대하여 그 컴포넌트를 바인딩해야 한다. 이를 프로세스 바인딩이라 칭한다.To meet a component's requirements, the component must be bound to another component with matching performance. This is called process binding.

예시 구현(Exemplary Implementation)Exemplary Implementation

이 섹션에서는 SDM 모델의 요소를 정의하는 데 이용되는 XML 스키마에 관하여 설명한다. 설정은 애플리케이션 및 자원 모두에 의해 사용되므로 이를 먼저 설명하고, 이어서 자원 클래스를 설명하고, 다음으로 애플리케이션을 설명한 후 마지막으로 인스턴스 스페이스를 설명한다.This section describes the XML schema used to define the elements of the SDM model. Since the settings are used by both the application and the resource, they are first described, followed by the resource class, then the application, and finally the instance space.

네임 부여(Naming)Naming

네임 스페이스는 클래스 및 유형이 정의될 수 있는 네임 부여 범위(naming scope)를 정의하는 데 이용된다. 네임 스페이스 내에서 모든 클래스 및 유형 네임은 고유하다. 네임 스페이스는 네임, 버전 및 암호 키(cryptographic key; 네임 스페이스의 콘텐츠의 유효성을 검증하는 데 사용될 수 있음)에 의해 정의된다.Namespaces are used to define naming scopes in which classes and types can be defined. Within the namespace all class and type names are unique. Namespaces are defined by name, version, and cryptographic key (which can be used to validate the contents of the namespace).

<xs:attributeGroup name="identity">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="version" type="fourPartVersionType"
use="required"/>
<xs:attribute name="publicKeyToken" type="publicKeyTokenType"
use="optional"/>
</xs:attributeGroup>
<xs: attributeGroup name = "identity">
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "version" type = "fourPartVersionType"
use = "required"/>
<xs: attribute name = "publicKeyToken" type = "publicKeyTokenType"
use = "optional"/>
</ xs: attributeGroup>

파일 버전은 N.N.N.N(0<N<65535) 형태의 네 부분의 숫자에 의해 정의된다.The file version is defined by a four-part number of the form N.N.N.N (0 <N <65535).

<xs:simpleType name="fourPartVersionType">
<xs:annotation>
<xs:documentation>Four part version numbers where the segments are in the range 0-65535 </xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="(0|[1-5][0-9]{0,4}|[7-9][0-9]{0,3}|6[0-4][0-9]{0,3}|6[6-9][0-9]{0,2}|65|65[0-4][0-9]{0,2}|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]{0,4}|[7-9][0-9]{0,3}|6[0-4][0-9]{0,3}|6[6-9][0-9]{0,2}|65|65[0-4][0-9]{0,2}|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]{0,4}|[7-9][0-9]{0,3}|6[0-4][0-9]{0,3}|6[6-9][0-9]{0,2}|65|65[0-4][0-9]{0,2}|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]{0,4}|[7-9][0-9]{0,3}|6[0-4][0-9]{0,3}|6[6-9][0-9]{0,2}|65|65[0-4][0-9]{0,2}|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?)"/>
</xs:restriction>
</xs:simpleType>
<xs: simpleType name = "fourPartVersionType">
<xs: annotation>
<xs: documentation> Four part version numbers where the segments are in the range 0-65535 </ xs: documentation>
</ xs: annotation>
<xs: restriction base = "xs: string">
<xs: pattern value = "(0 | [1-5] [0-9] {0,4} | [7-9] [0-9] {0,3} | 6 [0-4] [0 -9] {0,3} | 6 [6-9] [0-9] {0,2} | 65 | 65 [0-4] [0-9] {0,2} | 65 [6-9 ] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0- 9] {0,4} | [7-9] [0-9] {0,3} | 6 [0-4] [0-9] {0,3} | 6 [6-9] [0- 9] {0,2} | 65 | 65 [0-4] [0-9] {0,2} | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0 -9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0-9] {0,4} | [7-9] [0-9] {0,3} | 6 [0-4] [0-9] {0,3} | 6 [6-9] [0-9] {0,2} | 65 | 65 [0-4] [0 -9] {0,2} | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5] ?). (0 | [1-5] [0-9] {0,4} | [7-9] [0-9] {0,3} | 6 [0-4] [0-9] { 0,3} | 6 [6-9] [0-9] {0,2} | 65 | 65 [0-4] [0-9] {0,2} | 65 [6-9] [0- 9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?) "/>
</ xs: restriction>
</ xs: simpleType>

공개 키 토큰(public key token)은 16자의 16진 문자열(hex string)이며, 공개/개인 키 쌍 중 공개 부분을 식별한다. 문서는 개인 키를 이용하여 서명되며, 이에 의해 문서의 사용자는 공개 키를 이용하여 그 콘텐츠를 검증할 수 있다.The public key token is a 16-character hex string that identifies the public part of a public / private key pair. The document is signed using a private key, whereby the user of the document can verify its content using the public key.

<xs:simpleType name="publicKeyTokenType">
<xs:annotation>
<xs:documentation>Public Key Token: 16 hex digits in size</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="([0-9]|[a-f]|[A-F]){16}"/>
</xs:restriction>
</xs:simpleType>
<xs: simpleType name = "publicKeyTokenType">
<xs: annotation>
<xs: documentation> Public Key Token: 16 hex digits in size </ xs: documentation>
</ xs: annotation>
<xs: restriction base = "xs: string">
<xs: pattern value = "([0-9] | [af] | [AF]) {16}"/>
</ xs: restriction>
</ xs: simpleType>

네임 스페이스 내의 단순 네임(simple name)을 문자열을 이용하여 구축한다. 네임 스페이스는 다른 네임 스페이스를 현재의 네임 스페이스으로 도입(import)한 후 별칭(alias)을 그 네임 스페이스과 연관시킴으로써 다른 네임 스페이스를 참조할 수 있다.Construct a simple name in a namespace using a string. Namespaces can refer to other namespaces by importing another namespace into the current namespace and then associating aliases with that namespace.

<xs:complexType name="import">
<xs:attribute name="alias" type="xs:string" use="required"/>
<xs:attributeGroup ref="identity"/>
</xs:complexType>
<xs: complexType name = "import">
<xs: attribute name = "alias" type = "xs: string" use = "required"/>
<xs: attributeGroup ref = "identity"/>
</ xs: complexType>

클래스 및 유형에 대한 참조는 현재의 네임 스페이스에서 정의된 객체를 지 칭하는 단순 네임이거나 또는 다른 네임 스페이스에서 정의된 객체를 식별하기 위하여 별칭 및 단순 네임 모두를 이용하는 복합 네임(compound name)이다.References to classes and types are either simple names that refer to objects defined in the current namespace or compound names that use both aliases and simple names to identify objects defined in other namespaces.

설정(Settings)Settings

자원 클래스 및 애플리케이션 유형 모두는 설정 스키마를 공개할 수 있다. 이 스키마는 새로운 포트, 와이어 또는 컴포넌트 유형이 클래스로부터 생성되는 경우나, 포트 유형이 컴포넌트 유형에 추가되는 경우나, 또는 와이어 유형 또는 컴포넌트 유형이 복합 컴포넌트 유형에서 사용되는 경우에 제공될 수 있는 값을 기술하는 데 이용된다.Both resource classes and application types can expose configuration schemas. This schema contains values that can be provided when a new port, wire, or component type is created from a class, when a port type is added to a component type, or when a wire type or component type is used in a composite component type. Used to describe.

설정 스키마(Settings schema)Settings schema

설정 스키마는 XSD를 이용하여 기술된다. 최초 릴리즈(release)를 위해, 단일 유형으로 제약되는 XSD의 부분 집합 및 요소 유형의 리스트를 이용한다.The configuration schema is described using XSD. For the initial release, use a list of element types and subsets of XSD that are constrained to a single type.

<xs:complexType name="settingSchema">
<xs:sequence>
<xs:any namespace="http://www.w3.org/2001/XMLSchema"
processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "settingSchema">
<xs: sequence>
<xs: any namespace = "http://www.w3.org/2001/XMLSchema"
processContents = "skip" minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>

설정값(Setting Values)Setting Values

설정값은 유형이 클래스에 기초하여 생성되는 경우 또는 유형이 컴포넌트 또는 복합 컴포넌트 내에서 사용되는 경우에 제공된다. 설정값은 적합한 설정 스키마에 따르는 XML 블록이다.Settings are provided when the type is generated based on a class or when the type is used within a component or composite component. The configuration value is an XML block that conforms to the appropriate configuration schema.

<xs:complexType name="settingValues">
<xs:sequence>
<xs:any namespace="##other" processContents="lax"/>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "settingValues">
<xs: sequence>
<xs: any namespace = "## other" processContents = "lax"/>
</ xs: sequence>
</ xs: complexType>

설정 플로우(Settings flow)Settings flow

설정 플로우는 설정값이 컴포넌트 유형으로부터 컴포넌트 유형의 멤버로 전달되도록 하는 데 사용된다. 설정 플로우는 유형에 의해 정의된 설정 스키마로부터 값을 선택하는 설정값 섹션의 XPATH를 이용하여 구현된다.The configuration flow is used to ensure that settings are passed from component type to member of the component type. The configuration flow is implemented using the XPATH of the configuration section, which selects values from the configuration schema defined by the type.

SDM 네임 스페이스에서 정의된 특별한 속성(attribute)을 이용하여, 콘텐츠를 흘려보내고자 하는 값을 식별한다. 이 속성이 어떠한 요소 상에 존재하는 경우, 그 속성값은 유형에 대한 설정 스키마로의 XPath인 것으로 간주된다.A special attribute defined in the SDM namespace is used to identify the value to which content should be sent. If this attribute is present on any element, the attribute value is considered to be an XPath to the configuration schema for the type.

설정 제약(Setting Constraints)Setting Constraints

설정 제약은 설정값의 유효성을 검증 및 제약하는 데 사용된다. 예컨대 IIS 서버는 자신이 호스팅하는 모든 웹 서비스에 대하여 이들의 설정값이 특정한 값 또는 특정 범위의 값으로 한정되기를 요구할 수 있다. XPATH(또는 완전히 지원되는 경우 XQUERY)는 설정값의 유효성을 검증하는 데 이용된다. 이하의 질의 양식(forms of query)이 지원된다.Configuration constraints are used to validate and restrict configuration values. For example, an IIS server may require that its settings be limited to a specific value or a range of values for all web services it hosts. XPATH (or XQUERY if fully supported) is used to validate the settings. The following forms of query are supported.

- 경로가 존재해야 함-Path must exist

- 경로가 존재하지 않아야 함-Path must not exist

- 경로가 존재하는 경우[(경로가 존재해야 함|경로가 존재하지 않아야 함)*]-If path exists [(path must exist | path must not exist) * ]

첫 번째 양식을 이용하여 특정한 값 또는 값의 집합으로 설정이 설정될 것을 요구할 수 있으며, 두 번째 양식을 이용하여 어떤 값 또는 값의 집합으로 설정이 설정되지 않을 것을 요구할 수 있으며, 세 번째 양식을 이용하여 함께 설정되어야 할 설정의 조합을 필요로 하는 설정 사이의 관계를 구축할 수 있다.The first form may require that the setting be set to a specific value or set of values, and the second form may require that the setting not be set to any value or set of values. Thus, a relationship between settings requiring a combination of settings to be set together can be established.

<xs:complexType name="settingConstraints">
<xs:sequence>
<xs:element name="mustExist" type="simpleTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="mustNotExist" type="simpleTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ifExists" type="nestedTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ifNotExists" type="nestedTest"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>

<xs:attributeGroup name="testAttributes">
<xs:attribute name="path" type="xs:string"/>
<xs:attribute name="ifNullPath" type="ifNullPath"/>
<xs:attribute name="error" type="xs:int"/>
<xs:attribute name="errorDesc" type="xs:string"/>
</xs:attributeGroup>

<xs:complexType name="simpleTest">
<xs:attributeGroup ref="testAttributes"/>
</xs:complexType>

<xs:complexType name="nestedTest">
<xs:sequence>
<xs:element name="mustExist" type="simpleTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="mustNotExist" type="simpleTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ifExists" type="nestedTest"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="ifNotExists" type="nestedTest"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attributeGroup ref="testAttributes"/>
</xs:complexType>
<xs: complexType name = "settingConstraints">
<xs: sequence>
<xs: element name = "mustExist" type = "simpleTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "mustNotExist" type = "simpleTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "ifExists" type = "nestedTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "ifNotExists" type = "nestedTest"
minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>

<xs: attributeGroup name = "testAttributes">
<xs: attribute name = "path" type = "xs: string"/>
<xs: attribute name = "ifNullPath" type = "ifNullPath"/>
<xs: attribute name = "error" type = "xs: int"/>
<xs: attribute name = "errorDesc" type = "xs: string"/>
</ xs: attributeGroup>

<xs: complexType name = "simpleTest">
<xs: attributeGroup ref = "testAttributes"/>
</ xs: complexType>

<xs: complexType name = "nestedTest">
<xs: sequence>
<xs: element name = "mustExist" type = "simpleTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "mustNotExist" type = "simpleTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "ifExists" type = "nestedTest"
minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "ifNotExists" type = "nestedTest"
minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
<xs: attributeGroup ref = "testAttributes"/>
</ xs: complexType>

경로가 존재하지 않는 경우 이를 처리하기 위한 옵션이 공개될 필요가 있다. 이하는 설계자로 하여금 오류를 야기하거나, 값을 삽입하거나 또는 테스트를 무시하는 것을 선택할 수 있도록 해 준다.If the path does not exist, an option to handle it needs to be published. The following allows the designer to choose to cause an error, insert a value, or ignore a test.

<xs:simpleType name="ifNullPath">
<xs:restriction base="xs:string">
<xs:enumeration value="skip"/>
<xs:enumeration value="override"/>
<xs:enumeration value="returnError"/>
</xs:restriction>
</xs:simpleType>
<xs: simpleType name = "ifNullPath">
<xs: restriction base = "xs: string">
<xs: enumeration value = "skip"/>
<xs: enumeration value = "override"/>
<xs: enumeration value = "returnError"/>
</ xs: restriction>
</ xs: simpleType>

예시example

이하는 컴퓨터 클래스가 공개할 수 있는 단순한 스키마 모델링 값이다. 이 스키마는 노드 아래의 설정 그룹 및 세 특성을 식별하는 단일 최상위 노드(top level node)를 갖는다.The following are simple schema modeling values that computer classes can expose. This schema has a single top level node that identifies configuration groups and three properties under the node.

<settingSchema>
<xs:schema>
<xs:element name="processorSettings">
<xs:complexType>
<xs:sequence>
<xs:element name="numberOfCpus" type="xs:int"/>
<xs:element name="memory" type="xs:int" />
<xs:element name="dualHomed" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</settingSchema>
<settingSchema>
<xs: schema>
<xs: element name = "processorSettings">
<xs: complexType>
<xs: sequence>
<xs: element name = "numberOfCpus" type = "xs: int"/>
<xs: element name = "memory" type = "xs: int"/>
<xs: element name = "dualHomed" type = "xs: boolean"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
</ xs: schema>
</ settingSchema>

이하의 값을 유형 내에서 스키마에 대하여 제공할 수 있다.The following values can be provided for a schema within a type.

<settings>
<processorSettings>
<numberOfCpus>4</numberOfCpus>
<memory>8000</memory>
<dualHomed>false</dualHomed>
</processorSettings>
</settings>
<settings>
<processorSettings>
<numberOfCpus> 4 </ numberOfCpus>
<memory> 8000 </ memory>
<dualHomed> false </ dualHomed>
</ processorSettings>
</ settings>

유형이 사용된 경우에 설정값을 제공하고자 하면, 설정 플로우를 이용한다.If you want to provide a setpoint when the type is used, use the setup flow.

이들 값에 대하여 제약이 기록될 수 있다. 예컨대 첫 번째는 단순한 mustExist 제약이다. 두 번째 제약은 중첩 제약(nested constraints)을 평가(evaluate)할지 여부를 결정하기 위한 테스트를 이용한다.Constraints can be recorded for these values. For example, the first is a simple mustExist constraint. The second constraint uses a test to determine whether to evaluate nested constraints.

<constraints>

<mustExist path="ProcessorSettings/[memory >= 1000]"
errorDesc="Host machine does not have enough memory"/>

<ifExists path="ProcessorSettings/[cpu >= 2]"
errorDesc="Host machine has two processors but not enough resources">

<mustExist path="ProcessorSettings/[memory >= 2000]"
errorDesc="Host machine does not have enough memory"/>
</ifExists >

</constraints>
<constraints>

<mustExist path = "ProcessorSettings / [memory> = 1000]"
errorDesc = "Host machine does not have enough memory"/>

<ifExists path = "ProcessorSettings / [cpu> = 2]"
errorDesc = "Host machine has two processors but not enough resources">

<mustExist path = "ProcessorSettings / [memory> = 2000]"
errorDesc = "Host machine does not have enough memory"/>
</ ifExists>

</ constraints>

자원(Resources)Resources

베이스 클래스(Base Class)Base Class

모든 자원 클래스는 클래스로부터 파생된다. 이들은 설정 스키마, 배포 스키마 및 네임 및 계층 속성을 공유한다. 설정 스키마는 그 클래스에 기초한 유형에 적용되는 설정, 이들이 취할 수 있는 값, 그리고 각각의 기술(description)을 기술한다. 배포 스키마는 그 자원에 기초한 유형을 배포하는 데 필요한 정보를 기술한다. 계층 속성은 자원은 설계 스페이스에 있는 한 계층에 대하여 자원을 연관시킨다. 네임 속성은 네임 스페이스 내에서 클래스에게 고유의 네임을 부여하는 데 사용된다.Every resource class is derived from a class. They share configuration schemas, deployment schemas, and name and hierarchy attributes. The configuration schema describes the settings that apply to types based on that class, the values they can take, and their descriptions. A deployment schema describes the information needed to distribute a type based on that resource. Hierarchical attributes associate a resource with respect to one layer where the resource is in the design space. Name attributes are used to give classes unique names within the namespace.

<xs:complexType name="class">
<xs:sequence>
<xs:element name="deploymentSchema" type="deploymentSchema"
minOccurs="0" maxOccurs="1"/>
<xs:element name="settingSchema" type="settingsSchema"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="layer" type="layer" use="required"/>
</xs:complexType>
<xs: complexType name = "class">
<xs: sequence>
<xs: element name = "deploymentSchema" type = "deploymentSchema"
minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "settingSchema" type = "settingsSchema"
minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "layer" type = "layer" use = "required"/>
</ xs: complexType>

배포 스키마에 대해서, 네임 스페이스는 정의되지 않은 상태로 남는다. 스키마에 대한 제약은 그 전체가 클래스에 대한 설치자의 책임이다.For deployment schemas, the namespace is left undefined. The constraints on the schema are entirely the installer's responsibility for the class.

<xs:complexType name="deploymentSchema">
<xs:sequence>
<xs:any namespace="##other" processContents="lax"/>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "deploymentSchema">
<xs: sequence>
<xs: any namespace = "## other" processContents = "lax"/>
</ xs: sequence>
</ xs: complexType>

배포 섹션의 일부로서 제공되는 값은 관련 배포 스키마와 일치해야 한다.The values provided as part of the deployment section must match the relevant deployment schema.

<xs:complexType name="deploymentValues">
<xs:sequence>
<xs:any namespace="##other" processContents="lax"/>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "deploymentValues">
<xs: sequence>
<xs: any namespace = "## other" processContents = "lax"/>
</ xs: sequence>
</ xs: complexType>

계층 속성은 4개의 계층 유형을 열거한 것이다. 애플리케이션 계층은 데이터베이스 및 웹서버와 같은 고수준 애플리케이션 컴포넌트를 포함한다. 서비스 계층은 IIS 및 SQL과 같은 미들웨어(middleware) 서비스를 포함한다. 네트워크 계층은 운영 체제, 기억장치 및 네트워크 정의를 포함한다. 하드웨어 계층은 데이터 센터의 하드웨어 컴포넌트의 정의를 포함한다.Hierarchical attributes list four hierarchical types. The application layer contains high level application components such as databases and web servers. The service layer includes middleware services such as IIS and SQL. The network layer contains the operating system, storage and network definitions. The hardware layer contains the definition of hardware components of the data center.

<xs:simpleType name="layer">
<xs:restriction base="xs:string">
<xs:enumeration value="Application"/>
<xs:enumeration value="Service"/>
<xs:enumeration value="Network"/>
<xs:enumeration value="Hardware"/>
</xs:restriction>
</xs:simpleType>
<xs: simpleType name = "layer">
<xs: restriction base = "xs: string">
<xs: enumeration value = "Application"/>
<xs: enumeration value = "Service"/>
<xs: enumeration value = "Network"/>
<xs: enumeration value = "Hardware"/>
</ xs: restriction>
</ xs: simpleType>

포트 클래스Port class

포트 클래스는 자원 기초 유형에서 앞서 정의된 어떤 정보도 포함하지 않는다.The port class does not contain any of the information previously defined in the resource base type.

<xs:complexType name="portClass">
<xs:complexContent>
<xs:extension base="class">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs: complexType name = "portClass">
<xs: complexContent>
<xs: extension base = "class">
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

컴포넌트 클래스Component class

컴포넌트 클래스는 허용되는 포트 클래스들의 리스트를 추가함으로써 베이스 클래스를 확장시킨다.The component class extends the base class by adding a list of allowed port classes.

<xs:complexType name="componentClass">
<xs:complexContent>
<xs:extension base="class">
<xs:sequence>
<xs:element name="portClassesAllowed"
type="portClassesAllowed"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs: complexType name = "componentClass">
<xs: complexContent>
<xs: extension base = "class">
<xs: sequence>
<xs: element name = "portClassesAllowed"
type = "portClassesAllowed"
minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

포트 클래스들의 리스트는 열리거나 닫힐 수 있으며, 닫혀 있는 경우에는 리스트에 나타나 있는 클래스에 기초한 포트 유형만이 관련 컴포넌트 유형에서 사용될 수 있다. minOccurs 및 maxOccurs 속성은 이들 포트 유형들 중 하나가 사용될 수 있는 횟수를 정의한다.The list of port classes can be opened or closed, and if closed, only port types based on the classes shown in the list can be used in the relevant component type. The minOccurs and maxOccurs attributes define the number of times one of these port types can be used.

<xs:complexType name="portClassesAllowed">
<xs:sequence>
<xs:element name="portClassRef" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="minOccurs" type="xs:int" use="optional"/>
<xs:attribute name="maxOccurs" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="closed" type="xs:boolean"
default="true" use="optional"/>
</xs:complexType>
<xs: complexType name = "portClassesAllowed">
<xs: sequence>
<xs: element name = "portClassRef" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "minOccurs" type = "xs: int" use = "optional"/>
<xs: attribute name = "maxOccurs" type = "xs: string" use = "optional"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
<xs: attribute name = "closed" type = "xs: boolean"
default = "true" use = "optional"/>
</ xs: complexType>

와이어 클래스Wire class

와이어 클래스도 또한 허용되는 포트 클래스들의 리스트를 추가함으로써 베이스 클래스를 확장시킨다. 이 경우 리스트는 와이어 유형과 관련될 수 있는 포트 유형의 클래스들을 정의한다.Wire classes also extend the base class by adding a list of allowed port classes. In this case, the list defines the classes of port types that can be associated with the wire type.

<x<xs:complexType name="wireClass">
<xs:complexContent>
<xs:extension base="class">
<xs:sequence>
<xs:element name="portClassesAllowed" type="portClassesAllowed" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<x <xs: complexType name = "wireClass">
<xs: complexContent>
<xs: extension base = "class">
<xs: sequence>
<xs: element name = "portClassesAllowed" type = "portClassesAllowed" minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

호스팅 관계Hosting relationship

호스팅 관계는 소스 클래스, 목표 클래스 및 설치자를 식별하는 트리플(triple)을 정의한다. 관계의 존재는 소스 클래스에 기초한 유형의 인스턴스가 목표 클래스에 기초한 유형의 인스턴스 및 상기 관계와 관련된 설치자를 이용하여 생성될 수 있음을 가리킨다. 목표 클래스는 컴포넌트 클래스이어야 한다.The hosting relationship defines a triple that identifies the source class, target class, and installer. The presence of a relationship indicates that an instance of the type based on the source class can be created using an instance of the type based on the target class and the installer associated with the relationship. The target class must be a component class.

예컨대 웹 서비스는 IIS 클래스 및 웹 서비스 설치자와의 호스팅 관계에서 소스 클래스일 수 있다. 이 경우 상기 관계는 설치자를 이용하여 MyIIS 유형상에 MyWebService 유형의 인스턴스를 생성할 수 있음을 가리킨다. 애플리케이션 스페이스 및 인스턴스 스페이스 모두에 존재하는 제약을 평가하기 전까지는, 관계를 생성할 수 있을지 여부를 알지 못한다.For example, a web service can be a source class in a hosting relationship with an IIS class and a web service installer. In this case, the relationship indicates that an installer can create an instance of type MyWebService on type MyIIS. Until you evaluate the constraints that exist in both application space and instance space, you don't know whether you can create a relationship.

<xs:complexType name="hostRelation">
<xs:attribute name="classRef" type="xs:string" use="required"/>
<xs:attribute name="componentHostClassRef" type="xs:string" use="required"/>
<xs:attribute name="installerRef" type="xs:string" use="required"/>
</xs:complexType>
<xs: complexType name = "hostRelation">
<xs: attribute name = "classRef" type = "xs: string" use = "required"/>
<xs: attribute name = "componentHostClassRef" type = "xs: string" use = "required"/>
<xs: attribute name = "installerRef" type = "xs: string" use = "required"/>
</ xs: complexType>

설치자는 네임, 코드 유형 및 설치자를 구현하는 바이너리에 대한 링크에 의해 식별된다.Installers are identified by name, code type, and a link to the binary that implements the installer.

<xs:complexType name="installer">
<xs:sequence>
<xs:element name="binary" type="xs:string" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="codeType" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs: complexType name = "installer">
<xs: sequence>
<xs: element name = "binary" type = "xs: string" minOccurs = "1" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "codeType" type = "xs: string" use = "required"/>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
</ xs: complexType>

예시example

이들 예는 확장된 4 계층의 예시로부터 발췌된 것이다. 세부 사항을 위해서는 완전한 예시 파일을 참조하면 된다.These examples are taken from an example of an extended four layer. See the complete example file for details.

우선 데이터베이스에 대한 액세스를 모델링하기 위해 소정의 포트 클래스들을 생성한다. 이 경우 서버 포트 및 클라이언트 포트가 존재한다.First, we create some port classes to model access to the database. In this case, a server port and a client port exist.

<portClass name="ServerDataAccess" layer="Application">
<settingSchema>
<xs:schema>
<xs:complexType>
<xs:sequence>
<xs:element name="databaseName" type="xs:string"/>
<!-- other connection string properties -->
</xs:sequence>
</xs:complexType>
</xs:schema>
</settingSchema>
</portClass>
<portClass name="ClientDataAccess" layer="Application"/>
<portClass name = "ServerDataAccess" layer = "Application">
<settingSchema>
<xs: schema>
<xs: complexType>
<xs: sequence>
<xs: element name = "databaseName" type = "xs: string"/>
<!-other connection string properties->
</ xs: sequence>
</ xs: complexType>
</ xs: schema>
</ settingSchema>
</ portClass>
<portClass name = "ClientDataAccess" layer = "Application"/>

그 후 상기 두 포트 클래스들 사이의 통신 링크를 모델링하는 와이어 클래스를 생성한다. 와이어 클래스는 앞서 정의된 두 포트 클래스에 대한 설정 및 참조 를 갖는다. 이 경우 와이어 제약은 접속에 대해서 오직 하나의 서버가 있어야 하며, 클라이언트 포트는 복수의 서버에 걸쳐 접속들의 로드 밸런스(load balance)를 어떻게 해야할지 알지 못한다는 사실을 모델링한다. 더욱 복잡한 와이어 구현에 의해 복수의 서버를 허용할 수 있고, 접속을 해결하기 위해 소정 형태의 관리를 구현할 수 있도록 해 준다.It then creates a wire class that models the communication link between the two port classes. The wire class has settings and references to the two port classes defined above. In this case the wire constraint models the fact that there must be only one server for the connection, and the client port does not know how to load balance the connections across multiple servers. More complex wire implementations may allow multiple servers and allow some form of management to be implemented to resolve connections.

<wireClass name="DataConnection" layer="Application">
<settingSchema>
<xs:schema>
<xs:complexType>
<xs:sequence>
<xs:element name="useSSL" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</settingSchema>
<portClassesAllowed>
<portClassRef name="ServerDataAccess" maxOccurs="1"/>
<portClassRef name="ClientDataAccess"/>
</portClassesAllowed>
</wireClass>
<wireClass name = "DataConnection" layer = "Application">
<settingSchema>
<xs: schema>
<xs: complexType>
<xs: sequence>
<xs: element name = "useSSL" type = "xs: boolean"/>
</ xs: sequence>
</ xs: complexType>
</ xs: schema>
</ settingSchema>
<portClassesAllowed>
<portClassRef name = "ServerDataAccess" maxOccurs = "1"/>
<portClassRef name = "ClientDataAccess"/>
</ portClassesAllowed>
</ wireClass>

마지막으로 데이터베이스를 모델링하는 컴포넌트 클래스를 생성한다. 이 클래스는 설정 및 배포 스키마를 가지며, 이 클래스에 기초한 컴포넌트 유형상에 존재할 수 있는 포트들을 식별한다.Finally, create a component class that models the database. This class has a configuration and deployment schema and identifies ports that can exist on component types based on this class.

<componentClass name="Database" layer="Application">
<deploymentSchema>
<xs:schema>
<xs:complexType>
<xs:sequence>
<xs:element name="sqlScriptFilePath" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</deploymentSchema>
<settingSchema>
<xs:schema>
<xs:complexType>
<xs:sequence>
<xs:element name="databaseName" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</settingSchema>
<portClassesAllowed closed="true">
<portClassRef name="ServerDataAccess"/>
</portClassesAllowed>
</componentClass>
<componentClass name = "Database" layer = "Application">
<deploymentSchema>
<xs: schema>
<xs: complexType>
<xs: sequence>
<xs: element name = "sqlScriptFilePath" type = "xs: string" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: schema>
</ deploymentSchema>
<settingSchema>
<xs: schema>
<xs: complexType>
<xs: sequence>
<xs: element name = "databaseName" type = "xs: string"/>
</ xs: sequence>
</ xs: complexType>
</ xs: schema>
</ settingSchema>
<portClassesAllowed closed = "true">
<portClassRef name = "ServerDataAccess"/>
</ portClassesAllowed>
</ componentClass>

이러한 모든 컴포넌트들은 호환 가능한 호스트 유형에 대하여 매핑될 필요가 있다. 이 경우 SQL 서버는 서버 포트에 대한 호스트로서 작용하고, 데이터베이스 및 IIS는 SQL 클라이언트 포트에 대한 호스트로서 작용한다. 이들 클래스는 미들웨어로 별칭되는 별개의 네임 스페이스에서 정의된다.All these components need to be mapped for compatible host types. In this case, the SQL server acts as a host for the server port, and the database and IIS act as a host for the SQL client port. These classes are defined in separate namespaces that are aliased to middleware.

<hostRelations>

<installer name="DatabaseInstaller" codeType="InstallerPlugin"/>

<hostRelation classRef="database"
componentHostClassRef="middleware:SQL"
installerRef="DatabaseInstaller"/>

<hostRelation classRef="ServerDataAccess"
componentHostClassRef=" middleware:SQL"
installerRef="DatabaseInstaller"/>

<hostRelation classRef="ClientDataAccess"
componentHostClassRef=" middleware:IIS"
installerRef="WebServiceInstaller"/>

</hostRelations>
<hostRelations>

<installer name = "DatabaseInstaller" codeType = "InstallerPlugin"/>

<hostRelation classRef = "database"
componentHostClassRef = "middleware: SQL"
installerRef = "DatabaseInstaller"/>

<hostRelation classRef = "ServerDataAccess"
componentHostClassRef = "middleware: SQL"
installerRef = "DatabaseInstaller"/>

<hostRelation classRef = "ClientDataAccess"
componentHostClassRef = "middleware: IIS"
installerRef = "WebServiceInstaller"/>

</ hostRelations>

애플리케이션Application

애플리케이션 개발자는 컴포넌트, 포트 및 와이어 유형을 애플리케이션 스페이스에서 생성함으로서 그의 애플리케이션을 모델링한다. 이들 유형은 개발자가 작업하고 있는 계층과 일치하는 클래스를 선택하고 그 클래스에 대한 값을 공급함으로써 생성된다.The application developer models his application by creating components, ports, and wire types in the application space. These types are created by selecting a class that matches the hierarchy in which you are working and supplying a value for that class.

애플리케이션 베이스 유형(Application base type)Application base type

모든 애플리케이션 유형 스키마는 이하의 애플리케이션 베이스 스키마를 기초로 한다. 베이스 스키마 속성은 상기 유형이 기초한 클래스 및 그 유형의 네임을 식별한다. 스키마의 본체(body)에서는 그 유형이 배포될 수 있도록 해 주는 배포값과, 관련 클래스 상의 설정 스키마에 대한 설정을 식별한다. 유형은 또한 그 유형이 다른 유형 내에서 사용되는 경우에 제공될 수 있는 값들을 식별하는 새로운 설정 스키마를 정의한다. 마지막으로 베이스 유형은 호스트 제약을 위한 섹션을 포함한다. 이 섹션은 이 유형과 관련된 클래스를 위한 자원 스페이스 내에 존재하는 호스트 관계에 기초한, 그 유형에 대한 가능한 호스트 상의 제약을 식별한다.All application type schemas are based on the following application base schemas. The base schema attribute identifies the class on which the type is based and the name of that type. The body of the schema identifies the deployment value that allows the type to be distributed and the configuration for the configuration schema on the associated class. The type also defines a new configuration schema that identifies the values that can be provided if the type is used within another type. Finally, the base type contains a section for host constraints. This section identifies possible host-side constraints on that type based on host relationships that exist in the resource space for the class associated with this type.

<xs:complexType name="baseType">
<xs:sequence>

<xs:element name="deployment" type="deploymentValues"
minOccurs="0" maxOccurs="1"/>

<xs:element name="settings" type="settingsValues"
minOccurs="0" maxOccurs="1"/>

<xs:element name="settingSchema" type="settingSchema"
minOccurs="0" maxOccurs="1"/>

<xs:element name="hostConstraints" type="hostConstraints"
minOccurs="0" maxOccurs="1"/>

</xs:sequence>
<xs:attribute name="class" type="xs:string" use="required"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
<xs: complexType name = "baseType">
<xs: sequence>

<xs: element name = "deployment" type = "deploymentValues"
minOccurs = "0" maxOccurs = "1"/>

<xs: element name = "settings" type = "settingsValues"
minOccurs = "0" maxOccurs = "1"/>

<xs: element name = "settingSchema" type = "settingSchema"
minOccurs = "0" maxOccurs = "1"/>

<xs: element name = "hostConstraints" type = "hostConstraints"
minOccurs = "0" maxOccurs = "1"/>

</ xs: sequence>
<xs: attribute name = "class" type = "xs: string" use = "required"/>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
</ xs: complexType>

hostConstraints 섹션은 그 유형과 관련된 클래스를 호스팅할 수 있는 클래스 각각에 대한 일단의 제약을 포함한다. 이들 클래스는 자원 스페이스 내의 호스트 관계에 의해 식별된다. 이들 클래스와 관련된 제약은 설정 스키마 및 클래스에 관한 것이다. 제약의 양식은 앞서 정의된 바 있다.The hostConstraints section contains a set of constraints for each class that can host classes associated with that type. These classes are identified by host relationships in the resource space. Constraints associated with these classes relate to configuration schemas and classes. The form of constraint has been defined above.

<xs:complexType name="hostConstraints">
<xs:sequence>
<xs:element name="hostConstraint" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="constraint" type="settingConstraint"/>
</xs:sequence>
<xs:attribute name="host" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "hostConstraints">
<xs: sequence>
<xs: element name = "hostConstraint" minOccurs = "1" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "constraint" type = "settingConstraint"/>
</ xs: sequence>
<xs: attribute name = "host" type = "xs: string" use = "required"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

포트 유형Port type

포트 유형은 단순히 베이스 유형을 이용한다. 포트 유형과 관련된 더 이상의 정보가 존재하지 않는다.The port type simply uses the base type. There is no more information related to the port type.

<xs:complexType name="portType">
<xs:complexContent>
<xs:extension base="baseType">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs: complexType name = "portType">
<xs: complexContent>
<xs: extension base = "baseType">
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

와이어 유형Wire type

와이어 유형은 베이스 유형을 확장함으로써 허용 가능한 포트 유형의 리스트를 추가한다. 이들 포트 유형을 사용하는 것은 복합 컴포넌트 내에서 와이어 유형을 이용하는 것과 관련될 수 있다. 와이어 유형을 이러한 방식으로 정의함으로써, 애플리케이션 설계자는 단지 호환 가능한 포트 유형에 대하여 와이어 유형을 생성하는 것에 의해 그의 애플리케이션의 부분들 사이의 허용 가능한 일단의 접속을 제약할 수 있다.Wire type adds a list of allowable port types by extending the base type. Using these port types may involve using wire types within composite components. By defining the wire type in this way, an application designer can constrain the allowable set of connections between parts of his application only by creating the wire type for compatible port types.

<xs:complexType name="wireType">
<xs:complexContent>
<xs:extension base="baseType">
<xs:sequence>
<xs:element name="portTypeRefs" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="portTypeRef" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs: complexType name = "wireType">
<xs: complexContent>
<xs: extension base = "baseType">
<xs: sequence>
<xs: element name = "portTypeRefs" minOccurs = "0">
<xs: complexType>
<xs: sequence>
<xs: element name = "portTypeRef" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

컴포넌트 유형Component type

컴포넌트 유형은 베이스 유형을 확장함으로써 포트 멤버의 리스트 및 호스팅 되는 클래스의 리스트를 추가한다.The component type adds a list of port members and a list of hosted classes by extending the base type.

각 포트 멤버는 기존의 포트 유형을 사용한 것이다. 호스팅된 클래스의 리스트는 그 컴포넌트가 호스팅할 수 있는 클래스들을 식별한다. 이들 클래스들은 자원 스페이스의 호스트 관계에 의해 식별되는 클래스들의 부분 집합이며, 이 경우 이러한 유형의 클래스는 잠재적인 호스트로서 식별된다.Each port member uses an existing port type. The list of hosted classes identifies the classes that the component can host. These classes are a subset of the classes identified by the host relationship of the resource space, in which case this type of class is identified as a potential host.

<xs:complexType name="componentType">
<xs:complexContent>
<xs:extension base="baseType">
<xs:sequence>
<xs:element name="ports" type="portsList" minOccurs="0" maxOccurs="1"/>
<xs:element name="hostedClasses" type="hostedClassesList" minOccurs="0" maxOccurs="1">
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs: complexType name = "componentType">
<xs: complexContent>
<xs: extension base = "baseType">
<xs: sequence>
<xs: element name = "ports" type = "portsList" minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "hostedClasses" type = "hostedClassesList" minOccurs = "0" maxOccurs = "1">
</ xs: sequence>
</ xs: extension>
</ xs: complexContent>
</ xs: complexType>

포트 리스트에 있는 포트 멤버 각각은 네임 및 유형에 의해 식별된다. 포트 네임은 컴포넌트 내에서 고유해야 한다. 포트 유형은 이러한 컴포넌트 유형과 관련된 컴포넌트 클래스에서 허용되는 관련 포트 클래스를 가져야 한다. 각 포트 멤버에 대하여, 포트 유형에 의해 정의되는 스키마와 일치하는 설정의 리스트를 제공할 수 있다.Each port member in the port list is identified by name and type. The port name must be unique within the component. The port type must have an associated port class that is allowed by the component class associated with this component type. For each port member, you can provide a list of settings that match the schema defined by the port type.

<xs:complexType name="portsList">
<xs:sequence>
<xs:element name="port" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="settings" type="settingValues" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "portsList">
<xs: sequence>
<xs: element name = "port" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: sequence>
<xs: element name = "settings" type = "settingValues" minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "type" type = "xs: string"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

호스팅된 클래스 리스트(hosted classes list)의 각각의 클래스에 대하여 제약 리스트(a list of constraints)를 결합할 수 있다. 이러한 제약들은 호스팅된 클래스의 설정 스키마(setting schema)에 관하여 쓰여진 것이다.A list of constraints can be combined for each class in the hosted classes list. These constraints are written regarding the setting schema of the hosted class.

<xs:complexType name="hostedClassesList">
<xs:sequence>
<xs:element name="hostedClass" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="constraints" type="settingConstraints" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "hostedClassesList">
<xs: sequence>
<xs: element name = "hostedClass" minOccurs = "1" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "constraints" type = "settingConstraints" minOccurs = "1" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "class" type = "xs: string" use = "required"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

복합 컴포넌트 유형(Compound Component Type)Compound Component Type

복합 컴포넌트 유형(본 명세서에서는 복합 컴포넌트라고 칭한다)은 새로운 컴포넌트 유형을 정의한다. 복합 컴포넌트를 정의할 때, 그 유형의 멤버들이 같은 곳에 배치(co-located)되어야 한다고 명시할 것인지의 여부를 선택할 수 있다. 만 약 멤버들이 같은 곳에 배치되어 있다면, 상기 유형이 배포되는 경우 그 유형의 모든 멤버들은 단일 호스트 상에 배포되어야 한다. 복합 컴포넌트는 또한 컴포넌트 멤버의 리스트, 와이어 멤버의 리스트, 상기 컴포넌트가 위임(delegate)하는 포트를 정의하는 섹션 및 상기 컴포넌트가 호스팅할 수 있는 클래스를 식별하는 리스트를 포함한다. A composite component type (referred to herein as a composite component) defines a new component type. When defining a composite component, you can choose whether or not to specify that members of that type should be co-located in the same place. If members are placed in the same place, then all members of that type must be distributed on a single host if the type is deployed. The composite component also includes a list of component members, a list of wire members, a section defining a port to which the component delegates, and a list that identifies classes that the component can host.

<xs:complexType name="compoundComponentType">
<xs:sequence>
<xs:element name="components" type="components"
minOccurs="0" maxOccurs="1"/>
<xs:element name="wires" type="wires"
minOccurs="0" maxOccurs="1"/>
<xs:element name="delegatePorts" type="delegatePorts"
minOccurs="0" maxOccurs="1"/>
<xs:element name="delegateHostedClasses" type="delegateHostedClasses"
minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="colocate" type="xs:boolean"
use="optional" default="false"/>
</xs:complexType>
<xs: complexType name = "compoundComponentType">
<xs: sequence>
<xs: element name = "components" type = "components"
minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "wires" type = "wires"
minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "delegatePorts" type = "delegatePorts"
minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "delegateHostedClasses" type = "delegateHostedClasses"
minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "colocate" type = "xs: boolean"
use = "optional" default = "false"/>
</ xs: complexType>

컴포넌트 리스트는 이미 정의된 컴포넌트 유형을 사용하는 것을 식별하며 이를 상기 복합 컴포넌트의 컴포넌트 멤버라고 부른다. 각각의 멤버는 복합 컴포넌트 내의 고유한 네임, 그 멤버를 정의하는 유형에 대한 참조 및 그 멤버가 싱글톤(singleton)인지 아닌지를 지시하는 플래그를 갖는다. The component list identifies the use of already defined component types and is called component members of the composite component. Each member has a unique name within the composite component, a reference to the type that defines that member, and a flag indicating whether the member is a singleton or not.

컴포넌트 멤버가 싱글톤이라고 표시된 경우에는, 그 멤버를 포함하는 복합 컴포넌트의 인스턴스에서 이 컴포넌트 멤버의 인스턴스는 오직 하나만이 존재할 수 있다. 그것이 싱글톤이라고 표시되지 않은 경우에는, 멤버의 인스턴스들은 로드 변화와 같은 외적 요인에 따라 생성되고 삭제될 수 있다. 이는 싱글톤이 아닌 멤버와 연결된 컴포넌트 멤버라면 어느 멤버든지 런타임(runtime)에 그 싱글톤이 아닌 멤버의 인스턴스를 하나 또는 그 이상 볼 수 있다는 것을 의미한다.If a component member is marked as a singleton, there can be only one instance of this component member in the instance of the composite component that contains that member. If it is not marked as a singleton, instances of the member can be created and deleted depending on external factors such as load changes. This means that any component member associated with a non-singleton member can see one or more instances of that non-singleton member at runtime.

각각의 컴포넌트 멤버는 또한 관련된 컴포넌트 유형에서 정의된 설정 스키마에 대한 설정 값(setting values)을 제공할 수 있다.Each component member can also provide setting values for the configuration schema defined in the associated component type.

<xs:complexType name="components">
<xs:sequence>
<xs:element name="component" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="settings" type="settingValues" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string" use="required"/>
<xs:attribute name="singleton" type="xs:boolean" use="optional" default="false"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "components">
<xs: sequence>
<xs: element name = "component" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: sequence>
<xs: element name = "settings" type = "settingValues" minOccurs = "0" maxOccurs = "1"/>
</ xs: sequence>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "type" type = "xs: string" use = "required"/>
<xs: attribute name = "singleton" type = "xs: boolean" use = "optional" default = "false"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

복합 컴포넌트에서 와이어 유형을 사용하는 것을 와이어 멤버라고 한다. 각각의 와이어 멤버는 그 복합 컴포넌트에 대하여 고유한 네임(name)으로서, 관련된 와이어 유형을 식별시켜주는 네임을 갖는다. 와이어 멤버는 또한 와이어 유형에서 정의된 설정 스키마에 대한 설정 값을 제공할 수 있다. The use of wire types in composite components is called wire member. Each wire member is a unique name for that composite component, with a name that identifies the associated wire type. Wire members can also provide configuration values for the configuration schema defined in the wire type.

와이어 멤버의 주된 역할은 복합 컴포넌트 내에서 컴포넌트 멤버간의 연결을 식별하는 것이다. 이는 와이어 멤버에 포트 참조를 덧붙이는 방법으로 행해진다. 각각의 포트 참조는 복합 컴포넌트 내의 컴포넌트 멤버 상의 포트를 식별한다. 참 조 포트의 포트 유형은 상기 와이어 유형과 관련된 포트 유형과 일치(match)해야 한다. The main role of wire members is to identify the connections between component members within a composite component. This is done by adding a port reference to the wire member. Each port reference identifies a port on a component member within the composite component. The port type of the reference port must match the port type associated with the wire type.

<xs:complexType name="wires">
<xs:sequence>
<xs:element name="wire" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>

<xs:element name="settings" type="settingValues" minOccurs="0" maxOccurs="1"/>

<xs:element name="members" minOccurs="1" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="member" type="componentPortRef" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="type" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "wires">
<xs: sequence>
<xs: element name = "wire" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: sequence>

<xs: element name = "settings" type = "settingValues" minOccurs = "0" maxOccurs = "1"/>

<xs: element name = "members" minOccurs = "1" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "member" type = "componentPortRef" minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
<xs: attribute name = "name" type = "xs: string" use = "required"/>
<xs: attribute name = "type" type = "xs: string"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

포트 참조는 컴포넌트 멤버를 포함하는 복합 컴포넌트 내에서 그 컴포넌트 멤버를 식별한다. 포트 네임은 상기 컴포넌트 멤버와 관련된 컴포넌트 유형 상의 포트 멤버의 네임이다. The port reference identifies that component member within the composite component that contains the component member. The port name is the name of the port member on the component type associated with that component member.

<xs:complexType name="componentPortRef">
<xs:attribute name="componentName" type="xs:string"/>
<xs:attribute name="portName" type="xs:string" use="required"/>
</xs:complexType>
<xs: complexType name = "componentPortRef">
<xs: attribute name = "componentName" type = "xs: string"/>
<xs: attribute name = "portName" type = "xs: string" use = "required"/>
</ xs: complexType>

복합 컴포넌트와 관련되고 포트 멤버가 바인딩할 수 있는 코드가 없기 때문 에 복합 컴포넌트는 포트 유형을 직접적으로 사용할 수 없다. 그 대신 복합 컴포넌트의 컴포넌트 멤버들로부터 포트 멤버들이 위임을 받는다(delegate out). 이는 복합 컴포넌트가 컴포넌트 유형으로서 사용될 때 이러한 포트들이 그들이 복합 컴포넌트에 속하는 것처럼 나타나는 것을 의미한다. Because a component is related to the composite component and there is no code that the port member can bind to, the composite component cannot use the port type directly. Instead, port members are delegated out from the component members of the composite component. This means that when composite components are used as component types, these ports appear as if they belong to the composite component.

포트가 위임을 받으면, 먼저 컴포넌트 멤버를 식별하고 그 다음에 그 컴포넌트 내의 포트 멤버를 식별함으로써 그 포트가 식별된다. 이 과정의 일부로서 포트의 네임이 바뀔 수도 있는데 이는 상이한 컴포넌트 멤버들로부터 동일한 네임을 갖는 포트들이 위임을 받는 경우 그 네임이 서로 충돌하는 것을 막기 위한 것이다. When a port is delegated, the port is identified by first identifying the component member and then identifying the port member within that component. As part of this process, the names of the ports may be changed to prevent the names from clashing with each other if ports with the same name are delegated from different component members.

<xs:complexType name="delegatePorts">
<xs:sequence>
<xs:element name="delegatePort" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="componentName" type="xs:string"/>
<xs:attribute name="portName" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "delegatePorts">
<xs: sequence>
<xs: element name = "delegatePort" minOccurs = "0" maxOccurs = "unbounded">
<xs: complexType>
<xs: attribute name = "name" type = "xs: string"/>
<xs: attribute name = "componentName" type = "xs: string"/>
<xs: attribute name = "portName" type = "xs: string" use = "optional"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

다양한 범위의 상이한 클래스에 대하여 서비스를 제공할 수 있는 호스트를 구성하기 위하여 복합 컴포넌트가 그의 컴포넌트 멤버들로부터 호스팅된 클래스 선언(hosted class declarations)을 공개하는 것이 허용된다. 복합 컴포넌트가 컴포넌트 유형으로서 사용되는 때에는, 이 복합 컴포넌트는 모든 선언된 클래스에 대하여 호스트로서의 역할을 할 수 있다고 보여진다.Composite components are permitted to publish hosted class declarations from their component members in order to construct a host that can provide services for a wide range of different classes. When a composite component is used as a component type, it is assumed that this composite component can serve as a host for all declared classes.

이러한 호스팅된 클래스 선언을 공개하기 위하여 포트 멤버를 위임했던 방법 과 유사한 방법으로 위임(delegation)이 사용된다. 호스팅된 클래스를 포함하는 컴포넌트 멤버를 식별하고, 그 후 그 컴포넌트가 호스팅할 수 있다고 요청하는 클래스를 식별한다. Delegation is used in a similar way to delegating port members to publish such hosted class declarations. Identifies the component member containing the hosted class, and then identifies the class requesting that the component can be hosted.

<xs:complexType name="delegateHostedClasses">
<xs:sequence>
<xs:element name="hostedClassRef"
minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="componentName" type="xs:string"/>
<xs:attribute name="hostedClass" type="xs:string"
use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs: complexType name = "delegateHostedClasses">
<xs: sequence>
<xs: element name = "hostedClassRef"
minOccurs = "1" maxOccurs = "unbounded">
<xs: complexType>
<xs: attribute name = "componentName" type = "xs: string"/>
<xs: attribute name = "hostedClass" type = "xs: string"
use = "required"/>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
</ xs: complexType>

바인딩Binding

바인딩은 특정한 복합 컴포넌트의 멤버에 대하여 호스트를 식별하는 프로세스이다. 이는 애플리케이션과 그 애플리케이션이 호스팅될 환경 사이의 호환성을 검사하고 그 애플리케이션을 배포하기 위하여 행해진다. 애플리케이션과 호스트 환경은 모두 복합 컴포넌트를 사용하여 모델링되며 따라서 바인딩 프로세스는 멤버간의 연결 토폴로지(connection topology)를 지원(support)하는 서로 대응(match)하는 멤버를 양 컴포넌트로부터 찾는 것이다. Binding is the process of identifying a host for a member of a particular composite component. This is done to check the compatibility between the application and the environment in which it will be hosted and to distribute the application. Both the application and the host environment are modeled using composite components, so the binding process is to find the matching members from both components that support the connection topology between the members.

멤버에 대하여 호환 가능한 호스트를 식별하기 위하여, 리소스 공간에서 클래스들 사이의 관계의 검토를 시작한다. 먼저 와이어 또는 컴포넌트 멤버의 유형을 검토한 후 그 멤버와 관련된 클래스를 식별한다. 그 다음에는 호스트 컴포넌트에서 호스트 컴포넌트의 멤버들의 컴포넌트 유형과 관련된 호환 가능한 클래스를 갖는 컴포넌트 멤버들을 찾는다. 그 후 상기 (와이어 또는 컴포넌트) 멤버와 관련된 유형 상의 호스트 제약을 검토하고 그 제약이 호스트 멤버의 유형 상의 설정과 대응하는지를 본다. 그 다음에는 이와 반대로 호스트 멤버의 유형 상의 hostedClass 제약을, 호스팅하기를 원하는 멤버의 유형 상의 설정에 대하여 점검한다. In order to identify compatible hosts for members, we begin to examine the relationships between the classes in the resource space. First review the type of wire or component member, and then identify the class associated with that member. Next, in the host component, look for component members with compatible classes related to the component type of the members of the host component. Then review the host constraints on the type associated with the (wire or component) member and see if the constraints correspond to the configuration on the type of host member. Next, on the other hand, check the hostedClass constraint on the type of host member against the configuration on the type of member you want to host.

컴포넌트 멤버를 대응시키려고 하는 경우에는, 그 컴포넌트 멤버의 유형을 갖는 모든 포트 멤버들이 그 컴포넌트 멤버에 대한 어떠한 잠재적인 호스트 상에라도 호스팅될 수 있는지를 점검할 필요가 있다. When attempting to match a component member, it is necessary to check whether all port members with the type of that component member can be hosted on any potential host for that component member.

와이어 멤버를 대응시키려고 하는 경우에는, 호스팅하려고 하는 복합 컴포넌트의 컴포넌트 멤버를 위하여 선택한 호스트들간의 경로 상에 존재하는 컴포넌트 멤버라면 어느 것이든지 대응시켜 보아야 한다.If you want to match wire members, you must match any component member that exists on the path between the hosts you selected for the component members of the composite component you want to host.

앞선 예에서 설명된 포트 클래스를 기반으로, 두 가지의 포트 유형을 생성한다. Based on the port class described in the previous example, we create two port types.

<portType name="UserDataServer" class="ServerDataAccess">
<deployment/>
<settings/>
</portType>

<portType name="UserDataClient" class="ServerDataAccess">
<deployment/>
<settings/>
</portType>
<portType name = "UserDataServer" class = "ServerDataAccess">
<deployment />
<settings />
</ portType>

<portType name = "UserDataClient" class = "ServerDataAccess">
<deployment />
<settings />
</ portType>

이러한 유형들은 와이어 유형에 의해 주어진다. These types are given by wire type.

<wireType name="UserData" class="DataConnection">
<deployment/>
<settings>
<useSSL>false</useSSL>
</settings>
<portTypeRefs>
<portTypeRef name="UserDataServer"/>
<portTypeRef name="UserDataClient"/>
</portTypeRefs>
</wireType>
<wireType name = "UserData" class = "DataConnection">
<deployment />
<settings>
<useSSL> false </ useSSL>
</ settings>
<portTypeRefs>
<portTypeRef name = "UserDataServer"/>
<portTypeRef name = "UserDataClient"/>
</ portTypeRefs>
</ wireType>

이제 데이터베이스 클래스에 기초한 컴포넌트 유형이 생성된다. 데이터 베이스 유형은 하나의 서버 데이터 포트를 공개한다. Now a component type based on the database class is created. The database type exposes one server data port.

<componentType name="UserData" class="Database">
<deployment>
<sqlScriptFilePath>%install%\mydatabaseDfn.sql</sqlScriptFilePath>
</deployment>
<settings>
<databaseName>UserData</databaseName>
</settings>
<ports>
<port name="userData" type="UserDataServer"/>
</ports>
</componentType>
<componentType name = "UserData" class = "Database">
<deployment>
<sqlScriptFilePath>% install% \ mydatabaseDfn.sql </ sqlScriptFilePath>
</ deployment>
<settings>
<databaseName> UserData </ databaseName>
</ settings>
<ports>
<port name = "userData" type = "UserDataServer"/>
</ ports>
</ componentType>

이러한 유형들 중 일부를 사용하는 복합 컴포넌트 유형을 생성할 수 있었다. 이하의 복합 컴포넌트는 세 가지 컴포넌트 유형을 사용한다. 제1 유형 UserPages는 두 접근점(access point)을 갖는 웹 서비스를 나타내고 제2 유형 QueryManagement는 미들 계층 논리 컴포넌트(middle tier logic component)이며 마지막 유형은 우리의 데이터베이스 유형이다. 이러한 컴포넌트들을 두 와이어 유형, 즉 UserData 및 QueryManager를 사용하여 연결한다. 데이터 와이어는 미들 계층을 데이터베이스와 연결하고 쿼리 와이어는 프론트엔드(frontend)를 미들 계층와 연결한다. 그 후 두 포트, 즉 signup 및 enquiry를 위임(deligation)을 사용하여 프론트엔드로부터 공개시킨다. You could create complex component types that use some of these types. The following composite component uses three component types. The first type UserPages represents a web service with two access points, the second type QueryManagement is a middle tier logic component and the last type is our database type. You connect these components using two wire types: UserData and QueryManager. Data wires connect the middle tier with the database, and query wires connect the frontend with the middle tier. Then we expose the two ports, signup and enquiry, from the frontend using delegation.

<compoundComponentType name="UserManagementApplication">
<components>
<component name="userPages" type="UserPages"/>
<component name="queryLogic" type="QueryManagement"/>
<component name="userData" type="UserData" singleton="true"/>
</components>
<wires>
<wire name="data" type="UserData">
<members>
<member componentName="queryLogic" portName="userData"/>
<member componentName="userData" portName="userData"/>
</members>
</wire>
<wire name="query" type="QueryManager">
<members>
<member componentName="userPages" portName="queryManager1"/>
<member componentName="userPages" portName="queryManager2"/>
<member componentName="queryLogic" portName="queryManager"/>
</members>
</wire>
</wires>
<delegatePorts>
<delegatePort name="signup" componentName="userPages"
portName="signup"/>
<delegatePort name="enquiry" componentName="userPages"
portName="enquiry"/>
</delegatePorts>
</compoundComponentType>
<compoundComponentType name = "UserManagementApplication">
<components>
<component name = "userPages" type = "UserPages"/>
<component name = "queryLogic" type = "QueryManagement"/>
<component name = "userData" type = "UserData" singleton = "true"/>
</ components>
<wires>
<wire name = "data" type = "UserData">
<members>
<member componentName = "queryLogic" portName = "userData"/>
<member componentName = "userData" portName = "userData"/>
</ members>
</ wire>
<wire name = "query" type = "QueryManager">
<members>
<member componentName = "userPages" portName = "queryManager1"/>
<member componentName = "userPages" portName = "queryManager2"/>
<member componentName = "queryLogic" portName = "queryManager"/>
</ members>
</ wire>
</ wires>
<delegatePorts>
<delegatePort name = "signup" componentName = "userPages"
portName = "signup"/>
<delegatePort name = "enquiry" componentName = "userPages"
portName = "enquiry"/>
</ delegatePorts>
</ compoundComponentType>

SDM 문서 구조SDM document structure

SDM 문서는 문서의 네임스페이스(namespace)를 정의하는 강한 본질을 지니고 있다. SDM 문서는 다른 네임스페이스에 대한 참조의 리스트를 가져 온다(import). 이 문서는 또한 문서 소유자, 회사명 및 수정된 날짜와 같은 문서의 특정 속성(document specific attribute)을 확인하게 하는 정보 섹션을 포함한다. 문서는 그 다음에 포트, 와이어 및 컴포넌트 클래스들의 리스트, 이어서 호스트 관계들의 리스트, 차례로 이어서 포트, 와이어 및 컴포넌트 유형들의 리스트를 포함한다. SDM documents have a strong nature of defining a document's namespace. SDM documents import lists of references to other namespaces. This document also includes an information section that allows you to identify document specific attributes such as document owner, company name, and date modified. The document then includes a list of ports, wires, and component classes, followed by a list of host relationships, followed by a list of ports, wires, and component types.

<xs:element name="sdm">
<xs:annotation>
<xs:documentation>SDM 최상위 요소(SDM root element)이다. 이는 SDM 유형을 위한 컨테이너이다.
</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="import" type="import" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="information" type="information" minOccurs="0" maxOccurs="1"/>
<xs:element name="portClasses" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="portClass" type="portClass" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="wireClasses" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="wireClass" type="wireClass" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="componentClasses" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="componentClass" type="componentClass" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
<xs: element name = "sdm">
<xs: annotation>
<xs: documentation> The SDM root element. This is a container for the SDM type.
</ xs: documentation>
</ xs: annotation>
<xs: complexType>
<xs: sequence>
<xs: element name = "import" type = "import" minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "information" type = "information" minOccurs = "0" maxOccurs = "1"/>
<xs: element name = "portClasses" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "portClass" type = "portClass" minOccurs = "1" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
<xs: element name = "wireClasses" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "wireClass" type = "wireClass" minOccurs = "1" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
<xs: element name = "componentClasses" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "componentClass" type = "componentClass" minOccurs = "1" maxOccurs = "unbounded"/>
</ xs: sequence>


</xs:complexType>
</xs:element>
<xs:element name="hostRelations" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="installer" type="installer" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="hostRelation" type="hostRelation" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="portTypes" minOccurs="0"
maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="portType" type="portType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="wireTypes" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="wireType" type="wireType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="componentTypes" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="componentType" type="componentType" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="compoundComponentType" type="compoundComponentType" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attributeGroup ref="identity"/>
</xs:complexType>
</xs:element>

</ xs: complexType>
</ xs: element>
<xs: element name = "hostRelations" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "installer" type = "installer" minOccurs = "1" maxOccurs = "unbounded"/>
<xs: element name = "hostRelation" type = "hostRelation" minOccurs = "1" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
<xs: element name = "portTypes" minOccurs = "0"
maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "portType" type = "portType" minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
<xs: element name = "wireTypes" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "wireType" type = "wireType" minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
<xs: element name = "componentTypes" minOccurs = "0" maxOccurs = "1">
<xs: complexType>
<xs: sequence>
<xs: element name = "componentType" type = "componentType" minOccurs = "0" maxOccurs = "unbounded"/>
<xs: element name = "compoundComponentType" type = "compoundComponentType" minOccurs = "0" maxOccurs = "unbounded"/>
</ xs: sequence>
</ xs: complexType>
</ xs: element>
</ xs: sequence>
<xs: attributeGroup ref = "identity"/>
</ xs: complexType>
</ xs: element>

관련된 XSD(Associated XSD)Associated XSD

이하는 변화 요청(change request)에 대한 하나의 예시이다. The following is an example of a change request.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft- com:sdmChangeRequest" xmlns="urn:schemas-microsoft- com:sdmChangeRequest" xmlns:settings="urn:schemas-microsoft- com:sdmSettings" xmlns:mstns="http://tempuri.org/XMLSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" <xs: schema targetNamespace = "urn: schemas-microsoft- com: sdmChangeRequest" xmlns = "urn: schemas-microsoft- com: sdmChangeRequest" xmlns: settings = "urn: schemas-microsoft- com: sdmSettings" xmlns: mstns = " http://tempuri.org/XMLSchema.xsd "xmlns: xs =" http://www.w3.org/2001/XMLSchema "

elementFormDefault="qualified" version="0.7" id="sdmChangeRequest"> elementFormDefault = "qualified" version = "0.7" id = "sdmChangeRequest">

<xs:import namespace="urn:schemas-microsoft-com:sdmSettings" schemaLocation="SDM7Settings.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmSettings" schemaLocation = "SDM7Settings.xsd" />

<xs:import namespace="urn:schemas-microsoft-com:sdmNames" schemaLocation="SDM7Names.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmNames" schemaLocation = "SDM7Names.xsd" />

<xs:complexType name="ChangeRequestType"><xs: complexType name = "ChangeRequestType">

<xs:sequence><xs: sequence>

<xs:element name="group" type="groupType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "group" type = "groupType" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="groupType"><xs: complexType name = "groupType">

<xs:sequence><xs: sequence>

<xs:element name="group" type="groupType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "group" type = "groupType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="addInstance" type="addInstanceType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "addInstance" type = "addInstanceType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="updateInstance" type="updateInstanceType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "updateInstance" type = "updateInstanceType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="deleteInstance" type="deleteInstanceType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "deleteInstance" type = "deleteInstanceType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="addConnection" type="addConnectionType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "addConnection" type = "addConnectionType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="deleteConnection" type="deleteConnectionType" minOccurs="0" maxOccurs="unbounded" /> <xs: element name = "deleteConnection" type = "deleteConnectionType" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attribute name="canLeConcurrentlyExecuted" type="xs:boolean" /><xs: attribute name = "canLeConcurrentlyExecuted" type = "xs: boolean" />

</xs:complexType></ xs: complexType>

<xs:complexType name="addInstanceType"><xs: complexType name = "addInstanceType">

<xs:sequence><xs: sequence>

<xs:element name="classSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "classSettings" type = "settings: settingValues" minOccurs = "0" />

<xs:element name="typeSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "typeSettings" type = "settings: settingValues" minOccurs = "0" />

<!-- setting values for class --><!-setting values for class->

<!-- setting values for type --><!-setting values for type->

</xs:sequence></ xs: sequence>

<xs:attribute name="parent" type="reference" use="optional" /><xs: attribute name = "parent" type = "reference" use = "optional" />

<xs:attribute name="host" type="reference" use="optional" /><xs: attribute name = "host" type = "reference" use = "optional" />

<xs:attribute name="member" type="xs:string" use="optional" /><xs: attribute name = "member" type = "xs: string" use = "optional" />

<xs:attribute name="type" type="xs:string" use="optional" /><xs: attribute name = "type" type = "xs: string" use = "optional" />

<xs:attribute name="name" type="xs:string" use="optional" /><xs: attribute name = "name" type = "xs: string" use = "optional" />

<!-- the parent of this instance --><!-the parent of this instance->

<!-- the host of this instance --><!-the host of this instance->

<!-- Name of the member on the parent type --><!-Name of the member on the parent type->

<!-- Fully qualified type that this is an instance of --><!-Fully qualified type that this is an instance of->

<!-- alias for the id that can be filled in when the instance is created.<!-alias for the id that can be filled in when the instance is created.

this name must be unique for all instances of the same member. -->this name must be unique for all instances of the same member. ->

</xs:complexType></ xs: complexType>

<!-- what can we change about an instance? --><!-what can we change about an instance? ->

<xs:complexType name="updateInstanceType"><xs: complexType name = "updateInstanceType">

<xs:sequence><xs: sequence>

<xs:element name="classSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "classSettings" type = "settings: settingValues" minOccurs = "0" />

<xs:element name="typeSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "typeSettings" type = "settings: settingValues" minOccurs = "0" />

<!-- setting values for class --><!-setting values for class->

<!-- setting values for type --><!-setting values for type->

</xs:sequence></ xs: sequence>

<xs:attribute name="id" type="reference" use="required" /><xs: attribute name = "id" type = "reference" use = "required" />

<xs:attribute name="parent" type="reference" use="optional" /><xs: attribute name = "parent" type = "reference" use = "optional" />

<xs:attribute name="host" type="reference" use="optional" /><xs: attribute name = "host" type = "reference" use = "optional" />

<xs:attribute name="member" type="xs:string" use="optional" /><xs: attribute name = "member" type = "xs: string" use = "optional" />

<xs:attribute name="type" type="xs:string" use="optional" /><xs: attribute name = "type" type = "xs: string" use = "optional" />

<xs:attribute name="name" type="xs:string" use="optional" /><xs: attribute name = "name" type = "xs: string" use = "optional" />

<!-- Unique identifier scoped to the SDM Runtime. This is generated by t_u101 ? SDM runtime<!-Unique identifier scoped to the SDM Runtime. This is generated by t_u101? SDM runtime

and is immutable -->and is immutable->

<!-- the parent of this instance --><!-the parent of this instance->

<!-- the host of this instance --><!-the host of this instance->

<!-- Name of the member on the parent type --><!-Name of the member on the parent type->

<!-- Fully qualified type that this is an instance of --><!-Fully qualified type that this is an instance of->

<!-- alias for the id that can be filled in when the instance is created.<!-alias for the id that can be filled in when the instance is created.

this name must be unique for all instances of the same member. -->this name must be unique for all instances of the same member. ->

</xs:complexType></ xs: complexType>

<xs:complexType name="deleteInstanceType"><xs: complexType name = "deleteInstanceType">

<xs:attribute name="id" type="reference" use="required" /><xs: attribute name = "id" type = "reference" use = "required" />

<xs:attribute name="option" type="deleteOptionType" use="required" /><xs: attribute name = "option" type = "deleteOptionType" use = "required" />

<!-- Unique identifier scoped to the SDM Runtime. This is generated by the SDM runtime <!-Unique identifier scoped to the SDM Runtime. This is generated by the SDM runtime

and is immutable -_cf2 >and is immutable -_cf2>

</xs:complexType></ xs: complexType>

<xs:complexType name="addConnectionType"><xs: complexType name = "addConnectionType">

<xs:attribute name="port" type="reference" use="required" /><xs: attribute name = "port" type = "reference" use = "required" />

<xs:attribute name="wire" type="reference" use="required" /><xs: attribute name = "wire" type = "reference" use = "required" />

</xs:complexType></ xs: complexType>

<xs:complexType name="deleteConnectionType"><xs: complexType name = "deleteConnectionType">

<xs:attribute name="port" type="reference" use="required" /><xs: attribute name = "port" type = "reference" use = "required" />

<xs:attribute name="wire" type="reference" use="required" /><xs: attribute name = "wire" type = "reference" use = "required" />

</xs:complexType></ xs: complexType>

<!-- reference can be guid or path --><!-reference can be guid or path->

<xs:simpleType name="reference"><xs: simpleType name = "reference">

<xs:union></xs:union><xs: union> </ xs: union>

</xs:simpleType></ xs: simpleType>

<!-- delete options are: ??? --><!-delete options are: ??? ->

<xs:simpleType name="deleteOptionType"><xs: simpleType name = "deleteOptionType">

<xs:union></xs:union><xs: union> </ xs: union>

</xs:simpleType></ xs: simpleType>

</xs:schema></ xs: schema>

이하는 클래스에 대한 예시적인 구조이다. The following is an example structure for a class.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmClasses" xmlns="urn:schemas-microsoft-com:sdmClasses" xmlns:names="urn:schemas-microsoft-com:sdmNames" xmlns:settings="urn:schemas-microsoft-com:sdmSettings" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="0.7" id="sdmClasses"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmClasses" xmlns = "urn: schemas-microsoft-com: sdmClasses" xmlns: names = "urn: schemas-microsoft-com: sdmNames" xmlns: settings = " urn: schemas-microsoft-com: sdmSettings "xmlns: xs =" http://www.w3.org/2001/XMLSchema "elementFormDefault =" qualified "version =" 0.7 "id =" sdmClasses ">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<xs:import namespace="urn:schemas-microsoft-com:sdmSettings" schemaLocation="SDM7Settings.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmSettings" schemaLocation = "SDM7Settings.xsd" />

<xs:import namespace="urn:schemas-microsoft-com:sdmNames" schemaLocation="SDM7Names.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmNames" schemaLocation = "SDM7Names.xsd" />

<!-- TODO [BassamT]: Normalize the port class refs, port type refs and port members on wire classs, wire types and wire members --><!-TODO [BassamT]: Normalize the port class refs, port type refs and port members on wire classs, wire types and wire members->

<!-- TODO [BassamT]: Is the layer attribute mandatory on a class? --><!-TODO [BassamT]: Is the layer attribute mandatory on a class? ->

<!-- TODO [BassamT]: Add keys and keyefs for validation --><!-TODO [BassamT]: Add keys and keyefs for validation->

<!-- TODO [BassamT]: Add support for inlined types --><!-TODO [BassamT]: Add support for inlined types->

<!-- TODO [BassamT]: scrub minOccurs and maxOccurs --><!-TODO [BassamT]: scrub minOccurs and maxOccurs->

<!-- TODO [BassamT]: New name for "class", possibly "deployment" --><!-TODO [BassamT]: New name for "class", possibly "deployment"->

<!-- TODO [BassamT]: New name for "host", possibly "provider" --><!-TODO [BassamT]: New name for "host", possibly "provider"->

<!-- REVIEW [BassamT]: Can we merge the definitions of port, component, wire classs in this XSD. It would make it less verbose at the cost more semantic analysis. --><!-REVIEW [BassamT]: Can we merge the definitions of port, component, wire classs in this XSD. It would make it less verbose at the cost more semantic analysis. ->

<!-- CONSIDER [BassamT]: General attribute mechanism for things like Singleton, Colocation, Inline. --><!-CONSIDER [BassamT]: General attribute mechanism for things like Singleton, Colocation, Inline. ->

<!-- TODO [BassamT]: Bindings: member to component member --><!-TODO [BassamT]: Bindings: member to component member->

<!-- TODO [geoffo]: ports - are they singleton? --><!-TODO [geoffo]: ports-are they singleton? ->

<!-- TODO [geoffo]: delegation - how do we combine ports? --><!-TODO [geoffo]: delegation-how do we combine ports? ->

<!-- TODO [geoffo] Add back <any> in appropriate places --><!-TODO [geoffo] Add back <any> in appropriate places->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- SDM root element --><!-SDM root element->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:element name="sdmClasses"><xs: element name = "sdmClasses">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="import" type="names:import" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "import" type = "names: import" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="information" type="information" minOccurs="0" /><xs: element name = "information" type = "information" minOccurs = "0" />

<xs:element name="portClasses" minOccurs="0"><xs: element name = "portClasses" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portClass" type="portClass" maxOccurs="unbounded" /><xs: element name = "portClass" type = "portClass" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="componentClasses" minOccurs="0"><xs: element name = "componentClasses" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="componentClass" type="componentClass" maxOccurs="unbounded" /> <xs: element name = "componentClass" type = "componentClass" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="protocols" minOccurs="0"><xs: element name = "protocols" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="protocol" type="protocol" maxOccurs="unbounded" /><xs: element name = "protocol" type = "protocol" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="hostRelations" minOccurs="0"><xs: element name = "hostRelations" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="installer" type="installer" maxOccurs="unbounded" /><xs: element name = "installer" type = "installer" maxOccurs = "unbounded" />

<xs:element name="hostRelation" type="hostRelation" maxOccurs="unbounded" /><xs: element name = "hostRelation" type = "hostRelation" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

<xs:attributeGroup ref="names:namespaceIdentity" /><xs: attributeGroup ref = "names: namespaceIdentity" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- SDM type library information --><!-SDM type library information->

<xs:complexType name="information"><xs: complexType name = "information">

<xs:annotation><xs: annotation>

<xs:documentation>Human readable information about the SDM type library.</xs:documentation><xs: documentation> Human readable information about the SDM type library. </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="friendlyName" type="xs:string" minOccurs="0" /><xs: element name = "friendlyName" type = "xs: string" minOccurs = "0" />

<xs:element name="companyName" type="xs:string" minOccurs="0" /><xs: element name = "companyName" type = "xs: string" minOccurs = "0" />

<xs:element name="copyright" type="xs:string" minOccurs="0" /><xs: element name = "copyright" type = "xs: string" minOccurs = "0" />

<xs:element name="trademark" type="xs:string" minOccurs="0" /><xs: element name = "trademark" type = "xs: string" minOccurs = "0" />

<xs:element name="description" type="xs:string" minOccurs="0" /><xs: element name = "description" type = "xs: string" minOccurs = "0" />

<xs:element name="comments" type="xs:string" minOccurs="0" /><xs: element name = "comments" type = "xs: string" minOccurs = "0" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- Classes --><!-Classes->

<!-- ============================================================================= ======================================== --><!-============================================== =============================== =================== =====================->

<xs:complexType name="baseClass"><xs: complexType name = "baseClass">

<xs:sequence><xs: sequence>

<xs:element name="deploymentSchema" type="settings:deploymentSchema" minOccurs="0" /><xs: element name = "deploymentSchema" type = "settings: deploymentSchema" minOccurs = "0" />

<xs:element name="settingSchema" type="settings:settingSchema" minOccurs="0" /><xs: element name = "settingSchema" type = "settings: settingSchema" minOccurs = "0" />

<!-- XSD schema that for how a class is deployed --><!-XSD schema that for how a class is deployed->

<!-- Setting schema --><!-Setting schema->

</xs:sequence></ xs: sequence>

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="layer" type="xs:string" use="required" /><xs: attribute name = "layer" type = "xs: string" use = "required" />

<!-- REVIEW [BassamT] Are these layers just for benefit of tools, or are they<!-REVIEW [BassamT] Are these layers just for benefit of tools, or are they

strictly enforced in the SDM model? There are strictly enforced in the SDM model? There are

cases where mixing components from different layers makescases where mixing components from different layers makes

sense. For example, the filter component might be a sense. For example, the filter component might be a

a component meta type hosted ISA server which lives in layer 3. a component meta type hosted ISA server which lives in layer 3.

However, we want to use the Filter meta-type in layer 2. -->However, we want to use the Filter meta-type in layer 2.->

</xs:complexType></ xs: complexType>

<!-- port class --><!-port class->

<xs:complexType name="portClass"><xs: complexType name = "portClass">

<xs:complexContent><xs: complexContent>

<xs:extension base="baseClass" /><xs: extension base = "baseClass" />

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<!-- Component class --><!-Component class->

<xs:complexType name="componentClass"><xs: complexType name = "componentClass">

<xs:complexContent><xs: complexContent>

<xs:extension base="baseClass"><xs: extension base = "baseClass">

<xs:sequence><xs: sequence>

<xs:element name="portClassesAllowed" minOccurs="0"><xs: element name = "portClassesAllowed" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portClassRef" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "portClassRef" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attribute name="closed" type="xs:boolean" use="optional" default="true" /><xs: attribute name = "closed" type = "xs: boolean" use = "optional" default = "true" />

<!-- Whether the allowable ports is closed list --><!-Whether the allowable ports is closed list->

<!-- If this value is "true" then the list of ports is non-extensible. If this value is "false" then the list of ports is open-ended, the ports listed will be considered mandatory. --><!-If this value is "true" then the list of ports is non-extensible. If this value is "false" then the list of ports is open-ended, the ports listed will be considered mandatory. ->

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- this will specify a set of constraints on the set of allowable ports<!-this will specify a set of constraints on the set of allowable ports

that can show up on a component type of this meta type. -->that can show up on a component type of this meta type. ->

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="portClassRef"><xs: complexType name = "portClassRef">

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="required" type="xs:boolean" use="required" /><xs: attribute name = "required" type = "xs: boolean" use = "required" />

<xs:attribute name="singleton" type="xs:boolean" use="required" /><xs: attribute name = "singleton" type = "xs: boolean" use = "required" />

<!-- singleton implies that there can only be one instance of this port within the parents scope --><!-singleton implies that there can only be one instance of this port within the parents scope->

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- relations --><!-relations->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="relation"><xs: complexType name = "relation">

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="installer" type="xs:string" use="optional" /><xs: attribute name = "installer" type = "xs: string" use = "optional" />

</xs:complexType></ xs: complexType>

<!-- a protocol is a relationship between one or more port classes --><!-a protocol is a relationship between one or more port classes->

<xs:complexType name="protocol"><xs: complexType name = "protocol">

<xs:complexContent><xs: complexContent>

<xs:extension base="relation"><xs: extension base = "relation">

<xs:sequence><xs: sequence>

<xs:element name="portClassRef" type="portClassRef" maxOccurs="unbounded" /><xs: element name = "portClassRef" type = "portClassRef" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<!-- defines the host relationship between two classs --><!-defines the host relationship between two classs->

<xs:complexType name="hostRelation"><xs: complexType name = "hostRelation">

<xs:complexContent><xs: complexContent>

<xs:extension base="relation"><xs: extension base = "relation">

<xs:attribute name="classRef" type="xs:string" use="required" /><xs: attribute name = "classRef" type = "xs: string" use = "required" />

<xs:attribute name="hostClassRef" type="xs:string" use="required" /><xs: attribute name = "hostClassRef" type = "xs: string" use = "required" />

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<!-- the installer type identifes the code responsible for instantiating a relationship --><!-the installer type identifes the code responsible for instantiating a relationship->

<xs:complexType name="installer"><xs: complexType name = "installer">

<xs:sequence><xs: sequence>

<xs:element name="binary" type="xs:string" /><xs: element name = "binary" type = "xs: string" />

</xs:sequence></ xs: sequence>

<xs:attribute name="codeType" type="xs:string" use="required" /><xs: attribute name = "codeType" type = "xs: string" use = "required" />

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

</xs:complexType></ xs: complexType>

</xs:schema></ xs: schema>

이하는 배포 유닛(deployment unit)에 대한 예시적인 구조이다.The following is an exemplary structure for a deployment unit.

<?xml version="1.0" encoding="UTF-8" ?><? xml version = "1.0" encoding = "UTF-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmSDU" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:names="urn:schemas-microsoft-com:sdmNames" xmlns="urn:schemas-microsoft-com:sdmSDU" elementFormDefault="qualified" version="0.7" id="sdmSDU"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmSDU" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: names = "urn: schemas-microsoft-com: sdmNames "xmlns =" urn: schemas-microsoft-com: sdmSDU "elementFormDefault =" qualified "version =" 0.7 "id =" sdmSDU ">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<xs:import namespace="urn:schemas-microsoft-com:sdmNames" schemaLocation="SDM7Names.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmNames" schemaLocation = "SDM7Names.xsd" />

<!-- an sdm deployment unit imports one or more sdm type files the includes mappings for a subset of the types from the imported file --><!-an sdm deployment unit imports one or more sdm type files the includes mappings for a subset of the types from the imported file->

<xs:element name="sdmDeploymentUnit"><xs: element name = "sdmDeploymentUnit">

<xs:annotation><xs: annotation>

<xs:documentation><xs: documentation>

The sdu contains a mapping of SDM types to their implementation.The sdu contains a mapping of SDM types to their implementation.

</xs:documentation></ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="import" type="names:import" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "import" type = "names: import" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="implementation" type="implementationMap" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "implementation" type = "implementationMap" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- a description of this deployment unit --><!-a description of this deployment unit->

<xs:complexType name="deploymentDescription"><xs: complexType name = "deploymentDescription">

<xs:attribute name="name" type="xs:string" /><xs: attribute name = "name" type = "xs: string" />

<xs:attribute name="dateCreated" type="xs:string" /><xs: attribute name = "dateCreated" type = "xs: string" />

<xs:attribute name="creator" type="xs:string" /><xs: attribute name = "creator" type = "xs: string" />

</xs:complexType></ xs: complexType>

<!-- a mapping from a type to an implementation of the type --><!-a mapping from a type to an implementation of the type->

<xs:complexType name="implementationMap"><xs: complexType name = "implementationMap">

<xs:sequence><xs: sequence>

<xs:element name="version" type="xs:string" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "version" type = "xs: string" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attribute name="type" type="xs:string" /><xs: attribute name = "type" type = "xs: string" />

<xs:attribute name="path" type="xs:string" /><xs: attribute name = "path" type = "xs: string" />

</xs:complexType></ xs: complexType>

</xs:schema></ xs: schema>

이하는 인스턴스에 대한 예시적인 구조이다.The following is an example structure for an instance.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmInstances" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:settings="urn:schemas-microsoft-com:sdmSettings" xmlns="urn:schemas-microsoft-com:sdmInstances" elementFormDefault="qualified" version="0.7" id="sdmInstances"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmInstances" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: settings = "urn: schemas-microsoft-com: sdmSettings "xmlns =" urn: schemas-microsoft-com: sdmInstances "elementFormDefault =" qualified "version =" 0.7 "id =" sdmInstances ">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<xs:import namespace="urn:schemas-microsoft-com:sdmSettings" schemaLocation="SDM7Settings.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmSettings" schemaLocation = "SDM7Settings.xsd" />

<xs:element name="sdmInstances"><xs: element name = "sdmInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="import" type="import" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "import" type = "import" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="portInstances" minOccurs="0"><xs: element name = "portInstances" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portInstance" type="portInstance" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "portInstance" type = "portInstance" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="wireInstances" minOccurs="0"><xs: element name = "wireInstances" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="wireInstance" type="wireInstance" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "wireInstance" type = "wireInstance" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="componentInstances" minOccurs="0"><xs: element name = "componentInstances" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="componentInstance" type="componentInstance" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "componentInstance" type = "componentInstance" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="compoundComponentInstance" type="compoundComponentInstance" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "compoundComponentInstance" type = "compoundComponentInstance" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:complexType name="import"><xs: complexType name = "import">

<xs:attribute name="alias" type="xs:string" use="required" /><xs: attribute name = "alias" type = "xs: string" use = "required" />

<xs:attributeGroup ref="identity" /><xs: attributeGroup ref = "identity" />

</xs:complexType></ xs: complexType>

<!-- ================== Instance Schema =============== --><!-================== Instance Schema ===============->

<xs:complexType name="instanceBase"><xs: complexType name = "instanceBase">

<xs:sequence><xs: sequence>

<xs:element name="classSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "classSettings" type = "settings: settingValues" minOccurs = "0" />

<xs:element name="typeSettings" type="settings:settingValues" minOccurs="0" /><xs: element name = "typeSettings" type = "settings: settingValues" minOccurs = "0" />

<!-- setting values for class --><!-setting values for class->

<!-- setting values for type --><!-setting values for type->

</xs:sequence></ xs: sequence>

<xs:attribute name="id" type="guid" use="required" /><xs: attribute name = "id" type = "guid" use = "required" />

<xs:attribute name="parent" type="guid" use="optional" /><xs: attribute name = "parent" type = "guid" use = "optional" />

<xs:attribute name="host" type="guid" use="optional" /><xs: attribute name = "host" type = "guid" use = "optional" />

<xs:attribute name="member" type="xs:string" use="optional" /><xs: attribute name = "member" type = "xs: string" use = "optional" />

<xs:attribute name="type" type="xs:string" use="required" /><xs: attribute name = "type" type = "xs: string" use = "required" />

<xs:attribute name="name" type="xs:string" use="optional" /><xs: attribute name = "name" type = "xs: string" use = "optional" />

<!-- Unique identifier scoped to the SDM Runtime. This is generated by the SDM runtime<!-Unique identifier scoped to the SDM Runtime. This is generated by the SDM runtime

and is immutable -->and is immutable->

<!-- the parent of this instance --><!-the parent of this instance->

<!-- the host of this instance --><!-the host of this instance->

<!-- Name of the member on the parent type --><!-Name of the member on the parent type->

<!-- Fully qualified type that this is an instance of --><!-Fully qualified type that this is an instance of->

<!-- alias for the id that can be filled in when the instance is created_par this name must be unique for all instances of the same member. --><!-alias for the id that can be filled in when the instance is created_par this name must be unique for all instances of the same member. ->

</xs:complexType></ xs: complexType>

<xs:complexType name="componentInstance"><xs: complexType name = "componentInstance">

<xs:complexContent><xs: complexContent>

<xs:extension base="instanceBase"><xs: extension base = "instanceBase">

<xs:sequence><xs: sequence>

<xs:element name="portInstances"><xs: element name = "portInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portInstance" type="instanceRef" /><xs: element name = "portInstance" type = "instanceRef" />

<!-- the port Instances that I own --><!-the port Instances that I own->

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="compoundComponentInstance"><xs: complexType name = "compoundComponentInstance">

<xs:complexContent><xs: complexContent>

<xs:extension base="instanceBase"><xs: extension base = "instanceBase">

<xs:sequence><xs: sequence>

<xs:element name="portInstances"><xs: element name = "portInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portInstance" type="instanceRef" /><xs: element name = "portInstance" type = "instanceRef" />

<!-- the port Instances that I delegate --><!-the port Instances that I delegate->

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="componentInstances"><xs: element name = "componentInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="componentInstance" type="instanceRef" /><xs: element name = "componentInstance" type = "instanceRef" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="wireInstances"><xs: element name = "wireInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="wireInstance" type="instanceRef" /><xs: element name = "wireInstance" type = "instanceRef" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="portInstance"><xs: complexType name = "portInstance">

<xs:complexContent><xs: complexContent>

<xs:extension base="instanceBase"><xs: extension base = "instanceBase">

<xs:sequence /><xs: sequence />

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="wireInstance"><xs: complexType name = "wireInstance">

<xs:complexContent><xs: complexContent>

<xs:extension base="instanceBase"><xs: extension base = "instanceBase">

<xs:sequence><xs: sequence>

<xs:element name="portInstances"><xs: element name = "portInstances">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portInstance" type="instanceRef" /><xs: element name = "portInstance" type = "instanceRef" />

<!-- the ports that I have attached --><!-the ports that I have attached->

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="instanceRef"><xs: complexType name = "instanceRef">

<xs:attribute name="uniqueId" type="xs:string" /><xs: attribute name = "uniqueId" type = "xs: string" />

</xs:complexType></ xs: complexType>

<!-- ================= Simple Types ========================== --><!-================= Simple Types ==========================- ->

<xs:simpleType name="fourPartVersionType"><xs: simpleType name = "fourPartVersionType">

<xs:annotation><xs: annotation>

<xs:documentation>Four part version numbers where the segments are in the range 0-65535 </xs:documentation><xs: documentation> Four part version numbers where the segments are in the range 0-65535 </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:pattern value="(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?)" /><xs: pattern value = "(0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0 , 3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0-9] 0,4 | [7-9 ] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0 -9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?) . (0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6 -9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?) "/>

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

<xs:simpleType name="publicKeyTokenType"><xs: simpleType name = "publicKeyTokenType">

<xs:annotation><xs: annotation>

<xs:documentation>Public Key Token: 16 hex digits in size</xs:documentation><xs: documentation> Public Key Token: 16 hex digits in size </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:pattern value="([0-9]|[a-f]|[A-F])16" /><xs: pattern value = "([0-9] | [a-f] | [A-F]) 16" />

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

<xs:attributeGroup name="identity"><xs: attributeGroup name = "identity">

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="version" type="fourPartVersionType" use="required" /><xs: attribute name = "version" type = "fourPartVersionType" use = "required" />

<xs:attribute name="publicKeyToken" type="publicKeyTokenType" use="optional" /><xs: attribute name = "publicKeyToken" type = "publicKeyTokenType" use = "optional" />

</xs:attributeGroup></ xs: attributeGroup>

<xs:simpleType name="guid"><xs: simpleType name = "guid">

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:pattern value="[0-9a-fA-F]8-[0-9a-fA-F]4-[0-9a-fA-F]4-[0-9a-fA-F]4-[0-9a-fA-F]12" /><xs: pattern value = "[0-9a-fA-F] 8- [0-9a-fA-F] 4- [0-9a-fA-F] 4- [0-9a-fA-F] 4 -[0-9a-fA-F] 12 "/>

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

</xs:schema></ xs: schema>

이하는 매핑(mapping)에 대한 예시적인 구조이다.The following is an exemplary structure for mapping.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmMapping" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:names="urn:schemas-microsoft-com:sdmNames" xmlns="urn:schemas-microsoft-com:sdmMapping" elementFormDefault="qualified" version="0.7" id="sdmMapping"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmMapping" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns: names = "urn: schemas-microsoft-com: sdmNames "xmlns =" urn: schemas-microsoft-com: sdmMapping "elementFormDefault =" qualified "version =" 0.7 "id =" sdmMapping ">

<!-- REVIEW [BassamT]: Do we allow mappings to components within the same compound component? --><!-REVIEW [BassamT]: Do we allow mappings to components within the same compound component? ->

<xs:import namespace="urn:schemas-microsoft-com:sdmNames" schemaLocation="SDM7Names.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmNames" schemaLocation = "SDM7Names.xsd" />

<xs:element name="logicalPlacement"><xs: element name = "logicalPlacement">

<xs:annotation><xs: annotation>

<xs:documentation><xs: documentation>

This file contains the mapping information between SDM members.This file contains the mapping information between SDM members.

Mappings are constructed in a outside in fashion, first binding the outer compound component, then its members and so on.Mappings are constructed in a outside in fashion, first binding the outer compound component, then its members and so on.

</xs:documentation></ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="import" type="names:import" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "import" type = "names: import" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="placement" minOccurs="0" maxOccurs="unbounded"><xs: element name = "placement" minOccurs = "0" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="memberBinding" type="memberBinding" maxOccurs="unbounded" /> <xs: element name = "memberBinding" type = "memberBinding" maxOccurs = "unbounded" />

<xs:element name="wireBinding" type="wireBinding" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "wireBinding" type = "wireBinding" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attribute name="sourceComponentType" type="xs:string" /><xs: attribute name = "sourceComponentType" type = "xs: string" />

<xs:attribute name="targetComponentType" type="xs:string" /><xs: attribute name = "targetComponentType" type = "xs: string" />

<xs:attribute name="name" type="xs:string" /><xs: attribute name = "name" type = "xs: string" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- a member binding may be a:<!-a member binding may be a:

1. compound component member - in which case we bind all the members and wires of the compound component1.compound component member-in which case we bind all the members and wires of the compound component

2. a simple component member - in which case we bind the component and its ports2.a simple component member-in which case we bind the component and its ports

3. a port member - in which case we bind it to a port and there is no further binding3.a port member-in which case we bind it to a port and there is no further binding

-->->

<xs:complexType name="memberBinding"><xs: complexType name = "memberBinding">

<xs:sequence><xs: sequence>

<xs:element name="memberBinding" type="memberBinding" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "memberBinding" type = "memberBinding" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="wireBinding" type="wireBinding" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "wireBinding" type = "wireBinding" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attribute name="sourceMember" type="xs:string" use="required" /><xs: attribute name = "sourceMember" type = "xs: string" use = "required" />

<!-- if a target member is not provided then the component must be a compound component and its members <!-if a target member is not provided then the component must be a compound component and its members

will be bound to the members of the compound component that its parent is bound towill be bound to the members of the compound component that its parent is bound to

If a target member is provided and we are binding a compound component, then the ports on the If a target member is provided and we are binding a compound component, then the ports on the

source compound component must be able to be bound to the ports on the target compound component-->source compound component must be able to be bound to the ports on the target compound component->

<xs:attribute name="targetMember" type="xs:string" use="optional" /><xs: attribute name = "targetMember" type = "xs: string" use = "optional" />

</xs:complexType></ xs: complexType>

<!-- wires are bound to a path in the target compound component. <!-wires are bound to a path in the target compound component.

This path consists of port, wire and component instances-->This path consists of port, wire and component instances->

<xs:complexType name="wireBinding"><xs: complexType name = "wireBinding">

<xs:sequence><xs: sequence>

<xs:element name="path"><xs: element name = "path">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="element" maxOccurs="unbounded"><xs: element name = "element" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:attribute name="name" type="xs:string" /><xs: attribute name = "name" type = "xs: string" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

<xs:attribute name="sourceWire" type="xs:string" /><xs: attribute name = "sourceWire" type = "xs: string" />

</xs:complexType></ xs: complexType>

<!-- import --><!-import->

</xs:schema></ xs: schema>

이하는 네임(name)에 대한 예시적인 구조이다. The following is an example structure for a name.

<?xml version="1.0" encoding="UTF-8" ?><? xml version = "1.0" encoding = "UTF-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmNames" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:sdmNames" elementFormDefault="qualified" version="0.7" id="sdmNames"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmNames" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns = "urn: schemas-microsoft-com: sdmNames" elementFormDefault = "qualified" version = "0.7" id = "sdmNames">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<!-- import creates an alias to another SDM file --><!-import creates an alias to another SDM file->

<xs:complexType name="import"><xs: complexType name = "import">

<xs:attribute name="alias" type="xs:NCName" use="required" /><xs: attribute name = "alias" type = "xs: NCName" use = "required" />

<xs:attribute name="location" type="xs:NCName" use="optional" /><xs: attribute name = "location" type = "xs: NCName" use = "optional" />

<xs:attributeGroup ref="Identity" /><xs: attributeGroup ref = "Identity" />

</xs:complexType></ xs: complexType>

<!-- class and type files are identified by name, version and public key --><!-class and type files are identified by name, version and public key->

<xs:attributeGroup name="Identity"><xs: attributeGroup name = "Identity">

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="version" type="fourPartVersionType" use="required" /><xs: attribute name = "version" type = "fourPartVersionType" use = "required" />

<xs:attribute name="publicKeyToken" type="publicKeyTokenType" use="optional" /><xs: attribute name = "publicKeyToken" type = "publicKeyTokenType" use = "optional" />

</xs:attributeGroup></ xs: attributeGroup>

<xs:attributeGroup name="namespaceIdentity"><xs: attributeGroup name = "namespaceIdentity">

<xs:attributeGroup ref="Identity" /><xs: attributeGroup ref = "Identity" />

<xs:attribute name="signature" type="xs:string" use="optional" /><xs: attribute name = "signature" type = "xs: string" use = "optional" />

<xs:attribute name="publicKey" type="xs:string" use="optional" /><xs: attribute name = "publicKey" type = "xs: string" use = "optional" />

</xs:attributeGroup></ xs: attributeGroup>

<!-- simple version number --><!-simple version number->

<xs:simpleType name="fourPartVersionType"><xs: simpleType name = "fourPartVersionType">

<xs:annotation><xs: annotation>

<xs:documentation>Four part version numbers where the segments are in the range 0-65535 </xs:documentation><xs: documentation> Four part version numbers where the segments are in the range 0-65535 </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:pattern value="(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5]?).(0|[1-5][0-9]0,4|[7-9][0-9]0,3|6[0-4][0-9]0,3|6[6-9][0-9]0,2|65|65[0-4][0-9]0,2|65[6-9][0-9]?|655|655[0-2][0-9]?|655[4-9]|6553[0-5 ]?)" /><xs: pattern value = "(0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0 , 3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0-9] 0,4 | [7-9 ] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0 -9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?) . (0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6 -9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?). (0 | [1-5] [0-9] 0,4 | [7-9] [0-9] 0,3 | 6 [0-4] [0-9] 0,3 | 6 [6-9] [0-9] 0,2 | 65 | 65 [0-4] [0-9] 0,2 | 65 [6-9] [0-9]? | 655 | 655 [0-2] [0-9]? | 655 [4-9] | 6553 [0-5]?) "/>

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

<!-- public key for verifying signed docs --><!-public key for verifying signed docs->

<xs:simpleType name="publicKeyTokenType"><xs: simpleType name = "publicKeyTokenType">

<xs:annotation><xs: annotation>

<xs:documentation>Public Key Token: 16 hex digits in size</xs:documentation><xs: documentation> Public Key Token: 16 hex digits in size </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:pattern value="([0-9]|[a-f]|[A-F])16" /><xs: pattern value = "([0-9] | [a-f] | [A-F]) 16" />

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

</xs:schema></ xs: schema>

이하는 설정(setting)에 대한 예시적인 구조이다. The following is an exemplary structure for the setting.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmSettings" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:sdmSettings" elementFormDefault="qualified" version="0.7" id="sdmSettings"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmSettings" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns = "urn: schemas-microsoft-com: sdmSettings" elementFormDefault = "qualified" version = "0.7" id = "sdmSettings">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<!-- settings schema, values and constraints --><!-settings schema, values and constraints->

<xs:complexType name="openSchema"><xs: complexType name = "openSchema">

<xs:sequence><xs: sequence>

<xs:any namespace="##other" processContents="lax" /><xs: any namespace = "## other" processContents = "lax" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="settingSchema"><xs: complexType name = "settingSchema">

<xs:sequence><xs: sequence>

<xs:any namespace="http://www.w3.org/2001/XMLSchema" processContents="skip" minOccurs="0" maxOccurs="unbounded" /><xs: any namespace = "http://www.w3.org/2001/XMLSchema" processContents = "skip" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="settingValues"><xs: complexType name = "settingValues">

<xs:sequence><xs: sequence>

<xs:any namespace="##other" processContents="lax" /><xs: any namespace = "## other" processContents = "lax" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- constraints --><!-constraints->

<xs:attributeGroup name="testAttributes"><xs: attributeGroup name = "testAttributes">

<xs:attribute name="path" type="xs:string" /><xs: attribute name = "path" type = "xs: string" />

<xs:attribute name="ifNullPath" type="ifNullPath" /><xs: attribute name = "ifNullPath" type = "ifNullPath" />

<xs:attribute name="error" type="xs:int" /><xs: attribute name = "error" type = "xs: int" />

<xs:attribute name="errorDesc" type="xs:string" /><xs: attribute name = "errorDesc" type = "xs: string" />

</xs:attributeGroup></ xs: attributeGroup>

<xs:complexType name="simpleTest"><xs: complexType name = "simpleTest">

<xs:attributeGroup ref="testAttributes" /><xs: attributeGroup ref = "testAttributes" />

</xs:complexType></ xs: complexType>

<xs:complexType name="settingConstraints"><xs: complexType name = "settingConstraints">

<xs:sequence><xs: sequence>

<xs:element name="mustExist" type="simpleTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "mustExist" type = "simpleTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="mustNotExist" type="simpleTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "mustNotExist" type = "simpleTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="ifExists" type="nestedTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "ifExists" type = "nestedTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="ifNotExists" type="nestedTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "ifNotExists" type = "nestedTest" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="nestedTest"><xs: complexType name = "nestedTest">

<xs:sequence><xs: sequence>

<xs:element name="mustExist" type="simpleTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "mustExist" type = "simpleTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="mustNotExist" type="simpleTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "mustNotExist" type = "simpleTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="ifExists" type="nestedTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "ifExists" type = "nestedTest" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="ifNotExists" type="nestedTest" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "ifNotExists" type = "nestedTest" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

<xs:attributeGroup ref="testAttributes" /><xs: attributeGroup ref = "testAttributes" />

</xs:complexType></ xs: complexType>

<xs:complexType name="deploymentSchema"><xs: complexType name = "deploymentSchema">

<xs:sequence><xs: sequence>

<xs:any namespace="##other" processContents="lax" /><xs: any namespace = "## other" processContents = "lax" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="deploymentValues"><xs: complexType name = "deploymentValues">

<xs:sequence><xs: sequence>

<xs:any namespace="##other" processContents="lax" /><xs: any namespace = "## other" processContents = "lax" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ================= Simple Types ========================== --><!-================= Simple Types ==========================- ->

<xs:simpleType name="ifNullPath"><xs: simpleType name = "ifNullPath">

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:enumeration value="skip" /><xs: enumeration value = "skip" />

<xs:enumeration value="override" /><xs: enumeration value = "override" />

<xs:enumeration value="returnError" /><xs: enumeration value = "returnError" />

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

</xs:schema></ xs: schema>

이하는 유형에 대한 예시적인 구조이다.The following is an exemplary structure for the type.

<?xml version="1.0" encoding="utf-8" ?><? xml version = "1.0" encoding = "utf-8"?>

<xs:schema targetNamespace="urn:schemas-microsoft-com:sdmTypes" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:sdmTypes" xmlns:names="urn:schemas-microsoft-com:sdmNames" xmlns:settings="urn:schemas-microsoft-com:sdmSettings" elementFormDefault="qualified" version="0.7" id="sdmTypes"><xs: schema targetNamespace = "urn: schemas-microsoft-com: sdmTypes" xmlns: xs = "http://www.w3.org/2001/XMLSchema" xmlns = "urn: schemas-microsoft-com: sdmTypes" xmlns : names = "urn: schemas-microsoft-com: sdmNames" xmlns: settings = "urn: schemas-microsoft-com: sdmSettings" elementFormDefault = "qualified" version = "0.7" id = "sdmTypes">

<xs:import namespace="http://www.w3.org/2001/XMLSchema" /><xs: import namespace = "http://www.w3.org/2001/XMLSchema" />

<xs:import namespace="urn:schemas-microsoft-com:sdmSettings" schemaLocation="SDM7Settings.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmSettings" schemaLocation = "SDM7Settings.xsd" />

<xs:import namespace="urn:schemas-microsoft-com:sdmNames" schemaLocation="SDM7Names.xsd" /><xs: import namespace = "urn: schemas-microsoft-com: sdmNames" schemaLocation = "SDM7Names.xsd" />

<!-- TODO [BassamT]: Normalize the port class refs, port type refs and port members on wire classs, wire types and wire members --><!-TODO [BassamT]: Normalize the port class refs, port type refs and port members on wire classs, wire types and wire members->

<!-- TODO [BassamT]: Add keys and keyefs for validation --><!-TODO [BassamT]: Add keys and keyefs for validation->

<!-- TODO [BassamT]: Add support for inlined types --><!-TODO [BassamT]: Add support for inlined types->

<!-- TODO [BassamT]: scrub minOccurs and maxOccurs --><!-TODO [BassamT]: scrub minOccurs and maxOccurs->

<!-- TODO [BassamT]: New name for "class", possibly "deployment" --><!-TODO [BassamT]: New name for "class", possibly "deployment"->

<!-- TODO [BassamT]: New name for "host", possibly "provider" --><!-TODO [BassamT]: New name for "host", possibly "provider"->

<!-- REVIEW [BassamT]: Can we merge the definitions of port, component, wire classs in this XSD. It would make it less verbose at the cost more semantic analysis. --><!-REVIEW [BassamT]: Can we merge the definitions of port, component, wire classs in this XSD. It would make it less verbose at the cost more semantic analysis. ->

<!-- CONSIDER [BassamT]: General attribute mechanism for things like Singleton, Colocation, Inline. --><!-CONSIDER [BassamT]: General attribute mechanism for things like Singleton, Colocation, Inline. ->

<!-- TODO [BassamT]: Bindings: member to component member --><!-TODO [BassamT]: Bindings: member to component member->

<!-- TODO [geoffo]: ports - are they singleton? --><!-TODO [geoffo]: ports-are they singleton? ->

<!-- TODO [geoffo]: delegation - how do we combine ports? --><!-TODO [geoffo]: delegation-how do we combine ports? ->

<!-- TODO [geoffo] Add back <any> in appropriate places --><!-TODO [geoffo] Add back <any> in appropriate places->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- SDM root element --><!-SDM root element->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:element name="sdmTypes"><xs: element name = "sdmTypes">

<xs:annotation><xs: annotation>

<xs:documentation>SDM root element. It is a container for SDM types.</xs:documentation><xs: documentation> SDM root element. It is a container for SDM types. </ Xs: documentation>

</xs:annotation></ xs: annotation>

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="import" type="names:import" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "import" type = "names: import" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="information" type="information" minOccurs="0" /><xs: element name = "information" type = "information" minOccurs = "0" />

<xs:element name="portTypes" minOccurs="0"><xs: element name = "portTypes" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="portType" type="portType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "portType" type = "portType" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<xs:element name="componentTypes" minOccurs="0"><xs: element name = "componentTypes" minOccurs = "0">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="componentType" type="componentType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "componentType" type = "componentType" minOccurs = "0" maxOccurs = "unbounded" />

<xs:element name="compoundComponentType" type="compoundComponentType" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "compoundComponentType" type = "compoundComponentType" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

<xs:attributeGroup ref="names:namespaceIdentity" /><xs: attributeGroup ref = "names: namespaceIdentity" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- SDM type library information --><!-SDM type library information->

<xs:complexType name="information"><xs: complexType name = "information">

<xs:annotation><xs: annotation>

<xs:documentation>Human readable information about the SDM type library.</xs:documentation><xs: documentation> Human readable information about the SDM type library. </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="friendlyName" type="xs:string" minOccurs="0" /><xs: element name = "friendlyName" type = "xs: string" minOccurs = "0" />

<xs:element name="companyName" type="xs:string" minOccurs="0" /><xs: element name = "companyName" type = "xs: string" minOccurs = "0" />

<xs:element name="copyright" type="xs:string" minOccurs="0" /><xs: element name = "copyright" type = "xs: string" minOccurs = "0" />

<xs:element name="trademark" type="xs:string" minOccurs="0" /><xs: element name = "trademark" type = "xs: string" minOccurs = "0" />

<xs:element name="description" type="xs:string" minOccurs="0" /><xs: element name = "description" type = "xs: string" minOccurs = "0" />

<xs:element name="comments" type="xs:string" minOccurs="0" /><xs: element name = "comments" type = "xs: string" minOccurs = "0" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===============================================_u61 ?==================================================================== --><!-============================================== = _u61? =============================================== =====================->

<!-- base complexType for component, port, and wire types --><!-base complexType for component, port, and wire types->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="baseType"><xs: complexType name = "baseType">

<xs:annotation><xs: annotation>

<xs:documentation>base type for Component Type and Port Type.</xs:documentation><xs: documentation> base type for Component Type and Port Type. </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="deployment" type="settings:deploymentValues" minOccurs="0" /><xs: element name = "deployment" type = "settings: deploymentValues" minOccurs = "0" />

<xs:element name="settings" type="settings:settingValues" minOccurs="0" /><xs: element name = "settings" type = "settings: settingValues" minOccurs = "0" />

<xs:element name="settingSchema" type="settings:settingSchema" minOccurs="0" /><xs: element name = "settingSchema" type = "settings: settingSchema" minOccurs = "0" />

<xs:element name="hostConstraints" type="hostConstraints" minOccurs="0" /><xs: element name = "hostConstraints" type = "hostConstraints" minOccurs = "0" />

<xs:element name="hostedClasses" type="hostedClassesList" minOccurs="0" /><xs: element name = "hostedClasses" type = "hostedClassesList" minOccurs = "0" />

<!-- deployment section contains the deployment instructions for the type. The<!-deployment section contains the deployment instructions for the type. The

schema for this deployment is specified on the "unit". -->schema for this deployment is specified on the "unit". ->

<!-- The settings for this component. These are in terms of the schema<!-The settings for this component. These are in terms of the schema

that is specified on the unit. -->that is specified on the unit. ->

<!-- Setting Schema. New setting schema that can be exposed by the type.<!-Setting Schema. New setting schema that can be exposed by the type.

The values for this schema are set on members of this type. NoteThe values for this schema are set on members of this type. Note

also that we will support flowing setting values to the settingsalso that we will support flowing setting values to the settings

on the unit. -->on the unit. ->

<!-- This section contains any constraints on the settings of the host that<!-This section contains any constraints on the settings of the host that

is hosting this unit. Note that there can be more than one host for is hosting this unit. Note that there can be more than one host for

each unit and we can supply constraints on each. -->each unit and we can supply constraints on each. ->

<!-- This section contains the list of hosted units and any constraints on the classs' settings.<!-This section contains the list of hosted units and any constraints on the classs' settings.

The constraints are specified in terms of the class's schema. Note that there can be The constraints are specified in terms of the class's schema. Note that there can be

more than one class that is hosted here. -->more than one class that is hosted here. ->

</xs:sequence></ xs: sequence>

<xs:attribute name="class" type="xs:string" use="required" /><xs: attribute name = "class" type = "xs: string" use = "required" />

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- Constraints --><!-Constraints->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="hostConstraints"><xs: complexType name = "hostConstraints">

<xs:annotation><xs: annotation>

<xs:documentation>Host constraints are constrains against the classes that can host this component or port type.</xs:documentation><xs: documentation> Host constraints are constrains against the classes that can host this component or port type. </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="hostConstraint"><xs: element name = "hostConstraint">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="constraints" type="settings:settingConstraints" /><xs: element name = "constraints" type = "settings: settingConstraints" />

</xs:sequence></ xs: sequence>

<xs:attribute name="host" type="xs:string" use="required" /><xs: attribute name = "host" type = "xs: string" use = "required" />

<!-- the name of the component unit that is the host. <!-the name of the component unit that is the host.

May include an alias, for example, "otherSDM:myPortType" -->May include an alias, for example, "otherSDM: myPortType"->

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="hostedClassesList"><xs: complexType name = "hostedClassesList">

<xs:annotation><xs: annotation>

<xs:documentation>These are constraint against the classes that this type can host</xs:documentation><xs: documentation> These are constraint against the classes that this type can host </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="hostedClass" maxOccurs="unbounded"><xs: element name = "hostedClass" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="constraints" type="settings:settingConstraints" /><xs: element name = "constraints" type = "settings: settingConstraints" />

</xs:sequence></ xs: sequence>

<xs:attribute name="class" type="xs:string" use="required" /><xs: attribute name = "class" type = "xs: string" use = "required" />

<!-- the name of the component class that we are hosting. <!-the name of the component class that we are hosting.

May include an alias, for example, "otherSDM:myPortType" -->May include an alias, for example, "otherSDM: myPortType"->

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- Ports --><!-Ports->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="portType"><xs: complexType name = "portType">

<xs:complexContent><xs: complexContent>

<xs:extension base="baseType"><xs: extension base = "baseType">

<xs:sequence><xs: sequence>

<xs:element name="portConstraints" type="portConstraints" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "portConstraints" type = "portConstraints" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="portConstraints"><xs: complexType name = "portConstraints">

<xs:annotation><xs: annotation>

<xs:documentation>These are constraint against the classes that this type can host</xs:documentation><xs: documentation> These are constraint against the classes that this type can host </ xs: documentation>

</xs:annotation></ xs: annotation>

<xs:sequence><xs: sequence>

<xs:element name="portConstraint"><xs: element name = "portConstraint">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="constraints" type="settings:settingConstraints" /><xs: element name = "constraints" type = "settings: settingConstraints" />

</xs:sequence></ xs: sequence>

<xs:attribute name="portClass" type="xs:string" use="required" /><xs: attribute name = "portClass" type = "xs: string" use = "required" />

<xs:attribute name="portType" type="xs:string" use="optional" /><xs: attribute name = "portType" type = "xs: string" use = "optional" />

<xs:attribute name="minOccurs" type="xs:int" use="optional" /><xs: attribute name = "minOccurs" type = "xs: int" use = "optional" />

<xs:attribute name="maxOccurs" type="xs:int" use="optional" /><xs: attribute name = "maxOccurs" type = "xs: int" use = "optional" />

<xs:attribute name="visible" type="xs:boolean" use="optional" /><xs: attribute name = "visible" type = "xs: boolean" use = "optional" />

<!-- port type is here to allow you to bind to a port type that has behavior not exposed <!-port type is here to allow you to bind to a port type that has behavior not exposed

through settings. In this case settings would not be enough to allow an appropriate port to be identified -->through settings. In this case settings would not be enough to allow an appropriate port to be identified->

<!-- visible identifies whether the application wants to see ports that match this constraint. An application may<!-visible identifies whether the application wants to see ports that match this constraint. An application may

only choose to constrain port that it is connected to without wanting connection values for their endpoints -->only choose to constrain port that it is connected to without wanting connection values for their endpoints->

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- we probable need a mechanism here to allow a <!-we probable need a mechanism here to allow a

port to identify sets of optional port endpoints. port to identify sets of optional port endpoints.

i.e. I can bind to X,Y or Z but I must bind to at least one-->i.e. I can bind to X, Y or Z but I must bind to at least one->

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- Components --><!-Components->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="componentType"><xs: complexType name = "componentType">

<xs:complexContent><xs: complexContent>

<xs:extension base="baseType"><xs: extension base = "baseType">

<xs:sequence><xs: sequence>

<xs:element name="ports" type="portsList" minOccurs="0" /><xs: element name = "ports" type = "portsList" minOccurs = "0" />

</xs:sequence></ xs: sequence>

<!-- the exclusive attribute indicates whether an instance of the type at the layer below can host instance of other types <!-the exclusive attribute indicates whether an instance of the type at the layer below can host instance of other types

- shallow implies that the only instances hosted by the instance are instance of this type-shallow implies that the only instances hosted by the instance are instance of this type

- deep implies that the host must also be marked as exclusive -->-deep implies that the host must also be marked as exclusive->

<xs:attribute name="exclusive" type="depth" use="optional" default="notSet" /><xs: attribute name = "exclusive" type = "depth" use = "optional" default = "notSet" />

</xs:extension></ xs: extension>

</xs:complexContent></ xs: complexContent>

</xs:complexType></ xs: complexType>

<xs:complexType name="portsList"><xs: complexType name = "portsList">

<xs:sequence><xs: sequence>

<xs:element name="port" minOccurs="0" maxOccurs="unbounded"><xs: element name = "port" minOccurs = "0" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="settings" type="settings:settingValues" minOccurs="0" /><xs: element name = "settings" type = "settings: settingValues" minOccurs = "0" />

<!-- member setting values. These are in terms of the setting schema<!-member setting values. These are in terms of the setting schema

specified on the type -->specified on the type->

</xs:sequence></ xs: sequence>

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="type" type="xs:string" /><xs: attribute name = "type" type = "xs: string" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- Compound Component Types. --><!-Compound Component Types. ->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<xs:complexType name="compoundComponentType"><xs: complexType name = "compoundComponentType">

<xs:sequence><xs: sequence>

<xs:element name="components" type="components" minOccurs="0" /><xs: element name = "components" type = "components" minOccurs = "0" />

<xs:element name="wires" type="wires" minOccurs="0" /><xs: element name = "wires" type = "wires" minOccurs = "0" />

<xs:element name="delegatePorts" type="delegatePorts" minOccurs="0" /><xs: element name = "delegatePorts" type = "delegatePorts" minOccurs = "0" />

<xs:element name="delegateHostedClasses" type="delegateHostedClasses" minOccurs="0" /><xs: element name = "delegateHostedClasses" type = "delegateHostedClasses" minOccurs = "0" />

<!-- delegate ports --><!-delegate ports->

<!-- delegate hosts. These allow a compound component to act as a host just as a simple<!-delegate hosts. These allow a compound component to act as a host just as a simple

component. -->component. ->

</xs:sequence></ xs: sequence>

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<!-- shallow co-location implies that instances of the members of this compound component will be placed on the<!-shallow co-location implies that instances of the members of this compound component will be placed on the

same host instance at the layer below - deep co-location implies that that host is also colocated-->same host instance at the layer below-deep co-location implies that that host is also colocated->

<xs:attribute name="colocate" type="depth" use="optional" default="notSet" /><xs: attribute name = "colocate" type = "depth" use = "optional" default = "notSet" />

<!-- the open attribute indicates whether bindings can see the internalstructure of the compound component <!-the open attribute indicates whether bindings can see the internalstructure of the compound component

or simply bind to the compound component as though it was a simple component -->or simply bind to the compound component as though it was a simple component->

<xs:attribute name="open" type="xs:boolean" use="optional" default="false" /><xs: attribute name = "open" type = "xs: boolean" use = "optional" default = "false" />

<!-- the exclusive attribute indicates whether an instance of the type at the layer below can host instance of other types <!-the exclusive attribute indicates whether an instance of the type at the layer below can host instance of other types

- shallow implies that the only instances hosted by the instance are instance of this type-shallow implies that the only instances hosted by the instance are instance of this type

- deep implies that the host must also be marked as exclusive -->-deep implies that the host must also be marked as exclusive->

<xs:attribute name="exclusive" type="depth" use="optional" default="notSet" /><xs: attribute name = "exclusive" type = "depth" use = "optional" default = "notSet" />

</xs:complexType></ xs: complexType>

<xs:complexType name="components"><xs: complexType name = "components">

<xs:sequence><xs: sequence>

<xs:element name="component" minOccurs="0" maxOccurs="unbounded"><xs: element name = "component" minOccurs = "0" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="settings" type="settings:settingValues" minOccurs="0" /><xs: element name = "settings" type = "settings: settingValues" minOccurs = "0" />

<!-- member setting values. These are in terms of the setting schema<!-member setting values. These are in terms of the setting schema

specified on the type -->specified on the type->

</xs:sequence></ xs: sequence>

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="type" type="xs:string" use="required" /><xs: attribute name = "type" type = "xs: string" use = "required" />

<xs:attribute name="singleton" type="xs:boolean" use="optional" default="false" /><xs: attribute name = "singleton" type = "xs: boolean" use = "optional" default = "false" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="wires"><xs: complexType name = "wires">

<xs:sequence><xs: sequence>

<xs:element name="wire" minOccurs="0" maxOccurs="unbounded"><xs: element name = "wire" minOccurs = "0" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="members"><xs: element name = "members">

<xs:complexType><xs: complexType>

<xs:sequence><xs: sequence>

<xs:element name="member" type="componentPortRef" minOccurs="0" maxOccurs="unbounded" /><xs: element name = "member" type = "componentPortRef" minOccurs = "0" maxOccurs = "unbounded" />

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

<!-- member setting values. These are in terms of the setting schema<!-member setting values. These are in terms of the setting schema

specified on the type -->specified on the type->

</xs:sequence></ xs: sequence>

<xs:attribute name="name" type="xs:string" use="required" /><xs: attribute name = "name" type = "xs: string" use = "required" />

<xs:attribute name="protocol" type="xs:string" /><xs: attribute name = "protocol" type = "xs: string" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="delegatePorts"><xs: complexType name = "delegatePorts">

<xs:sequence><xs: sequence>

<xs:element name="delegatePort" minOccurs="0" maxOccurs="unbounded"><xs: element name = "delegatePort" minOccurs = "0" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:attribute name="name" type="xs:string" /><xs: attribute name = "name" type = "xs: string" />

<xs:attribute name="componentName" type="xs:string" /><xs: attribute name = "componentName" type = "xs: string" />

<xs:attribute name="portName" type="xs:string" use="optional" /><xs: attribute name = "portName" type = "xs: string" use = "optional" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<xs:complexType name="componentPortRef"><xs: complexType name = "componentPortRef">

<xs:attribute name="componentName" type="xs:string" /><xs: attribute name = "componentName" type = "xs: string" />

<xs:attribute name="portName" type="xs:string" use="required" /><xs: attribute name = "portName" type = "xs: string" use = "required" />

</xs:complexType></ xs: complexType>

<xs:complexType name="delegateHostedClasses"><xs: complexType name = "delegateHostedClasses">

<xs:sequence><xs: sequence>

<xs:element name="hostedClassRef" maxOccurs="unbounded"><xs: element name = "hostedClassRef" maxOccurs = "unbounded">

<xs:complexType><xs: complexType>

<xs:attribute name="componentName" type="xs:string" /><xs: attribute name = "componentName" type = "xs: string" />

<xs:attribute name="hostedClass" type="xs:string" use="required" /><xs: attribute name = "hostedClass" type = "xs: string" use = "required" />

</xs:complexType></ xs: complexType>

</xs:element></ xs: element>

</xs:sequence></ xs: sequence>

</xs:complexType></ xs: complexType>

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- SimpleTypes. --><!-SimpleTypes. ->

<!-- ===================================================================================================================== --><!-============================================== ================================================== =====================->

<!-- depth identifies whether the settings applies to only the next layer (shallow), or must apply to the next layer and be set on the next layer (deep) --><!-depth identifies whether the settings applies to only the next layer (shallow), or must apply to the next layer and be set on the next layer (deep)->

<xs:simpleType name="depth"><xs: simpleType name = "depth">

<xs:restriction base="xs:string"><xs: restriction base = "xs: string">

<xs:enumeration value="notSet" /><xs: enumeration value = "notSet" />

<xs:enumeration value="shallow" /><xs: enumeration value = "shallow" />

<xs:enumeration value="deep" /><xs: enumeration value = "deep" />

</xs:restriction></ xs: restriction>

</xs:simpleType></ xs: simpleType>

</xs:schema></ xs: schema>

SDM 런타임(SDM Runtime)SDM Runtime

SDR 런타임(또는 단순히 런타임)은 SDM의 구현을 호스팅한다. 이는 SDM 유형(type), 멤버(member) 및 인스턴스 스페이스(instance space)를 조작하기 위한 세트 API들을 공개하는 고가용성 분배 서비스(highly available distributed service)이다. 런타임은 일관된 방식으로 모든 SDM 인스턴스를 추적할 책임이 있다. 이는 배포(deployment), 버져닝(versioning), 보안, 및 복구를 위한 기계 장치를 제공한다. 도 27은 SDM 런타임의 논리적인 아키텍처를 나타낸다.The SDR runtime (or simply runtime) hosts the implementation of the SDM. It is a highly available distributed service that exposes set APIs for manipulating SDM types, members, and instance space. The runtime is responsible for keeping track of all SDM instances in a consistent manner. It provides a mechanism for deployment, versioning, security, and recovery. 27 shows the logical architecture of the SDM runtime.

SDM 런타임은 다음과 같이 구성된다.The SDM runtime consists of the following:

* SDM 런타임(Runtime) - 이는 SDM Runtime 구현(implementation)이다. 이는 하나 이상의 물리적인 기계를 실행하는 분배 구현(distributed implementation)이다. 런타임은 SDM 및 인스턴스를 조작하는 호출의 세트인 SDM API를 통하여 기능을 나타낸다. SDM Runtime-This is the SDM Runtime implementation. This is a distributed implementation that implements one or more physical machines. The runtime exposes functionality through the SDM API, which is a set of calls to manipulate SDM and instances.

* SDM 스토어(Store) - 이는 SDM 모델들(Models) 및 인스턴스를 위한 영구적인 스토어이다. 이 스토어는 고가용성이며, 그 일관성이 중요하다. 이 스토어는 치명적인 이벤트에도 견뎌 낸다. SDM Store-This is a permanent store for SDM Models and instances. This store is highly available, and consistency is important. The store survives catastrophic events.

* Service 배포 유닛(Deployment Unit) - 이는 SDU들을 위한 읽기 전용 스토어이다. SDM 스토어와 마찬가지로, 이는 고가용성이고, 치명적인 이벤트에도 견뎌 낸다. Service Deployment Unit-This is a read-only store for SDUs. Like the SDM store, it is high availability and withstands fatal events.

* 컴포넌트 구현 호스트(Component implementation Host) - 이는 SDM 컴포넌트로부터 참조된 CLR 코드를 호스팅하기 위한 프레임워크(framework)이다. Component implementation host-This is a framework for hosting CLR code referenced from SDM components.

SDM 런타임은 전형적으로 다음과 같은 클라이언트 클래스에 의하여 사용된다.The SDM runtime is typically used by the following client classes.

* 컴포넌트 인스턴스(Component Instances) - 이들은 SDM 런타임 라이브러리(RTL, Runtime Library)를 사용하기 위한 런타임과 통신하는 컴포넌트 인스턴트이다. 우리는 2가지 유형의 컴포넌트 인스턴트를 구분하는데, 그것은 런타임-호스팅된(runtime-hosted) 컴포넌트 인스턴스 및 런타임-호스팅되지 않은 컴포넌트 인스턴스이다. Component Instances-These are the component instants that communicate with the runtime to use the SDM Runtime Library (RTL). We distinguish between two types of component instants, runtime-hosted component instances and non-run-time component instances.

* 개발 및 배포 도구(Development and Deployment tools) - 이들은 SDM 컴파일러, SDU 설치 도구 및 기타 전개 도구를 포함한다.Development and Deployment tools-These include the SDM compiler, SDU installation tools, and other deployment tools.

* 관리 도구(Management tools) - 이들은 런타임 자체를 등록하고 관리하기 위하여 사용되는 특별 허가된 도구(privileged tools)이다.Management tools-These are privileged tools used to register and manage the runtime itself.

클라이언트는 SDM 런타임 라이브러리(RTL)를 통하여 런타임과 통신한다. 이들은 전형적으로 다음과 같은 동작을 수행한다.The client communicates with the runtime through the SDM runtime library (RTL). They typically perform the following operations.

* SDU들의 설치/설치제거: 이는 새로운 SDU들을 SDM 런타임의 실행중인 인스턴트에 추가 및 제거하는 프로세스이다.Install / Uninstall SDUs: This is the process of adding and removing new SDUs to the running instant of the SDM runtime.

* SDM 유형 및 인스턴스의 추가, 제거 및 수정: 클라이언트는 새로운 컴포넌트, 포트 및 와이어 유형을 생성할 수 있다.Add, remove, and modify SDM types and instances: Clients can create new components, ports, and wire types.

* 인스턴스의 생성 및 삭제: 클라이언트는 새로운 컴포넌트, 포트 및 와이어 인스턴스를 생성할 수 있다.Creating and Deleting Instances: Clients can create new component, port, and wire instances.

* 이벤트의 소싱(Sourcing) 및 하강(sinking): 유형 및/또는 인스턴스 스페 이스에 변경이 행해진 경우, 런타임은 영향을 받는 클라이언트에게 이벤트를 전송한다. 이벤트는 포트 바인딩 정보(port binding information)를 설정하는 것과 같이 특정 동작에 의해 트리거될 수 있다.Sourcing and Sinking Events: If a change is made to the type and / or instance space, the runtime sends the event to the affected client. The event may be triggered by a specific operation, such as setting port binding information.

* 유형 및 인스턴스 스페이스를 질의한다(query): 클라이언트는 유형 및 인스턴스 스페이스를 반영할 수 있다.Query the type and instance space: The client can reflect the type and instance space.

서비스 정의 모델 런타임 아키텍처(Service Definition Model Runtime Architecture)Service Definition Model Runtime Architecture

도입Introduction

이 부분에서는 서비스 정의 모델(SDM) 및 SDM 런타임에 대해서 검토한다. 런타임 아키텍처, 핵심 특성 및 구현에 대한 기술적인 논의가 제공된다. 의도된 청중은, BIG의 기술 평가자, 서비스 및 컴포넌트를 만들어 내고자 하는 개발자, 또는 시스템의 세부 사항에 대하여 관심이 있는 사람들이다.This section reviews the Service Definition Model (SDM) and the SDM Runtime. A technical discussion of the runtime architecture, key characteristics, and implementation is provided. The intended audience is the technical evaluators of BIG, the developers who want to create services and components, or those who are interested in the details of the system.

서비스 시기(Service Era)Service Era

최근 10년에 걸쳐서 우리는 인터넷이 컴퓨팅 플랫폼으로서 등장한 것을 보아 왔다. 점점 더 많은 소프트웨어회사가 "서비스 모델로서의 소프트웨어"를 채택하고 있다. 서비스는 전형적으로 서버, 네트워킹 기어 및 기타 특정 하드웨어를 포함하는 수많은 기계에서 실행되는 여러 개의 컴포넌트를 포함한다. 느슨하게 연결된(loosely coupled), 비동기식 프로그래밍 모델이 기준(norm)이 되고 있다. 이러한 서비스의 성공을 위해서는 확장성(scalability), 가용성(availability) 및 신뢰 성(reliability)이 중요하다.Over the last decade we have seen the Internet emerge as a computing platform. More and more software companies are adopting "software as a service model." Services typically include several components that run on a number of machines, including servers, networking gear, and other specific hardware. Loosely coupled, asynchronous programming models are the norm. Scalability, availability and reliability are critical to the success of these services.

우리는 하드웨어 경향에서의 변화도 보아 왔다. 고밀도 서버 및 특수화된 네트워크 하드웨어는 데이터 센터에서 널리 보급되었다. 스위칭 구조(switched fabrics)가 시스템 구성에서 큰 유연성을 제공하는 시스템 버스를 대체하고 있다. 하드웨어 비용은 소유권 메트릭(Ownership metric)의 총 비용의 작은 부분을 차지한다. 이는 전용 작동 요원을 보유하기 위한 비용으로 대체되었다. 바위와 같이 견고한 동작 실행은 드물지만, 어느 서비스에 있어서나 절대적으로 중요하다. 이러한 실행은 주로 사람에 의하여 구현된다.We have also seen changes in hardware trends. High density servers and specialized network hardware have become widespread in data centers. Switched fabrics are replacing system buses that provide greater flexibility in system configuration. Hardware costs make up a small portion of the total cost of ownership metric. This has been replaced by the cost of having a dedicated operator. While rock-solid motion execution is rare, it is absolutely critical for any service. This practice is mainly implemented by humans.

효과적으로는, 개발의 초점을 단일 PC로부터 PC들의 네트워크로 바꾸는 것이다. 그러나, 이러한 모든 변화에 있어서, 서비스 개발자, 소프트웨어 공급자, 하드웨어 공급자, 및 최종 사용자(end-user)를 위한 과다한 새로운 문제점이 발생하였다. Effectively, the focus of development is to shift from a single PC to a network of PCs. However, in all these changes, there are a lot of new problems for service developers, software providers, hardware providers, and end-users.

* 서비스가 방대하고 복잡하다 - 이들은 개발하는데 시간이 많이 걸리고, 유지하기 힘들고 고가이며, 추가적인 기능을 확장하는데 위험이 있다.Services are massive and complex-they are time-consuming to develop, difficult to maintain and expensive, and risk extending additional functionality.

* 서비스가 획일적이다(monolithic) - 이들은 맞춤식(custom) 컴포넌트 및 구성에 의존한다. 서비스의 일부가 독립적으로 제거 또는 업그레이드되거나, 다른 것으로 대체될 수 없다.* Services are monolithic-they depend on custom components and configurations. Some of the Services may not be independently removed or upgraded or replaced by others.

* 서비스가 특정 하드웨어 구성에 의존한다 - 특정 네트워크 토폴로지 또는 특정 네트워크 설비 기계의 의존성 여부이다. 이는 다른 환경의 서버를 호스팅하는 능력을 상당히 감소시킨다.* The service depends on a specific hardware configuration-whether it depends on a particular network topology or on a particular network equipment machine. This significantly reduces the ability to host servers in other environments.

* 서비스가 사일로(silos)에서 개발된다 - 공통적인 플랫폼이 없기 때문에, 코드 공유 또는 최적의 동작 실행조차 위협적인 작업이다.* Services are developed in silos-since there is no common platform, even code sharing or even optimal behavior execution is a daunting task.

* 동작의 악몽 - 대부분의 서비스는 기능시키기 위한 작동 직원을 요구한다. 이 작동 직원은 각 서비스의 세부 내용에 대하여 훈련되어야 하며, 서비스가 발달함에 따라 다시 훈련되어야 한다.Nightmares of operation-Most services require an operating staff to function. This operator must be trained in the details of each service and must be retrained as the service develops.

이러한 문제의 일부는 DOS 시절(1980년대 경) 동안의 문제점과 같지는 않다. DOS는 디스크 관리, 파일 시스템, 콘솔 시설 등과 같은 애플리케이션 개발자를 위한 유용한 핵심 서비스를 정의하였다. 그러나, 이는 ISV들까지 수많은 복잡한 작업을 남겨 놓았다. 예를 들어, WordPerfect 및 Lotus 123은 모두 그 각각의 애플리케이션 내에 인쇄를 지원하기 위한 기록 프린터 드라이버를 독립적으로 구비하고 있었다. 이와 유사하게 프린터 하드웨어 공급자는 성공적인 제품을 생산하기 위해서는 소프트웨어 회사와 거래하여야 했다. 하드웨어 공급자 및 DOS 애플리케이션을 기록하기 위한 입구로의 장벽은 유난히 컸다. 이 때문에 단지 몇 개만의 성공적인 소프트웨어 회사가 생겨났다. Some of these problems are not the same as those during the DOS era (around 1980s). DOS has defined useful core services for application developers such as disk management, file systems, console facilities, and so on. However, this has left a lot of complicated work up to ISVs. For example, WordPerfect and Lotus 123 both had independent recording printer drivers to support printing in their respective applications. Similarly, printer hardware suppliers had to deal with software companies to produce a successful product. The barrier to entry for writing hardware providers and DOS applications was exceptionally large. This created only a few successful software companies.

윈도우는 입구로의 장벽을 획기적으로 감소시킨 플랫폼을 정의함으로써 이 문제점을 다루었다. 윈도우는 PC 플랫폼 상의 대부분의 하드웨어를 위한 추상화 계층(abstraction layer)을 정의하였다. 이는 개발자로 하여금 특정 하드웨어 장치를 지원하도록 하기 위한 걱정을 덜어주었다. 윈도우는 메모리, 디스크 및 네트워크를 포함하는 PC 내의 모든 자원을 관리하였다. 또한, 윈도우 애플리케이션 개발자에 의하여 사용될 수 있는 풍부한 서비스를 갖추고 있었다. 이 플랫폼은 산업 상의 엄청난 발전을 야기하였다. 윈도우 플랫폼을 타깃으로 삼은 소프트웨어 공급자는 엄청나게 이익을 냈다. 많은 새로운 하드웨어 공급자는 윈도우의 일반화(commoditization)로 인해 더 값싼 하드웨어를 제공하였다. Windows addresses this problem by defining a platform that dramatically reduces the barriers to entry. Windows has defined an abstraction layer for most hardware on the PC platform. This relieved the developer of having to support specific hardware devices. Windows managed all the resources in the PC, including memory, disks, and networks. It also had a rich set of services that could be used by Windows application developers. This platform has caused tremendous developments in industry. Software providers targeting the Windows platform have made huge profits. Many new hardware providers have provided cheaper hardware due to Windows' commoditization.

서비스 시대는 아직도 이러한 성장을 경험하여야 한다. 데스크탑 기계에서 일어난 혁명은 서비스에서도 발생할 필요가 있다.The service age should still experience this growth. The revolution that took place on desktop machines also needs to happen in services.

BIG 서비스 플랫폼(BIG services Platform)BIG services Platform

BIG은 고가용성이고, 스케일 가능한(scalable) 서비스를 위한 플랫폼을 생산하고 있다. 이 플랫폼은 이하를 가능하게 한다.BIG produces a platform for high availability and scalable services. This platform enables:

* Visual Studio 및 SQL, IIS 등의 재사용 가능한 빌딩 블록을 사용한 분배된, 스칼러블하고 고가용성 서비스의 개발* Develop distributed, scalable, high availability services using reusable building blocks such as Visual Studio and SQL and IIS

* 자동적으로 할당되고, 의도되고, 구성되는 추상화된 하드웨어 및 소프트웨어 자원의 세트에 걸친 개발Development across a set of abstracted hardware and software resources that are automatically assigned, intended, and configured

* 동작의 최적의 실행의 자동화를 통한 소유 비용의 저감.Reduction of cost of ownership through automation of optimal execution of operations.

* 상품 경제에 영향을 주는 표준화된 데이터 센터 하드웨어의 획득* Acquisition of standardized data center hardware that affects the commodity economy

BIG 플랫폼은 윈도우 플랫폼으로의 확장이고, .NET, SQL, 및 기타 마이크로소프트 자산과 같은 현존하는 기술 위에 구축된다. BIG 서비스 플랫폼은 이하를 포함하는 많은 부분으로 이루어져 있다.The BIG platform is an extension to the Windows platform and builds on existing technologies such as .NET, SQL, and other Microsoft assets. The BIG Service Platform consists of many parts, including:

* 우리가 BIG 컴퓨터라고 부르는 하나의 대형 컴퓨터를 만들기 위한 상품 하드웨어를 모아 놓은 하드웨어 기준 플랫폼. 이는 수많은 상호 접속된 서버, 네트워크 장치, 및 기억장치를 포함한다.* A hardware reference platform that collects commodity hardware for building one large computer we call a BIG computer. This includes numerous interconnected servers, network devices, and storage devices.

* 자원이 보이게 하는 하드웨어 추상화 계층(hardware abstraction layer). 동적 하드웨어 제조, 재배포, 및 자동화 네트워크 구성을 가능하게 한다.Hardware abstraction layer that makes the resource visible. It enables dynamic hardware manufacturing, redistribution, and automated network configuration.

* 개발자가 전체 서비스를 설명하는 서비스 정의 모델(SDM). 개발자로 하여금, 고가용성 SQL, IIS, 및 기타 재사용 가능한 빌딩 블록 컴포넌트를 사용하여 새로운 서비스를 신속하게 구축할 수 있게 한다.A service definition model (SDM) in which the developer describes the entire service. It allows developers to quickly build new services using high availability SQL, IIS, and other reusable building block components.

* SDM을 지원하는 고가용성 런타임. BIG 컴퓨터 내의 다중 스케일 가능한 서비스의 호스팅을 가능하게 한다.* High availability runtime with SDM support. Enable hosting of multiple scalable services in BIG computers.

* 최적의 동작 실행을 자동화하기 위한 동작 논리 체제(operations logic framework). 폴리시 표현 및 시행을 가능하게 한다. Operations logic framework for automating optimal operation execution. Enable policy representation and enforcement.

이 문서는 SDM 및 SDM 런타임에만 초점을 맞추어 설명한다.This document focuses only on the SDM and SDM runtimes.

서비스 정의 모드(Service Definition Mode)Service Definition Mode

이 섹션에서는 서비스 정의 모델(SDM)에 대하여 설명한다. SDM 및 SDML 언어에 대한 완벽한 기술적인 설명을 위해서는 "서비스 정의 모델 언어(Service Definition Model Language)" 문서를 참조하기 바란다. This section describes the Service Definition Model (SDM). For a complete technical description of the SDM and SDML languages, please refer to the "Service Definition Model Language" document.

SDM은 모든 서비스가 구축되는 기초이다. SDM is the foundation on which all services are built.

* SDM은, 더 작은 유닛으로부터 서비스의 합성을 가능하게 한다. 이러한 유닛은 하드웨어 및 소프트웨어 추상화(abstraction)의 기초를 형성한다. SDM enables the synthesis of services from smaller units. These units form the basis of hardware and software abstraction.

* SDM은, 서비스의 생생한 청사진으로서 제공한다 - SDM은 스케일 불변 방식으로 서비스의 전체 구조를 포착한다.SDM serves as a vivid blueprint for services-SDM captures the entire structure of a service in a scale-invariant way.

* SDM은, 동작적인 실행을 자동화하기 위한 프레임워크를 제공하고, 그들의 재사용을 촉진한다.SDM provides a framework for automating operational execution and promotes their reuse.

* SDM은, 서비스의 배포, 재사용, 발견, 버져닝(versioning), 및 복구를 위한 표준을 정의한다. SDM defines standards for the deployment, reuse, discovery, versioning, and recovery of services.

서비스를 위한 컴포넌트 모델(Component Model for Services)Component Model for Services

본질적으로, SDM은 서비스를 위한 컴포넌트 모델이다. 전통적인 컴포넌트 모델과 마찬가지로 SDM은, 더 복잡한 기능이 구축될 수 있는 근본(primitives)을 정의한다. 유추법을 고려해 보자. 마이크로소프트의 컴포넌트 객체 모델(Component Object Model, COM)은 컴포넌트를 만들기 위한 프로그래밍 모델을 정의하였다. 이는 컴포넌트가 어떻게 패키지되고, 등록되고, 활성화되고, 발견되는지에 관하여 표준화하였다. COM은 수명, 메모리 관리, 및 인터페이스 구현과 관련된 엄격한 규칙을 명령하였다(mandated). 이러한 근본이 상호 운영(interoperability)을 위하여 필수적이었다 - 이는 컴포넌트가 블랙 박스로서 취급될 수 있게 한다. Com은 영구적인 기억장치, 이벤팅(eventing), 자동화 및 OLE와 같은 더 정교한 서비스의 기초였다. In essence, SDM is a component model for services. Like traditional component models, SDM defines primitives on which more complex functions can be built. Consider an analogy. Microsoft's Component Object Model (COM) defines a programming model for building components. It standardized on how components are packaged, registered, activated, and discovered. COM mandated strict rules regarding lifetime, memory management, and interface implementation. This fundamental was essential for interoperability-this allows components to be treated as black boxes. Com was the basis for more sophisticated services such as persistent storage, eventing, automation and OLE.

SDM은 서비스를 위한 컴포넌트 모델을 정의한다. 이 모델은 느슨하게(loosely) 연결된, 분산된, 그리고 비동기식의 서비스를 위해 매우 적절하다. SDM은 배포, 버져닝, 복구, 및 스코핑(scoping)을 위한 표준을 정의한다. SDM은 네트워크 관리, 하드웨어 관리, 기억장치 추상화 등과 같은 더 정교한 서비스가 제공되는 모델이다. SDM을 기타 컴포넌트 모델과 어떻게 비교하겠는가?SDM defines a component model for services. This model is well suited for loosely connected, distributed, and asynchronous services. SDM defines standards for deployment, versioning, recovery, and scoping. SDM is a model that provides more sophisticated services such as network management, hardware management, and storage abstraction. How do you compare SDM to other component models?

확실히 기타 기술들 중에서 DCOM 및 COBRA와 같은 기술은, 재사용 가능한 컴 포넌트에 기초한 애플리케이션을 개발하기 위한 방법을 잘 정의하고 있다. 그러나, 현존하는 컴포넌트 기술도 강력하지만, 그들은 인터넷 또는 느슨하게 연결된 시나리오에 있어서 광범위하게 성공적이지는 못하였다. 이는 주로 다음과 같은 이유 때문이다.Clearly, among other technologies, technologies such as DCOM and COBRA are well defined methods for developing applications based on reusable components. However, while existing component technologies are powerful, they have not been widely successful in the Internet or in loosely coupled scenarios. This is mainly because of the following reasons.

* 현존하는 컴포넌트 기술은 대규모를 위하여 설계된 것이 아니다 - 대부분의 실행은 하나의 기계 또는 아주 적은 수의 기계를 위하여 최적화되었다. 인터넷 애플리케이션은 전형적으로 많은 기계에서 실행하는, 많은 상호 관련된 컴포넌트와 관련되어 있다. * Existing component technology is not designed for large scale-most implementations are optimized for one machine or very few machines. Internet applications are typically associated with many interrelated components, running on many machines.

* 현존하는 컴포넌트 기술은 RPC와 같은 발동 프로토콜(invocation protocols)을 명령한다(mandate) - 이들은 잘 확증된 네트워크 프로토콜을 이용하지도 않거나, 분기하는 프로토콜을 허용하지 않는다.Existing component technologies mandate invocation protocols such as RPC-they either do not use well-proven network protocols or do not allow branching protocols.

* 현존하는 컴포넌트 기술은 애플리케이션의 개념이 결여되어 있다 - 대부분은 잘 개발된 컴포넌트의 정의를 구비하지만, 더 작은 컴포넌트로 구성된 애플리케이션의 전체적인 정의가 결여되어 있다. Existing component technologies lack the concept of an application-most have well-defined component definitions, but lack the overall definition of an application made up of smaller components.

* 현존하는 컴포넌트 기술은 범용 컴퓨터에서 실행하는 소프트웨어로 제한된다 - 하나의 목적을 갖는 네트워크 장치는 컴포넌트로서 관여할 수 없다.Existing component technologies are limited to software running on a general purpose computer-a network device with a single purpose cannot engage as a component.

서비스 세계와 더 중요하게 관련되어 있는 많은 것들을 현존하는 컴포넌트 기술에 적용하여야 한다.Many of the more important aspects of the service world must be applied to existing component technologies.

SDM 원리(SDM Fundamentals)SDM Fundamentals

SDM은 서비스 구조의 선언적인 정의(a declarative definition)이다. 이 정 의는 컴포넌트, 포트 및 와이어와 관련된다. SDM is a declarative definition of a service structure. This definition relates to components, ports, and wires.

* 컴포넌트는 구현, 배포 및 동작 유닛이다. 컴포넌트는 Cisco의 로컬 디렉터(LocalDirector)와 같은 네트워크 설비 또는 공유 기계 상의 IIS 가상 웹 사이트, .NET 서버를 실행하는 전용 서버일 수 있다. 컴포넌트는 포트를 통하여 기능을 공개하고, 와이어를 통하여 통신 경로를 설정한다. 컴포넌트는, 복합 컴포넌트라고 하는 외부 컴포넌트 내에 맞추어질 수 있다(nested). A component is an implementation, distribution, and operation unit. The component may be a dedicated server running a .NET server, an IIS virtual Web site on a network facility or shared machine, such as Cisco's LocalDirector. The component exposes functionality through the port and establishes a communication path through the wire. A component can be nested within an external component called a composite component.

* 포트는 관련 유형을 갖는 이른바 종단점(endpoints)이다. 포트 유형은 종종 프로토콜, 예를 들어 HTTP 서버를 나타낸다. 포트는 통신을 설정하기 위하여 요구되는 정보를 획득한다. * Ports are so-called endpoints with related types. The port type often represents a protocol, for example an HTTP server. The port acquires the information required to establish communication.

* 와이어는 포트간의 허용되는 통신 경로이다. 이들은 포트간의 토폴로지의 관계를 선언한다. * Wire is an acceptable communication path between ports. They declare the relationship of the topology between the ports.

서비스는 선언적인 서비스 정의 모델 언어(SDML)를 사용하여 만들어진다. 다음의 예를 고려해 보자.Services are created using the declarative Service Definition Model Language (SDML). Consider the following example.

(SDML). Lets consider an example:(SDML). Lets consider an example:

using System;using System;

using System.Iis;using System.Iis;

using System.Sql;using System.Sql;

[sdmassembly:name("MyService")];[sdmassembly: name ("MyService")];

[sdmassembly:version(1)];sdmassembly: version (1);

componenttype MyFrontEnd : AspApplicationcomponenttype MyFrontEnd: AspApplication

{ {

port SqlClient catalog;   port SqlClient catalog;

implementation "MyFE, MyClrAssembly";   implementation "MyFE, MyClrAssembly";

} }

componenttype MyBackEnd : SqlDatabasecomponenttype MyBackEnd: SqlDatabase

{ {

implementation "MyBE, MyClrAssembly";   implementation "MyBE, MyClrAssembly";

} }

componenttype MyServicecomponenttype MyService

{ {

component MyFrontEnd fe;   component MyFrontEnd fe;

component MyBackEnd be;   component MyBackEnd be;

port http = fe.http;   port http = fe.http;

wire SqlTds tds   wire SqlTds tds

{   {

fe.catalog;         fe.catalog;

be.sqlServer;         be.sqlServer;

}   }

implementation "MyService, MyClrAssembly";   implementation "MyService, MyClrAssembly";

}}

위를 보면 알 수 있듯이, SDML을 위한 체계(syntax)는 C#로부터 많이 도입한 것이다. SDML은 컴포넌트, 포트 및 와이어 유형을 정의한다. 이 정의를 고려하면 다음과 같다.As you can see, the syntax for SDML comes from C #. SDML defines components, ports, and wire types. Consider this definition as follows.

* 사용하는 지령(the using directive)은 SDM 유형의 네임 스페이스(namespaces)를 참조한다. 이들은, SDM 런타임에 의하여 제공되고 http 와이어 유형과 같은 기본적인 유형을 정의하는 시스템 네임 스페이스를 포함한다. 기타 네임 스페이스는 IIS 및 SQL 서버와 관련된 유형을 정의한다.The using directive refers to namespaces of type SDM. These include the system namespace provided by the SDM runtime and defining basic types such as the http wire type. Other namespaces define the types associated with IIS and SQL Server.

* 어셈블리 이름 및 어셈블리 버전은 SDM 어셈블리를 위한 강력한 이름을 제공한다. 이는 CLR 어셈블리와 아무런 관련이 없다는 것을 유의하여야 한다. SDM 어셈블리는 SDM 배포 중 가장 작은 유닛이다. 이는 컴포넌트, 포트 및 와이어 유형의 집합체로 명명되고, 이를 포함한다. SDM 어셈블리는 CLR 어셈블리와 혼동되어서는 안 된다 - CLR 어셈블리와는 완전히 구별된다.The assembly name and assembly version provide a strong name for the SDM assembly. Note that this has nothing to do with CLR assembly. SDM assembly is the smallest unit of SDM deployment. It is named as a collection of components, ports and wire types and includes them. SDM assemblies should not be confused with CLR assemblies-they are completely separate from CLR assemblies.

* MyFronEnd라고 하는 컴포넌트 유형은, Systme.Iis SDM 어셈블리에서 정의되는 참조 유형(referenced type)인 컴포넌트 유형 AspApplication으로부터 상속받은 것으로 선언된다. 컴포넌트는 추상적 개념이다; 컴포넌트는 클래스라고 하고, 인스턴스라고는 하지 않는다. MyFrontEnd는 컴포넌트를 식별하는데, 이로부터 0개 또는 그 이상의 컴포넌트 인스턴스가 생성될 수 있다.A component type called MyFronEnd is declared as inherited from the component type AspApplication, which is a referenced type defined in the Systme.Iis SDM assembly. Components are abstract concepts; A component is called a class, not an instance. MyFrontEnd identifies a component from which zero or more component instances can be created.

* port SqlClient catalog; 유형 SqlClient의 MyFrontEnd 컴포넌트에서 포트 를 선언한다. 포트를 이른바 "카탈로그(catalog)"라 한다. 이 포트는, MyFrontEnd가 베이스 컴포넌트 유형 AspApplication으로부터 상속받은 포트, 컴포넌트 및 와이어에 추가되는 것이다. port SqlClient catalog; Declare the port in the MyFrontEnd component of type SqlClient. The port is called a "catalog". This port is where MyFrontEnd is added to the ports, components, and wires inherited from the base component type AspApplication.

* implementation 키워드는 컴포넌트 유형에 대한 실행을 참조한다. 이 실행은 CLR 어셈블리 내의 CLR 클래스로의 참조이다. 이는 컴포넌트 유형에 대한 입구점(entry point) 또는 구조자(constructor)로 생각할 수 있다. 컴포넌트 인스턴스가 생성되면, 이 코드가 발동된다(invoked). The implementation keyword refers to the implementation for the component type. This execution is a reference to the CLR class in the CLR assembly. This can be thought of as an entry point or constructor for a component type. When the component instance is created, this code is invoked.

* MyService 컴포넌트 유형은 fe 및 be라고 하는 두 개의 서브 컴포넌트로 정의된다. 이들은 유형 MyFrontEnd 및 MyBackEnd이다. 컴포넌트 MyService의 인스턴스는 컴포넌트 인스턴스의 분류체계(hierarchy)를 형성하는 fe 및 be의 인스턴스를 후속하여 가질 수 있다.The MyService component type is defined by two subcomponents called fe and be. These are the types MyFrontEnd and MyBackEnd. An instance of the component MyService may subsequently have instances of fe and be that form a hierarchy of component instances.

* port http=fe.http; 이는 fe 컴포넌트 상의 http 포트로 위임된 MyService 컴포넌트 유형 상의 포트를 선언한다.port http = fe.http; It declares a port on the MyService component type delegated to the http port on the fe component.

* wire SqlTds는 유형 SqlTds의 MyService 컴포넌트 유형의 와이어를, 이름 tds로 선언한다. 두 개의 포트가 와이어로 부착된다. 이 선언은, MyService의 인스턴스가 0개 또는 그 이상의 와이어 tds의 인스턴스를 가질 수 있고, 이들 와이어 인스턴스 각각은, 그들에 부착된 fe 컴포넌트로부터의 카탈로그 포트 및 be 컴포넌트로부터의 SQL 포트를 구비할 수 있다.wire SqlTds declares a wire of type MyService component of type SqlTds, named tds. Two ports are attached by wires. This declaration allows an instance of MyService to have zero or more instances of wire tds, each of which can have a catalog port from the fe component attached to it and an SQL port from the be component attached to them. .

서비스의 그래픽적인 표시를 고려하는 것이 종종 도움이 된다. 도 28을 참고하라. 박스는 컴포넌트를 나타내고, 다이아몬드는 포트를 나타내며, 선은 와이 어를 나타낸다.It is often helpful to consider a graphical representation of the service. See FIG. 28. The boxes represent components, the diamonds represent ports, and the lines represent wires.

컴포넌트 구현(Component Implementation)Component Implementation

모든 컴포넌트는 CLR 어셈블리 내의 CLR 클래스의 형태의 구현을 참조할 수 있다. CLR 어셈블리는 SDM 런타임에 의하여 호스팅되고, 컴포넌트 인스턴스 생성 시간(instantiation time)에 발동된다. SDM을 실행하는 CLR 클래스는 SDM 런타임 API를 호출함으로써 SDM 동작을 수행할 수 있다. 이는 이 문서의 뒷부분에서 상세하게 설명한다. 다음은 상기의 MyService SDM 컴포넌트 유형의 실행을 위한 C# 코드의 일부이다. All components can refer to an implementation of the form of a CLR class in a CLR assembly. CLR assemblies are hosted by the SDM runtime and are invoked at component instance creation time. The CLR class that executes SDM can perform SDM operations by calling the SDM runtime API. This is described in detail later in this document. The following is a part of C # code to execute the MyService SDM component type.

using System;using System;

using Microsoft.SDM;using Microsoft.SDM;

public class MyService: SDMComponentInstancepublic class MyService: SDMComponentInstance

{{

public override OnCreate(...) public override OnCreate (...)

{{

SDMComponent fe1 = CreateComponentInstance("fe","");SDMComponent fe1 = CreateComponentInstance ("fe", "");

SDMComponent fe2 = CreateComponentInstance("fe","");SDMComponent fe2 = CreateComponentInstance ("fe", "");

SDMComponent be1 = CreateComponentInstance("be","");SDMComponent be1 = CreateComponentInstance ("be", "");

SDMWire tds1 = CreateWire instanceance("tds");SDMWire tds1 = CreateWire instanceance ("tds");

tds1.Members.Add(fe1.Ports["catalog"]);tds1.Members.Add (fe1.Ports ["catalog"]);

tds1.Members.Add(fe2.Ports["catalog"]);tds1.Members.Add (fe2.Ports ["catalog"]);

tds1.Members.Add(be1.Ports["sqlServer"]);tds1.Members.Add (be1.Ports ["sqlServer"]);

}}

}}

이 코드는 SDMComponent로부터 상속받은 C# 클래스 MyService를 정의한다. 클래스는 OnCreate() 방법에 우선하고, fe 컴포넌트의 2개의 인스턴스, be 컴포넌트의 하나의 인스턴스 및 하나의 와이어 인스턴스를 생성한다. 그리고 이는 와이어 인스턴스로 3개의 포트를 추가한다. This code defines the C # class MyService that inherits from SDMComponent. The class overrides the OnCreate () method and creates two instances of the fe component, one instance of the be component, and one wire instance. This adds three ports to the wire instance.

이 CLR 코드는, MyService를 위한 SDM 내에서 참조되는 MyClrAssembly라고 하는 어셈블리로 컴파일된다. 유형 MyService의 컴포넌트가 컴포넌트가 인스턴스 생성(instantiate)되면, 이 코드가 발동되고, OnCreate 방법이 호출된다. This CLR code is compiled into an assembly called MyClrAssembly that is referenced in the SDM for MyService. When a component of type MyService is instantiated with a component, this code is invoked and the OnCreate method is called.

[BassamT] C# 코드의 강력하게 유형화된 버전을 고려해 보자.Consider a strongly typed version of the [BassamT] C # code.

인스턴스(Instances)Instances

SDML은 컴포넌트, 포트 및 와이어 유형을 정의하기 위하여 사용된다; 이는 인스턴스를 정의하지는 않는다. 인스턴스는, 상기 C# 코드에 나타낸 바와 같이 SDM 런타임 API를 사용하여 생성될 수 있다. 상기 C# 코드는 다수의 인스턴스를 생성하였고, 인스턴스 스페이스에 와이어링 토폴로지를 형성하였다. 이러한 인스턴스는 SDM 런타임에 의하여 추적될 것이다. 예를 들어, SDM 런타임은, OnCreate 호출이 상기의 것을 완료한 후 다음의 정보를 저장한다:SDML is used to define components, ports, and wire types; This does not define an instance. An instance can be created using the SDM runtime API as shown in the C # code above. The C # code created multiple instances and formed a wiring topology in the instance space. This instance will be tracked by the SDM runtime. For example, the SDM runtime stores the following information after the OnCreate call completes the above:

component instance ms[1]component instance ms [1]

port instance http[1]port instance http [1]

component instance fe[1]component instance fe [1]

component instance fe[2]component instance fe [2]

component instance be[1]component instance be [1]

wire instance tds[1]wire instance tds [1]

fe[1].catalogfe [1] .catalog

fe[2].catalogfe [2] .catalog

be[1].SqlServer;be [1] .SqlServer;

주의: 여기서 사용된 체계(syntax)는 SDML이 아니다; 이는 SDM 런타임에 의하여 추적되는 인스턴스 스페이스를 예시하기 위하여 사용된다.Note: The syntax used here is not SDML; This is used to illustrate the instance space tracked by the SDM runtime.

ms[1]은 3개의 자식 컴포넌트 인스턴스(children component instance), fe[1], fe[2], 및 be[1]을 갖는 컴포넌트 인스턴스이다. fe[1] 및 fe[2]는 fe 컴포넌트의 인스턴스이다. be[1]은 be 컴포넌트의 인스턴스이다. tds[1]은 3개의 멤버를 포함하는 와이어 인스턴스이다. 도식적으로는, 도 29에 인스턴스 스페이스가 도시되어 있다.ms [1] is a component instance with three child component instances, fe [1], fe [2], and be [1]. fe [1] and fe [2] are instances of the fe component. be [1] is an instance of the be component. tds [1] is a wire instance containing three members. Schematically, instance space is shown in FIG.

컴포넌트 인스턴스는 실제 물리적인 명시(manifestations)를 포함한다 - 이 예에서 fe[1] 및 fe[2]가 윈도우 기계에서 실행하는 IIS상에서 실행되는 두 개의 ASP.NET 애플리케이션이다. CreateComponentInstance로의 호출이 행해지면, 새로운 ASP.NET 애플리케이션이 생성되고 IIS 박스로 구성된다. 다수의 중간 단계가 발동될 수도 있다 - 예를 들어, 새로운 자원을 사용하기 위하여 호출자의 신용 카드에 부과되거나, 용량의 부족으로 인하여 새로운 기계가 할당된다. 이 문서의 뒷 부분에서 컴포넌트 설명 후에 기계를 실험한다.Component instances contain the actual physical manifestations-in this example, fe [1] and fe [2] are two ASP.NET applications running on IIS running on a Windows machine. When a call to CreateComponentInstance is made, a new ASP.NET application is created and configured with an IIS box. Multiple intermediate steps may be invoked-for example, imposed on the caller's credit card to use the new resource, or a new machine is allocated due to lack of capacity. We will test the machine after the component descriptions later in this document.

서비스 배포 유닛(Service Deployment Units)Service Deployment Units

MyService를 위한 SDM 모델은 컴포넌트, 포트 및 와이어로서 서비스의 구조를 정의하였다. 이는 SDM 런타임 기계에 설치될 수 있는 SDM 어셈블리로 귀착된다. 명백하게, SDM 어셈블리는 서비스를 인스턴스 생성(instantiating)하기에 충분하지는 않다. SDM 어셈블리에 추가하여, 컴포넌트의 구현인 CLR 어셈블리도 고려하여야 한다. 우리는 ASP.NET 코드, SQL 스크립트, 및 서비스에 의하여 필요한 모든 것을 고려하여야 한다. 이러한 모든 부분의 총합이 서비스 배포 유닛(SDU)에 패키징된다. 도 30을 참고하라.The SDM model for MyService defines the structure of services as components, ports, and wires. This results in an SDM assembly that can be installed on the SDM runtime machine. Obviously, SDM assembly is not enough to instantiate a service. In addition to the SDM assembly, you must also consider the CLR assembly, which is the implementation of the component. We should consider everything needed by ASP.NET code, SQL scripts, and services. The sum of all these parts is packaged in a service distribution unit (SDU). See FIG. 30.

SDM 런타임SDM runtime

SDR 런타임(또는 단순히 런타임)은 SDM의 구현을 호스팅한다. 이는 SDM 유형, 멤버 및 인스턴스 스페이스(instance space)를 조작하기 위한 세트 API들을 공개하는 고가용성 분배 서비스(distributed service)이다. 런타임은 일관된 방식으로 모든 SDM 인스턴스를 추적할 책임이 있다. 이는 배포(deployment), 버져닝(versioning), 보안, 및 복구를 위한 기계 장치를 제공한다.The SDR runtime (or simply runtime) hosts the implementation of the SDM. It is a high availability distributed service that exposes set APIs for manipulating SDM types, members, and instance space. The runtime is responsible for keeping track of all SDM instances in a consistent manner. It provides a mechanism for deployment, versioning, security, and recovery.

이 섹션에서는 BIG V1.0 공개물에서 제안된 SDM 런타임의 설계 및 구현에 대하여 설명한다. SDM 런타임의 다른 실시예가 물론 있을 수 있지만, 우리는 이 문서에서 한 가지에 초점을 맞춘다 - BIG 컴퓨터 상에 호스팅되는 고가용성 SDM 런타임 구현을 고려한다(상세한 사항은 _____를 참고하라).This section describes the design and implementation of the SDM runtime proposed in the BIG V1.0 publication. There may of course be other embodiments of the SDM runtime, but we focus on one thing in this document-consider a high availability SDM runtime implementation hosted on a BIG computer (see _____ for details).

런타임 아키텍처(Runtime Architecture)Runtime Architecture

도 27은 SDM 런타임의 논리적인 아키텍처를 도시한다.27 illustrates the logical architecture of the SDM runtime.

SDM 런타임은 다음과 같이 구성된다.The SDM runtime consists of the following:

* SDM 런타임 - 이는 SDM 런타임 구현이다. 이는 하나 이상의 물리적인 기계에서 실행되는 분산된 구현이다. 런타임은, SDM 및 인스턴스를 조작하는 호출의 세트인 SDM API를 통하여 그 기능을 발휘한다.SDM runtime-This is the SDM runtime implementation. This is a distributed implementation that runs on one or more physical machines. The runtime performs its functions through the SDM API, which is a set of calls to manipulate SDM and instances.

* SDM 스토어(SDM Store) - 이는 SDM 모델 및 인스턴스를 위한 영구적인 스토어이다. 이 스토어는 고가용성이며, 일관성이 중요하다. 이 스토어는 치명적인 이벤트에도 견뎌낸다.SDM Store-This is a permanent store for SDM models and instances. This store is highly available and consistency is important. The store survives catastrophic events.

* 서비스 배포 유닛(Service Deployment Units) - 이는 SDU들을 위한 읽기 전용 스토어이다. SDM 스토어와 마찬가지로, 이는 고가용성이며, 치명적인 이벤트에도 견뎌낸다.Service Deployment Units-This is a read-only store for SDUs. Like the SDM store, it is highly available and withstands fatal events.

* 컴포넌트 구현 호스트(Component Implementation Host) - 이는 SDM 컴포넌트로부터 참조된 CLR 코드를 호스팅하기 위한 프레임워크(framework)이다.Component Implementation Host-This is a framework for hosting CLR code referenced from SDM components.

SDM 런타임은 전형적으로 이하의 클라이언트 클래스에 의하여 사용된다:The SDM runtime is typically used by the following client classes:

* 컴포넌트 인스턴스(Component Instances) - 이들은 SDM 런타임 라이브러리(RTL)를 사용하는 런타임과 통신하는 컴포넌트 인스턴트이다. 우리는 두 가지 유형의 컴포넌트 인스턴스 - 런타임 호스팅된 컴포넌트 인스턴스(runtime-hosted component instances) 및 런타임 호스팅되지 않은 컴포넌트 인스턴스를 구별한다. Component Instances-These are component instants that communicate with the runtime using the SDM runtime library (RTL). We distinguish between two types of component instances-runtime-hosted component instances and runtime non-hosted component instances.

* 개발 및 배포 도구(Development and Deployment tools) - 이들은 SDM 컴파 일러, SDU 설치 도구 및 기타 개발 도구를 포함한다.Development and Deployment tools-These include SDM compilers, SDU installation tools, and other development tools.

* 관리 도구(Management tools) - 이들은 런타임 자체를 등록하고 관리하기 위하여 사용되는 권한이 부여된 도구(privileged tools)이다.Management tools-These are privileged tools used to register and manage the runtime itself.

클라이언트는 SDM 런타임 라이브러리(RTL)를 통하여 런타임과 통신한다. 이들은 전형적으로 이하를 포함하는 동작을 수행한다.The client communicates with the runtime through the SDM runtime library (RTL). They typically perform operations that include the following.

* SDU들의 설치/설치제거: 이는 새로운 SDU들을 SDM 런타임의 실행중인 인스턴트에 추가 및 제거하는 프로세스이다.Install / Uninstall SDUs: This is the process of adding and removing new SDUs to the running instant of the SDM runtime.

* SDM 유형 및 인스턴스의 추가, 제거 및 수정: 클라이언트는 새로운 컴포넌트, 포트 및 와이어 유형을 생성할 수 있다.Add, remove, and modify SDM types and instances: Clients can create new components, ports, and wire types.

* 인스턴스의 생성 및 삭제: 클라이언트는 새로운 컴포넌트, 포트 및 와이어 인스턴스를 생성할 수 있다.Creating and Deleting Instances: Clients can create new component, port, and wire instances.

* 이벤트의 소싱(Sourcing) 및 하강(sinking): 유형 및/또는 인스턴스 스페이스에 변경이 행해진 경우, 런타임은 영향을 받는 클라이언트에게 이벤트를 전송한다. 이벤트는 포트 바인딩 정보(port binding information)를 설정하는 것과 같이 특정 동작에 의해 트리거될 수 있다.Sourcing and Sinking Events: If changes are made to the type and / or instance space, the runtime sends the events to the affected clients. The event may be triggered by a specific operation, such as setting port binding information.

* 유형 및 인스턴스 스페이스를 질의한다: 클라이언트는 유형 및 인스턴스 스페이스를 반영할 수 있다.Query the type and instance space: The client can reflect the type and instance space.

유형, 멤버 및 인스턴스 스페이스(Type, member and instance space)Type, member and instance space

컴포넌트 유형, 컴포넌트 및 컴포넌트 인스턴스간의 관계는 최신 객체 지향 언어의 클래스, 클래스 멤버, 및 객체와 유사하다. SDM은 유형, 멤버 및 인스턴스 스페이스간의 분리를 정의한다. 컴포넌트 유형은 유형 스페이스(type space)에 있고, 컴포넌트는 멤버 스페이스(member space)에 있으며, 컴포넌트 인스턴스는 인스턴스 스페이스(instance space)에 있다. 도 31은 3개의 스페이스간의 분리를 도시한다.The relationship between component types, components, and component instances is similar to classes, class members, and objects in modern object-oriented languages. SDM defines separation between types, members, and instance spaces. Component types are in type space, components are in member space, and component instances are in instance space. 31 shows separation between three spaces.

"멤버 스페이스"는 유형 스페이스의 인스턴스를 포함한다. "인스턴스 스페이스"는 멤버 스페이스의 인스턴스를 포함한다. SDM 런타임은 3개의 모든 스페이스 및 이들의 관계를 추적할 책임이 있다. 이 정보는 SDM 스토어 내에 저장되고, 런타임 API를 사용함으로써 질의될 수 있다. 컴포넌트 및 와이어는 0개 또는 그 이상의 인스턴스를 가질 수 있다. 포트는 하나의 인스턴스만을 갖는다. "Member space" contains instances of type space. An "instance space" includes an instance of a member space. The SDM runtime is responsible for keeping track of all three spaces and their relationships. This information is stored in the SDM store and can be queried by using the runtime API. Components and wires can have zero or more instances. A port has only one instance.

SDM 멤버 및 인스턴스 스페이스는 엄격한 계층을 따른다. 멤버 및 인스턴스 스페이스 내의 모든 컴포넌트는 트리로 배열된다. 루트 컴포넌트는 "루트(root)" 또는 "범용(universal)" 컴포넌트라고 하는 특별한 컴포넌트이다. 이전 섹션의 MyService 예로부터 멤버 트리를 보자(도 32). 박스는 컴포넌트를 나타내고, 선은 부모/자식(parent/children) 관계이다. myService는 루트 컴포넌트의 멤버 컴포넌트이다. 인스턴스 트리는 도 33에 도시된 것과 같이 구성될 수 있다. 서로 다른 수의 자식 인스턴스를 갖는 myService 컴포넌트의 2개의 인스턴스가 있다는 것을 유의하여야 한다. myService[1].fe[1] 및 myService[2].fe[2]는 같은 컴포넌트 멤버 "fe"를 가지고, 같은 컴포넌트 유형 "MyFrontEnd"를 갖지만, 그 이외에는 전혀 별개의 컴포넌트 인스턴스이다. "root[1]"은 루트 컴포넌트의 인스턴스일 뿐이다. SDM member and instance spaces follow a strict hierarchy. All components in the member and instance spaces are arranged in a tree. The root component is a special component called a "root" or "universal" component. Let's look at the member tree from the MyService example in the previous section (Figure 32). The boxes represent components, and the lines are parent / children relationships. myService is a member component of the root component. The instance tree may be configured as shown in FIG. 33. Note that there are two instances of the myService component with different number of child instances. myService [1] .fe [1] and myService [2] .fe [2] have the same component member "fe" and the same component type "MyFrontEnd", but otherwise they are completely separate component instances. "root [1]" is just an instance of the root component.

컴포넌트 인스턴스 생성(Component Instantiation)Component Instantiation

SDM 런타임에 의하여 제공되는 기본적인 동작 중 하나는 컴포넌트 인스턴스 생성이다. 이는 컴포넌트 인스턴스가 존재하게 되는 프로세스이다. 인스턴스(또는 객체)를 생성하는 것이 전형적으로 인스턴스를 위한 메모리의 청크(chunk)를 할당하고 초기화하는 것과 관련되어 있는 전통적인 컴포넌트 모델과 달리, SDM 컴포넌트는 전형적으로 서로 다른 부분에 의하여 수행되는 많은 단계와 관련되고, 완료하기 위하여 수시간, 아니면 수일이 걸릴 수 있다. 예를 들어, 유형 ASP.NET 애플리케이션의 컴포넌트가 인스턴스 생성되면, 결과는 구성 동작(configuration act)이 후속하는 IIS를 실행하는 기계 상의 새로운 가상 웹 사이트이다. IIS 기계의 용량에 도달하는 시나리오를 고려하면, ASP.NET 애플리케이션이 인스턴스 생성되기 전에 새로운 하나가 할당되어야 한다. 이 프로세스는, 풀(pool)로부터 새로운 기계를 할당하는 것, 가능하면 빌딩 변경을 발생시키는 것, 및 IIS를 포함하는 오퍼레이팅 시스템을 설치하는 것을 포함하기 때문에 수시간 걸릴 수 있다. SDM 런타임은 컴포넌트 인스턴스 생성을 위한 두 가지 방법을 지원하는데, 두 가지 방식이란 1) 팩토리(Factory)가 컴포넌트를 인스턴스 생성하는 것과, 2) 런타임이 컴포넌트 인스턴스를 생성하는 것이다. 이러한 방법은 이하에서 간략히 설명한다. 더 자세한 내용은 "Component Instantiation" 명세서를 참조하라.One of the basic operations provided by the SDM runtime is component instance creation. This is the process by which component instances exist. Unlike traditional component models, where creating an instance (or object) typically involves allocating and initializing chunks of memory for an instance, SDM components typically require many steps to be performed by different parts. Related, and may take hours or days to complete. For example, if a component of type ASP.NET application is instantiated, the result is a new virtual Web site on the machine running IIS followed by a configuration act. Considering the scenario of reaching the capacity of an IIS machine, a new one must be allocated before the ASP.NET application is instantiated. This process can take several hours because it involves allocating new machines from the pool, possibly generating building changes, and installing an operating system that includes IIS. The SDM runtime supports two methods for creating component instances, two methods: 1) a factory instantiating a component and 2) a runtime creating a component instance. This method is briefly described below. See the "Component Instantiation" specification for more details.

팩토리가 컴포넌트 인스턴스를 생성(Factory instantiated components)Factory instantiated components

컴포넌트 팩토리(또는 단순히 팩토리)는 하나 이상의 컴포넌트 유형을 위한 인스턴스를 생성할 책임이 있는 엔티티이다. 팩토리는 인스턴스 생성을 위하여 하나 이상의 포트를 공개하는 컴포넌트 자체이다. 팩토리를 생각하는 한 가지 방법 은 자원 관리자로서이다. 팩토리가 관리하는 자원은 컴포넌트 유형이다. 팩토리는 자원을 컴포넌트의 인스턴스로 맵핑(mapping)하는 방법을 알고 있다. 예를 들어, 우리가 유형 컴포넌트 "File Storage"를 갖는다고 가정해 보자. 이 컴포넌트가 인스턴스 생성되면, NTFS 발견이 생성되고, 적절한 ACL들이 준비될 것이다. 이 컴포넌트를 위한 팩토리는 기억장치를 할당하기 위한 다수의 윈도우 기계를 관리한다. 팩토리는 NTFS 공유를 생성하고, ACL들 및 분담할 몫(quotas) 등을 설정하는 책임이 있다. 컴포넌트 팩토리는 SDM 런타임에서 중요한 역할을 수행한다. 이들은 전형적으로 서비스를 위하여 자원을 관리하기 때문에, 이들은 신뢰성 있으며 고가용성이라 예상된다. SDM 런타임에 의하여 지원되는 컴포넌트 팩토리의 수는 개방 종료되지만(open ended), 우리는 BIG V1.0이 적은 수의 기본 컴포넌트 팩토리를 가질 것으로 예상한다. 컴포넌트 팩토리는 이하와 같다.A component factory (or simply factory) is the entity responsible for creating instances for one or more component types. The factory is the component itself that exposes one or more ports for instantiation. One way to think of factories is as a resource manager. Resources managed by the factory are component types. The factory knows how to map resources to instances of the component. For example, suppose we have a type component "File Storage". When this component is instantiated, NTFS discovery will be created, and appropriate ACLs will be prepared. The factory for this component manages a number of window machines to allocate storage. The factory is responsible for creating NTFS shares, setting up ACLs and shares to share. Component factories play an important role in the SDM runtime. Because they typically manage resources for services, they are expected to be reliable and high availability. The number of component factories supported by the SDM runtime is open ended, but we expect BIG V1.0 to have a small number of default component factories. The component factory looks like this:

* 하드웨어 - 이는 하드웨어의 인스턴스를 할당하고 관리하기 위한 책임이 있는 기본 레벨 팩토리이다. 예를 들어, 이는 1GB의 메모리, 또는 NAS와 같은 기억장치 장치를 사용하여 서버 기계를 할당할 수 있다.Hardware-This is the base level factory responsible for allocating and managing instances of hardware. For example, it can allocate server machines using 1GB of memory, or storage devices such as NAS.

* 네트워크 - 이 팩토리는 VLANs, 공용 IP 어드레스, DNS 네임 등을 책임진다.Network-This factory is responsible for VLANs, public IP addresses, DNS names, etc.

* PC - 이 팩토리는 기계를 할당하고 풀 OS 이미지(full OS-image)를 그것에 배포할 수 있다.PC-This factory can allocate machines and distribute full OS-images to it.

* 기억장치 - 이 팩토리는 기억장치를 관리하고 할당하는 책임이 있다.* Storage-This factory is responsible for managing and allocating storage.

* 소프트웨어 자원 - ASP.NET, IIS 웹 사이트, SQL 서버, 데이터베이스 등.* Software resources-ASP.NET, IIS web site, SQL server, database, etc.

인스턴스 생성 프로세스(Instantiation process)Instantiation process

팩토리는 어느 컴포넌트 유형이 그 인스턴스를 생성할 책임이 있는지를 지정하는 SDM 런타임을 사용하여 등록하여야 한다. 하이레벨에 있어서, 인스턴스 생성의 프로세스는 다음과 같다:The factory must register using the SDM runtime, which specifies which component type is responsible for creating the instance. At high level, the process of instantiation is as follows:

호출자(caller)는 SDM 런타임으로 주어진 컴포넌트 유형에 대한 컴포넌트 팩토리를 요청한다.The caller asks the SDM runtime for a component factory for a given component type.

1. SDM 런타임은 적절한 컴포넌트 팩토리를 발견하고, 이를 호출자에게 반환하는 책임을 진다.1. The SDM runtime is responsible for finding the appropriate component factory and returning it to the caller.

2. 그 후, 호출자는 컴포넌트 팩토리와 직접 통신하여, 하나 이상의 인스턴스를 생성하도록 요청한다.2. The caller then communicates directly with the component factory, requesting that one or more instances be created.

런닝 팩토리 테이블(Running Factory Table)Running Factory Table

SDM 런타임은 컴포넌트 유형 및 그들의 적절한 팩토리의 테이블을 보유한다. 모든 컴포넌트 인스턴스는 런닝 팩토리 테이블을 갖는다. 런닝 팩토리 테이블 구조는 다음과 같다.The SDM runtime keeps a table of component types and their appropriate factories. Every component instance has a running factory table. The running factory table structure is as follows:

(ComponentTypeID, PortType) -> (PortInstance, [cookie])(ComponentTypeID, PortType)-> (PortInstance, [cookie])

컴포넌트 인스턴스는 그들의 테이블 및 그들의 바로 자식인 테이블(direct children's tables)에 엔티티를 추가/제거할 수 있다. 디폴트로서, 새로운 자식 컴포넌트 인스턴스가 생성되었을 때, 부모의 런닝 팩토리 테이블이 상속된다. Component instances can add / remove entities to their tables and their direct children's tables. By default, when a new child component instance is created, the parent's running factory table is inherited.

런닝 팩토리 테이블은 다른 환경의 동일한 컴포넌트 유형을 위한 다른 팩토리를 지원하기 위하여 모든 컴포넌트 인스턴스에 대하여 추적된다. 팩토리는 전형 적으로 리소스가 할당되는 곳이기 때문에, 환경을 호스팅하는 것은 자원 할당에 대한 서로 다른 폴리시를 요구할 수 있다. 예를 들어, Digex와 같은 호스팅 엔티티가 그들의 고객에 대하여 서로 다른 계획을 갖는 시나리오를 고려해 보자. 골드(Gold)를 위해 지불한 고객은 전용 IIS 박스(dedicated IIS box)를 획득하고, 실버(Silver)를 위해 지불한 고객은 공유 IIS 박스(shared IIS box)를 획득한다. 고객의 서비스는 "ASP.NET 애플리케이션" 유형의 컴포넌트를 포함하고, 이는 전용 IIS 기계 또는 공유되는 IIS 기계로 호스팅되는지 여부를 알지 못한다. Digex는 도 34에 도시한 것과 같이 이를 구현할 수 있다.Running factory tables are tracked for all component instances to support different factories for the same component type in different environments. Since factories are typically where resources are allocated, hosting an environment can require different policies for resource allocation. For example, consider a scenario where hosting entities such as Digex have different plans for their customers. Customers paying for Gold get a dedicated IIS box, and customers paying for Silver get a shared IIS box. The customer's service includes components of the "ASP.NET application" type, which does not know whether it is hosted on a dedicated IIS machine or a shared IIS machine. Digex may implement this as shown in FIG.

Digex는 골드 팩토리(Gold Factory) 및 실버 팩토리(Silver Factory)의 2가지 컴포넌트를 갖는 컴포넌트이다. 팩토리는 컴포넌트 자체이다. Digex는 또한 "골드" 및 "실버"라고 하는 기타 컴포넌트를 정의한다. 이러한 "골드" 컴포넌트는 골드 서비스를 위하여 지불한 모든 서비스의 부모(parent)이다. Digex is a component with two components: Gold Factory and Silver Factory. The factory is the component itself. Digex also defines other components called "gold" and "silver". This "gold" component is the parent of all services paid for the gold service.

Digex가 인스턴스 생성되면, 이는 팩토리의 인스턴스 및 "골드" 및 "실버" 컴포넌트의 인스턴스를 생성한다. Gold[1]은 고유의 런닝 팩토리 테이블을 갖는다. Digex는 적절한 SDM 런타임 API를 호출함으로써 이 테이블에 골드 팩토리를 등록한다. 새로운 고객의 서비스가 Gold[1]의 자식으로서 인스턴스 생성되면, 이는 Gold[1]의 런닝 팩토리 테이블을 상속받는다. 이는, "ASP.NET 애플리케이션"의 컴포넌트 인스턴스가 생성되었을 때, 골드 팩토리가 이 요청을 처리하고 고객의 구좌에 적절히 부과한다. When Digex is instantiated, it creates an instance of the factory and instances of "gold" and "silver" components. Gold [1] has its own running factory table. Digex registers a gold factory in this table by calling the appropriate SDM runtime API. When a new customer's service is instantiated as a child of Gold [1], it inherits Gold [1] 's running factory table. This means that when a component instance of an "ASP.NET application" is created, the Gold Factory processes this request and charges the customer's account accordingly.

팩토리 추적(Factory tracking)Factory tracking

SDM 런타임은 각 컴포넌트 인스턴스를 생성한 팩토리의 추적(track)을 보유한다. 도 35를 참고하라. 점선은 컴포넌트 인스턴스와 이를 생성한 팩토리 사이의 "~에 의하여 생성된(created by)" 관계를 나타낸다. 상술한 바와 같이, 팩토리는 컴포넌트 자체이고, 따라서 팩토리는 팩토리를 가지고 있어야 한다. 런타임의 무한 반복을 종료하는 것은 이하에서 설명하는 바와 같이 "런타임 호스팅된 컴포넌트(runtime-hosted components)"에 대한 팩토리이다. 루트 컴포넌트 인스턴스는 특수한 것이며, 이는 고유의 팩토리임을 유의하여야 한다.The SDM runtime keeps track of the factory that created each component instance. See FIG. 35. The dotted line represents the "created by" relationship between the component instance and the factory that created it. As mentioned above, the factory is the component itself, so the factory must have a factory. Ending the infinite iteration of the runtime is a factory for "runtime-hosted components" as described below. Note that the root component instance is special and it is its own factory.

팩토리 및 트랜잭션(Factories and Transactions)Factories and Transactions

팩토리는 서비스 개발자가 복잡한 롤백(rollback) 및 오류 처리 논리(error handling logic)에 대한 걱정을 덜 수 있도록 트랜잭션을 지원한다. 트랜잭션된 서브시스템(transacted subsystems)의 상부(top)에 구축되지 않은 팩토리는 보상을 지원할 필요가 있다. 팩토리는 또한 분산 트랜잭션에서 협력(enlisting)을 지원하여야 한다.The factory supports transactions so that service developers can be less concerned about complex rollback and error handling logic. Factories not built on top of the transacted subsystems need to support compensation. The factory must also support enlisting in distributed transactions.

팩토리는 전형적으로 인스턴스 생성과 관련된 다수의 부기 정보(bookkeeping information)를 보유한다. 이 부기 정보는 적절한 복구를 보장하기 위하여 SDM 런타임과 함께 일관되게 유지되어야 한다. 이를 용이하게 하기 위하여, SDM 런타임은, 팩토리를 포함하는 컴포넌트 인스턴스를 위한 트랜잭션된 기억장치 서비스(transacted storage service)를 제공한다. 잘 쓰여진 팩토리(well-written factory)는 이 스토어 내에 모든 부기 정보를 저장한다.The factory typically holds a number of bookkeeping information related to instance creation. This bookkeeping information should be kept consistent with the SDM runtime to ensure proper recovery. To facilitate this, the SDM runtime provides a transacted storage service for the component instance containing the factory. A well-written factory stores all bookkeeping information in this store.

팩토리 포트(Factory port)Factory port

팩토리는 전형적으로 컴포넌트 인스턴스 생성을 위하여 사용될 수 있는 하나 이상의 포트를 공개한다. 포트 유형은 SDM 런타임에 의해 명령되지 않지만, 모든 컴포넌트 팩토리가 SDM_Factory 포트를 지원하는 것을 추천한다. SDM_Factory는 새로운 컴포넌트 인스턴스를 생성하기 위하여 호출되는 SOAP 기반 포트(SOAP based port)이다. 이 포트를 위한 C# 인터페이스는 다음과 같다.The factory typically exposes one or more ports that can be used for component instantiation. The port type is not commanded by the SDM runtime, but it is recommended that all component factories support the SDM_Factory port. SDM_Factory is a SOAP based port that is called to create a new component instance. The C # interface for this port is:

public interface ISDMFactorypublic interface ISDMFactory

{{

ComponentInstance Instantiate(ComponentInstance Instantiate (

ComponentInstance parent, ComponentInstance parent,

Component component, Component component,

ComponentType componentType, object args);ComponentType componentType, object args);

void Alloc(ComponentInstance allocInstance); void Alloc (ComponentInstance allocInstance);

void Construct(ComponentInstance constructInstance);void Construct (ComponentInstance constructInstance);

}}

ISDMFactory는 3개의 패스 인스턴스 생성 프로세스(pass instantiation process)를 지원한다:ISDMFactory supports three pass instantiation processes:

인스턴스 생성 패스(Instantiation Pass): 이 패스는 SDM 런타임을 사용하여 모든 컴포넌트 인스턴스를 반복적으로 생성한다. 그러나 이는 할당이나 작성(construction)은 하지 않는다. 이는 단지 요구되는 "뼈대(skeleton)" 컴포넌트 인스턴스를 생성할 뿐이다.Instantiation Pass: This pass uses the SDM runtime to iteratively create all component instances. However, it does not assign or construct. It just creates the required "skeleton" component instance.

할당 패스(Allocation Pass): 이 패스 동안, 모든 관련 컴포넌트 팩토리는 인스턴스 생성을 위하여 필요한 모든 자원을 할당한다.Allocation Pass: During this pass, all relevant component factories allocate all resources necessary for instance creation.

작성 패스(Construction Pass): 할당이 성공하면, 작성 패스가 개시된다. 이는 전형적으로 가장 긴 런닝 패스(running pass)이다. 팩토리는 전형적으로 작성 패스 동안 모든 실제 작업을 행한다. Construction Pass: If the assignment succeeds, the construction pass is started. This is typically the longest running pass. The factory typically does all the actual work during the creation pass.

팩토리는 물론 인스턴스 생성을 위하여 다른 포트 유형을 지원할 수 있다. 그러나, SDM 런타임 및 런타임 API들은 SDM_Factory 구현과 양호하게 동작하는 다수의 보조 기능을 구비한다. 이러한 API들은 확실하게 대다수의 개발자를 위한 개발자 경험을 향상시킬 것이다.The factory can of course support other port types for instantiation. However, the SDM runtime and runtime APIs have a number of auxiliary functions that work well with the SDM_Factory implementation. These APIs will certainly enhance the developer experience for the majority of developers.

런타임 호스팅된 컴포넌트 인스턴스(Runtime-hosted component instances)Runtime-hosted component instances

팩토리 외에, SDM 런타임은, 구현 SDML 키워드를 사용하여 CLR 어셈블리를 참조하는 SDM 컴포넌트를 위한 구현도 호스팅한다. 참조된 CLR 어셈블리는 CLR 클래스의 완전한 자격이 있는 네임(fully qualified name)인 문자열(literal string)이다. 예를 들어,In addition to the factory, the SDM runtime also hosts implementations for SDM components that reference CLR assemblies using implementation SDML keywords. The referenced CLR assembly is a literal string that is the fully qualified name of the CLR class. E.g,

componenttype Acomponenttype A

{{

port pt x;port pt x;

implementationimplementation

"MyNamespace.MyClassName,MyClrAssemblyName""MyNamespace.MyClassName, MyClrAssemblyName"

}}

또는, 강력하게 명명된 CLR 어셈블리를 위하여 컬쳐(culture), 버전, 및 키를 지정할 수 있다:Alternatively, you can specify the culture, version, and key for a strongly named CLR assembly:

componenttype Acomponenttype A

{{

port pt x;port pt x;

implementation "MyNamespace.MyClassName, MyClrAssemblyName, culture=neutral, version=1.0.0.1234, PublicKeyToken=9a33f27632997fcc"implementation "MyNamespace.MyClassName, MyClrAssemblyName, culture = neutral, version = 1.0.0.1234, PublicKeyToken = 9a33f27632997fcc"

}}

이러한 컴포넌트에 대하여, SDM 런타임은 팩토리로서 동작하고, SDM 런타임은 이러한 CLR 클래스를 호스팅하고 관리한다. 또한 이는, 기본 레벨 팩토리가 SDM 런타임에 의하여 호스팅된 CLR 어셈블리로서 구현되기 때문에 상술한 팩토리의 무한 반복을 종료시킨다.For these components, the SDM runtime acts as a factory, and the SDM runtime hosts and manages these CLR classes. This also ends the infinite iteration of the factory described above since the base level factory is implemented as a CLR assembly hosted by the SDM runtime.

CLR 어셈블리는 마이크로소프트의 IIS 서버를 사용하여 호스팅된다. 구현 키워드는 클래스를 참조하는데, 이 클래스는 MarchalByRefObject로부터 상속받아야 하고, IRuntimeHostedImplementation 및 ISDMFactory 인터페이스를 구현하여야 한다. 편의를 위하여, 기본 클래 SdmComponentInstance는 이러한 인터페이스에 대한 디폴트 구현을 제공한다. 다음은 상기 컴포넌트 유형 A를 위한 런타임 호스팅된 CLR 구현의 예이다.CLR assemblies are hosted using Microsoft's IIS server. Implementation keywords refer to classes, which must inherit from MarchalByRefObject and implement the IRuntimeHostedImplementation and ISDMFactory interfaces. For convenience, the default class SdmComponentInstance provides a default implementation of this interface. The following is an example of a runtime hosted CLR implementation for component type A above.

public class A : SdmComponentInstancepublic class A: SdmComponentInstance

{{

protected override void OnCreate(object args) protected override void OnCreate (object args)

{{

// do something// do something

}}

}}

클래스 A는 SdmComponentInstance로부터 상속받은 C# 클래스이며, 따라서 SDM 런타임에 의하여 호스팅될 수 있다. 이 클래스를 위한 CLR 어셈블리는, 이것이 적절하게 동작하도록 하기 위하여 SDU의 /bin 디렉토리에 위치하여야 한다. 유형 A의 컴포넌트의 인스턴스가 생성되면, 런타임은 가용한 호스트 IIS 기계를 탐색하고 그 기계에 CLR 코드를 인스턴스 생성하는 책임이 있다. CLR 코드는, IIS에 의하여 호스팅되는 .NET 원격 애플리케이션으로서 호스팅된다. SDU 내의 모든 CLR 어셈블리는 IIS 프로세스를 공유하고, 그 프로세스 내에 고유의 AppDomain을 갖는다.Class A is a C # class that inherits from SdmComponentInstance and can therefore be hosted by the SDM runtime. The CLR assembly for this class must be located in the / bin directory of the SDU for this to work properly. When an instance of a component of type A is created, the runtime is responsible for searching for available host IIS machines and instantiating CLR code on those machines. The CLR code is hosted as a .NET remote application hosted by IIS. All CLR assemblies in an SDU share an IIS process and have their own AppDomain within that process.

CLR 어셈블리가 로딩되면, 런타임은 IRuntimeHostedImplementation 인터페이스 상의 잘 정의된 입구점(entrypoint)으로 .NET 원격 호출을 수행한다. 이 점에서, CLR 클래스는 ComponentFactory와 동등하고, ISDMFactory 인터페이스는 이전 섹션에서 언급한 것과 같이 소비된다.When the CLR assembly is loaded, the runtime makes .NET remote calls to well-defined entry points on the IRuntimeHostedImplementation interface. In this respect, the CLR class is equivalent to the ComponentFactory, and the ISDMFactory interface is consumed as mentioned in the previous section.

포트 및 와이어(Ports and Wires)Ports and Wires

포트 및 와이어는 SDM 런타임 내의 통신을 위한 베이시스(basis)이다. 포트 및 와이어는 오늘날 서비스 배포에 있어서 공통적인 수많은 문제를 해결한다:Ports and wires are the basis for communication within the SDM runtime. Ports and wires solve many of the common problems in service deployment today:

통신 정보의 하드 코딩(Hard coding of communication information) - 많은 서비스는 전형적으로 그 서버의 이름 또는 ip 어드레스를 코드 내에 하드 코딩한다. 예를 들어, 프론트 엔드 서버(front end server)는 전형적으로 데이터베이스 이름, 로그인 및 패스워드와 같은 접속 정보뿐만 아니라 SQL 서버 기계 이름을 하드 코딩한다. Hard coding of communication information-Many services typically hard code the server's name or ip address into code. For example, front end servers typically hard code SQL Server machine names as well as connection information such as database names, logins, and passwords.

통신 토폴로지의 정의(Defining a communication topology) - 대부분의 서비스 배포는 전형적으로 DMZ를, 통신을 위한 경계를 정의하기 위한 메커니즘만으로 사용한다. 다른 제약은 요구되지 않으며, 예를 들어 프론트 엔드 서버가 다른 프론트 엔드 서버와 통신할 필요가 있다면 이는 어디서도 포착되지 않는다.Defining a communication topology-Most service distributions typically use a DMZ as the only mechanism for defining boundaries for communication. No other constraints are required, for example if the front end server needs to communicate with other front end servers, this is not captured anywhere.

발견(Discovery) - 서비스에 추가되거나 서비스로부터 제거된 새로운 컴포넌트에 대하여 찾아내는 것은 전형적으로 오늘날 서비스가 직면하고 있는 문제점이다.Discovery-Finding new components added to or removed from a service is typically a problem facing services today.

SDM은 이러한 문제를 포트 및 와이어를 사용하여 해결한다. 포트는 컴포넌트에 공개되는 유형화된 엔티티(typed entities)이다. 포트는 서버 액세스 점(server access point)과 유사하다 - 이는 컴포넌트가, 잘 정의된 기능을 공개하는 곳이다. 예를 들어, "기억장치(storage)" 컴포넌트는, 파일 시스템 동작을 위하여 사용될 수 있는 유형 SMB.Server의 포트를 정의한다. 와이어는 포트간의 허용 가능한 바이딩(binding)을 정의한다. 이는 통신 경로를 제한할 수 있는 통신 토폴로지를 형성한다. SDM solves this problem using ports and wires. A port is a typed entity that is exposed to a component. A port is similar to a server access point-this is where the component exposes well-defined functionality. For example, a "storage" component defines a port of type SMB.Server that can be used for file system operation. Wires define acceptable binding between ports. This forms a communication topology that can limit the communication path.

상술한 내용으로부터, MyService 예를 다시 시험해보자.From the above, let's try the MyService example again.

componenttype MyServicecomponenttype MyService

{ {

component MyFrontEnd fe;component MyFrontEnd fe;

component MyBackEnd be;component MyBackEnd be;

port http = fe.http;port http = fe.http;

wire SqlTds tdswire SqlTds tds

{{

fe.catalog;fe.catalog;

be.sqlServer;be.sqlServer;

}}

implementation "MyService, MyClrAssembly";implementation "MyService, MyClrAssembly";

}}

MyService는 tds라는 하나의 와이어를 포함한다. 와이어는, 컴포넌트와 마찬가지로 인스턴스를 가질 수 있다. 예를 들어, 다음은 2개의 서로 다른 와이어 인스턴스 토폴로지를 갖는 MyService ms[1] 및 ms[2]의 2개의 컴포넌트 인스턴스이다.MyService contains a single wire called tds. Wires can have instances just like components. For example, here are two component instances of MyService ms [1] and ms [2] with two different wire instance topologies.

component instance ms[1]component instance ms [1]

wire instance tds[1]wire instance tds [1]

fe[1].catalogfe [1] .catalog

fe[2].catalogfe [2] .catalog

be[1].SqlServer;be [1] .SqlServer;

component instance ms[2]component instance ms [2]

wire instance tds[1]wire instance tds [1]

fe[1].catalogfe [1] .catalog

be[1].SqlServer;be [1] .SqlServer;

wire instance tds[2]wire instance tds [2]

fe[2].catalogfe [2] .catalog

be[1].SqlServer;be [1] .SqlServer;

ms[1]은 3개의 포트 인스턴스를 포함하는 단일 와이어 인스턴스 tds[1]을 갖는다. ms[2]는 각각 2개의 포트 인스턴스를 갖는 2개의 와이어 인스턴스 tds[1] 및 tds[2]를 갖는다. 첫 번째 경우에 있어서, fe[1] 및 fe[2]는 서로 볼 수 있다. 두 번째 경우에 있어서는, fe[1] 및 fe[2]는 서로 볼 수 없다.ms [1] has a single wire instance tds [1] containing three port instances. ms [2] has two wire instances tds [1] and tds [2] each with two port instances. In the first case, fe [1] and fe [2] can be seen from each other. In the second case, fe [1] and fe [2] are not visible to each other.

와이어 인스턴스는 물리적인 통신 토폴로지를 형성한다. 포트 인스턴스는 와이어 인스턴스의 멤버이다. 이들은 다음과 같은 것을 할 수 있다:Wire instances form a physical communication topology. Port instances are members of wire instances. They can do the following:

1) 서로에게 질의하거나 서로를 발견할 수 있다 - 런타임 API는 동일한 와이어 인스턴스 상의 다른 포트 인스턴스에 질의하고 발견하기 위한 기능을 지원한다. 모든 멤버는 동일한 와이어 인스턴스 내에서 볼 수 있다. 또한, 와이어 인스턴스의 소유자는 어느 때나 멤버에 질의할 수 있다. 1) You can query each other or find each other-the runtime API supports the ability to query and discover other port instances on the same wire instance. All members are visible within the same wire instance. Also, the owner of a wire instance can query a member at any time.

2) 이벤트를 수신할 수 있다 - 와이어의 멤버는 멤버 포트 인스턴스 상의 SDM 동작에 의하여 트리거되는 이벤트를 수신할 수 있다. 자세한 사항은 아래의 " 이벤트(Events)"를 참고하라.2) Can Receive an Event-A member of a wire can receive an event triggered by an SDM operation on a member port instance. See "Events" below for details.

3) 통신을 제한할 수 있다 - 와이어 인스턴스는 컴포넌트 인스턴스간의 허용되는 통신 경로를 제한한다.3) You can restrict communication-wire instances limit the allowed communication paths between component instances.

포트 바인딩 정보(Port binding information)Port binding information

포트는, 컴포넌트에 의하여 공개되는 유형화된 엔티티(typed entities)이다. 포트는 정확하게 하나의 인스턴스를 갖는다. 포트 인스턴스는 바인딩 정보를 운반할 수 있는데, 바인딩 정보는 전형적으로 컴포넌트 간의 통신 채널을 설정하기 위하여 요구되는 모든 것이다. 예를 들어, 상술한 "be[1].SqlServer" 포트 인스턴스는 SQL 백엔드(backend)로 접속하기 위한 다음과 같은 바인딩 정보를 가질 수 있다.A port is a typed entity that is exposed by a component. The port has exactly one instance. A port instance can carry binding information, which is typically all that is required to establish a communication channel between components. For example, the above-described "be [1] .SqlServer" port instance may have the following binding information for connecting to the SQL backend.

"server=mySQLServer;uid=myLogin;pwd=myPwd;""server = mySQLServer; uid = myLogin; pwd = myPwd;"

이 문자열은 ADO 또는 OLEDB로 보내질 수 있고, TDS 접속이 백엔드 SQL 서버로 설정될 수 있다. SDM 런타임은 통신부(communicating parties)를 방해하지 않는다. 이는 단지, 통신을 시작하도록 요구된 임의의 정보의 보유부(holder)로서 동작한다. This string can be sent to ADO or OLEDB and the TDS connection can be established to the backend SQL server. The SDM runtime does not interfere with communicating parties. It merely acts as a holder of any information required to initiate communication.

포트 가시성 및 와이어 인스턴스(Port visibility and wire instance)Port visibility and wire instance

컴포넌트 인스턴스 상의 포트 인스턴스는, 동일한 와이어 인스턴스에 부착되어 있다면 다른 컴포넌트 인스턴스로만 볼 수 있다. 이는 서비스를 위한 논리적인 네트워크 토폴로지를 구축하기 위한 상당히 강력한 메커니즘이다. SDM 런타임은 또한, 와이어 인스턴스 제약을 구현하기 위하여 필요한 물리적인 가상 네트워크를 생성하고 패킷 필터링을 사용하기 위한 수단을 지원한다. 자세한 정보는 "네트워킹 아키텍처(Networking Architecture)"를 참고하라.Port instances on a component instance can only be viewed as different component instances if attached to the same wire instance. This is a fairly powerful mechanism for building logical network topologies for services. The SDM runtime also supports means for creating the physical virtual network needed to implement wire instance constraints and for using packet filtering. See "Networking Architecture" for more information.

이벤트(Events)Events

SDM 런타임은 SDM 인스턴스 스페이스 상의 동작의 결과로서 어떤 고유의 이벤트(intrinsic events)를 발생시킨다. 예를 들어, 컴포넌트 인스턴스가 포트 인스턴스를 생성하면 이벤트가 발생한다. 지정된 이벤트에 따라서, 목적지(destination)는 주어진 와이어 상의 포트 인스턴스 또는 합성 컴포넌트 인스턴스이다. The SDM runtime generates some intrinsic events as a result of operations on the SDM instance space. For example, an event occurs when a component instance creates a port instance. Depending on the specified event, the destination is a port instance or composite component instance on a given wire.

모든 이벤트는 런타임 포트 상의 컴포넌트 인스턴스로 전달된다. SDM 런타임 라이브러리는 이러한 이벤트를 트랩핑(trapping)하고 이들을 언어-특정 호출(language-specific call)로 번역하는 책임을 진다. 예를 들어, CLR-기반 SDM 런타임 라이브러리는 CLR 이벤트를 발생시킨다. All events are forwarded to component instances on runtime ports. The SDM runtime library is responsible for trapping these events and translating them into language-specific calls. For example, the CLR-based SDM runtime library generates CLR events.

컴포넌트 인스턴스 이벤트(Component instance events)Component instance events

이 이벤트들은, 컴포넌트 인스턴스가 생성되거나 존재하는 컴포넌트 인스턴스가 삭제될 때에 발생한다. 이벤트의 목적지는 언제나 부모 합성 컴포넌트 인스턴스(parent compound component instance)이다. 이벤트는 바로 위의 부모 컴포넌트 인스턴스로만 전송된다 - 이벤트들은 인스턴스 트리를 퍼지게 하지 않는다. 상술한 예로부터, 컴포넌트 인스턴스 "u[1].foo[2]"는 런타임이 멤버 컴포넌트 "c"의 새로운 인스턴스를 생성하도록 요청한다고 가정한다. 도 36을 참고하라.These events occur when a component instance is created or an existing component instance is deleted. The destination of an event is always a parent compound component instance. Events are only sent to the parent component instance directly above-they do not spread the instance tree. From the above example, assume that component instance "u [1] .foo [2]" requests that the runtime create a new instance of member component "c". See FIG. 36.

컴포넌트 인스턴스 "u[1].foo[2]"의 코드는 현재 기계 1에서 실행중이다. SDM RTL을 사용하여, 이는 런타임에게 컴포넌트 "c"의 새로운 인스턴스를 생성할 것을 요청한다. 런타임은 호출하는 컴포넌트 인스턴스를 알고 있고, 동작을 명확하게 하고(disambiguate) 살펴볼 수 있다(scope). 새로운 컴포넌트 인스턴스가 생성되고, 이벤트가 발생하고 호출한 컴포넌트 인스턴스로 다시 전달된다. 인스턴스가 파괴되거나 실패하면, 런타임은 적절한 이벤트를 부모 컴포넌트 인스턴스 및 적절한 컴포넌트 팩토리로 전송한다.The code for component instance "u [1] .foo [2]" is currently running on machine 1. Using the SDM RTL, it asks the runtime to create a new instance of component "c". The runtime knows which component instance to call, and can disambiguate and scope. A new component instance is created, an event is raised and passed back to the calling component instance. If the instance is destroyed or fails, the runtime sends the appropriate event to the parent component instance and the appropriate component factory.

포트 인스턴스 이벤트(Port instance events)Port instance events

컴포넌트 인스턴스가 포트 인스턴스를 생성하고나 존재하는 포트 인스턴스를 삭제하면, 부모 컴포넌트 인스턴스는 그 변경을 알게 된다. 도 37을 참고하라. 포트 인스턴스가 와이어 인스턴스에 부착되면, 와이어 인스턴스의 모든 멤버는 부모 컴포넌트 인스턴스뿐만 아니라 변경을 알게 된다. 이에 대해서는 다음 섹션에서 설명한다.When a component instance creates a port instance or deletes an existing port instance, the parent component instance will notice the change. See FIG. 37. When a port instance is attached to a wire instance, all members of the wire instance know of the change as well as the parent component instance. This is described in the next section.

포트 상태(Port states)Port states

모든 포트 인스턴스는 다음의 상태 중 어느 하나일 수 있다. Every port instance can be in one of the following states:

* 생성(Created) - 이는 처음 생성되었을 때, 포트의 상태이다. 이는 부모 컴포넌트 인스턴스로 전송된 이벤트를 트리거한다.Created-This is the state of the port when it was first created. This triggers an event sent to the parent component instance.

* 부착(Attached) - 포트가 와이어 인스턴스로 부착되면 포트는 이 상태가 된다. 이는 와이어 인스턴스의 모든 멤버 및 부모 컴포넌트 인스턴스로 전송되는 이벤트를 트리거한다.Attached-The port is in this state when the port is attached to the wire instance. This triggers an event that is sent to all member and parent component instances of the wire instance.

* 온라인(Online) - 포트가 동작을 위해 준비가 되면, 포트는 이 상태가 된 다. 이는 와이어 인스턴스의 모든 멤버 및 부모 컴포넌트 인스턴스로 전송되는 이벤트를 트리거한다.Online-The port is in this state when it is ready for operation. This triggers an event that is sent to all member and parent component instances of the wire instance.

* 오프라인(Offline) - 포트가 일반적인 동작을 중단하고자 하면 포트는 이 상태가 된다. 이는 와이어 인스턴스의 모든 멤버 및 부모 컴포넌트 인스턴스로 전송되는 이벤트를 트리거한다.Offline-The port is in this state if it wants to stop normal operation. This triggers an event that is sent to all member and parent component instances of the wire instance.

* 분리(Detached) - 포트가 와이어 인스턴스로부터 분리되면 포트는 이 상태가 된다. 이는 와이어 인스턴스의 모든 멤버 및 부모 컴포넌트 인스턴스로 전송되는 이벤트를 트리거한다.Detached-The port is in this state when the port is detached from the wire instance. This triggers an event that is sent to all member and parent component instances of the wire instance.

* 삭제(Deleted) - 포트가 인스턴스 스페이스로부터 제거되었을 때 포트는 이 상태가 된다. 이는 부모 컴포넌트 인스턴스로 전송되는 이벤트를 트리거한다. Deleted-The port is in this state when the port is removed from the instance space. This triggers an event sent to the parent component instance.

와이어 인스턴스 이벤트(Wire instance events)Wire instance events

와이어 인스턴스 이벤트는, 와이어 인스턴스가 생성되거나 삭제될 때 발생한다. 이 이벤트들의 목적지는 언제나, 와이어를 갖는 부모 컴포넌트 인스턴스이다. 도 38을 참고하라. Wire instance events occur when wire instances are created or deleted. The destination of these events is always the parent component instance with the wire. See FIG. 38.

와이어 인스턴스는 그 멤버로의 포트 참조(port references)를 포함할 수도 있다. 이 와이어 멤버십(membership)은 일정한 멤버 포트 이벤트의 목적지를 결정한다. 상술한 예제를 계속 검토한다. "foo[2].c[2]"는 다음과 같은 다수의 새로운 인스턴스를 생성한다고 가정한다:The wire instance may include port references to its members. This wire membership determines the destination of certain member port events. Review the example above. Assume "foo [2] .c [2]" creates a number of new instances such as:

component instance universal[1]component instance universal [1]

component instance foo[2]component instance foo [2]

component instance c[2]component instance c [2]

port instance y[1]port instance y [1]

component instance b1[1]component instance b1 [1]

port instance x[1]port instance x [1]

component instance b2[1]component instance b2 [1]

port instance x[1]port instance x [1]

wire instance p[1]wire instance p [1]

b1[1].x[1]b1 [1] .x [1]

b2[1].x[1]b2 [1] .x [1]

와이어 인스턴스 "p[1]"은 2개의 포트 인스턴스, "b[1].x[1]" 및 "b2[1].x[1]"로의 참조를 포함한다는 것을 유의하여야 한다. 컴포넌트 인스턴스 "b1[1]" 및 "b2[2]"은 각각 별도의 기계를 실행시킨다고 가정하다. 도 39에, "b2[1]"이 그 포트 상태를 오프라인으로 바꾸었을 때 이벤트가 발생하는 것이 도시되어 있다. Note that the wire instance "p [1]" includes references to two port instances, "b [1] .x [1]" and "b2 [1] .x [1]". It is assumed that component instances "b1 [1]" and "b2 [2]" each run a separate machine. In FIG. 39, an event occurs when "b2 [1]" changes its port state to offline.

"b2[1]"은 기계 3 상에 호스팅되고, 이는 런타임 상의 "포트 상태 설정(set port state)"를 발동시킨다는 것을 유의하여야 한다. 런타임은 변경을 기록하고 3개의 상태를 전송한다 - 한 개는 와이어 인스턴스 소유자 "u[1].foo[2].c[2]"로 전송되고, 두 개는 와이어 포트 인스턴스 멤버, "b1[1].x[1]" 및 "b2[1].x[1]"로 전송된다.It should be noted that "b2 [1]" is hosted on machine 3, which invokes "set port state" on runtime. The runtime records the change and sends three states-one to the wire instance owner "u [1] .foo [2] .c [2]", and two to the wire port instance member, "b1 [ 1] .x [1] "and" b2 [1] .x [1] ".

이벤트 전달(Event Delivery) 및 큐들(Queues)Event Delivery and Queues

런타임은 이벤트들을 순서대로 전달하는 것을 보장하지만, 소정의 와이어 인스턴스의 모든 멤버들 사이의 완전한 가상 공시상태(synchronism)를 보장하지는 않는다. 즉, SDM 런타임은, 컴포넌트 인스턴스가 천천히 운영되거나 정지하더라도, 앞으로의 진행이 가능하도록 할 수 있다.The runtime guarantees to deliver events in order, but does not guarantee complete virtual synchronism between all members of a given wire instance. In other words, the SDM runtime can allow future progress even if the component instance is running or stopped slowly.

SDM 사건들은 각각의 컴포넌트 인스턴스에 대하여 큐된다. 만일 이벤트가 대상의 큐들에 성공적으로 큐되면, 이벤트를 트리거한 동작은 성공으로 간주된다. 큐들은 본래 원형이고, 만일 컴포넌트가 심하게 지체되거나 멈추면 순환 반복한다. 순환 반복함으로써 새로운 "순환 반복(wrap-around)" 이벤트가 생성될 것이다. 이 사건은, 컴포넌트 인스턴스 자신뿐만 아니라 부모와 임의의 소유 팩토리들에게도 보내진다.SDM events are queued for each component instance. If the event is successfully queued to the target's queues, the action that triggered the event is considered successful. Cues are inherently circular and repeat if the component is severely delayed or stopped. By looping iteration a new "wrap-around" event will be generated. This event is sent not only to the component instance itself, but to the parent and any owning factories.

런타임 분할Runtime split

다수의 클라이언트를 지원하기 위하여, 런타임은 분할될 수 있다. SDM 인스턴스 스페이스의 엄격한 계층때문에, 이 문제는 아주 다루기가 쉽다. SDM 런타임은 특정 배포에 걸친 많은 기계에서 호스트가 될 수 있다. 각 SDM 런타임 인스턴스는 인스턴스 스페이스의 일부를 추적하는 역할을 한다. 컴포넌트 인스턴스들은 SDM 런타임 라이브러리를 사용하여 적절한 런타임과 통신한다. 도 40은 분할된 런타임과 몇몇의 클라이언트들을 도시한다.To support multiple clients, the runtime can be partitioned. Because of the strict hierarchy of SDM instance space, this problem is very easy to handle. The SDM runtime can be hosted on many machines across specific deployments. Each SDM runtime instance is responsible for tracking part of the instance space. Component instances use the SDM runtime library to communicate with the appropriate runtime. 40 shows a segmented runtime and several clients.

기계(1)는 두개의 컴포넌트 인스턴스와 SDM 런타임 라이브러리를 포함한다. 기계(2)는 단일 컴포넌트 예와 런타임 라이브러리를 포함한다. 기계(3)는 전용 SDM 런타임에 대해 호스트가 된다. 기계(4)는 SDM 런타임과 컴포넌트 인스턴스를 가진다. 기계(3, 4) 상의 두개의 SDM 런타임이 통신한다는 것을 또한 알아야 한다.The machine 1 includes two component instances and an SDM runtime library. The machine 2 includes a single component example and a runtime library. The machine 3 becomes a host for the dedicated SDM runtime. The machine 4 has an SDM runtime and component instances. It should also be noted that two SDM runtimes on machines 3 and 4 communicate.

분할Division

런타임은 SDM 내의 본래의 고유 계층에 영향을 줘서 자신을 분할한다. 분할 행위는 SDM 유형과 인스턴스 스페이스의 부분들을 다른 동작 런타임 예들에 걸쳐 분산하는 것을 포함한다. 분산은 비율화(scalability)를 위해 반드시 필요하다. 분산은 유형들과 예들에 대해 다르게 발생한다.The runtime splits itself by affecting the native layer in the SDM. The partitioning action involves distributing portions of the SDM type and instance space across different operational runtime examples. Variance is essential for scalability. Dispersion occurs differently for types and examples.

Figure 112004009477667-pat00001
유형과 멤버 스페이스: 소정의 런타임은, 통상적으로 이름 스페이스 내에 체계화되는 많은 유형 정의를 포함할 수 있다. 각 런타임은 추적하는 예들에 의해 정의되는 멤버들과 유형들에 대해 알기만 하면 된다. 이들은 다중 런타임 상에 나타날 수 있다. 즉, 유형과 멤버 스페이스 내에 오버랩이 허용된다.
Figure 112004009477667-pat00001
Types and Member Spaces: Certain runtimes may include many type definitions, typically organized within a namespace. Each runtime only needs to know about the members and types defined by the tracking examples. These can appear on multiple runtimes. That is, overlaps are allowed within types and member spaces.

Figure 112004009477667-pat00002
인스턴스 스페이스: 소정의 런타임은 인스턴스 스페이스의 일부분을 추적하기만 하면 된다. 인스턴스 스페이스는 복합 컴포넌트 인스턴스 경계들 상에서 분할된다. 인스턴스 스페이스 내의 오버랩은 허용되지 않는다. 이것은 예에 의해 가장 잘 설명된다. 다음의 컴포넌트 유형 정의를 보자.
Figure 112004009477667-pat00002
Instance space: Some runtimes only need to keep track of a portion of the instance space. The instance space is partitioned on the composite component instance boundaries. Overlap in instance space is not allowed. This is best explained by example. Consider the following component type definition.

componenttype B {componenttype B {

port X x;port X x;

}}

componenttype C {componenttype C {

port Y y;port Y y;

component B b1;component B b1;

component B b2;component B b2;

wire P p { b1.x; b2.x; }wire P p {b1.x; b2.x; }

componenttype A {componenttype A {

port internal Z z;port internal Z z;

component C c;component C c;

wire W w { z; c.y}wire W w {z; c.y}

}}

componenttype universal u {componenttype universal u {

component A foo;component A foo;

component A bar; component A bar;

}}

이 정의는 세 컴포넌트 유형(A, B, C)를 포함한다. A는 루트 범용 컴포넌트(root universal component)의 멤버이다. B와 C는 A의 멤버들이다. 도 41에 도시된 바와 같이, 멤버 스페이스를 그림으로 나타내었다. 복합 컴포넌트들을 나타내기 위해 상자들이 사용될 것이다. 다른 복합 컴포넌트들이 아닌 복합 컴포넌트 멤버들이 컴포넌트 상자 안에서 설명된다. 이 예에서, 와이어 "w"은 복합 컴포넌트 "foo"와 "bar"의 멤버이고, 따라서 "a" 상자 안에 나타낸다.This definition contains three component types: A, B, and C. A is a member of the root universal component. B and C are members of A. As shown in FIG. 41, the member space is shown in a picture. Boxes will be used to represent composite components. Compound component members, not other composite components, are described in the component box. In this example, the wire "w" is a member of the composite components "foo" and "bar" and therefore appears in the box "a".

인스턴스 스페이스에서, 각 컴포넌트, 포트 및 와이어의 많은 예들이 있다. 인스턴스 계층이 도 42에 도시된다. 여기에서 상자는 컴포넌트 인스턴스에 대한 추적된 인스턴스 상태를 나타낸다. 이것은 컴포넌트 인스턴스 구현 코드가 아니다.In the instance space, there are many examples of each component, port, and wire. The instance hierarchy is shown in FIG. 42. The box here represents the tracked instance state for the component instance. This is not component instance implementation code.

세개의 런타임, 런타임1, 런타임2 및 런타임3 사이에서 SDM 모델을 분할하기를 원한다고 가정하자. 도 43은 예 스페이스를 분할하는 예시이다. 이 예에서, 런타임1은 "범용[1]", "foo[1]", "foo[2]" 및 "bar[1]"을 추적한다. 런타임2는 "foo[1].c[1]", "foo[1].c[2]" 및 "foo[2].c[1]"을 추적한다. 런타임3은 "bar[1].c[1]"을 추적한다. 게다가, 런타임들은, 런타임이 추적하는 인스턴스들에 대한 모든 유형에 대해 알아야 한다. 이 예에서, 런타임3은 부모 "bar"에 의한 컴포넌트 유형 "C", "B" 및 "A"에 대해 알아야 한다. 또한, 포트 유형 "Y"와 와이어 "P"에 대해서도 알아야만 한다.Suppose you want to split the SDM model between three runtimes, Runtime1, Runtime2, and Runtime3. 43 shows an example of dividing the example space. In this example, runtime1 tracks "general [1]", "foo [1]", "foo [2]" and "bar [1]". Runtime2 tracks "foo [1] .c [1]", "foo [1] .c [2]" and "foo [2] .c [1]". Runtime3 tracks "bar [1] .c [1]". In addition, runtimes must know about all types of instances that the runtime tracks. In this example, Runtime3 must know about component types "C", "B" and "A" by the parent "bar". You also need to know port type "Y" and wire "P".

다른 런타임들은 또한 그들의 관계를 보유하고 있어야만 한다. 이 관계는 SDM 계층에 의해 요구된다. 전의 예에서, 런타임1과 런타임2은 "foo[1].c[1]", "foo[1].c[2]" 및 "foo[2].c[1]" 관계를 관리하기 위해 각각을 알아야만 한다. 유사하게, 런타임1과 런타임3은 "bar[1].c[1]"을 둘러싼 작업을 조정해야만 한다. 런타임2와 런타임3은 서로에 대해 알 필요가 없다는 것에 주목하자.Other runtimes must also have their relationships. This relationship is required by the SDM layer. In the previous example, Runtime1 and Runtime2 manage the relationships "foo [1] .c [1]", "foo [1] .c [2]", and "foo [2] .c [1]". You must know each one. Similarly, runtime 1 and runtime 3 must coordinate the work surrounding "bar [1] .c [1]". Note that Runtime2 and Runtime3 do not need to know about each other.

분할 방법Split method

런타임은 자기 분할을 위한 충분한 논리를 포함한다. 특정 분할 방법은 수행, 용량 및 SDM 정의 제약들에 기초한다. 이 분할은 동적이고 SDM 모델이 발달함에 따라 변화한다.The runtime includes enough logic for self partitioning. The specific partitioning method is based on performance, capacity and SDM definition constraints. This division is dynamic and changes as the SDM model evolves.

단일루트 런타임(Single-root Runtime)Single-root runtime

단일루트 컴포넌트 예의 모든 예들인 복합 컴포넌트 인스턴스들을 추적하는 런타임들은 단일루트 런타임들로 참조된다. 위 예시에서, 런타임1 및 런타임3은 단일루트 런타임들이다. 런타임1은 "universal[1]"에서 시작하는 루트 인스턴스 트리를 가지고, 런타임3은 "bar[1].c[1]"에서 시작하는 루트 인스턴스 트리를 가진다.Runtimes that track composite component instances, which are all examples of single-root component examples, are referred to as single-root runtimes. In the above example, Runtime1 and Runtime3 are single root runtimes. Runtime1 has a root instance tree starting at "universal [1]", and runtime3 has a root instance tree starting at "bar [1] .c [1]".

다중루트 런타임(Multi-root Runtime)Multi-root runtime

루트 복합 컴포넌트 예를 갖지 않는 복합 인스턴스들을 추적하는 런타임들은 다중루트 런타임들로 참조된다. 위 예시에서, 런타임2은 모두 루트들인 "foo[1].c[1]", "foo[1].c[2]" 및 "foo[2].c[1]"을 추적하기 때문에 다중루트 런타임이다.Runtimes tracking complex instances that do not have a root composite component example are referred to as multiroot runtimes. In the example above, run-time2 tracks the roots "foo [1] .c [1]", "foo [1] .c [2]" and "foo [2] .c [1]" all together. Root runtime.

서비스 설치Service installation

소정의 SDM 런타임 상에서 서비스가 설명되기 전에, SDM 런타임이 먼저 설치되어야 한다. 설치 과정은 다음 단계들을 포함한다.Before a service is described on a given SDM runtime, the SDM runtime must first be installed. The installation process includes the following steps:

서비스 배포 유닛을 런타임 배포 할당(runtime deployment share)으로 복사하는 단계Steps to Copy Service Deployment Units to Runtime Deployment Shares

SDM 런타임 API를 호출하여 설치를 시작하는 단계Steps to start the installation by calling the SDM runtime API

서비스 배포 유닛들Service distribution units

SDU는 서비스 배포 유닛이다. 이는,SDUs are service distribution units. this is,

SDM 어셈블리 - 새로운 서비스에 대한 유형 정보이다. 이 서비스에 대한 모든 컴포넌트 유형, 와이어 유형들 및 포트 유형들을 포함한다. 이 어셈블리는 SDML 서비스를 컴파일한 결과이다.SDM assembly-Type information about the new service. Contains all component types, wire types, and port types for this service. This assembly is the result of compiling the SDML service.

런타임-호스트 컴포넌트 인스턴스 코드(Runtime-hosted component instance code) - 런타임에 의해 호스트되고 SDML 내의 구현 키워드에 의해 참조되는 임의의 CLR 코드는 SDU에 포함되어야 한다.Runtime-hosted component instance code-Any CLR code hosted by the runtime and referenced by an implementation keyword in the SDML must be included in the SDU.

다른 서비스 바이너리들(binaries) - 구성 파일들, DLL, GIF, HTML, SQL 스크립트 등과 같은 모든 다른 바이너리들이 배포 유닛의 일부로 또한 간주된다.Other service binaries-all other binaries such as configuration files, DLLs, GIFs, HTML, SQL scripts, etc. are also considered part of the distribution unit.

로 구성된다.It consists of.

SDU는 변경되지 않는다. SDU에 대한 변경은 허용되지 않는다. 일단 SDU가 설치되면, 변경될 수 없다. 물론, 업그레이드된 새로운 버전의 SDU를 설치할 수 있고, 예전 버전(들)을 사용하지 않을 수 있다.SDUs are not changed. Changes to SDUs are not allowed. Once an SDU is installed, it cannot be changed. Of course, you can install an upgraded new version of the SDU and not use the old version (s).

SDU 형식SDU format

SDU는 SDM 런타임에 의해 사용되는 바이너리들의 디렉토리이고 잠재적인 컴포넌트 팩토리들이다. 디렉토리는 형식상 큰 제약이 없으나 다음 구조가 기대된다.SDUs are directories of binaries and potential component factories used by the SDM runtime. The directory is not restricted in format, but the following structure is expected.

\sduroot\ sduroot

\<assembly name>.<version>\ <assembly name>. <version>

\<assembly name>.sdmassembly\ <assembly name> .sdmassembly

\bin\ bin

\<Runtime hosted CLR assembly_1>.dll\ <Runtime hosted CLR assembly_1> .dll

\<Runtime hosted CLR assembly_2>.dll\ <Runtime hosted CLR assembly_2> .dll

\<Runtime hosted CLR assembly_n>.dll\ <Runtime hosted CLR assembly_n> .dll

\<other files and directories>\ <other files and directories>

SDU는 CAB 파일로 포장된다.SDUs are packaged in CAB files.

구현avatar

SDM 런타임은 IIL 서버 상에서 동작하는 .NET 웹서비스로서 구현된다. SDM 저장은 신뢰성 있는 SQL 서버 데이터베이스이다. SDM 런타임 웹서비스는 비상태유지(stateless) 웹서비스이다. 즉, SDM 런타임 서비스 내의 임의의 상태는 일시적이다. 모든 영속적인 상태가 명확한 처리 경계들에 있는 기억장치에 기록된다.The SDM runtime is implemented as a .NET web service running on an IIL server. SDM storage is a reliable SQL Server database. SDM runtime web services are stateless web services. In other words, any state in the SDM runtime service is temporary. All persistent states are recorded in memory at clear processing boundaries.

SDM 런타임 서비스는 종료되고 임의의 지점, 서로 다른 기계들에서조차 재시작될 수 있다. 만일 SDM 런타임이 동일한 SDM 기억장치에서 지시되면, 모든 작업이 방해가 없거나 거의 없이 다시 시작될 수 있다.The SDM runtime service can be terminated and restarted at any point, even on different machines. If the SDM runtime is pointed at the same SDM storage, all jobs can be restarted with little or no interruption.

SDM 기억SDM memory

SDM 런타임은 SDM들과 인스턴스들을 위해 영속적인 기억장치를 이용한다. 이 기억장치는, SDM 런타임 서비스와 같이 동일한 기계 상에 통상적으로 위치하지만, 확실히 다르게 배포될 수 있다. SDM 기억장치는, 모든 SDM 모델들과 그들의 인스턴스들에 대한 정보를 포함하는 SQL 서버 데이터베이스이다.The SDM runtime uses persistent storage for SDMs and instances. This storage is typically located on the same machine as the SDM runtime service, but can certainly be distributed differently. SDM storage is a SQL Server database that contains information about all SDM models and their instances.

SDM 기억장치의 이러한 신뢰성과 가용성은 필수적이다. SDM을 위한 키 설계 목적들 중의 하나는, 마지막에 아는 일관된 상태(last know consistent state)에서 시스템을 재시작할 수 있는 능력이다. SDM은, 따라서, 높은 신뢰성을 필요로 하고, 큰 재난 시나리오들에서 견뎌야만 한다. 이는 두가지 방법으로 구현된다.This reliability and availability of SDM storage is essential. One of the key design goals for SDM is the ability to restart the system in a last know consistent state. SDM thus requires high reliability and must withstand large disaster scenarios. This is implemented in two ways.

SDM 기억장치는 복제되고 여분의 핫 백업은 언제나 사용 가능하다. 이는 유콘의 여분 데이터베이스 기술(Yukon's redundant database technology)을 사용하여 구현된다.SDM storage is duplicated and an extra hot backup is always available. This is implemented using Yukon's redundant database technology.

SDM 기억장치는 정기적으로 백업되고 사이트 밖에서 저장된다. 백업은 현 모델들, 예들, 및 SDM 기억장치 내에 저장된 임의의 서비스 상태의 자기-일관 스냅샷(self-consistent snapshot)이다.SDM storage is regularly backed up and stored off site. A backup is a self-consistent snapshot of current models, examples, and any service state stored in SDM storage.

서비스 기억장치Service storage

SDM 런타임은 컴포넌트 인스턴스 레벨에서 저장을 용이하게 한다. 모든 컴포넌트 인스턴스는 런타임 API를 사용하여 데이터를 SDM 기억장치에 저장한다. 반-구조 기억장치(semi-structure store)를 고려하더라도, 최소한 이 기억장치는 BLOB 기억장치이다.The SDM runtime facilitates storage at the component instance level. All component instances use runtime APIs to store data in SDM storage. Even when considering a semi-structure store, at least this is a BLOB store.

런타임에 저장된 서비스 상태는 SDM 런타임만큼 신뢰성 있고 영속적인 것이 보장된다. 서비스 상태는 또한 다른 런타임 상태와 일관성 있는 것이 보장된다. 서비스가 충분한 정보를 그들의 상태에 (지시자들의 측면에서) 저장하는 것을 기대하는 대신에, SDM 기억장치 내에 저장될 모든 서비스 상태에 대해 말하는 것은 물론 아니다. 복구되면, 서비스는 그 데이터의 지시자들을 검색하고 필요한 단계들을 수행할 수 있다. 아래의 복구를 보자.The service state stored at runtime is guaranteed to be as reliable and persistent as the SDM runtime. The service state is also guaranteed to be consistent with other runtime states. Instead of expecting services to store enough information in their state (in terms of indicators), it does not, of course, talk about all service states to be stored in SDM storage. Once recovered, the service can retrieve the indicators of that data and perform the necessary steps. See recovery below.

SDM 런타임 보안SDM runtime security

시나리오 설명Scenario description

SDM 런타임을 위한 보안 모델을 정의할 두개의 기본 시나리오가 있다. 개발 자 테스트-런 시나리오와 오퍼레이터 생산 배포 시나리오이다. 두 시나리오에 대한 공통적인 요구사항은 다음과 같다.There are two basic scenarios for defining a security model for the SDM runtime. Developer test-run scenarios and operator production deployment scenarios. Common requirements for both scenarios are as follows.

Figure 112004009477667-pat00003
SDM 런타임이 실행되고 있는 컴퓨터로부터 타겟 서버들로 접속할 수 있는 능력
Figure 112004009477667-pat00003
Ability to connect to target servers from the computer running the SDM runtime

Figure 112004009477667-pat00004
액티브 디렉토리(Active Directory) 도메인 계정들을 사용한 윈도우 인증
Figure 112004009477667-pat00004
Windows Authentication Using Active Directory Domain Accounts

Figure 112004009477667-pat00005
설치, 업데이트 및 설치제거 동작들을 위해 타겟 서버 자원들에 접근하기 위한 신뢰 서브시스템 모델
Figure 112004009477667-pat00005
Trusted subsystem model for accessing target server resources for install, update, and uninstall operations

Figure 112004009477667-pat00006
윈도우 서비스로 구현되고 신뢰 서비스 계정으로 동작되는 SDM 런타임
Figure 112004009477667-pat00006
SDM runtime implemented as a Windows service and operating as a trusted service account

Figure 112004009477667-pat00007
SDM 클래스, 유형 및 인스턴스 정보를 추적하는 데이터베이스 역할, 및 윈도우 인증을 사용하도록 구성된 데이터베이스(MSDE)
Figure 112004009477667-pat00007
Database roles that track SDM class, type, and instance information, and databases configured to use Windows Authentication (MSDE)

개발자 테스트 런 시나리오Developer Test Run Scenario

개발자는 테스트 환경에서 분산 애플리케이션을 하나 이상의 서버로 배포할 수 있어야 한다. 대상 서버들은 단독 워크그룹의 일부이거나 동일한 액티브 디렉토리 도메인 내에 있다. 테스트 런 배포가 초기화되는 컴퓨터는 타겟 서버(들)로써 동일한 워크그룹이나 도메인에 있어야만 한다.Developers need to be able to deploy distributed applications to one or more servers in a test environment. Target servers are either part of a single workgroup or in the same Active Directory domain. The computer on which the test run deployment is initiated must be in the same workgroup or domain as the target server (s).

1. 개발자는 비쥬얼 스튜디오(Visual Studio)를 사용하여 서비스 배포 유닛(Service Deployment Unit; SDU)를 생성한다.1. A developer creates a Service Deployment Unit (SDU) using Visual Studio.

2. 생성된 SDU는, SDM 런타임 서비스가 실행되는 컴퓨터 상의 배포 폴더 내에 위치한다.2. The created SDU is located in a distribution folder on the computer on which the SDM runtime service runs.

3. 개발자는 배포 행동(설치, 업데이트, 설치제거)을 선택하고, 윈도우 인증 적격에 대해 상기한다.3. The developer chooses the distribution behavior (install, update, uninstall) and reminds them of their Windows certification eligibility.

4. 개발자는 인증을 받고, 인증받은 사용자가 요청된 배포 동작을 수행하도록 허가되는지를 결정하는 배포 역할에 매핑된다.4. The developer is authenticated and mapped to a deployment role that determines whether the authenticated user is authorized to perform the requested deployment action.

5. 개발자는, 어느 컴포넌트들을 어느 타겟 서버들 상에서 설치, 업데이트 또는 삭제할지를 선택한다.5. The developer chooses which components to install, update or delete on which target servers.

6. SDM 런타임 서비스는 두 방법 중 하나로 선택된 타겟 서버들에 연결된다.
만일 SDM 런타임 서비스가 액티브 디렉토리에서 신뢰 서비스 계정으로써 동작하고 있다면, 타겟 서버들 상의 계정으로써 연결될 것이다. 그렇지 않으면, SDM 런타임 서비스는 인증된 사용자처럼 연결될 것이고, 이는 인격화가 가능하지 않다면 타겟 서버에서 추가적인 인증을 필요로 할 수 있다.
6. The SDM runtime service connects to the selected target servers in one of two ways.
If the SDM runtime service is running as a trusted service account in Active Directory, it will connect as an account on the target servers. Otherwise, the SDM runtime service will connect as an authenticated user, which may require additional authentication at the target server if personalization is not possible.

오퍼레이터 생산 배포 시나리오Operator Production Deployment Scenario

오퍼레이터는 데이터 센터 환경에서 분산된 애플리케이션을 하나 이상의 서버에 배포해야 한다. 타겟 서버들은 액티브 디렉토리 도메인 또는 포레스트의 부분이어야 한다. 테스트 런 배포가 초기화되는 컴퓨터는 타겟 서버(들)로써 동일한 도메인 또는 포레스트 내에 있어야 한다.Operators must deploy distributed applications on one or more servers in a data center environment. Target servers must be part of an Active Directory domain or forest. The computer on which the test run deployment is initiated must be in the same domain or forest as the target server (s).

1. 애플리케이션 SDU는 SDM 런타임 서비스가 실행되는 컴퓨터 상의 배포 폴더 내에 위치한다.1. Application SDUs are located in a distribution folder on the computer on which the SDM runtime service runs.

2. 오퍼레이터는 배포 행동(설치, 업데이트, 설치제거)을 선택하고 도메인 적격에 대해 상기한다.2. The operator selects the distribution behavior (install, update, uninstall) and recalls about domain eligibility.

3. 오퍼레이터는 인증되고, 인증받은 사용자가 요청된 배포 동작을 수행하도 록 허가되는지를 결정하는 배포 역할에 매핑된다.3. The operator is authenticated and mapped to a deployment role that determines whether the authenticated user is authorized to perform the requested deployment operation.

4. 오퍼레이터는, 어느 컴포넌트들을 어느 타겟 서버들 상에서 설치, 업데이트 또는 삭제할지를 선택한다.4. The operator selects which components to install, update or delete on which target servers.

5. SDM 런타임 서비스는 신뢰 서비스 계정으로써 선택된 타겟 서버들에 연결되고 동작을 수행한다.5. The SDM runtime service connects to the selected target servers as a trusted service account and performs the actions.

특징 설명Feature Description

행동 특정Behavior specific

SDM 런타임은 모든 SDM 클래스, 유형 및 인스턴스를 추적하는 것을 담당한다. SDM 런타임은 분산된 애플리케이션을 배포하기 위한 목적으로 SDM 문서에서의 운영과 등록을 위해 SOAP 인터페이스 세트를 공개한다.The SDM runtime is responsible for keeping track of all SDM classes, types, and instances. The SDM runtime exposes a set of SOAP interfaces for operation and registration in SDM documents for the purpose of distributing distributed applications.

SDM 런타임은 다음의 주요 컴포넌트들을 포함한다.The SDM runtime includes the following major components.

Figure 112004009477667-pat00008
관련된 런타임 라이브러리를 구비한 웹 서비스,
Figure 112004009477667-pat00008
Web services with associated runtime libraries,

Figure 112004009477667-pat00009
윈도우 서비스,
Figure 112004009477667-pat00009
Windows Service,

Figure 112004009477667-pat00010
MSDE(또는 유콘)와 같은 데이터베이스.
Figure 112004009477667-pat00010
Database such as MSDE (or Yukon).

도 44는 SDM 런타임 컴포넌트들, 배포 도구 및 타겟 서버들 사이의 관계를 도시한다. 도 44에서, 사용자는 배포 행동을 초기화하기 위해 배포 도구 UI 또는 명령-라인 인터페이스와 상호 작용한다.44 illustrates the relationship between SDM runtime components, deployment tool, and target servers. In FIG. 44, a user interacts with a deployment tool UI or command-line interface to initiate deployment behavior.

런타임 라이브러리는 웹 서비스에 의해 공개된 SOAP 인터페이스들의 세트를 제공한다. 웹 서비스는 배포 행동을 수행하기 위해 윈도우 서비스가 검색하는 데이터베이스에 정보를 기입한다. 웹 서비스는 윈도우 인증을 사용하여 SDM 런타임 데이터베이스에 대해 사용자를 인증하고, 데이터베이스에 의해 정의된 역할들에 기초한 배포 행동들을 허가한다.The runtime library provides a set of SOAP interfaces exposed by the web service. The web service writes information to the database that the Windows service retrieves to perform the distribution behavior. The web service uses Windows authentication to authenticate the user against the SDM runtime database and permits distribution actions based on the roles defined by the database.

생산 환경에서, 윈도우 서비스는 액티브 디렉토리 서비스 계정으로써 수행되고 타겟 서버들은 관리 목적으로 도메인 서비스 계정을 신뢰하도록 구성된다. 윈도우 서비스는, 서비스 계정의 인격화(사용자가 아님)를 사용하는 타겟 서버들과 원격에 있는 WMI를 사용한다. 이러한 신뢰 서비스 모델은 더욱 축소 가능하고 사용자당 기반의 목적 서브 ACL들을 관리할 필요를 최소화한다. 오퍼레이터들은 배포 동작들을 실행하기 위하여 타겟 서버들 상에서 관리자들이 되지 않아도 된다.In a production environment, Windows services are run as Active Directory service accounts and target servers are configured to trust domain service accounts for administrative purposes. Windows services use remote WMI with target servers that use personalization (not users) of service accounts. This trust service model is more scalable and minimizes the need to manage per-user based destination sub ACLs. Operators do not have to be administrators on target servers to perform deployment operations.

테스트 런 환경에서, 윈도우 서비스는 액티브 디렉토리 서비스 계정 또는 액티브 데릭토리가 없는 비-특권 네트워크서비스 계정 중의 어느 하나로써 수행된다. 후자는 타겟 서버들 상에서 인증된 사용자 계정의 인격화를 요구한다.In a test run environment, the Windows service runs as either an Active Directory service account or a non-privileged network service account without an active directory. The latter requires personalization of the authenticated user account on the target servers.

UI 설명UI description

SDM 런타임 자체를 위한 UI는 없다. SDM 런타임은, 배포 도구 UI를 통하거나 명령-라인 도구들의 세트를 통해 야기될 수 있는 API들의 세트를 공개한다. 배포 도구 UI는 별도의 문서 내에서 특정된다.There is no UI for the SDM runtime itself. The SDM runtime exposes a set of APIs that can be raised via the deployment tool UI or through a set of command-line tools. The deployment tool UI is specified within a separate document.

보안 모델Security model

SDM 런타임을 위한 보안 모델은 타겟 서버들로 접근하는 고정된 신원을 사용하는 신뢰 서브시스템 모델이고, 이러한 고정 서버들로 분산 컴포넌트들이 배포된다. 인증된 사용자의 보안 컨텍스트는 이 모델에서 타겟 서버들까지 이르지 않는다. 이 보안 모델의 기본적인 가정은 타겟 서버들이 SDM 런타임 서비스의 고정된 신원을 신뢰한다는 것으로, 따라서 타겟 서버들 상의 각각의 사용자들을 위한 관리권을 처리할 필요를 제거한다. 도 45는 고정된 신원 신뢰 관계를 도시한다.The security model for the SDM runtime is a trust subsystem model that uses a fixed identity to access target servers, and distributed components are distributed to these fixed servers. The security context of an authenticated user does not reach the target servers in this model. The basic assumption of this security model is that the target servers trust the fixed identity of the SDM runtime service, thus eliminating the need to handle administrative rights for each user on the target servers. 45 illustrates a fixed identity trust relationship.

신뢰 서브시스템으로, 신뢰 도메인 계정 하에서 확실히 SDM 런타임 서비스를 구동하거나, 심지어 지역 비-특권 네트워크서비스 계정으로써 이를 구동할 수 있다. 이해의 요점은 임의의 배포 행동에 대한 인증은 역할-기반 허가를 사용하여 SDM 런타임에 의해 관리된다는 것과, SDM 런타임 서비스만이, 일단 사용자가 인증되고 요구된 배포 동작을 허용하는 역할에 매핑되면, 타겟 서버들 상에서 설치, 업데이트 및 설치제거 행동들이다.With the trust subsystem, you can run the SDM runtime service under the trusted domain account, or even as a local non-privileged network service account. The point of understanding is that authentication for any deployment behavior is managed by the SDM runtime using role-based authorization, and that only the SDM runtime service, once a user is mapped to a role that allows authenticated and requested deployment behavior, Install, update, and uninstall actions on target servers.

인증certification

인증은 사용자의 신원을, 사용자와 근원적인 보안 기반시설에만 알려진 적격 비밀(credential secrete)에 기초하여 입증하는 과정이다. 분산형 애플리케이션 배포의 목적으로, 액티브 디렉토리 도메인 계정들 또는 지역 계정들을 통해 사용자는 윈도우 인증을 사용하여 인증된다. 지역 계정들이 사용되면, 배포 컴퓨터 상의 지역 계정 이름들과 암호들은 타겟 서버들 상에서 동일해야만 한다.Authentication is the process of verifying a user's identity based on a credential secrete known only to the user and the underlying security infrastructure. For distributed application distribution purposes, users are authenticated using Windows authentication through Active Directory domain accounts or local accounts. If local accounts are used, the local account names and passwords on the distribution computer must be the same on the target servers.

허가permission

일단 사용자가 인증되면, 설치, 업데이트 또는 설치제거와 같은 배포 동작을 수행하기 위한 허가가, 인증된 사용자가 멤버인 데이터베이스 역할에 기초하여 승인된다. 윈도우 사용자와 그룹 계정들은 SQL 서버 데이터베이스 역할의 멤버들이기 때문에, 기본적인 허가 순서는 다음과 같다.Once a user is authenticated, permission to perform a deployment operation such as install, update or uninstall is granted based on the database role of which the authenticated user is a member. Because Windows user and group accounts are members of the SQL Server database role, the basic order of authorization is as follows:

1. 웹 서비스는 윈도우 인증을 사용하여 사용자를 인증한다.1. The web service uses Windows authentication to authenticate the user.

2. 웹 서비스는 인증된 사용자로써 데이터베이스에 연결된다.2. The web service connects to the database as an authenticated user.

3. 사용자는, 사용자 또는 그룹 계정 멤버쉽에 기초하여 데이터베이스 역할에 매핑된다.3. A user is mapped to a database role based on user or group account membership.

4. 웹 서비스는, SDM 런타임의 윈도우 서비스 컴포넌트에 의해 비동기적으로 판독될 수 있는 적절한 데이터베이스 테이블에 배포 행동 정보를 기입한다.4. The web service writes the distribution behavior information to the appropriate database table which can be read asynchronously by the window service component of the SDM runtime.

운영 체제 기반 시설 밖에서 암호를 관리할 필요없고 사용자 단위로 타겟 서버들 상의 ACL들을 관리할 필요가 없다는 점에 주목하자.Note that there is no need to manage passwords outside the operating system infrastructure and to manage ACLs on target servers on a per-user basis.

인격화(Impersonation)Impersonation

인격화는 현재의 과정 소유자가 아닌 다른 계정의 보안 컨텍스트 내의 코드를 실행하는 능력이다. 타겟 서버들로의 원격 연결들은 인격화를 작동시킨 상태에서 WMI를 사용하여 설정된다. 인격화는, 액티브 디렉토리가 존재할 때 신뢰 서비스 신원에 기초하고, 액티브 디렉토리가 사용 가능하지 않을 때(예를 들면, 테스트 런 환경) 인증된 사용자의 보안 컨텍스트에 기초한다.Personalization is the ability to execute code in the security context of an account other than the current process owner. Remote connections to target servers are established using WMI with personalization enabled. Personalization is based on trusted service identity when Active Directory is present and based on the security context of an authenticated user when Active Directory is not available (eg, a test run environment).

윈도우 서비스Windows service

SDM 런타임의 윈도우 서비스 컴포넌트는 타겟 서버들 상의 관리권과 함께 서비스 계정으로써 구동되어야 한다. 타겟 서버들 상에 소프트웨어를 설치하고 IIS, SQL 및 등록을 위한 다양한 설정을 생성하는 요구 조건들이 있기 때문에, 관리권이 필요하다.The Windows service component of the SDM runtime must be run as a service account with administrative rights on the target servers. Because there are requirements to install software on target servers and create various settings for IIS, SQL, and registration, administrative rights are required.

액티브 디렉토리 도메인 계정이 없는 경우에, 윈도우 서비스는 타겟 서버들 상에서 관리 행동들을 수행하도록 허가된 사용자 계정을 인격화한다. 이 경우에 윈도우 서비스는 암호를 요구하지 않는 네트워크서비스 계정으로써 구동하고 지역 컴퓨터 상의 비-특권 사용자이다. 윈도우 서비스는 연결될 때 지역 컴퓨터 적격을 원격 컴퓨터에 제공한다.In the absence of an Active Directory domain account, the Windows service personalizes a user account authorized to perform administrative actions on target servers. In this case, the Windows service runs as a network service account that does not require a password and is a non-privileged user on the local computer. Windows services provide local computer eligibility to remote computers when connected.

IISIIS

SQL 서버SQL Server

SQL 서버는 두개의 인증 모드를 운영할 수 있다. 윈도우 인증 모드와 혼합 모드이다. 윈도우 인증 모드는 혼합 모드보다 안전하기 때문에, SDM 런타임 데이터베이스를 위한 SQL 서버는 윈도우 인증 모드만을 위해 구성된다. 이것은 sa 계정이 SDM 런타임 데이터베이스를 인증하는데 사용하지 못하도록 한다. SDM 런타임 데이터베이스에 대한 관리 특권들은 액티브 디렉토리 인증 기반시설에 영향을 주기 위하여 윈도우 그룹 멤버쉽을 통해 제어된다. SQL 서버를 관리하고 특정 사용자들을 그룹에 추가하기 위해 액티브 디렉토리 그룹을 사용함으로써, 특별한 계정 상의 암호들을 관리할 필요 없이 SDM 런타임 데이터베이스로의 접근을 제어하는 것이 보다 용이해진다.SQL Server can operate in two authentication modes. Windows authentication mode and mixed mode. Because Windows authentication mode is more secure than mixed mode, the SQL server for the SDM runtime database is configured for Windows authentication mode only. This prevents the sa account from being used to authenticate the SDM runtime database. Administrative privileges on the SDM runtime database are controlled through window group membership to affect the Active Directory authentication infrastructure. By using Active Directory groups to manage SQL Server and add specific users to groups, it is easier to control access to the SDM runtime database without having to manage passwords on special accounts.

SDM 런타임 데이터베이스에 부가하여, SQL 서버를 구동하는 타겟 서버들은 또한 윈도우 인증 모드를 사용하고 윈도우 그룹 멤버쉽을 통한 관리 접근을 처리한다. SDM 런타임 데이터베이스를 위한 윈도우 그룹과 타겟 서버들을 위한 윈도우 그룹은 서로 다른 그룹들이어야 한다. 고객이 SQL 서버 기계들을 관리하기 위해 하나 또는 몇몇의 윈도우 그룹을 가질지는 정책적 결정이다.In addition to the SDM runtime database, target servers running SQL Server also use Windows Authentication mode and handle administrative access through Windows group membership. The window group for the SDM runtime database and the window group for the target servers must be different groups. It is a policy decision whether a customer will have one or several window groups to manage SQL Server machines.

예를 들면:For example:

SDM 런타임 관리자 그룹SDM Runtime Administrator Group

사용자 A, 사용자 BUser A, User B

SQL 서버 계층 1 관리자 그룹SQL Server Tier 1 Administrators Group

사용자 C, 사용자 DUser C, User D

SQL 서버 계층 2 관리자 그룹SQL Server Tier 2 Administrators Group

사용자 C, 사용자 EUser C, User E

SDM 서버 개요SDM Server Overview

소개Introduce

SDM 서버란 무엇인가 - SDM 서버는 SDM 주변을 바탕으로 하는 서비스들의 세트이다. 현재, 두개의 배포 도구의 아키텍쳐 상으로 접근하는 두가지 일반적인 방법이 있다. 각각이 여기서 설명된다.What is an SDM server-An SDM server is a set of services based around an SDM. Currently, there are two general ways to approach the architecture of two deployment tools. Each is described herein.

분산 접근Distributed approach

이 접근에서, SDM 런타임과 배포 엔진을 사용하는 도구들은, 웹 서비스를 사용하여 SDU(의 바이너리들)를 위치시키기 위한 파일 할당 및 SDM 런타임 엔진과 교대로 통신하는 런타임 OM 클라이언트 라이브러리에 대해 형성된다. SDM과 배포 엔진들은 배포 일들과 SDM 엔티티들의 데이터베이스를 공유한다. 배포 태스크들은 WMI와 SMB (파일 할당)을 사용하는 배포 엔진들에 의해 비동기적으로 수행되어 목적 기계들과 통신한다.In this approach, tools using the SDM runtime and the distribution engine are formed for the file allocation to locate SDUs (the binaries) using web services and the runtime OM client library that communicates alternately with the SDM runtime engine. SDM and deployment engines share a database of deployment days and SDM entities. Deployment tasks are performed asynchronously by deployment engines using WMI and SMB (file allocation) to communicate with target machines.

단순 접근Simple approach

이 접근에서 클라이언트, SDM 객체 모델 라이브러리, SDM 엔진, 및 설치자 플러그-인들 모두가 동일한 프로세스에서 구동하여 그러한 서비스가 없다. 런타임 데이터베이스와 바이너리들은 다른 기계들에 있을 수 있다. WMI와 SMB의 목적 기계들로의 접속은 클라이언트나 UI가 구동되는 곳에서 직접 이루어진다.In this approach, the client, SDM object model library, SDM engine, and installer plug-ins all run in the same process, so there is no such service. The runtime database and binaries can be on different machines. Connections to WMI and SMB's target machines are made directly from the client or UI.

사용자 인터페이스 및 다른 클라이언트들User interface and other clients

SDM 서버를 위한 사용자 인터페이스는 다음을 포함한다.The user interface for the SDM server includes:

Figure 112004009477667-pat00011
애플리케이션의 테스트 인스턴스를 배포, 업데이트 또는 제거하는 간단한 방법을 제공하는 비쥬얼 스튜디오(Visual Studio) 내의 마법사.
Figure 112004009477667-pat00011
Wizard within Visual Studio that provides a simple way to deploy, update, or remove test instances of an application.

Figure 112004009477667-pat00012
SDM, SDU 및 인스턴스 요구들을 로딩하는 명령 라인 도구들.
Figure 112004009477667-pat00012
Command line tools for loading SDM, SDU and instance requests.

Figure 112004009477667-pat00013
객체 모델의 모든 기능을 나타내고 호스트 모델들과 인스턴스 요구들을 구성하기 위한 시각 도구들을 부가적으로 제공하는 완전한 UI.
Figure 112004009477667-pat00013
A complete UI that presents all the functionality of the object model and additionally provides visual tools for constructing host models and instance requests.

런타임 OM 라이브러리Runtime OM Library

SDM 서버의 일반 인터페이스는 이 라이브러리를 통한다. 이는 관리되는 코드 객체 모델이고 이를 사용하여 다음을 할 수 있다.The general interface of the SDM server is through this library. This is a managed code object model that allows you to:

Figure 112004009477667-pat00014
런타임에서 SDM을 관리한다. SDM을 런타임에 로딩할 수 있다. SDM은 강경하게 명명되어 변하지 않고 SDM으로 하나씩 로딩된다(즉, 각각의 유형들, 클래스들 또는 매핑들이 아니라 SDM 파일을 로딩한다). SDM을 런타임으로부터 제거하고 런타임에서 SDM을 위한 XML 문서를 생성할 수 있다. SDM은, 런타임 내의 다른 SDM으로부터 또는 인스턴스들로부터 이에 대한 참조가 있는 한, 런타임으로부터 삭제될 수 없다.
Figure 112004009477667-pat00014
Manage SDM at runtime. SDM can be loaded at runtime. SDMs are strongly named and unloaded into the SDMs one by one (ie, loading SDM files rather than individual types, classes or mappings). You can remove SDM from the runtime and generate XML documents for SDM at runtime. An SDM cannot be deleted from the runtime as long as there is a reference to it from other SDMs or from instances in the runtime.

Figure 112004009477667-pat00015
런타임에 의해 알려진 SDU를 관리한다.
Figure 112004009477667-pat00015
Manage SDUs known by the runtime.

Figure 112004009477667-pat00016
(런타임에서 로딩된 SDM으로부터) SDM 요소들을 찾아내고 반사한다. 새로운 SDM을 생성하기 위해 제공되는 API는 없다(즉, 이는 SDM의 불변 요소들에 대한 판독 전용 객체 모델이다). 이는, SDM, SDU, 신원, 버전, 클래스, 유형, 바인딩/매핑 및 버전 정책을 포함한다.
Figure 112004009477667-pat00016
Find and reflect SDM elements (from SDM loaded at runtime). There is no API provided to create a new SDM (ie it is a read-only object model for the constant elements of the SDM). This includes SDM, SDU, Identity, Version, Class, Type, Binding / Mapping and Version Policy.

Figure 112004009477667-pat00017
컴포넌트, 포트, 와이어 및 물리 위치(인스턴스 스페이스에서 호스트 관계)의 인스턴스들을 찾아내고 반사한다. 인스턴스 스페이스에서 각 인스턴스는, 안정된 경로 또는 어레이 기반 경로인 GUID에 의해 확인될 수 있다. 경로들은 스트링이고 관련될 수 있다. 관련 경로들을 포함하는 이러한 확인자들은, 인스턴스 요구 문서와 같은 문서들에서 발견되고 참조되는 것을 허용한다.
Figure 112004009477667-pat00017
Find and reflect instances of components, ports, wires, and physical locations (host relationships in instance space). Each instance in the instance space can be identified by a GUID, which is either a stable path or an array based path. Paths are strings and can be associated. These identifiers, including the relevant paths, allow them to be found and referenced in documents such as instance request documents.

Figure 112004009477667-pat00018
생성, 토폴로지 변경, 업그레이드, 설정 변경 및 삭제를 포함하는 인스턴스들을 조작한다. 인스턴스 변경은, 업데이트의 원자 유닛을 제공하는 인스턴스 요구의 경계들 내에서 이루어져서 어떠한 에러나 제약 위반은 완전한 요구 실패로 이어진다. 인스턴스는 요구가 있을 때 호스트를 가져야 하므로, 인스턴스 요구들은 또한, 호스트에 바인딩되지 않고 임시적으로 빠져 나가는 것을 허용한다. 이는 또한 하나의 컴포넌트의 설치나 설정에 영향을 미치는 많은 동작들이 수행되고, 설치나 설정 업데이트를 요구가 있을 때까지 연기하여 하나의 업데이트가 컴포넌트 상에서 발생하도록 한다.
Figure 112004009477667-pat00018
Manipulate instances, including creation, topology changes, upgrades, configuration changes, and deletions. The instance change is made within the boundaries of the instance request providing the atomic unit of update so that any error or constraint violation leads to a complete request failure. Because an instance must have a host when there is a request, instance requests also allow temporary exits without being bound to the host. It also performs many actions that affect the installation or configuration of a component, and defers an installation or configuration update until a request is made so that one update occurs on the component.

Figure 112004009477667-pat00019
인스턴스 요구를 생성할 때 인스턴스 요구 내에서 시퀀스를 생성한다. 시퀀스는, 인스턴스 요구로부터 생기는 컴포넌트들 상에서 설치의 순서에 대한 제 어를 허용한다.
Figure 112004009477667-pat00019
When you create an instance request, you create a sequence within the instance request. The sequence allows control over the order of installation on the components resulting from the instance request.

Figure 112004009477667-pat00020
상태가 모든 에러 정보를 포함하게 하고, 요구에 의해 영향받는 컴포넌트들의 설치/업그레이드를 재시도하는 단계를 포함하는 인스턴스 요구들을 찾아내고 반사한다.
Figure 112004009477667-pat00020
Find and reflect instance requests, including having the state include all error information and retrying the installation / upgrade of components affected by the request.

Figure 112004009477667-pat00021
인스턴스 요구를 로딩한다. 인스턴스 요구는, 인스턴스 스페이스 동작들을 대표하는 XML 파일이다. 이 문서는 관련 경로들을 이용하여 애플리케이션 인스턴스들을 생성하거나 삭제하기 위해 재사용 가능한 '스크립트'가 될 수 있다.
Figure 112004009477667-pat00021
Load the instance request. An instance request is an XML file that represents instance space operations. This document can be a reusable 'script' to create or delete application instances using the relevant paths.

Figure 112004009477667-pat00022
데이터베이스 내의 인스턴스 요구로부터 인스턴스 요구 문서를 생성한다. 이러한 문서들은 어느정도 휴대 가능하다.
Figure 112004009477667-pat00022
Create an instance request document from an instance request in the database. These documents are somewhat portable.

Figure 112004009477667-pat00023
SDM 서비스로의 보안 허가를 관리한다. 이는, 목적 기계들을 조작하는데 사용되는 적격들을 설정하는 것과, 특정 호스트 인스턴스 상에서 호스트된 인스턴스들을 누가 창조할 수 있는지와 같은 인스턴스 동작들 주변의 허가를 포함한다.
Figure 112004009477667-pat00023
Manage security permissions to SDM services. This includes setting up the qualifications used to manipulate the target machines and permissions around instance operations such as who can create instances hosted on a particular host instance.

Figure 112004009477667-pat00024
완료된 인스턴스 요구 설치를 포함하는, 위 기능들에 관한 이벤트들에 가입한다. 클라이언트 라이브러리를 로딩한 프로세스의 수명에 의해 이러한 이벤트 가입들은 제한된다(즉, 이들은 일반적인 CLR 이벤트들이다).
Figure 112004009477667-pat00024
Subscribe to events related to the above features, including complete instance request installation. These event subscriptions are limited by the lifetime of the process that loaded the client library (ie they are normal CLR events).

SDM 런타임 엔진SDM runtime engine

SDM 런타임 엔진은 SDM 모델 상에서 추론과 객체 모델에 의해 나타나는 기능들을 수행한다.The SDM runtime engine performs the functions represented by the inference and object models on the SDM model.

분산형 접근에서, 라이브러리는 웹 서비스로써 런타임 엔진과, SDM을 로딩하고 컴포넌트 인스턴스를 생성하고 (SDM 엔티티들 상에서 반사하기 위해) SDM 전체 를 획득하는 등의 적절한 코스 콜(course call)을 사용하여 통신한다. 이는 서버로의 왕복을 감소시킨다. 이 웹 서비스를 위한 많은 파라미터의 포맷은, SDM 파일들에 대해 동일한 구성을 가진 XML이다.In a decentralized approach, the library communicates with the runtime engine as a web service and the appropriate course call such as loading the SDM, creating component instances, and obtaining the entire SDM (to reflect on SDM entities). do. This reduces the round trip to the server. The format of many parameters for this web service is XML with the same configuration for SDM files.

어떤 면에서, 웹 서비스는 SDM 서비스의 모든 기능을 클라이언트 라이브러리에 제공하여 사용하기에 훨씬 간단하게 만든다.In some ways, Web services make all of the functionality of SDM services available to client libraries, making them much simpler to use.

분산 접근에서, 엔진은 허가에 대한 체크를 수행한다(자세한 사항은 보안 설명서 참조).In a distributed approach, the engine performs a check on permissions (see the security documentation for details).

설치자 플러그-인들Installer plug-ins

설치자 플러그-인들은 클래스 호스트 관계와 연관된다. 이들은 밀접하게 클래스에 대한 설계 경험을 제공하고 SDU 내의 연관된 바이너리들과 배포 값들을 생성하는 비쥬얼 스튜디오를 사용하는 플러그-인과 관련된다. 이들은 다음 기능을 SDM 서버에 제공한다.Installer plug-ins are associated with class host relationships. These are closely related to plug-ins that use Visual Studio to provide design experience for the class and generate associated binaries and distribution values within the SDU. They provide the following functions to the SDM server.

Figure 112004009477667-pat00025
호스트들 상의 설치, 설치제거 및 재설치 컴포넌트들. 인스턴스 요구가 새로운 컴포넌트 인스턴스, 컴포넌트 인스턴스의 제거 또는 재설치를 필요로 하는 컴포넌트의 변화가 될 때, 인스턴스, 호스트 인스턴스, 컴포넌트와 연관된 유형들 및 SDU 내의 이 유형들과 연관된 바이너리들를 위해 설정을 하고, 인스턴스의 설치나 설치제거를 수행하는 것은 설치자이다. SDM의 애플리케이션 계층에서, 설치자가 단순히 유형 제공 기반의 .msi를 요구하여 (특정 파라미터들로) 호스트에 설치되고 두번째 태스크를 요구하여 적절한 설정과 포트 관점을 설정하는 호스트 상에서 실행하는 것이 가장 일반적이다.
Figure 112004009477667-pat00025
Install, uninstall and reinstall components on hosts. When an instance request is a change in a new component instance, a component that requires the removal or reinstallation of a component instance, the instance, host instance, types associated with the component, and binaries associated with these types in the SDU are configured and It is the installer who performs the installation or uninstallation of. In the application layer of SDM, it is most common for an installer to simply run a type-provided .msi installed on the host (with certain parameters) and run on a host that requires a second task to set up the proper configuration and port perspective.

Figure 112004009477667-pat00026
컴포넌트 인스턴스를, (토폴로지 변경 또는 가시 포트가 변경됨으로 인해) 그 설정들이 변경될 때 또는 그 포토들 중 하나로부터의 관점이 변경될 때, 업데이트한다. SDM의 애플리케이션 계층에서, 이것이 설치의 두번째 부분의 재구동이 되는 것이 가장 일반적이다.
Figure 112004009477667-pat00026
Update a component instance when its settings change (due to a topology change or a visible port change) or when the view from one of its photos changes. In the application layer of SDM, it is most common for this to be a reboot of the second part of the installation.

Figure 112004009477667-pat00027
포트들 상의 가시 포트들을 설치된 컴포넌트 인스턴스 상의 설정들에 매핑한다. SDM 내에서, 컴포넌트 인스턴스는, 몇몇 와이어 토폴로지의 결과로, 다른 포트 인스턴스들의 상세를 볼 수 있게 하는 포트 인스턴스들을 가져서, 통상 이에 속박된다. 예를 들면, ASP.NET 웹 사이트는 데이터베이스 클라이언트 포트 인스턴스를 구비하여 데이터베이스에 전송될 수 있다. 올바로 전송될 때, 그 데이터베이스 클라이언트 포트는 하나의 데이터베이스 서버 포트를 볼 수 있다. 이 정보는 ASP.NET 설치자에 의해 사용되어 서버를 위한 접속 스트링을 클라이언트 포트의 이름으로 web.config 파일 내에 위치시킨다.
Figure 112004009477667-pat00027
Map visible ports on ports to configurations on installed component instances. Within an SDM, component instances have port instances, which are typically constrained to them, as a result of some wire topologies, allowing them to see details of other port instances. For example, an ASP.NET Web site can have a database client port instance and be sent to a database. When sent correctly, the database client port can see a single database server port. This information is used by the ASP.NET installer to locate the connection string for the server in the web.config file with the name of the client port.

Figure 112004009477667-pat00028
설치자는 또한 호스트들과 그들의 게스트들 사이의 제약을 체크하는 코드를 제공한다. 이러한 체크는 SDM 엔진에 의해 수행되는데, SDM 엔진은 상기의 분산된 접근에는 나타나지 않았다. 대부분의 설치자들은 XML, X패스(XPath) 및 X쿼리(XQuery)에 기초한 공통 제한 언어를 사용하는 것으로 기대된다.
Figure 112004009477667-pat00028
The installer also provides code to check the constraints between hosts and their guests. This check is performed by the SDM engine, which did not appear in the distributed approach above. Most installers are expected to use a common restriction language based on XML, XPath and XQuery.

Figure 112004009477667-pat00029
심사 설정(Audit settings)
Figure 112004009477667-pat00029
Audit settings

Figure 112004009477667-pat00030
심사 존재(Audit existence)
Figure 112004009477667-pat00030
Audit existence

Figure 112004009477667-pat00031
가득 찬 심사(Audit Full)
Figure 112004009477667-pat00031
Audit Full

Figure 112004009477667-pat00032
심사 호스트된 인스턴스들(Audit hosted instances)
Figure 112004009477667-pat00032
Audit hosted instances

컴포넌트들의 매핑 설정Set mapping of components

인터페이스interface

베이스 메카니즘들의 세트를 호스트들 상의 지역 시스템으로써 실행 명령과 같은 설치자들에 제공한다. 장래, 다른 것들이 넷 주소와 계정만을 요구하는 그 이상의 메카니즘들을 제공한다.It provides a set of base mechanisms to installers, such as executable commands, as local systems on hosts. In the future, others provide more mechanisms that only require net addresses and accounts.

인터페이스는 관리되는 코드이다.The interface is managed code.

설계design

다음 섹션들은 데이터 센터들로 호스트되는 분산형 애플리케이션들과 데이터 센터들을 어떻게 설계할 것인지를 설명한다. 설계자는 SDM을 사용하여, 데이터 센터에 이용되는 물리적 자원들의 구성에 사용되는 다양한 빌딩 블럭들(예를 들면, 하드웨어, 네트워크, 호스트 서버들)과 애플리케이션들을 만든다.The following sections describe how to design distributed applications and data centers hosted by data centers. Designers use SDM to create various building blocks (eg, hardware, networks, host servers) and applications that are used to organize the physical resources used in the data center.

데이터 센터 설명Data center description

이 섹션은, 많은 기계들과 같은 특정 자원들을 나타내지 않고 데이터 센터 컴포넌트들을 만드는 방법을 설명한다. 이는 서비스 정의 모델(service definition model; SDM) 의미론을 사용하여 물리적 데이터 센터 환경의 스케일-불변(scale-invariant) 모델을 제공한다.This section describes how to create data center components without representing specific resources such as many machines. It uses a service definition model (SDM) semantics to provide a scale-invariant model of the physical data center environment.

가상 데이터 센터(virtual data center; VDC)는 데이터 센터에 대한 개발자의 관점을 단순화하는 물리적 데이터 센터 환경의 논리적 표현이다. 이상적으로, IT 전문가 또는 건축가는, 개발자가 분산형 애플리케이션/서비스를 설명할 수 있는 동일한 스케일-불변 방법으로 데이터 센터를 설명할 수 있다. VDC는 데이터 센터 와 그들의 토폴로지 관계들 내의 서버, 네트워크 및 저장 자원들의 추상적 개념이다.A virtual data center (VDC) is a logical representation of a physical data center environment that simplifies the developer's view of the data center. Ideally, an IT professional or architect could describe a data center in the same scale-invariant way that developers can describe distributed applications / services. VDC is an abstraction of servers, networks, and storage resources within data centers and their topology relationships.

전형적인 데이터 센터 다이어그램은, 비지오나 유사 도구를 사용하여 하나의 다이어그램으로 그려져 나타낸 다중 상호연결된 서버, 네트워크 장비, IP 주소, VLAN, 운영 체제, 저장 장치 등으로 아주 복잡하다. 다이어그램에 부가하여, 어떻게 데이터 센터가 분할되고, 구성되고 관리되는지를 정확히 설명하는 긴 문서들이 보통 있다.A typical data center diagram is very complex, with multiple interconnected servers, network equipment, IP addresses, VLANs, operating systems, and storage devices, all represented in a single diagram using business or similar tools. In addition to diagrams, there are usually long documents that describe exactly how the data center is divided, organized and managed.

이 복잡성의 예는 마이크로소프트 시스템 아키텍쳐(Microsoft Systems Architecture; MSA) 사업 데이터 센터(Enterprise Data Center; EDC)이다. 손으로 그려진 다이어그램들과 문서들을 수회 데이터 센터의 상태로 업데이트와 업그레이드가 적용되면서 현재 유지하는 것이 불가능하면 태스크가 아니라면 고비용이 된다는 것은 당연하다. 유사하게, 문서 규정들에 대한 환경을 유효하게 하는 능력이 어렵고 사람에 에러를 범하기 쉽게 한다.An example of this complexity is the Microsoft Systems Architecture (MSA) Enterprise Data Center (EDC). It's no surprise that updating and upgrading hand-drawn diagrams and documents to the status of several data centers is expensive if not impossible, if not possible to maintain at present. Similarly, the ability to validate the environment for document specifications is difficult and prone to human error.

MSA EDC와 같은 복잡한 데이터 센터를 스케일-불변 방법으로 나타내는 능력은 개발자와 IT 전문가 양측에 아주 강력하다. 데이터 센터를 컴포넌트, 포트, 와이어을 사용하여 설명하는 능력은 강력한 프레임워크를 제공하고, 이 안에서 오늘날의 설계과 배포 프로세스에서 사라진 배포 요건들을 만들고 유효화한다.The ability to scale-invariably represent complex data centers such as the MSA EDC is powerful for both developers and IT professionals. The ability to describe data centers using components, ports, and wires provides a powerful framework within which to create and validate deployment requirements that are missing from today's design and deployment processes.

데이터 센터 설명의 일면은 집합적 컴퓨팅 환경을 위한 하드웨어와 구성 메카니즘들을 사실화하는 능력이다. 전통적인 데이터 센터 환경에서, 오퍼레이터들은 전형적으로 특정 애플리케이션에 맞는 하드웨어 환경을 제작한다. 예를 들면, 새로운 이메일 시스템을 데이터 센터에 배포할 때, 오퍼레이터들은 서버 세트를 구매하고, 네트워크 어댑터들을 백업과 데이터 존과 같은 다른 네트워크를 위해 더하고, 스위치와 로드 밸런서와 같은 네트워크 하드웨어를 더한다. 애플리케이션을 위한 하드웨어의 배포는 물리적인 노력을 더 필요로 한다.One aspect of the data center description is the ability to realisticize the hardware and configuration mechanisms for a collective computing environment. In traditional data center environments, operators typically create hardware environments for specific applications. For example, when deploying a new email system to a data center, operators purchase a set of servers, add network adapters for other networks such as backups and data zones, and add network hardware such as switches and load balancers. The deployment of hardware for the application requires more physical effort.

만들기에 비싼 애플리케이션 특정 하드웨어 구성들이 손으로 제작될 뿐만 아니라, 쉽게 변경되지도 않는다. 이들의 고정된 본성은, 업무 로드가 변경됨에 따라 자원들이 쉽게 새로운 애플리케이션들로 이동해 가므로, 빈약한 자원 활용이 된다.Expensive to make Application-specific hardware configurations are not only made by hand, but easily changed. Their fixed nature results in poor resource utilization as resources move easily into new applications as the work load changes.

이러한 개시 내용은, 오퍼레이터들이 서버들, 저장 장치 및 네트워크 장치들을 포함하는 물리적 자원들의 하나의 풀을 구동할 수 있도록 하는 데이터 센터 사실화 환경을 생성하는 방법을 설명한다. 이 하나의 풀로부터, 요청에 따라 자원들이 할당되고 배포되어 애플리케이션 필요를 만족시킨다. 자원 세트 제공자들은 자원들의 소유를 추적하고 애플리케이션 필요를 만족시키기 위하여 어떻게 자원들을 구성하는지를 안다.This disclosure describes a method of creating a data center realization environment that enables operators to run a pool of physical resources including servers, storage devices and network devices. From this one pool, resources are allocated and distributed on demand to meet application needs. Resource set providers track the ownership of resources and know how to organize them to meet application needs.

새로운 애플리케이션을 데이터 센터 환경에 배포할 때, 오퍼레이터들은 애플리케이션이 필요로 하는 자원들의 추상화 기술을 생성한다. 요청은, 추상화 기술이 진정한 자원들로 바뀌도록 요구하는 서비스 플랫폼과 관련된다. 서비스 플랫폼은, 자원 관리자들과 협력하여 요청을 실행할 수 있는 자원들을 위치시키고, 가장 경제적으로 요청을 실행하는 자원들을 선택하고, 사용되는 자원들을 마킹하고, 자원들을 구성하여 요청 요건들에 맞추고, 할당된 자원들의 구체적 설명을 추상화 기 술에 위치시킨다. 애플리케이션의 필요가 변경됨에 따라, 오퍼레이터는 자원 설명을 업데이트하고 서비스 플랫폼이 업데이트 애플리케이션 설명을 분석하도록 요구한다. 각각의 자원 제공자들은 물리적 자원들을 구성하여 애플리케이션 필요를 만족시키는 하드웨어 또는 OS 특정 소프트웨어 드라이버들을 사용할 수 있다.When deploying a new application to a data center environment, operators create an abstraction of the resources the application needs. The request relates to a service platform that requires the abstraction technology to turn into true resources. The service platform works with resource managers to locate resources that can execute requests, select the resources that make the most economical execution of the request, mark the resources used, configure the resources to meet the requirements of the request, and allocate them. Place a detailed description of the resources involved in the abstraction technique. As the needs of the application change, the operator updates the resource description and requires the service platform to resolve the updated application description. Each resource provider can configure hardware resources to use hardware or OS specific software drivers to meet application needs.

데이터 센터 설명과 연관된 개념들은 (1) 바람직한 자원들, 자원 요청들, 및 승인된 자원들을 설명하기 위한 그래프 언어; (2) 소정 유형의 사용 가능한 자원을 알고 이 자원들을 구성하여 애플리케이션 요건들을 만족시키는 능력을 가진 도메인 특정 자원 제공자들의 세트; 및 (3) 자원 요청들을 처리하고, 자원 제공자들과 통신하여 적절한 가용 자원들을 찾고, 특정 자원들의 선택을 선택적으로 최적화하고, 자원 제공자들에게 선택된 자원들을 구성하도록 요구하고, 선택된 자원들을 반영하도록 자원 요청을 업데이트하는 자원 관리자를 포함한다.Concepts associated with data center descriptions include: (1) a graph language for describing preferred resources, resource requests, and approved resources; (2) a set of domain specific resource providers with the ability to know certain types of available resources and to configure these resources to meet application requirements; And (3) process resource requests, communicate with resource providers to find appropriate available resources, selectively optimize the selection of specific resources, require resource providers to configure selected resources, and reflect the selected resources. Contains a resource manager that updates the request.

애플리케이션 설명Application description

애플리케이션들은 유사하게 SDM 의미론을 사용하여 정의될 수 있다. 이는 0 단락에서 시작되는 SDM 섹션을 참조하여 더욱 상세히 위에서 설명된다. 도 20은 구조가 큰 비율의 분산형 애플리케이션을 SDM 의미론의 측면에서 설명하도록 하는 그래픽 사용자 인터페이스(UI)를 보여준다.Applications can similarly be defined using SDM semantics. This is described above in more detail with reference to the SDM section beginning at paragraph 0. 20 shows a graphical user interface (UI) that allows a large proportion of distributed applications to be described in terms of SDM semantics.

애플리케이션의 물리 시스템으로의 논리적 배치Logical Placement of Applications into Physical Systems

일단 애플리케이션들 및 가상 데이터 센터들이 SDM 의미론을 사용하여 구성되면, 구조는 논리적으로 애플리케이션 요소들을 가상 하드웨어 요소들의 논리적으로 다르게 위치시키는 것을 시도한다. 다른 배포 환경(개발, 테스트, 생산 등)에 대해 다른 논리 위치가 있을 수 있다. 논리 위치는 설계 시에 이루어질 수 있고, 요건 및 제약이 체크되고, 개발자는 임의의 에러나 경고에 대해 경계한다. 논리 위치의 결과는, 각 컴포넌트, 포트 및 와이어 클래스 상에 특정된 X패스와 XSD를 사용하여 구현되는 제약 체크와 함께 별도의 파일에 기록된다. 이것은 도 21에 도시된다. 설계자는, 다른 애플리케이션 요소들을 물리 요소들에 위치시킬 때, 직관적 제스처를 위한 UI(사용자 인터페이스)를 사용할 수 있다.Once applications and virtual data centers are configured using SDM semantics, the architecture logically attempts to place application elements logically differently of virtual hardware elements. There can be different logical locations for different deployment environments (development, test, production, etc.). Logical locations can be made at design time, requirements and constraints are checked, and the developer is alert to any errors or warnings. The result of the logical location is recorded in a separate file with constraint checks implemented using XPath and XSD specific to each component, port and wire class. This is shown in FIG. The designer can use a user interface (UI) for intuitive gestures when placing other application elements in the physical elements.

설계 시간 유효성 검증Design time validation

다음 섹션은 애플리케이션을 물리적 자원들에 논리적으로 위치시키는 설계 시간 유효화에 대한 접근을 설명한다. SDM 컴포넌트들로의 확장, 포트 및 와이어은 계층과, 분산형 애플리케이션 설계의 설계-시간 유효화를 달성하는 계층과 배포 요건들 사이의 매핑을 추가한다.The next section describes an approach to design time validation that logically places an application on physical resources. Extensions to SDM components, ports, and wires add layers and mappings between layers and deployment requirements to achieve design-time validation of distributed application designs.

컴포넌트, 포트 및 와이어링 호스트, 팩토리, 자원 관리자 및 SDM 런타임과 결합할 때, 강력한 추상적 개념이지만, 이들은 분산형 애플리케이션/서비스를 배포하고 관리하는데 충분하지 않다. 이러한 논리 추상적 개념의 물리적 인스턴스들을 생성하고 관리하기 위하여, 몇몇의 부가적인 구조들이 포함된다. 이러한 부가적인 구조들은 계층들이고 매핑들이다.When combined with components, ports and wiring hosts, factories, resource managers, and the SDM runtime, they are powerful abstractions, but they are not enough to deploy and manage distributed applications / services. In order to create and manage physical instances of this logical abstraction concept, some additional structures are included. These additional structures are layers and mappings.

계층들Tiers

도 11은 SDM에 의해 정의되는 계층 추상적 개념을 나타낸다.11 illustrates the hierarchical abstraction concept defined by the SDM.

애플리케이션 계층은 애플리케이션/서비스의 관점에서 분산할 수 있는 컴포넌트들, 이들의 배포 요건들과 제약들, 및 이들의 통신 관계를 설명한다.The application layer describes components that can be distributed in terms of applications / services, their deployment requirements and constraints, and their communication relationships.

배포 계층은 구성과 정책 설정과 IIS, CLR 및 SQL 등과 같은 호스트들에 대한 제약들을 설명한다.The distribution layer describes the configuration, policy settings, and restrictions for hosts such as IIS, CLR, and SQL.

가상 데이터 센터(Virtual Data Center; VDC) 계층은 데이터 센터 환경 설정과 네트워크 토폴로지를 통해 서버, 네트워크 및 저장 장치에 이르기까지 운영 체제로부터의 제약들을 설명한다.The Virtual Data Center (VDC) layer describes the constraints from the operating system down to servers, networks and storage through data center configuration and network topology.

하드웨어 계층은 물리적 데이터 센터 환경을 설명하고, 예를 들면, XML을 사용한 선언적인 방법으로 드러나거나 특정된다. 이 계층은 스케일-불변이 아니고, 따라서, SDM 내에 만들어지지 않고, 완성을 위해 포함된다.The hardware layer describes the physical data center environment and is exposed or specified in a declarative way using, for example, XML. This layer is not scale-invariant and therefore is not created within the SDM and is included for completion.

매핑들Mappings

SDM은 계층으로 이루어지기 때문에, 여러 계층들을 묶는 방법이 필요하다. 매핑은 반드시 하나의 계층에 있는 컴포넌트나 포트를 다음 계층 아래에 있는 컴포넌트나 포트에 묶는다. 매핑은 다음과 같이 설명될 수 있다.Since SDM is layered, there is a need for a way to tie several layers together. Mappings must bind components or ports in one layer to components or ports below the next layer. The mapping can be described as follows.

MT = [Tn→Tn-1]+[Tn-1→Tn-2]+[Tn-2→T n-3][...]M T = [T n → T n-1 ] + [T n-1 → T n-2 ] + [T n-2 → T n-3 ] [...]

M은 매핑을 나타내고, T는 컴포넌트, 포트 또는 와이어를 나타내고, n은 계층을 나타낸다. 화살표는 항상 상위 계층에서 하위 계층으로 향하는 매핑의 방향을 나타낸다.M represents a mapping, T represents a component, port or wire, and n represents a hierarchy. The arrow always indicates the direction of the mapping from the upper layer to the lower layer.

예를 들어, 도 12에서, MyFrontEnd라고 명명된 애플리케이션 계층에서의 컴포넌트는 IIS라고 불리는 배포 계층의 컴포넌트로 매핑된다. 같은 방식으로, MyBackEnd라고 명명된 컴포넌트는 배포 계층의 SQL 컴포넌트에 매핑된다.For example, in FIG. 12, a component in the application layer named MyFrontEnd is mapped to a component in the distribution layer called IIS. In the same way, a component named MyBackEnd is mapped to a SQL component in the distribution layer.

설계-시간 유효성 검증Design-time validation

하위 계층의 컴포넌트와 그 호스트 컴포넌트 사이의 바인딩은, 애플리케이션/서비스가 실제로 라이브 데이터 센터에 배포되기 전에 개발자에게 문제가 될 수 있다. 이러한 문제는 양립하지 않는 유형, 구성 충돌, 부조화된 동작, 토폴로지 관계 결여 등에 기인할 수 있다. 예를 들어, 도 13에 도시된 시도된 매핑은, 배포 계층에서의 IIS와 SQL 컴포넌트들 사이에 잠재적인 통신 관계가 없기 때문에, 에러가 될 수 있다.The binding between the lower layer components and their host components can be a problem for developers before the application / service is actually deployed to the live data center. This can be due to incompatible types, configuration conflicts, inconsistent behavior, lack of topology relationships, and so on. For example, the attempted mapping shown in FIG. 13 may be an error because there is no potential communication relationship between IIS and SQL components at the distribution layer.

MyBackEnd 컴포넌트로부터 SQL 호스트 컴포넌트로의 매핑이 컴포넌트와 호스트 유형 양립성과 구성 충돌 결여에 기초한 유효한 바인딩이지만, MyService SDM이 MyFrontEnd와 특정 배포 계층에 존재하지 않는 MyBackEnd 사이의 토폴로지 관계를 정의하기 때문에 유효하지 않다.Although the mapping from the MyBackEnd component to the SQL host component is a valid binding based on component and host type compatibility and lack of configuration conflict, it is not valid because MyService SDM defines a topology relationship between MyFrontEnd and MyBackEnd that does not exist in a particular deployment layer.

계층 아키텍쳐Layered architecture

도 48은 분재된 컴퓨팅 시스템 상의 분산형 애플리케이션들의 자동화 설계, 배포, 및 관리를 위한 플랫폼 아키텍쳐를 보여준다. 아키텍쳐는, 분산형 컴퓨팅 시스템의 물리 컴퓨터 자원을 나타내는 베이스 계층(302) 최상위에 있는 다중 계층들을 보여준다. 자동화 배포 서비스 계층(304)은 기계를 분산형 컴퓨팅 시스템에 사용되는 서버로 변환하기 위한 도구들을 제공한다. 이러한 도구들은, OS(운영 체제) 영상들의 생성, 편집 및 배포를 허가한다. 기계의 원격 프로그래밍은, 시스템과 네트워크 장치들이 구성되고 관리되도록 하는 마이크로소프트 윈도우(Microsoft's Windows?) 운영 체제 내의 프로그래밍 인터페이스(API)인 WMI(Windows Management Instrumentation)와 같은 완전한 프로그램 인터페이스들을 사용하여 달성된다.48 illustrates a platform architecture for automated design, deployment, and management of distributed applications on a distributed computing system. The architecture shows multiple layers on top of the base layer 302 that represent the physical computer resources of the distributed computing system. The automated distribution service layer 304 provides tools for converting a machine into a server for use in a distributed computing system. These tools allow the creation, editing and distribution of operating system (OS) images. Remote programming of a machine is accomplished using complete programmatic interfaces, such as Windows Management Instrumentation (WMI), a programming interface (API) within the Microsoft's Windows® operating system that allows system and network devices to be configured and managed.

네트워크 관리 계층(306)은 자동화 배포 서비스 계층(304)의 최상위에 위치한다. 네트워크 관리 계층(306)은 네트워크 관리와 가상 토폴로지 생성을 고려한다. 부분적으로, 네트워크 관리 계층은, 각 컴퓨터들의 하나 이상의 VLAN으로의 네트워크 스위치들의 관련 포토에 연결되는 단일 물리 네트워크 인터페이스를 통한 접속을 용이하게 하는 네트워크 컴퓨터를 위한 드라이버 모델을 지지한다. 드라이버 모델에 따라서, VLAN 드라이버는 서버에 설치되고 단일 물리 네트워크 인터페이스 상위의 가상 네트워크 인터페이스들(VNICs)을 생성하도록 사용된다. VLAN 드라이버는 각 VLAN을 위한 하나의 가상 네트워크 인터페이스(VNIC)를 생성한다. VNIC들은 서버에 있는 IP 스택 내에서 네트워크 인터페이스(NIC) 바로 위에 상주하여, 모든 패킷이 동일한 물리 NIC를 통해 지나가지만, 서버는 하나 이상의 VLAN을 거쳐 통과하는 패킷들을 다룰 수 있다.The network management layer 306 is located at the top of the automated distribution service layer 304. The network management layer 306 considers network management and virtual topology creation. In part, the network management layer supports a driver model for network computers that facilitates connection through a single physical network interface that is connected to an associated port of network switches to one or more VLANs of each computer. Depending on the driver model, the VLAN driver is installed on the server and used to create virtual network interfaces (VNICs) on top of a single physical network interface. The VLAN driver creates one virtual network interface (VNIC) for each VLAN. VNICs reside directly above the network interface (NIC) within the server's IP stack, so that all packets pass through the same physical NIC, but the server can handle packets passing through one or more VLANs.

드라이버 모델은, 속하는 VLAN의 신원으로 태그를 달기 위해 데이터 패킷들이 분산형 컴퓨팅 시스템을 지나가도록 태그를 단 VLAN을 지지한다. 네트워크 스위치들은 태그를 달고 스위치가 속하는 VLAN을 확인하는 태그를 가진 패킷들을 수신하기만 한다. 일실시예에서, 네트워크 스위치들은 태그가 달린 포트들과 태그가 달리지 않은 포트들 모두를 가진다. 스위치의 태그 달린 포트들은 VLAN 확인자로 태그가 달리고 다른 스위치들의 태그 달린 포트들로의 접속을 위해 사용된다. 이는 스위치 네트워크를 통한 패킷들의 빠른 전송을 가능하게 한다. 스위치의 태그 가 달리지 않은 포트들은 서버들 또는 컴퓨터들로의 접속을 위해 사용된다. 패킷들이 이들의 타겟 서버에 도달했을 때, VLAN 태그들은, 상위의 패킷들을 서버들에 전달하기 전에, 패킷들로부터 제거되어 서버들은 태그에 대해 알 필요가 없다.The driver model supports tagged VLANs so that data packets pass through a distributed computing system to tag them with the identity of the VLAN to which they belong. Network switches only receive packets with tags that tag and identify the VLAN to which the switch belongs. In one embodiment, network switches have both tagged and untagged ports. The tagged ports on the switch are tagged with the VLAN identifier and are used for access to tagged ports on other switches. This allows for fast transmission of packets over the switch network. Untagged ports on the switch are used to connect to servers or computers. When packets arrive at their target server, the VLAN tags are removed from the packets before delivering the upper packets to the servers so that the servers do not need to know about the tag.

물리적 자원 관리 계층(308)은 네트워크 관리 계층(306)의 최상위에 상주한다. 물리적 자원 관리 계층(308)은, 소유를 추적하고 모든 물리 컴퓨팅 자원들의 할당을 조정하면서, 분산형 컴퓨팅 시스템의 물리 모델을 유지한다. 물리 관리 계층(308)은 또한, 뱃치(batch) 자원 할당을 지원하여, 물리 컴퓨팅 자원들의 동적 구성과 관리를 가능하게 한다.Physical resource management layer 308 resides on top of network management layer 306. Physical resource management layer 308 maintains a physical model of a distributed computing system, while tracking ownership and adjusting the allocation of all physical computing resources. Physical management layer 308 also supports batch resource allocation, enabling dynamic configuration and management of physical computing resources.

논리적 자원 관리 계층(310)은 물리적 자원 관리 계층(308)의 최상위에 위치한다. 논리적 자원 관리 계층(310)은 분산형 애플리케이션에 의해 요청되는 논리적 자원들의 할당을 용이하게 한다. 예를 들면, 애플리케이션은 데이터 베이스 로드 밸런스 서비스, 방화벽, 웹 서비스 등의 자원을 요구할 수 있다. 논리적 자원 관리 계층(310)은 이러한 논리적 자원들을 공개한다.The logical resource management layer 310 is located at the top of the physical resource management layer 308. The logical resource management layer 310 facilitates the allocation of logical resources requested by the distributed application. For example, an application may require resources such as database load balancing services, firewalls, and web services. Logical resource management layer 310 publishes these logical resources.

다음 계층은 서비스 정의 모델과 런타임 계층(312)인데, 이는 분산형 애플리케이션과 그 동작의 추적을 설명할 수 있다. 서비스 정의 모델(service definition model; SDM)은 동작 프로세스를 설명하기 위한 네임스페이스와 관점, 및 애플리케이션 자체감시(introspection)와 애플리케이션 자원들의 제어를 위한 API를 제공한다.The next layer is the service definition model and runtime layer 312, which may describe the tracking of distributed applications and their behavior. The service definition model (SDM) provides namespaces and perspectives to describe the operational process, and APIs for application introspection and control of application resources.

컴퓨팅 자원들 계층 최상위의 6번째 계층은 컴포넌트 계층(314)이다. 이 계층은, SDM API들을 관점, 명명 및 바인딩을 위해 사용하는 분산형 애플리케이션의 재사용 가능한 빌딩 블럭들의 정의를 허용한다.The sixth layer on top of the computing resources layer is the component layer 314. This layer allows the definition of reusable building blocks of distributed applications that use SDM APIs for perspective, naming and binding.

최상위 계층은 동작 논리 계층(316)인데, 이는 분산형 애플리케이션의 동작 측면을 수용한다. 동작 논리는 서비스를 시작하고, 서비스를 발전 및 위축시키고, 업그레이드 및 다운그레이드시키고, 오류를 탐지 및 복구하고, 상태 분할하는 것을 담당한다. 동작 논리는, 배포들 및 애플리케이션들에 걸쳐 입증된 동작 실행의 재사용을 가능하게 한다. SDM 계층의 사용을 통해, 동작 논리는 발생할 수 있는 논점을 더 잘 이해할 수 있다. 예를 들면, 오류가 발생할 때, 동작 논리는, 방 가운데의 어떤 서버라기 보다 이메일 서비스의 앞쪽 끝에서 발생했다는 것을 결정할 수 있다.The top layer is the operational logic layer 316, which accommodates the operational aspects of distributed applications. The operational logic is responsible for starting services, advancing and shrinking services, upgrading and downgrading, detecting and repairing errors, and partitioning the state. Operational logic enables reuse of proven operational execution across deployments and applications. Through the use of the SDM layer, operational logic can better understand the issues that may arise. For example, when an error occurs, the operation logic can determine that it occurred at the front end of the email service rather than any server in the room.

배포distribute

다음 섹션들은 데이터 센터들 및 분산형 애플리케이션들의 배포를 설명한다. 이는 논리 모델들의 즉각성, 애플리케이션의 물리 위치, 및 애플리케이션과 데이터 센터의 배포를 포함한다. 도 23은 일반적으로 배포 단계를 도시한다.The following sections describe the deployment of data centers and distributed applications. This includes the immediateness of logical models, the physical location of applications, and the deployment of applications and data centers. Figure 23 generally shows the distribution phase.

즉각성(Instantiation)Instantiation

SDM 유형들은 비율 불변이고 임의의 비율로도 생성될 수 있기 때문에, 배포의 일면은, 소정의 논리 컴포넌트 및 와이어 토폴로지에 대해 생성되는 인스턴스들의 수를 정의하여 물리적으로 하드웨어/애플리케이션을 구현하는 것이다. 인스턴스 요청 문서는, 생성될 필요가 있는 인스턴스들의 선언적 정의를 제공하도록 생성된다.Since SDM types are rate invariant and can be generated at any rate, one aspect of deployment is to physically implement the hardware / application by defining the number of instances created for a given logical component and wire topology. The instance request document is created to provide a declarative definition of the instances that need to be created.

애플리케이션의 물리적 배치Physical placement of the application

물리적 배치(physical placement)는 배포(deployment)의 대상인 특정한 호스트 인스턴스를 추출하는 행위를 말한다. 물리적 배치는 논리적 배치(logical placement)에 의해 제약 받으며, 제약 조건들(constraints)은 물리적 배치 중에 업데이트된다. 물리적 배치들은 물리적 배치 파일 내에 저장된다. Physical placement refers to the act of extracting a specific host instance that is the target of deployment. Physical placement is constrained by logical placement, and constraints are updated during physical placement. Physical batches are stored in a physical batch file.

데이터 센터 및 애플리케이션 배포Data center and application deployment

SDU, 논리적 배치 파일, 인스턴스 요구 및 물리적 배치 파일은 SDM 런타임으로 공급된다. SDM 런타임은, 호스트 상에서 새로운 인스턴스를 생성하여 그 종류 상에서의 설정 값들을 부합시키는 책임이 있는 (클래스 및 호스트 관계에 기초하여) 적절한 설치자(installer)를 불러낸다. SDM 런타임은 모든 인스턴스들, 그들의 최종 설정 값들 및 위치의 데이터베이스를 유지할 것이다. 런타임 API는 인스턴스 스페이스의 질문들을 지원한다. SDUs, logical batch files, instance requests, and physical batch files are supplied to the SDM runtime. The SDM runtime creates a new instance on the host and invokes the appropriate installer (based on class and host relationships) responsible for matching the configuration values on that type. The SDM runtime will maintain a database of all instances, their final configuration values and location. The runtime API supports instance space questions.

BIG 배포 도구BIG Deployment Tool

시나리오 설명Scenario description

특징 요약Feature summary

BIG 배포 도구는 데이터센터 오퍼레이터들과 애플리케이션들을 시험하는 개발자들에 대한 분산형 SDM 애플리케이션 배포를 수행한다. 이것에 의해, 애플리케이션 (SDU)의 비트들, 맵핑 파일들, 및 배포 제약 조건들의 세트를 포함하는 SDM(Service Definition Model) 애플리케이션들을 소비하게 된다. 사용자는 사용자의 서버들에 대한 애플리케이션의 배치를 특정하고 배포 시간 설정들을 제공한다. 상기 도구는 원격 기계들에 대한 인스턴스들을 설치하거나 설치제거하며, 상 황들을 오퍼레이터에게 제공한다. 오퍼레이터는 이후에 새로운 인스턴스들, 사용 중지 인스턴스들(decommission instances)을 추가하고, 애플리케이션의 토폴로지를 재구성할 수 있다. The BIG Deployment Tool performs distributed SDM application deployment for data center operators and developers who test applications. This consumes Service Definition Model (SDM) applications that include a set of bits of the application (SDU), mapping files, and distribution constraints. The user specifies the deployment of the application to the users' servers and provides deployment time settings. The tool installs or uninstalls instances for remote machines and provides situations to the operator. The operator can later add new instances, decommission instances, and reconfigure the application's topology.

시나리오들Scenarios

대기업은 개별적인 데이터센터와 개발자 조직(developer organization)을 가진다. 데이터센터는 종업원들과 고객들 모두에 대해 서비스를 하는 최종 사용자들(end-users)에 대한 애플리케이션을 배포, 유지 및 호스팅한다. 데이터센터의 토폴로지는 가끔 변경하여 BIG 컴퓨터가 아닌 MSA EDC 1.5와 밀접하게 부합한다. Large enterprises have separate data centers and developer organizations. The data center distributes, maintains, and hosts applications for end-users who serve both employees and customers. The topology of the data center has changed from time to time to closely match the MSA EDC 1.5, not the BIG computer.

데이터센터 조직은 개발자들에게 소위 LIM(Logical Information Model)이라고 하는 호스팅 폴리시(hosting policy)의 스케일 불변 추상화(scale-invariant abstraction)를 제공한다. 상기 폴리시는 애플리케이션들에 대한 제약 조건들, 허용 설정들, 및 기본적인 토폴로지를 포함하는 호스트들의 구성을 규정한다. Data center organizations provide developers with a scale-invariant abstraction of a hosting policy called the Logical Information Model (LIM). The policy defines the configuration of hosts including constraints, admission settings, and basic topology for the applications.

개발자 조직은 최종 사용자들의 요구에 부합하고 데이터센터의 폴리시 내에 머무르도록 이들 애플리케이션들을 코딩하고 핫 픽스한다. 개발자는 애플리케이션들 요구들 및 예상된 호스트들을 규정함으로써 배포 지침(deployment guidance)을 제공한다. The developer organization codes and hot fixes these applications to meet end user needs and stay within the policy of the data center. The developer provides deployment guidance by specifying application requirements and expected hosts.

애플리케이션 오퍼레이터는 데이터센터 내의 애플리케이션들을 배포하기 위하여 BIG 배포 도구를 사용한다. 상기 배포 도구는 적절한 배포를 보장하기 위하여 개발자 지침(developer guidance) 및 데이터센터를 사용한다. 애플리케이션 오 퍼레이터는 나중에 상기 배포 도구를 사용하여 애플리케이션 토폴로지를 스케일-아웃(scale-out), 재구성하거나 또는 설치제거한다. Application operators use the BIG deployment tool to deploy applications in the data center. The deployment tool uses developer guidance and data centers to ensure proper deployment. The application operator later uses the deployment tool to scale out, reconfigure, or uninstall the application topology.

특징 설명Feature Description

행동 규격(Behavioral Specification)Behavioral Specification

이하에서는 상기 배포 도구가 어떻게 "Whidbey" 및 다른 제품들과 조화를 이루는지에 대한 개관을 설명한다. SDM 런타임, LIM, SDM/SDU 및 Whidbey는 다른 규격들로 설명되는 것에 유의하여야 한다. 도 49는 애플리케이션 배포에 대한 예시적인 사용 흐름을 나타낸다. The following describes an overview of how the distribution tool harmonizes with "Whidbey" and other products. Note that SDM runtime, LIM, SDM / SDU and Whidbey are described in other specifications. 49 illustrates an example usage flow for application distribution.

도 49에서의 통신에 대한 중요한 점들은 다음과 같다(좌로부터 우로).Important points about the communication in FIG. 49 are as follows (from left to right).

개발자는 SDM, 2진수들 및 SDU 맵핑들을 포함하는 애플리케이션 SDU를 전달한다. (여기서 애플리케이션 비트들과 콘텐츠를 의미하도록 2진수들을 사용한다.)The developer delivers an application SDU containing SDM, binary numbers and SDU mappings. (We use binary numbers here to mean application bits and content.)

개발자 및 데이터센터 조직은 별개이지만 동일한 LIM을 공유한다. 상기 배포 도구를 구현하는 기계에는 저장 장치와 API들을 갖는 SDM 런타임이 있다. Developer and data center organizations are separate but share the same LIM. The machine implementing the distribution tool has an SDM runtime with storage and APIs.

애플리케이션 오퍼레이터는 데이터센터 설명, 배포 설명에 대해 책임이 있으며, LIM, SDU 및 SDU 맵핑들을 사용한다. The application operator is responsible for the data center description, deployment description, and uses LIM, SDU, and SDU mappings.

에이젼트 및 "미니 팩토리들(mini-factories)"이 대상 서버들에 상주하며, 이러한 서버들은 배포를 위한 입력으로서 SDU, 배포 디스크립터(Deployment Descriptor), 및 데이터센터 디스크립터(Datacenter Descriptor)를 갖는다. An agent and "mini-factories" reside on the target servers, which have SDUs, Deployment Descriptors, and Datacenter Descriptors as inputs for deployment.

에이전트들은 공통의 미니 팩토리 API를 사용하여 미니 팩토리들과 대화한다. Agents interact with mini factories using a common mini factory API.

본 실시예에서의 미니 팩토리들은 SQL 및 IIS이며, 다른 제품들로 확장 가능하다. 이들은 설치, 구성, 및 설치제거의 작업을 할 수 있다. The mini factories in this embodiment are SQL and IIS and can be extended to other products. They can work on installation, configuration, and uninstallation.

설정들 및 제약 조건들의 개관Overview of settings and constraints

BIG 배포 도구는 SDM 애플리케이션들을 소비한다. 상기 배포 도구가 어떻게 설정들과 제약 조건들을 사용할 것인지를 이해하기 위해서, 여기에서 SDM과 함께 설정들과 제약 조건들의 기초적인 개관을 제공한다. 설정들, 제약 조건들, 및 스키마에 대한 완전한 설명을 위해서는 관련된 설명을 참조하기 바란다. 본 논의에서, 설정들/제약 조건들이 SDM 메타-타입, 타입 또는 멤버 상에 있는지 여부는 구별하지 않는다. The BIG deployment tool consumes SDM applications. In order to understand how the deployment tool will use settings and constraints, here is a basic overview of the settings and constraints in conjunction with SDM. For a complete description of the settings, constraints, and schemas, see the related description. In this discussion, it does not distinguish whether the settings / constraints are on an SDM meta-type, type or member.

SDM 모델에 의해, 개발자들, 네트워크 아키텍트들(Network Architects), 및 애플리케이션 오퍼레이터들이 설정들/제약 조건들(네트워크 아키텍트 및 개발자들), SDU 맵핑들(개발자들), 및 배포-시간 설정들(애플리케이션 오퍼레이터들)을 제공할 수 있는 능력을 가질 것이다. 이러한 제약 조건들 및 설정들은 각각 그 자신의 스키마, 규칙들, 및 값들을 가지는 호스트(즉, IIS, SQL, BizTalk) 마다 범위가 정해질 것이다. By the SDM model, developers, network architects, and application operators can configure / constrain conditions (network architects and developers), SDU mappings (developers), and deployment-time settings (applications). Operators). These constraints and settings will be scoped to a host (ie IIS, SQL, BizTalk) each having its own schema, rules, and values.

각각의 호스트의 공개그룹의 설정들은 애플리케이션에 의해 설정 가능한 것들과 호스트에 의해 보존되는 것들로 분할될 것이다. 여기서 전자의 것은 애플리케이션 설정들이라고 하고, 후자의 것은 호스트 설정들이라고 하기로 한다. 또한, 호스트는 "호스트 제약 조건들(host constraints)"을 규정함으로써 애플리케이션 설정들을 제한하며, 애플리케이션은 "애플리케이션 제약 조건들(application constraints)을 통해 호스트 설정들에 필요 조건들을 부여한다. 필요 조건들은 설정 값 범위이거나, 특정한 값 또는 변하는 값일 수 있다. The settings of each host's public group will be divided into those that can be configured by the application and those that are preserved by the host. The former is called application settings and the latter is called host settings. In addition, the host restricts application settings by defining "host constraints," and the application imposes the requirements on the host settings via "application constraints." It can be a range of values, or a specific value or a variable value.

다음의 표는 호스트들 및 애플리케이션들에 대한 설정들 및 제약 조건들을 요약하고 있다. The following table summarizes the settings and constraints for hosts and applications.

표 1: 설정 정의들Table 1: Configuration Definitions

설정들/제약 조건들의 정의Definition of settings / constraints Yes 애플리케이션 설정들 - 설정들은 애플리케이션에 관한 개발자에 의해 만들어짐Application settings-settings are made by the developer for the application 쇼핑 애플리케이션: maxWorkerThreads=8
401k 애플리케이션: maxWorkerThreads=4
Shopping application: maxWorkerThreads = 8
401k application: maxWorkerThreads = 4
애플리케이션 제약 조건들 - "호스트 설정들"에 대한 필요 조건들이 애플리케이션을 구현하는데 필요함Application Constraints-Requirements for "host settings" are required to implement the application Mode=WorkerProcessIsolationModeMode = WorkerProcessIsolationMode 호스트 설정들 - 자원에 호스팅된 모든 애플리케이션에 대한 설정들의 그룹Host Configurations-group of settings for all applications hosted on the resource Mode=WorkerProcessIsolationModeMode = WorkerProcessIsolationMode 호스트 제약 조건들 - 애플리케이션 설정들에 대한 한계들(정확한 값들, 값들의 범위)Host Constraints-Limits on application settings (exact values, range of values) High-perf 호스트: maxWorkerThreads<25
Best-effort 호스트들: maxWorkerThreads<5
High-perf host: maxWorkerThreads <25
Best-effort hosts: maxWorkerThreads <5

LIM(Logical Information Model)의 목표는 데이터센터의 정책과 배포 블록커들(deployment blockers)의 추상화된 관점을 제공하는 것이다. LIM은 호스트 제약 조건들/설정들과 애플리케이션 제약 조건들/설정들 간의 분할을 나타낸다. LIM이 갖는 정책은 네트워크 아키텍트에 의해 저술된다. 이러한 정책은 네트워크 아키텍트, 개발자에 의해 LIM 파일로 분류되거나, 노트패트(Notepad)로 편집되는 정규 마이크로소프트 LIM(canonical Microsoft LIM)을 사용하여 용이하게 될 수 있다. The goal of the Logical Information Model (LIM) is to provide an abstracted view of data center policies and deployment blockers. LIM represents the division between host constraints / settings and application constraints / settings. The policy of LIM is authored by the network architect. This policy can be facilitated using a regular Microsoft canonical Microsoft LIM (LIM) that is classified as a LIM file by network architects, developers, or edited into Notepad.

그 후, LIM은 개발자들에 의해 사용되어, 애플리케이션들을 기록하고 데이터센터의 표현에 대해 시험하게 된다. 개발자들은 LIM이 허용하는 애플리케이션 설정들에 대한 값들, 애플리케이션이 구현하고 있는 호스트 제약 조건들, 및 호스트 들 상에 컴포넌트들을 배치하는 것에 대한 메타데이터를 애플리케이션의 일부로서 제공한다. 개발자들은 맵핑 파일을 통해 호스트들 상에 애플리케이션의 배치에 관한 지시를 제공한다. 비특정 설정들은 애플리케이션 오퍼레이터들이 제공하는 배포-시간 설정들로서 전달될 것이다(즉, IP 주소 또는 App_pool_ID).The LIM is then used by developers to record applications and to test the representation of the data center. Developers provide as part of the application metadata for the application settings that the LIM allows, the host constraints the application is implementing, and the placement of components on the hosts. Developers provide instructions for deploying an application on hosts through a mapping file. Non-specific settings will be passed as deployment-time settings provided by application operators (ie IP address or App_pool_ID).

기본적인 예는, 네트워크 아키텍트가 "High-perf" 호스트들 및 "Best-effort" 호스트들에 관한 서비스들을 구입하는 고객들에 대한 다른 호스트 제약 조건들을 규정하는 것이다. 호스트 제약 조건은 "IO" 또는 "WorkerThreads"의 수를 다르게 제한할 수 있다. 이 예에서, "High-perf" 호스트 설정들 및 "Best-effort " 호스트 설정들은 동일하며, IIS_6'의 새로운 모드를 사용한다. 개발자는 두 개의 애플리케이션을 다른 예산과 요구 조건으로 기록할 것이다. 제1 쇼핑 애플리케이션(Shopping application)은 더 많은 "WorkerThreads"를 원할 것이다. "401K 애플리케이션"은 덜 차별적이다. 두 애플리케이션은 모두 "WorkerProcessIsolationMode"에서의 구현을 억제(요구)한다. 도 50은 애플리케이션 설정들 및 제약 조건들과, 호스트 설정들 및 제약 조건들을 나타내고 있다. The basic example is that the network architect prescribes other host constraints for customers who purchase services on " High-perf " hosts and " Best-effort " hosts. Host constraints can limit the number of "IO" or "WorkerThreads" differently. In this example, the " High-perf " host settings and the " Best-effort " host settings are the same, using the new mode of IIS_6 '. The developer will record the two applications at different budgets and requirements. The first shopping application will want more "WorkerThreads". The "401K application" is less discriminating. Both applications suppress (require) implementations in "WorkerProcessIsolationMode". 50 shows application settings and constraints, and host settings and constraints.

배포의 국면들Aspects of Distribution

BIG 배포 도구를 사용할 때, SDM 애플리케이션 배포 주위에는 후술하는 바와 같이 네 개의 국면(phase)이 있다. 도 51은 배포 도구에 대한 예시적인 국면들을 나타내고 있다. When using the BIG deployment tool, there are four phases around SDM application deployment as described below. 51 illustrates exemplary aspects of a deployment tool.

초기 국면(Initial Phase)은, LIM이 산출되어 스케일 불변 방식으로 데이터센터에서 나타내고 그 후 하드웨어 분류 파일(데이터센터 디스크립터)을 생성하는 국면이다. The initial phase is the phase in which the LIM is calculated and represented in the data center in a scale invariant manner and then generates a hardware classification file (data center descriptor).

애플리케이션 개발 국면(Application Development Phase)은, 개발자가 LIM에 대해 코딩하고 배포 도구 API들을 사용하여 개발자의 SDM 애플리케이션을 시험 및 디버그하는 국면이다. The Application Development Phase is where developers code for LIM and test and debug their SDM applications using deployment tool APIs.

설치 국면(Install Phase)은, 애플리케이션 오퍼레이터가 이미 구성된 기계에 애플리케이션들을 설치하는 국면이다. The install phase is the phase in which the application operator installs the applications on a machine already configured.

실행 국면(Running Phase)은, 애플리케이션 오퍼레이터가 토폴로지를 스케일-아웃 및 재구성하거나, 이미 실행되고 있는 애플리케이션을 설치제거하는 국면이다. The running phase is where the application operator scales out and reconfigures the topology or uninstalls an application that is already running.

본 명세서 전체에 걸쳐 또한 본 흐름도에 있어서 "배포(deployment)"라는 용어를 사용하는데, 이는 필요한 호스트 설정/제약 조건 검사, 호스트 및 애플리케이션 양립 불가능성의 신호, 애플리케이션 설정들의 기록, 및 미니-팩토리 액션을 호출 등을 모두 포함하기 위함이다. 미니 팩토리 액션들은 설치와, 설치제거를 수행하고, 구성하고, 또한 Fusion, MSI 또는 미래의 마이크로소프트 설치자로 훅(hook)하는 모든 것들이다. Throughout this specification and throughout this flow chart, the term "deployment" is used, which checks for necessary host configuration / constraint checks, signals of host and application incompatibility, recording of application configurations, and mini-factory actions. To include all calls, etc. Mini factory actions are everything that installs, uninstalls, configures, and also hooks into Fusion, MSI, or future Microsoft installers.

초기 국면Early phase

초기 국면은 LIM과 데이터센터 디스크립터가 생성되는 시점이다. The initial phase is when LIMs and data center descriptors are created.

데이터센터의 네트워크 아키텍트는 "Microsoft.com"으로부터 가장 근접하게 부합하고 디지털 서명된 LIM을 선택하여 다운로드한다. 그 후, 네트워크 아키텍트는 파일을 편집하여 네트워크 토폴로지, 허용된 애플리케이션 설정들, 및 호스팅 제약 조건들을 포함하는 원하는 데이터센터 정책들을 반영한다. The data center's network architect selects and downloads the closest matched, digitally signed LIM from "Microsoft.com." The network architect then edits the file to reflect the desired data center policies, including network topology, allowed application settings, and hosting constraints.

또한, LIM은 "Visual Studio Whidbey"의 디자인 표면(design surface)으로 저술될 수 있다. 그 다음 단계에서, 네트워크 아키텍트는 요즈음 "Word" 문서나 "Visio" 도면으로 캡쳐되는 모든 관련된 정책 및 토폴로지 정보를 개발자 조직에게 부여한다. 그 후 개발자는 데이터센터를 나타내는 적절한 LIM을 생성하고, 정확성을 보장하기 위하여 네트워크 아키텍트와 반복한다. LIM can also be written as the design surface of "Visual Studio Whidbey". In the next step, the network architect nowadays gives the developer organization all relevant policy and topology information that is captured in the "Word" document or the "Visio" drawing. The developer then creates an appropriate LIM to represent the data center and iterates with the network architect to ensure accuracy.

일단 LIM이 생성되면, 데이터센터 조직은 데이터센터 디스크립터 파일을 생성함으로써 LIM에 따라 그 자신의 하드웨어를 분류한다. 데이터센터 디스크립터는 실행되고 있는 하드웨어에 대한 LIM 컴포넌트들을 맵핑하며, 이를 분류 작업(act of classification)이라고 한다. 그러므로, 데이터센터 디스크립터는 스케일 변동적이지 않으며, IP 주소와 같은 기계 고유의 상세를 포함한다. 다음의 도면은 데이터센터 디스크립터를 시각화하지만, UI를 제시하지는 않는다. LIM이 "IIS gold" 및 "IIS silver" 논리적 호스트들의 개념을 가질 수 있다는 것에 유의하여야 한다. 데이터센터 디스크립터에서, 이들 논리적 호스트들이 물리적 기계들로 맵핑됨으로써, "IIS[1] gold"가 IP 주소 "192.168.11.2"에 위치하고, "IIS[2] gold"가 IP 주소 "192.168.11.3"에 위치하게 된다. 도 52는 데이터센터 디스크립터의 예시적인 시각화를 나타내고 있다. Once the LIM is created, the data center organization classifies its own hardware according to the LIM by creating a data center descriptor file. The data center descriptor maps the LIM components to the running hardware and is called the act of classification. Therefore, data center descriptors are not scale-variable and contain machine-specific details such as IP addresses. The following figure visualizes the data center descriptor but does not present a UI. Note that the LIM may have the concept of "IIS gold" and "IIS silver" logical hosts. In the data center descriptor, these logical hosts are mapped to physical machines, so that "IIS [1] gold" is located at IP address "192.168.11.2" and "IIS [2] gold" is located at IP address "192.168.11.3". Will be located. 52 shows an exemplary visualization of the data center descriptor.

데이터센터 오퍼레이터가 서버들, 네트워크, 자원들, 및 애플리케이션 아래의 모든 것들을 설치/구성함에 따라, 동작들(actions)은 LIM 내에 머무를 필요가 있다는 것에 유의하여야 한다. (데이터센터 오퍼레이터는 애플리케이션 아래의 모 든 것에 대해 책임이 있다는 것에 유의하여야 한다.) 네트워크 아키텍트 및 데이터 오퍼레이터 양자는 상기 배포 도구 외부에서 그들의 작업을 수행한다. It should be noted that as the data center operator installs / configures the servers, the network, the resources, and everything below the application, the actions need to stay within the LIM. (Note that data center operators are responsible for everything under the application.) Both network architects and data operators perform their work outside the deployment tool.

애플리케이션 개발 국면Application Development Phase

이 국면에서, 개발자는 LIM에 대해 코딩하고, BIG 배포 도구 API들을 사용하여 배포들을 시험/디버그한다. 이러한 LIM은 데이터센터에 의해 제공되거나 또는 데이터센터를 대신하여 개발자에 의해 분류된다(상술한 바와 같음).In this phase, the developer codes for the LIM and tests / debugs the deployments using the BIG deployment tool APIs. Such LIM is provided by the data center or classified by the developer on behalf of the data center (as described above).

배포 도구 API들은 "Visual Studio Whidbey"에 대한 두 개의 시나리오가 "F5" 및 "시험/디버그" 배포들을 수행할 수 있도록 한다. F5 및 시험/디버그 배포들은 각각 단일 개발자 박스(single developer box) 및 다중 기계들에 대한 것이다. F5 시스템에서, 필요한 비트들은 이미 대상 단일 개발자 박스에 있다. 시험/디버그의 경우, 통상의 배포들에서와 마찬가지로, 상기 배포 도구가 대상 기계(들)에게 비트들을 전달하도록 요구한다. 그러나, F5 및 시험/디버그 시나리오들은 개발자들로 하여금 충돌하는 설정들에 대해 경고를 받게 하고, 애플리케이션 및 호스트 설정들을 중복 기입(overwrite)한다. (통상적으로, 단지 애플리케이션 설정들만이 상기 배포 도구에 의해 기록될 수 있다.) 이들 VS 시나리오들은 SDM 런타임을 사용하지 않을 것이라는 것에 유의하여야 한다. 도 53은 이들 VS 시나리오들을 나타내고 있다. The deployment tool APIs allow two scenarios for "Visual Studio Whidbey" to perform "F5" and "test / debug" deployments. F5 and test / debug distributions are for a single developer box and multiple machines, respectively. In the F5 system, the necessary bits are already in the target single developer box. In the case of a test / debug, as in normal distributions, the distribution tool requires delivery of bits to the target machine (s). However, F5 and test / debug scenarios allow developers to be warned of conflicting settings and overwrite application and host settings. (Usually, only application settings can be recorded by the deployment tool.) It should be noted that these VS scenarios will not use the SDM runtime. 53 illustrates these VS scenarios.

Visual Studio "F5" and "시험/디버그" 시나리오들에 대한 중요한 경고들(caveats)은 다음과 같다. Important caveats for the Visual Studio "F5" and "Test / Debug" scenarios are:

BIG 배포 도구 API들은 마법사(wizard)를 통하여 VS로부터 호출될 것이다. The BIG Deployment Tool APIs will be called from VS through the wizard.

VS 마법사는 배포할 기계들을 선택하고 배포-시간 설정들(즉, IP_address 또는 App_pool_ID=17)을 얻을 것이다. The VS wizard will select the machines to deploy and get the deployment-time settings (ie IP_address or App_pool_ID = 17).

VS는 사용자 인터페이스를 실행할 것이다. VS will launch the user interface.

F5 시나리오에서, SDM, SDU, 2진수들, 및 모든 비트들은 이미 대상 단일 개발 박스에 존재한다. 따라서, 기록 설정들이 필요한 모든 것이 된다. In the F5 scenario, the SDM, SDU, binary numbers, and all the bits already exist in the target single development box. Thus, the recording settings are all that is necessary.

시험/디버그 루프에서, "배포"는 필요한 설정들을 기록하는 것을 포함한다. In the test / debug loop, "deploy" involves recording the necessary settings.

두 시나리오들은 설정들이 충돌할 때 신호를 보내며, 호스트 및 애플리케이션을 포함하여 대상 기계들의 설정들을 중복 기입하도록 한다. Both scenarios signal when settings conflict, allowing you to overwrite the settings of the target machines, including the host and application.

개발자가 LIM에 대한 SDU 맵핑들의 개념과 LIM에 대한 애플리케이션을 코딩하는 것에 대해서는 도 53에 나타내지 않았다. (LIM에 대해 더 자세한 것은 LIM/LID 설명 부분을 참조하기 바람.) 개발자는 애플리케이션 오퍼레이터에게 SDM, 2진수들, SDU 맵핑 파일들을 포함하는 SDU를 전달한다. The developer is not shown in FIG. 53 about the concept of SDU mappings for the LIM and coding the application for the LIM. (See the LIM / LID description for more details on LIM.) The developer passes an SDU containing the SDM, binary numbers, and SDU mapping files to the application operator.

설치 국면Installation phase

설치 국면에 있어서, 오퍼레이터는 애플리케이션(맵핑들을 갖는 SDU) 및 데이터센터 디스크립터(이것은 LIM을 확장한다)를 제공 받는다. In the installation phase, the operator is provided with an application (SDU with mappings) and a data center descriptor (which extends LIM).

애플리케이션 설치를 나타내는 도 54에 있어서, 다음의 경고들이 중요하다. In Figure 54 showing application installation, the following warnings are important.

애플리케이션 오퍼레이터가 상기 도구(GUIGCLI)를 착수한다. The application operator launches the tool (GUIGCLI).

모든 파일들과 데이터센터 설명을 복사하여 로딩한다. Copy and load all files and the data center description.

애플리케이션은 SDM 런타임에서 등록된다. The application is registered at the SDM runtime.

애플리케이션 오퍼레이터는 애플리케이션 컴포넌트들의 호스트/기계를 선택 한다. (실시예들은 다음 항목에서 제공된다.)The application operator selects a host / machine of application components. (Examples are provided in the following section.)

이러한 선택(이것을 "맵핑"이라 한다) 중에, 런타임의 관점(Runtime's view of the world)에 대해 제약 조건들이 검사된다. 만약 이러한 도구의 외부의 설정들을 변경하여 디스조인트 뷰(disjoint view)를 일으킬 경우에는 어떠한 결과도 보장할 수 없다. During this choice (called "mapping"), constraints are checked against the runtime's view of the world. If you change the external settings of these tools to create a disjoint view, no results can be guaranteed.

배포는 호스트 및 애플리케이션 제약 조건들/설정들 검사를 수행하고 설치한다. (네트워크 고장을 피하기 위해 캐시 상에 설정 ACL 및 캐싱 파일을 구비하는 경우 실행이 더욱 복잡해질 것이라는 것에 유의해야 한다.)The distribution performs and installs host and application constraints / settings checks. (Note that if you have configuration ACLs and caching files on the cache to avoid network crashes, execution will be more complicated.)

상기 도구는 UI 또는 도큐멘테이션(documentation)을 통해 상태 데이터(stateful data)(예컨대, 현재 차지하고 있는 SQL 데이터베이스)를 취급할 수 없다는 것을 분명히 한다. The tool makes it clear that it cannot handle stateful data (e.g., the SQL database it currently occupies) via the UI or documentation.

이상의 단계들은 배포 설명(Deployment Description)을 생성하며, 이것은 구체적인 배포를 위해 재사용되거나 수정될 수 있다. (실시예들은 다음 부분에서 제공된다.)The above steps create a deployment description, which can be reused or modified for specific deployment. (Examples are provided in the following sections.)

"미리 보기(Preview)" 기능은 상기 도구가 행하는 변경들의 리스트를 애플리케이션 오퍼레이터가 구할 수 있도록 한다. 그러면, 사용자는 미리 보기가 생성된 배포 디스크립터를 사용하여 상기 도구를 재실행할 수 있다. The "Preview" function allows the application operator to obtain a list of changes made by the tool. The user can then rerun the tool using the deployment descriptor for which the preview was generated.

이미 생성된 배포 디스크립터가 로딩되고 실행되며, SDM 런타임이 애플리케이션을 알고 있다고 가정하면, 애플리케이션 비트들은 여전히 이용 가능하며, 동일한 데이터센터 디스크립터가 유효하다. 도 54는 예시적인 설치 시나리오를 나타낸 다. Assuming that the distribution descriptor already created is loaded and executed, and the SDM runtime knows the application, the application bits are still available and the same data center descriptor is valid. 54 illustrates an example installation scenario.

배포를 규정하는 실시예Embodiments That Prescribe Distribution

배포를 규정하는데 필요한 데이터의 흐름을 명백하게 하기 위하여, LIM을 통해 데이터센터를 제약하는 MSN의 예를 사용한다. To clarify the flow of data needed to define the distribution, we use the example of MSN that constrains the data center via LIM.

LIM은 디지털적으로 서명하고, 시간 날인하고, 버전을 붙일 수 있다. 개발 조직은 LIM을 사용하여 MSN 데이터센터의 호스트들(IIS 및 SQL 서버들) 상에 호스팅된 두 계층의 애플리케이션을 코딩한다. 개발자는 컴포넌트가 호스팅되어야 하는 호스트를 규정하며, SDU 맵핑 파일을 생성한다. 이러한 MSN 예를 도 55에 나타내고 있다.LIM can be digitally signed, time stamped, and versioned. The development organization uses LIM to code two layers of applications hosted on hosts (IIS and SQL servers) in the MSN data center. The developer specifies the host where the component should be hosted and creates an SDU mapping file. This MSN example is shown in FIG.

다음은 도 55에 관한 것으로 애플리케이션 배포에서의 데이터 흐름을 나타내고 있다. The following relates to FIG. 55 and illustrates the data flow in application distribution.

SDU는 SDM을 포함한다. SDUs include SDMs.

개발자는 SDU 컴포넌트들을 LIM(MSNdatacenter.LIM)으로 맵핑하여, SDU 맵핑 파일을 생성한다. 맵핑들은 허용 가능한 위치들이다. The developer maps the SDU components to LIM (MSNdatacenter.LIM) to create an SDU mapping file. Mappings are allowable locations.

데이터센터 디스크립션은 LIM 컴포넌트들에 따라서 실제적/물리적 서버들을 분류하며, 스케일 불변이다. The data center description classifies real / physical servers according to LIM components and is scale invariant.

SDU, SDU 맵핑들, 데이터센터 디스크립션, 및 사용자 입력은 상기 배포 도구로 공급되어 배포 디스크립터를 생성한다. SDUs, SDU mappings, data center descriptions, and user input are supplied to the deployment tool to generate a deployment descriptor.

배포 디스크립터는 (SDU로부터의) 컴포넌트들을 규정하여 (데이터센터 디스크립션으로부터의) 기계들 상에 설치한다. The distribution descriptor defines the components (from the SDU) and installs them on the machines (from the data center description).

배포 디스크립터는 URL 등의 배포-시간 설정들을 얻는다. The deployment descriptor gets the distribution-time settings such as the URL.

도 55는 배포 디스크립터 파일을 생성하는 예를 나타내고 있다. 55 shows an example of generating a deployment descriptor file.

상기 예에서, SDU 맵핑 파일은 개발자가 SDM 컴포넌트 2TierApp.MyWeb를 MSN에 구속된 호스트 컴포넌트 MSN9.IIS_MSN로, 마찬가지로 2TierApp.MyDB를 MSN9.SQL_MSN로 구속시킨다. (여기서 합성 컴포넌트(Compound Component)를 규정하여 다중 MyWeb들의 경우 불명확한 점을 없앤다.)In this example, the SDU mapping file allows the developer to constrain the SDM component 2TierApp.MyWeb to the host component MSN9.IIS_MSN bound to MSN, and likewise to 2TierApp.MyDB to MSN9.SQL_MSN. (Here we define a compound component to eliminate the ambiguity for multiple MyWebs.)

네트워크 아키텍트는 IIS 및 SQL 제약 조건들과 설정들을 어떻게 구성하는가를 나타내는 MSNdatacenter.LIM을 편집한다. 이러한 LIM은 스케일 불변인데, 왜냐하면 LIM이 IIS 또는 SQL을 실행하는 특별한 기계들이 아니라, IIS 및 SQL 호스트들을 나타내기 때문이다. 그 후, 데이터센터는 데이터센터 디스크립터를 유도하는데, 이러한 데이터센터 디스크립터는 어떠한 기계들이 LIM에서 구성된 바와 같이 IIS 및 SQL을 실행하는지에 대해 나타낸다. IIS_MSN 컴포넌트를 실행하는 두 개의 기계가 있다는 것을 나타내기 위하여 IIS_MSN[1] 및 IIS_MSN[2]의 표시를 사용한다. The network architect edits MSNdatacenter.LIM, which shows how to configure IIS and SQL constraints and settings. This LIM is not immutable because LIM represents IIS and SQL hosts, not special machines running IIS or SQL. The data center then derives a data center descriptor, which indicates which machines run IIS and SQL as configured in the LIM. Use the notation IIS_MSN [1] and IIS_MSN [2] to indicate that there are two machines running the IIS_MSN component.

BIG 배포 도구는 입력으로서 SDU, SDU 맵핑들, 데이터센터 디스크립터, (사용자가 공급한) 배포 설정들을 받아서, 배포 디스크립터를 생성한다. 본 예에서, 배포 디스크립터는 배포를 규정한다. 배포 디스크립터를 실행하면 대상 서버들에 대해 소프트웨어를 설치/스케일-아웃/재구성/설치제거 할 수 있다. The BIG deployment tool takes as input SDUs, SDU mappings, data center descriptors, and (user-supplied) deployment settings, and generates a deployment descriptor. In this example, the distribution descriptor specifies the distribution. Running the deployment descriptor allows you to install / scale-out / reconfigure / uninstall the software for the target servers.

배포 디스크립터 본문에서 설명하는 바와 같이, MyWeb(MyWeb[1])의 경우는 서버 IIS_MSN[1]에 설치될 것이고, MyWeb[2]는 서버 IS_MSN[2]에 설치될 것이고, MyDB[1]은 서버 SQL_MSN[1]에 설치될 것이다. 배포-시간 설정들은 IP 주소 또는 App_Pool_ID 등의 애플리케이션 오퍼레이터에 의해 제공된다. 이러한 배포 디스크립터는 그것이 의존하는 파일들이 존재한다는 조건 하에서 재사용될 수 있다. As described in the deployment descriptor body, MyWeb (MyWeb [1]) would be installed on server IIS_MSN [1], MyWeb [2] would be installed on server IS_MSN [2], and MyDB [1] would be server It will be installed in SQL_MSN [1]. Release-time settings are provided by an application operator such as an IP address or App_Pool_ID. Such a deployment descriptor can be reused under the condition that the files it depends on exist.

실행 국면Phase of execution

스케일-아웃[인] 시나리오Scale-out [in] scenario

이미 실행되고 있는 애플리케이션에 있어서, 스케일-아웃[인] 시나리오는 애플리케이션 오퍼레이터가 컴포넌트, 포트, 또는 와이어를 추가[삭제]하도록 허용한다. 이러한 특징의 유용성의 예는 "Joe_Millionaire" 웹사이트일 수 있으며, 여기서 트래픽이 엄청나게 증가하고 정규 TV 시기에만 스케일-아웃하고 그 후(또는 밤마다)에는 스케일-인하는 것을 알 수 있다. For applications already running, the scale-out [in] scenario allows the application operator to add [remove] components, ports, or wires. An example of the usefulness of this feature may be the "Joe_Millionaire" website, where it can be seen that the traffic increases tremendously, scales out only during regular TV periods and then scales in (or nightly).

애플리케이션 스케일-아웃[인]에 대한 흐름도에 있어서, 다음이 중요한 점들이다. In the flow diagram for application scale-out [in], the following are important points.

스케일-아웃[인]은 설치의 서브 세트이다. Scale-out [in] is a subset of the installation.

애플리케이션 오퍼레이터는 실행되는 SDM 애플리케이션을 선택하여 다음을 행할 수 있다. The application operator can select the SDM application to run to:

컴포넌트들, 포트들, 와이어들을 추가하고, 배포-설정들을 기입하기.Add components, ports, wires, and fill in deployment-configurations.

컴포넌트들, 포트들, 및 와이어들을 삭제하기.Deleting components, ports, and wires.

시나리오는 이미 생성되거나 변경된 배포 디스크립터로부터 실행될 수 있다. (동일한 데이터센터 디스크립터/LIM의 경고들이 애플리케이션에 대해 액세스한다고 가정할 때, SDM 런타임은 여전히 등록된 애플리케이션을 갖는다.) 도 56은 예시적 인 스케일-아웃 시나리오를 나타낸다. Scenarios can be run from deployment descriptors that have already been created or changed. (Assuming the alerts in the same data center descriptor / LIM access to the application, the SDM runtime still has a registered application.) FIG. 56 shows an example scale-out scenario.

토폴로지-재구성 시나리오(Topology-reconfiguration scenario)Topology-reconfiguration scenario

토폴로지-재구성에 의해 애플리케이션 오퍼레이터가 설치제거, 재설치 없이 실행되고 있는 애플리케이션을 리와이어(rewire)할 수 있다. 리와이어의 예들은 프론트 엔드 데이터베이스(front-end database)를 백엔드 데이터베이스(back-end database)로 변경시킬 것이다. Topology-reconfiguration allows application operators to rewire running applications without uninstalling and reinstalling. Rewire's examples will change the front-end database into a back-end database.

토폴로지-재구성에서의 중요한 점들은 이하와 같다. Important points in topology-reconstruction are as follows.

이러한 시나리오는 설치제거, 재설치 없이 존재하는 포트 및 와이어들의 편집을 할 수 있다는 점에서 스케일-아웃과 다르다. This scenario differs from scale-out in that you can edit existing ports and wires without uninstalling or reinstalling.

또한 잠정적으로 사용자들로 하여금 두 개의 다른 SDM 애플리케이션들을 "브릿지(bridge)"하는 것을 허용한다. It also potentially allows users to "bridge" two different SDM applications.

도 57은 예시적인 토폴로지-재구성 시나리오를 나타내고 있다. 57 illustrates an example topology-reconfiguration scenario.

토폴로지-재구성은 고장 시, 전체 애플리케이션을 재배포하고 싶지 않은 경우에 유용하다. 예컨대, "패스포트(Passport)"는 모든 신용 카드 번호를 백엔드에 저장하고 IIS 프론트 엔드를 통해 이용 가능하게 된다. 프론트 엔드가 고장이 나면, 데이터를 재배포/이전(redeploy/migrate)하기를 원할 수 있다. 그 대신에, (정상적인 설치의 일부로서) 새로운 프론트 엔드를 배포하고, 그 새로운 프론트 엔드를 패스포트 데이터베이스로 리와이어할 수 있다. Topology-reconfiguration is useful if you do not want to redistribute the entire application in the event of a failure. For example, "Passport" stores all credit card numbers in the back end and becomes available through the IIS front end. If the front end fails, you may want to redeploy / migrate the data. Instead, you can deploy a new front end (as part of your normal installation) and rewire that new front end to your passport database.

토폴로지-재구성과 브릿지하는 예는 "beta_MSN10" 애플리케이션이 "MSN9" 애플리케이션의 데이터베이스를 공유하기를 원했던 경우일 것이다. 애플리케이션 오 퍼레이터는 "beta_MSN10"을 정상적으로 배포한다. 이제는, "beta_MSN10"의 프론트 엔드가 "MSN9"의 데이터베이스와 대화할 필요가 있으며, "MSN9"의 데이터베이스에서의 재구성(및 새로운 와이어)을 요구할 것이다. An example of bridging with topology-reconfiguration would be if the "beta_MSN10" application wanted to share the database of the "MSN9" application. The application operator normally distributes "beta_MSN10". Now, the front end of "beta_MSN10" needs to talk to the database of "MSN9" and will require reconfiguration (and new wire) in the database of "MSN9".

설치제거 시나리오Uninstall scenario

설치제거 시나리오에 따라, 애플리케이션 오퍼레이터는 애플리케이션을 선택하고, 모든 실행되고 있는 인스턴스들이 삭제되며 런타임이 업데이트된다. 사용자는 설치제거할 정확한 인스턴스를 선택하지는 않는데, 이는 스케일-인 시나리오들을 통하여 가능하기 때문이다. Depending on the uninstall scenario, the application operator selects the application, deletes all running instances and updates the runtime. The user does not choose the correct instance to uninstall because this is possible through scale-in scenarios.

다음의 점들은 설치제거 시나리오에 있어서 중요하다. The following points are important in an uninstall scenario.

설치제거는 존재하는(편집되었을 수도 있는) 배포 디스크립터를 통해 수행될 수 있다. Uninstallation can be performed via existing deployment descriptors (which may have been edited).

사용자는 설치제거할 애플리케이션을 선택하고 모든 인스턴스들을 제거한다. The user selects the application to uninstall and removes all instances.

상태 콘텐츠(stateful content)는 존재하는 수단을 통해 이러한 도구 외부에서 제거되어야 한다. Stateful content must be removed outside of these tools by means of existing means.

도 58은 예시적인 설치제거 시나리오를 나타내고 있다. 58 illustrates an example uninstall scenario.

관리management

이하의 부분에서는 데이터센터들의 관리와 데이터센터들이 배포된 후의 분산된 애플리케이션들에 대해 설명한다. 먼저 모델-기반 관리 도구에 대해 설명하고, 이후에 자체감시(introspection)/추적 메커니즘(introspection/ tracking mechanism)과 동작 논리(operational logic)에 대해 논의한다. The following sections describe the management of data centers and the distributed applications after they are deployed. Model-based management tools are discussed first, followed by the introduction of introspection / tracking mechanisms and operational logic.

모델-기반 관리Model-Based Management

모델-기반 관리(또는 Ops 논리)가 처리되어, 애플리케이션의 SDM 기반 모델의 애플리케이션 개발자 목적 및 정책과 오퍼레이터의 정의들에 기초하여 물리적 환경으로부터 이벤트 트리거들을 받아들이고, 모델의 상황에서 일련의 태스크들 또는 프로세싱을 활성화하고 조직함으로써, 변화를 조장하고 모델과 물리적 세계 간의 일관성을 제공한다. Model-based management (or Ops logic) is handled to accept event triggers from the physical environment based on the application developer's purpose of the SDM-based model of the application and policies and operator definitions, and a series of tasks or processing in the context of the model. By activating and organizing them, they encourage change and provide consistency between the model and the physical world.

트리거(trigger) 또는 요청(request) 또는 다른 쓰레시홀드가 SDM에서의 특별한 인스턴스에서 목표한 이벤트일 것이다. 컴포넌트 인스턴스는 트리거를 수신할 것이고, SDM으로 표현된 전체 애플리케이션 및 하드웨어 환경의 상황의 제반 사항에 기초하여, 트리거에 의해 식별된 이슈를 어드레싱할 일련의 단계를 개시할 것이다. SDM으로부터의 애플리케이션 및 자원들의 문맥(context)은 이러한 자동화를 원활하게 하고 서비스의 동작 스탭에게 더 우수한 조작 용이성을 제공할 수 있는 능력을 부여한다. A trigger or request or other threshold may be the event targeted at a particular instance in the SDM. The component instance will receive the trigger and initiate a series of steps to address the issue identified by the trigger, based on the prerequisites of the situation of the overall application and hardware environment, expressed in SDM. The context of applications and resources from the SDM gives this ability to facilitate this automation and provide greater operational ease to the operational staff of the service.

도 59는 Ops 논리 또는 모델-기반 관리라고 하는 모델(BIG) 및 관리 부분들에 대한 전체적인 아키텍쳐 이다. 전체적인 아키텍쳐에서의 프로세서의 흐름을 요약하면 다음과 같다. 59 is an overall architecture for the model (BIG) and management portions, referred to as Ops logic or model-based management. The summary of the processor flow in the overall architecture is as follows.

ㆍ 애플리케이션 개발자는 새로운 애플리케이션의 집합적 모델(SDM)을 정의할 수 있거나, 또는 최종 사용자 애플리케이션 또는 서비스를 구성할 수 있는 컴포넌트 종류들의 클래스들을 정의할 수 있을 것이다. The application developer may define a collective model (SDM) of the new application or define classes of component types that may constitute an end user application or service.

ㆍ 개발자 또는 동작 개발자는 실행되어야 하는 서버들의 최소 수를 설정하 는 등, 동작을 위한 정책과 가이드라인을 갖는 모델에 컴포넌트 종류들을 주석 처리함으로써 모델에 "오퍼레이터 인텐트(operator intent)"를 추가할 수도 있을 것이다. A developer or developer can add an "operator intent" to the model by annotating component types to the model with policies and guidelines for operation, such as setting the minimum number of servers that must be run. Could be

ㆍ 애플리케이션의 특별한 실행을 위해 실행된 인스턴스들의 유닛 모델 또는 SDM 런타임은 "Unit Model"에 유지될 것이다. 각 기계의 바람직한 상태를 유지하고 있는 인스턴스들과 물리적 기계 간에는 1대1 대응 관계가 있다. The unit model or SDM runtime of instances executed for the special execution of the application will be kept in the "Unit Model". There is a one-to-one correspondence between the physical machine and the instances that maintain the desired state of each machine.

ㆍ BIG의 자원 관리자들은 "Unit Model"과 작업하여 서버들의 물리적 세계에서의 변화를 수행한다. BIG resource managers work with the "Unit Model" to make changes in the physical world of servers.

ㆍ 각 서버는 부분적으로는 BIG에 의해 관리되고, 부분적으로는 오퍼레이터들에 의해 모델의 외부에서 관리될 것이다. Each server will be managed in part by the BIG and in part by the operators outside of the model.

ㆍ 집합적 모델과 유닛 모델 간에는, 모델을 통하여 물리적 기계들로의 변화를 조직하고 오퍼레이터 목적을 실행하도록 하는 모멜-기반 프로세싱의 한 유형이 있다. Between the collective model and the unit model, there is a type of Momel-based processing that allows the model to organize changes to physical machines and to perform operator objectives.

ㆍ 모델-기반 프로세스의 또 다른 유형은 다른 방법으로 처리될 것이고, 물리적 스페이스과 모델 간의 일치성을 제공할 것이다. Another type of model-based process will be handled in different ways, providing consistency between the physical space and the model.

ㆍ 관리 영역에서, 모니터링 시스템(Monitoring System)이 이벤트들을 수집하고 그것들을 경고기들(alerts)로 그룹화할 것이다. In the management area, a monitoring system will collect events and group them into alerts.

ㆍ 이벤트들과 경고기들에 사용되는 컴포넌트들은 중요한 이벤트들로 통지될 것이다. 이벤트 정보는 관여된 인스턴스 또는 런타임 SDM에 관한 정보와 함께 컴포넌트에 제공됨으로써, 모델에 맵핑을 제공할 것이다. Components used for events and alerters will be notified of important events. Event information will be provided to the component along with information about the instance or runtime SDM involved to provide a mapping to the model.

ㆍ 이벤트가 동작 트리거일 경우, 이벤트는 모델-기반 프로세싱을 트리거함으로써, 일련의 조직화된 애플리케이션 태스크들을 통해 물리적 기계들에서의 변화를 조장할 수 있다. If the event is an action trigger, the event can trigger model-based processing, thereby encouraging change in physical machines through a series of organized application tasks.

도 60은 관리의 표현 계층을 나타낸다. 이것은 수평적으로 쌓인 전체적 아키텍쳐의 모델 부분의 확대도이며, 집합적 모델은 SDM에 해당하고, 유닛 모델은 SDM 인스턴스 스페이스(Instance Space)에 해당한다. 전체적 자원 관리자는 개별적 자원 관리자들("팩토리들"이라 함)에 대한 요청들을 관리한다. 60 shows a presentation hierarchy of management. This is an enlargement of the model part of the overall architecture stacked horizontally, the collective model corresponds to the SDM, and the unit model corresponds to the SDM instance space. The global resource manager manages requests for individual resource managers (called "factories").

자체감시/추적 메커니즘Self-Monitoring / Tracking Mechanism

사용자 요청, 하드웨어 트리거, 또는 하드웨어 쓰레시홀드 등의 트리거가 선택되면, 적절한 동작 프로세스가 기동될 것이다. 동작 프로세스는 실행될 동작 태스크들의 세트일 것이다. 동작 태스크들의 실행은 오케스트레이션(orchestration)에 의해 프로세스 될 것을 요구하는데, 이는 각각의 태스크가 다음의 태스크 전에 개시 및 종료를 요구하고 장수명일 수 있는 트랜잭션이기 때문이다. 동작 프로세스들을 실행하기 위한 일련의 행동을 감시하는 엔진은 Ops 논리용 오케스트레이션 엔진이다. If a trigger, such as a user request, hardware trigger, or hardware threshold, is selected, the appropriate operating process will be started. The operational process will be a set of operational tasks to be executed. Execution of operational tasks requires processing by orchestration, since each task is a transaction that requires initiation and termination before the next task and may be of long life. The engine that monitors a set of behaviors for executing operational processes is an orchestration engine for Ops logic.

잠정적으로 분산된 서버들 또는 하드웨어 자원에 대한 일련의 동작 태스크들에 오케스트레이션을 적용하는 것은 고유의 접근 방식이다. 이러한 Ops 논리의 특성들은 트랜잭션 프로세싱에 더 정교한 접근 방식을 제공한다. Applying orchestration to a series of operational tasks for potentially distributed servers or hardware resources is a unique approach. These features of Ops logic provide a more sophisticated approach to transaction processing.

ㆍ 장수명 - 동작 프로세스들은 몇일 또는 몇 달 등의 장시간 실행될 수 있다. Long Life-The operating processes can run for a long time, such as days or months.

ㆍ 비동기 - 트리거 또는 이벤트는 트랜잭션 또는 프로세스를 개시할 수 있으나, 트리거된 태스크가 완료되어 다른 이벤트들을 프로세싱할 때까지 기다릴 수 없다. Asynchronous-a trigger or event can initiate a transaction or process but cannot wait for the triggered task to complete and process other events.

ㆍ 트랜잭션 - 동작 프로세스에서의 단계들은 그것을 개시하거나 전송하는 에이전트, 그것을 수신하거나 프로세싱하는 에이전트, 및 태스크가 실패할 경우라면 변화를 취소하는 보상 프로세스(compensation process) 등의 액션들이다. The steps in a transaction-operational process are actions such as an agent that initiates or sends it, an agent that receives or processes it, and a compensation process that cancels the change if the task fails.

ㆍ 내구성 - Ops 프로세스들은 손상되거나 불안정되지 않고 장시간 지속될 필요가 있다. Durability-Ops processes need to last long without being damaged or unstable.

ㆍ 높은 이용 가능성 - 높은 이용 가능성의 BIG 컴퓨터 및 서비스의 동작 프로세스들에 있어서는 신뢰성 뿐만 아니라 이용 가능성이 요구된다. High availability—Availability as well as reliability is required for the operational processes of high availability BIG computers and services.

Ops 논리는 동작들과 애플리케이션 개발자들에게 BIG 환경에서의 트리거에 기초하여 일련의 오퍼레이터 행동들을 분류하고 표준화할 기회를 제공할 것이다. 일단 트리거가 활성화되면, 관련된 일련의 태스크들이 기동될 것이다. 특별한 상황에 대한 단계들은 개별 기계에 대한 명령, 애플리케이션 컴포넌트 인스턴스에서의 변화, 또는 모델 또는 인간 단계들에서의 변화를 포함할 수 있다. 각 단계는 개시 및 종료를 가지고 성공 또는 실패할 수 있는 트랜잭션이다. 이러한 태스크들을 거친 단계에 오케스트레이션 엔진을 사용함으로써, 프로세스를 관리하고, 추적하고, 보고할 수 있다. 오케스트레이션 엔진은 태스크를 개시하고, 그 진행 상황을 감시하고, 완료 또는 실패를 보고할 것이다. 또한 오케스트레이션은 오케스트레이션 프로세스가 어떻게 정의되었는가에 따라, 부분적 또는 완전한 실패의 상황 에서 대안적인 행동들이 취해질 수 있도록 한다. 도 61을 참조하라.Ops logic will provide behaviors and application developers with the opportunity to classify and standardize a set of operator behaviors based on triggers in the BIG environment. Once the trigger is activated, the associated series of tasks will be launched. The steps for a particular situation may include instructions for an individual machine, a change in an application component instance, or a change in model or human steps. Each step is a transaction that can succeed or fail with start and end. By using the orchestration engine to step through these tasks, you can manage, track, and report on the process. The orchestration engine will initiate the task, monitor its progress, and report its completion or failure. Orchestration also allows alternative actions to be taken in situations of partial or complete failure, depending on how the orchestration process is defined. See FIG. 61.

자원 관리자Resource manager

자원 관리자는 분산형 컴퓨팅 시스템 내에서 논리적 및 물리적 자원들을 할당하는 책임이 있다. 자원 관리자는 이용 가능한 하드웨어, 프로세스 자원 할당 요청들, 및 논리적 및 물리적 자원들의 트랙 오너쉽을 발견한다. 자원들의 다이나믹 풀(dynamic pool)에 대한 인터페이스를 제공함으로써, 자원 관리자는 서버 내의 이용 가능성 및 확장성(scalability)에 대한 베드락(bed-rock)을 제공한다. The resource manager is responsible for allocating logical and physical resources within the distributed computing system. The resource manager discovers available hardware, process resource allocation requests, and track ownership of logical and physical resources. By providing an interface to a dynamic pool of resources, the resource manager provides a bed-rock for availability and scalability within the server.

자원 관리자는 스위치들 등의 네트워크 장치들과 컴퓨터들을 모두 포함하는 분산형 컴퓨팅 시스템 내의 모든 하드웨어를 소유하고 제어한다. 본 시스템 내의 하드웨어 자원들에 대한 액세스는 자원 관리자를 통해 제어된다. 또한, 자원 관리자는 로드 밸런싱 그룹들(load balancing groups) 등의 논리적 자원들을 제어하기 위한 기본적인 메커니즘을 제공한다. The resource manager owns and controls all hardware in a distributed computing system that includes both computers and network devices such as switches. Access to hardware resources in the system is controlled through the resource manager. In addition, the resource manager provides a basic mechanism for controlling logical resources such as load balancing groups.

자원 관리자는 본 시스템 내의 모든 자원 관리에 대한 공통적인 API를 제공한다. 서비스와 런타임은 자원 관리자 API를 통해 대화를 하여, 자원 질문들을 만들고, 자원들을 할당하고, 자원 요구들을 변경하고, 자원들을 해방시킨다. The resource manager provides a common API for all resource management in the system. Services and runtimes communicate through the resource manager APIs to create resource questions, allocate resources, change resource requests, and free resources.

BIG 자원 관리자BIG Resource Manager

도입Introduction

특징 요약Feature summary

BIG는 분산형 서비스 런타임, 공통 하드웨어 참조 플랫폼(common hardware reference platform), 및 자원 관리자를 정의한다. 분산형 서비스 런타임은 서비 스에게 서비스 컴포넌트들을 정의하는 빼대(skeleton), 그들의 관계, 및 동작 논리의 형태로 확장성 및 이용 가능성에 대한 실행 환경을 제공한다. 상기 하드웨어 참조 플랫폼은 서비스가 1 내지 수천의 컴퓨터에 이르는 시스템들 상에서 실행될 수 있도록 하는 공통의 하드웨어 구조를 정의한다. The BIG defines a distributed service runtime, a common hardware reference platform, and a resource manager. The distributed service runtime provides services with an execution environment for scalability and availability in the form of skeletons, their relationships, and operational logic that define service components. The hardware reference platform defines a common hardware structure that allows a service to run on systems ranging from one to thousands of computers.

BIG 자원 관리자는 BIG 컴퓨터 내의 논리적 및 물리적 자원들을 할당하는 책임이 있다. 자원 관리자는 이용 가능한 하드웨어, 프로세스 자원 할당 요청들, 및 논리적 및 물리적 자원들의 트랙 오너쉽을 발견한다. 자원들의 다이나믹 풀에 대한 인터페이스를 제공함으로써, 자원 관리자는 BIG 기계 내의 이용 가능성 및 확장성에 대한 베드락을 제공한다. The BIG Resource Manager is responsible for allocating logical and physical resources within the BIG computer. The resource manager discovers available hardware, process resource allocation requests, and track ownership of logical and physical resources. By providing an interface to a dynamic pool of resources, the resource manager provides a bedlock for availability and scalability within the BIG machine.

이 문서는 목적, 아키텍쳐, 및 BIG 자원 관리자의 실행에 대해 설명한다. 제1장은 목적과 구동 시나리오를 설명한다. 제2장은 자원 관리자의 아키텍쳐와 그와 연관된 자원 제공자들을 설명한다. 제3장은 실행의 세부 사항과 API들을 설명한다. This document describes the purpose, architecture, and implementation of the BIG resource manager. Chapter 1 describes the objectives and driving scenarios. Chapter 2 describes the architecture of resource managers and their associated resource providers. Chapter 3 describes implementation details and APIs.

논의(Discussion)Discussion

BIG 자원 관리자는 BIG 컴퓨터 내의 자원들의 할당 및 사용에 대한 관리에 대해 책임이 있다. BIG 자원 관리자는 스위치들 등의 네트워크 장치들과 컴퓨터들을 모두 포함하는 BIG 컴퓨터 내의 모든 하드웨어를 소유하고 제어한다. BIG 컴퓨터 내의 하드웨어 자원들에 대한 액세스는 자원 관리자를 통해 제어된다. 또한, 자원 관리자는 로드 밸런싱 그룹들 등의 논리적 자원들을 제어하기 위한 기본적인 메커니즘을 제공한다. The BIG Resource Manager is responsible for managing the allocation and use of resources within the BIG computer. The BIG resource manager owns and controls all hardware within the BIG computer, including both computers and network devices such as switches. Access to hardware resources in the BIG computer is controlled through the resource manager. In addition, the resource manager provides a basic mechanism for controlling logical resources such as load balancing groups.

BIG 자원 관리자는 BIG 컴퓨터 내의 모든 자원 관리에 대한 공통적인 API를 제공한다. 서비스와 BIG 런타임은 자원 관리자 API를 통해 대화를 하여, 자원 질문들을 만들고, 자원들을 할당하고, 자원 요구들을 변경하고, 자원들을 해방시킨다. The BIG Resource Manager provides a common API for managing all resources within the BIG computer. The service and the BIG runtime communicate through the resource manager API, creating resource questions, assigning resources, changing resource needs, and freeing resources.

자원 제공자들Resource providers

자원 관리자는 자원 관리 내로 공통의 인터페이스를 제공하는 반면에, 실제적인 자원들의 지식은 자원 제공자들의 세트로부터 나온다. 자원 제공자는 특별한 클래스의 자원들의 존재와 관리에 관한 구체적인 지식을 갖는다. 예컨대, 네트워크 자원 제공자는 관리하는 VLAN들의 존재와 구체 사항들에 대해 알고 있다. BIG 내의 다른 자원 제공자들은 물리적 장치 제공자, "IIS VRoot" 제공자, "SQL" 데이터베이스 제공자, "CLR AppDomain" 제공자, 및 "Win32 Surface" 자원 제공자를 포함한다. Resource managers provide a common interface into resource management, while the actual knowledge of resources comes from a set of resource providers. Resource providers have specific knowledge of the existence and management of a particular class of resources. For example, a network resource provider knows the existence and details of managing VLANs. Other resource providers in the BIG include physical device providers, "IIS VRoot" providers, "SQL" database providers, "CLR AppDomain" providers, and "Win32 Surface" resource providers.

자원 제공자들은 자원-특정 지식으로 자원 관리자를 확장시킨다. 자원 제공자들은 자원에 특정된 요청들을 공통의 질문 형태로의 변환을 관리한다. 자원 제공자들은 제공자 조력자(provider helper) DLL을 통하여 자원-특정 구성 API들을 갖는 자원 관리자 API를 확장시킨다. 최종적으로, 자원 제공자들은 자원 관리자 데이터 저장 장치에 적절한 상태를 부가하여, 자원에 특정된 정보의 추적을 허용한다. 더 높은 레벨의 자원 제공자들은 더 낮은 레벨의 자원 제공자들 위에 쌓인다. 예컨대, "IIS VRoot" 자원 제공자는 물리적 장치 자원 제공자를 통하여 기계들을 할당한다. 자원 제공자들의 계층화에 의해 리던던시를 최초화하고, 자원 관리의 균일성을 증가시킨다. Resource providers extend resource managers with resource-specific knowledge. Resource providers manage the conversion of resource-specific requests into a common question. Resource providers extend the resource manager API with resource-specific configuration APIs through a provider helper DLL. Finally, resource providers add the appropriate state to the resource manager data storage device to allow tracking of information specific to the resource. Higher level resource providers build up on lower level resource providers. For example, an "IIS VRoot" resource provider allocates machines through a physical device resource provider. The stratification of resource providers initiates redundancy and increases the uniformity of resource management.

윈도우 내의 I/O 관리 시스템과 BIG 내의 자원 관리 시스템 간에는 강한 유사성이 있다. BIG 자원 관리자는 윈도우 I/O 관리자와 마찬가지로, 공통 API, 자원 액세스 제어용 공통 논리, 공통 자원 추적, 및 요청들을 위한 공통 메커니즘을 다양한 제공자들 세트를 통해 제공한다. BIG 자원 제공자들은 윈도우 장치 드라이버들과 마찬가지로, 별개 클래스의 자원들을 제어하기 위한 특별한 지식으로 관리 시스템을 확장시킨다. BIG 자원 관리자는 윈도우 I/O 관리자와 마찬가지로, 공통 엄브렐러(common umbrella) 하의 다양한 자원들을 통합하기 위한 모델을 제공한다. There is a strong similarity between I / O management systems in Windows and resource management systems in BIG. BIG resource managers, like Windows I / O managers, provide a common API, common logic for resource access control, common resource tracking, and a common mechanism for requests through various sets of providers. BIG resource providers, like Windows device drivers, extend the management system with special knowledge for controlling separate classes of resources. BIG resource managers, like Windows I / O managers, provide a model for integrating various resources under a common umbrella.

자동 자원 관리 및 최적화Automated Resource Management and Optimization

BIG 자원 관리자는 데이터센터 오퍼레이터가, 자원들에 대해 컴포넌트들을 할당하고 배치하는데 직접 관여할 필요가 없게 한다. 예컨대, 새로운 서비스가 BIG 컴퓨터에 설치될 경우, 오퍼레이터들이 어떠한 컴퓨터가 그 서비스를 배치할 것인지를 결정할 필요가 없다. 오퍼레이터들은 단지 서비스에 대해 자원 쿼터(resource quota)만을 부여하면 되고, 그러면 자원 관리자는 코어 네트워크 대역폭(core network bandwidth) 등의 제한된 공유 자원들을 보존하기 위하여 어떻게 최적으로 서비스를 BIG 컴퓨터 내에 배치할 것인지를 결정한다. The BIG Resource Manager eliminates the need for data center operators to be directly involved in allocating and deploying components for resources. For example, when a new service is installed on a BIG computer, operators do not have to decide which computer will deploy that service. Operators only need to assign a resource quota to the service, and then the resource manager can choose how best to deploy the service within the BIG computer to conserve limited shared resources such as core network bandwidth. Decide

신뢰된 자원 제공자들의 기본 세트는 자원 관리자와 함께 컴포넌트 배치의 최적화에 관여한다. 자원 제공자들은 자원 관리자에게 배치 선택권들(placement choices)과 제공자-특정 관련 비용 선택권들(provider-specific relative cost preferences)을 제공함으로써 배치 최적화에 관여한다. 그러면, 자원 관리자는 전 체적인 고려 사항과 각 자원 제공자의 국부적인 고려 사항간에 균형을 맞추어, 효율을 최대화하고 자원 사용을 최소화한다. The base set of trusted resource providers is involved with the resource manager in optimizing component placement. Resource providers are involved in deployment optimization by providing placement managers with placement choices and provider-specific relative cost preferences. The resource manager then balances overall considerations with each resource provider's local considerations to maximize efficiency and minimize resource use.

최적의 컴포넌트 배치는 계속되는 고려 사항이다. 시간이 지남에 따라, 개별적인 서비스가 요구하는 자원은 줄어 들거나 커진다. 이용 가능한 물리적 자원들은 새로운 장치가 BIG 컴퓨터에 부가되고 낡은 장치가 해제됨에 따라 변화한다. 자원 관리자는 주기적으로 배치 결정들을 재검사하여, 컴포넌트들의 이동에 대한 장점을 평가한다. 자원 제공자들은 자원 관리자에게 컴포넌트의 이전 비용을 제공함으로써 배치 재평가에 관여한다. 이동 비용은 비이동 저장 장치에 대해서는 엄청날 것이지만, 소속이 없는 IIS 컴포넌트의 경우에는 매우 작을 것이다. Optimal component placement is an ongoing consideration. Over time, the resources required by individual services may shrink or grow. Available physical resources change as new devices are added to the BIG computer and old devices are released. The resource manager periodically re-examines deployment decisions to evaluate the benefits of moving components. Resource providers are involved in reassessing deployments by providing the resource manager with the transfer cost of the component. The cost of movement will be enormous for non-removable storage, but very small for non-member IIS components.

BIG 자원 관리자는 오퍼레이터들로 하여금, 자원 할당이나 컴포넌트 배치에 대해 염려할 필요가 없게 한다. 자원 관리자는 또한 개발자들로 하여금, 복잡한 할당 논리를 기록할 필요가 없도록 하며, 개발자들은 대신에 단순히 자원 관리자에게 자원 요구 조건들의 그래프를 제공하기만 하면 된다. 자원 관리자는 논리적 및 전체적 자원 요구 조건 모두를 고려하여, 컴포넌트들을 BIG 컴퓨터 내에 최적으로 배치한다. The BIG resource manager frees operators from worrying about resource allocation or component placement. Resource managers also eliminate the need for developers to record complex allocation logic, and instead they simply provide the resource manager with a graph of resource requirements. The resource manager optimally deploys components within the BIG computer, taking into account both logical and global resource requirements.

특징 설명Feature Description

실행 환경Execution environment

BIG 자원 관리자는 이용 가능성이 높은 SQL에 의해 지원되는 CLR 관리 서비스로서 실행한다. 각각의 BIG 기계는 HA SQL 클러스터 내의 SQL 서버 쌍을 통하여 복제된 단일 자원 관리자만을 가질 것으로 기대된다. The BIG resource manager runs as a CLR managed service backed by highly available SQL. Each BIG machine is expected to have only a single resource manager replicated through a pair of SQL servers in the HA SQL cluster.

BIG 자원 제공자들은 BIG 자원 관리자 프로세스 내에서 실행한다. 자원 관리자는 자원 제공자들에게 조작할 수 있는 비동기 실행 환경과, 그들의 상태를 저장하는 공유 데이터베이스를 제공한다. BIG 동작 논리 모델을 사용함으로써 모든 자원 제공자들이 CLR 관리 코드가 될 것이라고 기대된다. BIG resource providers run within the BIG resource manager process. Resource managers provide resource providers with an asynchronous execution environment that can be manipulated and a shared database that stores their state. By using the BIG behavioral logic model, it is expected that all resource providers will be CLR managed code.

모든 자원 제공자들은 그들의 상태를 자원 관리자 데이터베이스 내에 유지한다. 자원 제공자들은 그들의 관리 요구 조건들을 만족시키기 위하여 필요한 바에 따라 그들 자신의 테이블들을 생성할 수 있다. All resource providers maintain their status in the resource manager database. Resource providers can create their own tables as needed to satisfy their management requirements.

자원 관리자 데이터베이스 내의 자원 제공자의 상태는 강압적이다. 따라서, 예컨대, IIS 메타베이스는 자원 관리자 데이터베이스 내의 데이터의 캐시이다. 만약 IIS VRoot 엔트리가 자원 관리자 데이터베이스 내의 대응 엔트리 없이 IIS 메타베이스 내에서 발견된다면, 메타베이스 내의 VRoot는 제거된다.  The status of resource providers in the resource manager database is coercive. Thus, for example, the IIS metabase is a cache of data in the resource manager database. If an IIS VRoot entry is found in the IIS metabase without a corresponding entry in the resource manager database, the VRoot in the metabase is removed.

모든 자원 할당 및 재할당 요청들은 트랜잭션들 내에서 통합된다. 자원 제공자들은 자원 관리자 데이터베이스를 독점적으로 사용하여 자원 관리자 프로세스 내에서 독점적으로 실행한다. 심지어 집합적인 교차-제공자(cross-provider) 요청들은 결정적이고, 비분산적 방식으로 실행한다. 이것은 자원 제공자들의 디자인과 실행을 단순화하고, 자원들이 실패 시나리오들 내의 서버들 간에서 결코 손실되지 않는다는 것을 보장한다. All resource allocation and reallocation requests are consolidated within transactions. Resource providers use the resource manager database exclusively to run exclusively within the resource manager process. Even aggregate cross-provider requests execute in a deterministic, non-distributive manner. This simplifies the design and execution of resource providers and ensures that resources are never lost between servers in failure scenarios.

BIG 자원 관리자는 자원 할당과 자원 초기화를 두 개의 별개의 행동으로 분리한다. 자원 할당은 비분산형이고 결정적인 오퍼레이터이며, 자원 관리자 프로세스 내에서 독점적으로 실행한다. 한편, 자원 초기화는 고유적으로 분산적이며 비 결정적인 프로세스이다.The BIG resource manager separates resource allocation and resource initialization into two separate actions. Resource allocation is a non-distributed, deterministic operator and runs exclusively within the resource manager process. Resource initialization, on the other hand, is inherently distributed and nondeterministic.

자원 할당은 주로, 컴포넌트들이 실증되고, 와이어들과 연결되고, 필요에 따라서 자원 요구 조건들로 속성이 정해지는 깊이-우선 동작 논리 국면(depth-first operations logic phase)에 의해 시작된다. Resource allocation is primarily initiated by a depth-first operations logic phase in which components are demonstrated, connected to wires, and attribute to resource requirements as needed.

자원 초기화로부터 컴포넌트 실증과 자원 할당을 분리시킴으로써, BIG 런타임 및 서비스는, 자원의 초기화가 완료되지 않았기 때문에 자원을 이용 할 수 없다거나, 자원이 머무른 장치가 증발되어서 자원을 이용할 수 없다거나 하는 것에 대하여, 공통의 에러 조작 메커니즘(error-handling mechanisms)을 사용할 수 있다. 자원 초기화는 주로 상태 기계(state machine)에 의해 구동될 것이며, 상태 기계는 자원 관리자 데이터베이스 또는 SDM 데이터베이스와 같이 HA SQL 저장 장치 내에 상태를 저장한다. By separating component demonstrations and resource allocations from resource initialization, BIG runtimes and services can not use resources because they have not been initialized, or the device on which they reside has evaporated and cannot use them. However, common error-handling mechanisms can be used. Resource initialization will mainly be driven by a state machine, which stores state in HA SQL storage, such as a resource manager database or an SDM database.

자원 제공자들Resource providers

BIG 자원 관리자는 BIG 컴퓨터 내의 모든 자원들을 소유한다. 자원-특정 자원 제공자들을 통하여, 자원 관리자는 별개의 클래스의 자원들에 특정된 지식으로 확장된다. 자원 관리자는 저장 장치에게 집합적 자원 동작의 관리를 제공하고, 자원 제공자들용 호스트로서 작용한다. The BIG Resource Manager owns all the resources in the BIG computer. Through resource-specific resource providers, the resource manager extends to knowledge specific to resources of a separate class. The resource manager provides the storage device with management of collective resource operations and acts as a host for resource providers.

BIG 자원 관리자는 제한된 수의 자원 제공자들을 통하여 작은, 특정한 자원들 세트를 제공한다. 자원 제공자들(그 수는 적음)의 기본 세트는, 대상 고객들의 전부는 아니더라도 대부분의 요구 조건을 커버할 것이라고 기대된다. 이하의 자원 제공자들은 첫번째 제품 릴리스(product release)에서 기대된다. The BIG Resource Manager provides a small, specific set of resources through a limited number of resource providers. It is expected that a basic set of resource providers (which are small in number) will cover most, if not all, of the target customers. The following resource providers are expected in the first product release.

ㆍ 물리적 자원 제공자(원시 장치들)Physical resource provider (raw devices)

ㆍ 네트워크 자원 제공자(VLAN들)Network Resource Providers (VLANs)

ㆍ 외부 자원 제공자(DNS 네임들, 외부 IP 주소들)External resource providers (DNS names, external IP addresses)

ㆍ IP 로드 밸런싱 그룹 자원 제공자(IP Load Balancing Group Resource Provider)IP Load Balancing Group Resource Provider

ㆍ IIS VRoot 자원 제공자IIS VRoot Resource Provider

ㆍ SQL DB 자원 제공자SQL DB Resource Provider

ㆍ CLR AppDomain 자원 제공자CLR AppDomain Resource Provider

ㆍ "Win32 Surface" 자원 제공자(Win32 프로그램)ㆍ "Win32 Surface" resource provider (Win32 program)

생성 패턴Generation pattern

주로 자원 관리는 실행되는 CLR 관리 코드로서 패키징된 동작 논리에 의해 구동될 것이다. 동작 논리는 CLR 관리 객체가 대상 컴포넌트를 나타내는 "해체된 객체(disembodied object)" 패턴에 기록될 것이다. 해체된 객체는 컴포넌트가 필요로 하는 논리적 또는 물리적 자원들의 할당, 그러한 자원들의 초기화, 컴포넌트가 더 이상 필요하지 않을 때 그러한 자원들을 궁극적으로 분해 및 해제하는 것에 대해 책임이 있다. Resource management will primarily be driven by operational logic packaged as CLR managed code executed. The operation logic will be written in a "disembodied object" pattern in which the CLR managed object represents the target component. The dismantled object is responsible for allocating logical or physical resources required by the component, initializing those resources, and ultimately decomposing and freeing those resources when the component is no longer needed.

FrontEnd f = new FrontEnd(); // Instantiate the disembodied object.FrontEnd f = new FrontEnd (); // Instantiate the disembodied object.

이상과 같은 호출은 단지 해체된 객체, 즉, 런타임 데이터베이스 내의 컴포넌트 인스턴스 기록을 갖는 CLR 클래스를 생성할 뿐이며, 그 이상은 아니다. 동작 논리는 "FrontEnd f"와 작용하여 스케일 요구 조건들(scaling requirements) 등과 같은 파라미터들을 설정한다. Such a call only creates a decomposed object, that is, a CLR class with a record of component instances in the runtime database. The operation logic works with "FrontEnd f" to set parameters such as scaling requirements and the like.

해체된 객체, 즉 본 예에서 "FrontEnd f"는, 원하는 자원들의 그래프에 대한 요구와 후속하는 자원들의 설정에 반응함으로써, 임의의 자원 할당에 참여한다. The dismantled object, i. E. "FrontEnd f" in this example, participates in any resource allocation by responding to a request for a graph of desired resources and subsequent setting of resources.

r = f.GetResourceGraph(); // Ask f to produce the logical resource request graph (recursively if f is compound). r = f.GetResourceGraph (); // Ask f to produce the logical resource request graph (recursively if f is compound).

rgo = BigAllocateResources(rgi); // Ask the Resource Manager to do the global allocation request.rgo = BigAllocateResources (rgi); // Ask the Resource Manager to do the global allocation request.

f.SetResources(rgo); // Notify f of the actual resources allocated (recursively if f is compound).f.SetResources (rgo); // Notify f of the actual resources allocated (recursively if f is compound).

해체된 객체는 소위 디스크를 포맷하고 이미지를 저장하는 등, 모든 객체 초기화를 지시한다. A deconstructed object dictates all object initialization, such as formatting the disk and saving the image.

f.BeginConstruct(); // Kick off the construction/initialization state machines.f.BeginConstruct (); // Kick off the construction / initialization state machines.

f.EndConstruct(); // Get results when construction has finished (this is just the .NET async pattern).f.EndConstruct (); // Get results when construction has finished (this is just the .NET async pattern).

또한, 해체된 객체의 수명은 파괴를 지시하는 해체된 객체를 갖는 객체의 수 명을 넘어선다. 이전의 진술이 객체 정지(object quiescence)를 금지하지는 않는다. Also, the lifetime of a dismantled object goes beyond the life of the object with the dismantled object indicating destruction. The previous statement does not prohibit object quiescence.

f.BeginDestruct(); // Kick off the destruction state machines.f.BeginDestruct (); // Kick off the destruction state machines.

f.EndDesctruct(); // Get results when destruction has finished.f.EndDesctruct (); // Get results when destruction has finished.

해체된 객체도 그 자원들을 해제한다.Deconstructed objects also release their resources.

f.ReleaseResources();f.ReleaseResources ();

이후에, 자원이 파괴될 수 있다. After that, the resources can be destroyed.

f = null; f = null;

아무 가치 없는 것들도 있다. "f"는 단지 해체된 객체이고, 자원 할당은 자원 초기화/구축과는 별개이기 때문에, 이하의 라인들은 모두 단일의 결정적인 트랜잭션 내에 배치될 수 있다. RM DB가 SDM DB와 동일한 SQL 내에 있다고 가정하면, 상기 트랜잭션은 비분산형 트랜잭션일 수도 있다. There are some things worthless. Since "f" is only a decommissioned object, and resource allocation is separate from resource initialization / construction, the following lines can all be placed in a single deterministic transaction. Assuming that the RM DB is in the same SQL as the SDM DB, the transaction may be a non-distributed transaction.

BeginTransaction();BeginTransaction ();

FrontEnd f = new FrontEnd;FrontEnd f = new FrontEnd;

r = f.GetResourceGraph(); // Ask f to produce the logical resource request graph r = f.GetResourceGraph (); // Ask f to produce the logical resource request graph

rgo = BigAllocateResources(rgi); // Ask the Resource Manager to do the global allocation request.rgo = BigAllocateResources (rgi); // Ask the Resource Manager to do the global allocation request.

f.SetResources(rgo); // Notify f of the actual resources allocated.f.SetResources (rgo); // Notify f of the actual resources allocated.

EndTransaction();EndTransaction ();

어떤 순간에는 모든 자원 제공자들이 분산형 동작들을 불러낼 것이지만, "BigAllocateResources()" 호출 동안에는 그러하지 않을 것이다. 주어진 자원 제공자의 실행에 의해, SDM 모델링 서비스를 통하여 분산형 코드(distributed code)를 레버리지(leverage)할 수 있다. At some point all resource providers will invoke distributed operations, but not during the "BigAllocateResources ()" call. By executing a given resource provider, it is possible to leverage distributed code through the SDM modeling service.

배치 최적화Batch optimization

첫째로, 이 논의의 상황에서, 배치 최적화에 관한 다음의 용어를 정의한다. First, in the context of this discussion, we define the following terms for batch optimization.

I. 국부 최적화(Local Optimization): 최적화는 단일의 컴포넌트 팩토리에 국한되며, 다른 컴포넌트 팩토리들 내의 배치에 대한 영향을 무시한다. I. Local Optimization: Optimization is limited to a single component factory, ignoring the impact on deployment within other component factories.

II. 집합적 최적화: 다중 컴포넌트 팩토리들을 고려하여 최적화한다. 예컨대, IIS 애플리케이션들과 SQL 데이터베이스들의 배치를 고려하여 최적화한다. II. Collective Optimization: Optimize for multiple component factories. For example, consider the deployment of IIS applications and SQL databases.

III. 전체적 최적화: (존재하는 컴포넌트들의 이동을 포함하여) 전체 시스템, 즉 BIG 컴퓨터 내의 모든 애플리케이션들을 최적화한다. 전체적 최적화는 존재하는 컴포넌트들의 이동을 고려한다는 점에서 집합적 최적화와 차이가 있다. III. Global Optimization: Optimizes all applications in the entire system, including the movement of existing components, ie BIG computers. Global optimization differs from collective optimization in that it considers the movement of existing components.

한편, 이하의 점들을 이해하여야 할 것이다. Meanwhile, the following points should be understood.

I. BIG V1은 집합적 할당 API를 제공하여야 한다. 집합적 할당 API는 컴포넌트에 대한 구성 파라미터를 갖는 와이어 인스턴스들과 컴포넌트의 집합 및, SAM 내의 와이어 인스턴스들을 고려한다. 단일 트랜잭션에서, 집합적 할당 API는 컴포넌트 팩토리들을 호출하여 필요한 자원들을 보존한다. [주의: 할당이 다른 컴포넌트 팩토리들을 포함할 수 있다는 사실을 강조하기 위하여 "배치(batch)" 대신에 "집합적(aggregate)"이라는 용어가 사용되었다. 이러한 점에서 "집합적 최적화 할당 API(aggregated optimized allocation API)"라는 말은 사용되지 않았음에 유의하여야 한다.]I. BIG V1 must provide a collective allocation API. The collective allocation API takes into account a set of wire instances and components with configuration parameters for the component, and wire instances in the SAM. In a single transaction, the collective allocation API calls component factories to conserve the necessary resources. [NOTE: The term "aggregate" is used instead of "batch" to emphasize the fact that assignments can include other component factories. Note that in this respect the term "aggregated optimized allocation API" is not used.]

II. 결국, BIG는 전체적인 배치 최적화(global placement optimization)를 제공하여야 하다. 전체적인 배치 최적화의 목적은 일정한 특성들을 최적화하기 위하여 BIG 기계 내의 컴포넌트 인스턴스들의 배치를 재조정하는 것이며, 주된 특성은 BIG 기계의 공유 자원들을 사용하는 것이다. II. In the end, BIG must provide global placement optimization. The goal of overall placement optimization is to rebalance the placement of component instances within a BIG machine to optimize certain features, and the main feature is to use shared resources of the BIG machine.

III. 집합적 배치 최적화는 초기 할당 시에 발생할 수 있거나, 제어된 애플리케이션 동의(controlled application consent)로 이후에 전체적 최적화의 형태를 취할 수 있다. 배치에 영향을 줄 수 있는 가장 용이한 시간은 컴포넌트 인스턴스가 초기에 할당될 때이다. III. Collective batch optimization may occur at initial allocation or may take the form of global optimization later with controlled application consent. The easiest time to affect placement is when the component instance is initially allocated.

IV. 초기 배치 후의 컴포넌트의 이동은 매우 비용이 많이 들며, 심지어 엄두를 못 낼 정도로 비싸다. 큰 SQL 백엔드를 이동시키는 것은 대단히 비용이 많이 들며, 애플리케이션 이용 가능성을 심하게 훼손할 수 있다. 컴포넌트를 이동시킬 때는 애플리케이션의 요망 사항을 고려하여야 한다. IV. Moving components after initial deployment is very expensive and even expensive. Moving a large SQL backend is very expensive and can seriously compromise application availability. When moving components, consider the needs of the application.

V. 장기간 실행되는 애플리케이션의 경우, 컴포넌트들을 이동시키는 것은 전체적인 배치 최적화 없이도 필연적일 것이다. 하드웨어가 갑자기 망가질 수도 있 다. 하드웨어는 정상적인 감가상각 및 라이프 사이클 제약(life-cycle constraints)으로 인해 분명히 해체될 것이다. 따라서, 장시간 실행되는 어떠한 애플리케이션이라도 궁극적으로는 컴포넌트들을 이동시키기 위한 일부의 메커니즘을 필요로 할 것이다. 이러한 메커니즘들이 전체적 배치 최적화에 의해 레버리지되는지 여부는 그 존재에 달려 있다. V. For long-running applications, moving components will be inevitable without overall deployment optimization. The hardware may suddenly break. The hardware will obviously be dismantled due to normal depreciation and life-cycle constraints. Thus, any application that runs for a long time will eventually need some mechanism to move the components. Whether these mechanisms are leveraged by global placement optimization depends on their existence.

VI. 장시간 실행되는 애플리케이션은 업그레이드를 위한 일정한 형태의 이동을 지원할 것이다. 예컨대, 업그레이드를 위한 메커니즘은 전체적 배치 최적화에 의해 레버리지될 것이다. 예컨대, 만약 애플리케이션 업그레이드 정책이 새로운 프론트 엔드 온라인을 가져오고 옛날 것을 해체하는 것이면, 새로운 프론트 엔드를 할당하는 것이 배치를 최적화하는 최고의 시간이다. 업그레이드는 전체적 배치 최적화에 대한 기회를 제공한다. VI. Long running applications will support some form of migration for upgrades. For example, the mechanism for upgrading will be leveraged by global placement optimization. For example, if the application upgrade policy is to bring a new front end online and dismantle the old one, then allocating a new front end is the best time to optimize deployment. Upgrades provide an opportunity for global deployment optimization.

이상의 설명으로부터, BIG V1를 위해 다음의 것을 제안할 수 있다. From the above description, the following can be proposed for BIG V1.

1) BIG V1는 배치 할당(batch allocation) API를 제공한다. 배치(batch) API는 컴포넌트에 대한 구성 파라미터를 갖는 와이어 인스턴스들과 컴포넌트의 집합 및, SAM 내의 와이어 인스턴스들을 고려한다. 단일 트랜잭션에서, 배치 API는 컴포넌트 팩토리들을 호출하여 필요한 자원들을 보존한다. 1) BIG V1 provides a batch allocation API. The batch API takes into account a set of wire instances and components with configuration parameters for the component, and wire instances in the SAM. In a single transaction, the deployment API calls component factories to conserve the necessary resources.

2) BIG V1는 컴포넌트들의 이동을 형식화한다. BIG V1는 최소한 표준 컴포넌트 인터페이스를 포함하여 오프라인의 컴포넌트를 얻을 수 있고, 또한 그 컴포넌트를 또 다른 위치로 가져갈 수 있다. "Iserialize"와 동등한 컴포넌트를 상정해 보면 될 것이다. 이러한 형식화는, 동작을 사용하여 업그레이드를 수행하고 전체 프론트 엔드를 클로닝(cloning)할 것이다. 또한 SQL 백엔드를 분할 작업(partitioning)하는 데도 사용될 것이다. 또한 하드웨어 등을 해체하는 데에도 사용될 것이다. 여기서, 이동 컴포넌트의 개념과, 다른 유형의 컴포넌트들을 이동시키는 것이 무엇을 의미하는가, 어떻게 비용을 평가하는가 등에 대한 개념을 가져야 한다. 2) BIG V1 formats the movement of components. BIG V1 can get off-line components, including at least standard component interfaces, and can also take those components to another location. Imagine a component equivalent to "Iserialize". This formalization will use the operation to perform the upgrade and clone the entire front end. It will also be used to partition the SQL backend. It will also be used to disassemble the hardware. Here, you should have the concept of a mobile component, what it means to move other types of components, how to evaluate costs, and so on.

3) BIG V1은 집합적 배치 최적화기(optimizer)를 제공한다. 최적화기의 복잡성은 개발 사이클의 요구에 부응하여 조절된다. 최적화기는 조잡한 클러스터 최적화기(clustering optimizer) 또는 좀 더 세련된 최적화기일 수 있다. 3) BIG V1 provides a collective batch optimizer. The complexity of the optimizer is adjusted to meet the needs of the development cycle. The optimizer can be a crude cluster optimizer or a more sophisticated optimizer.

4) 집합적 배치 최적화기는 초기 배치(initial placement) 중에 배치(batch) 할당 API에 의해 사용된다. 컴포넌트 팩토리들은 배치 최적화기와 협력하여 그 결정들에 도움을 준다. 4) Collective batch optimizer is used by batch allocation API during initial placement. Component factories work with the deployment optimizer to help with those decisions.

5) 애플리케이션의 수명 동안, 집합적 배치 최적화기가 주기적으로 불려져서 컴포넌트 인스턴스들을 이동시킴으로써 전체적 배치 최적화를 수행할 수 있다. 최적화기는 애플리케이션에 의해 자연적으로 제시된 기회의 영역을 레버리지할 수 있다. 최적화기는 또한 다른 시간에 컴포넌트 이동을 고려하도록 애플리케이션에 요청할 수 있다. 기본적으로, 전체적 최적화는 집합적 배치 최적화기와, 이동 컴포넌트들을 위한 기존의 지원을 레버리지한다. 5) During the lifetime of the application, the collective batch optimizer can be called periodically to perform global batch optimization by moving component instances. The optimizer can leverage the area of opportunity naturally presented by the application. The optimizer can also ask the application to consider moving components at different times. Basically, global optimization leverages the collective placement optimizer and existing support for mobile components.

6) BIG V1 IIS 애플리케이션 컴포넌트 팩토리는 애플리케이션 허용 여부에 따라서 이동 컴포넌트들을 실행한다. 전체적 배치 최적화의 많은 장점은 SQL 데이터베이스 등의 무거운 컴포넌트들을 무시하고 VRoot들을 이동시킴으로써 실현될 것 이다. IIS는 또한 자연적으로, VRoot들의 이동을 용이하게 하는 드레인(drain) 등의 동작들을 지원한다. 사실상, IIS VRoot 컴포넌트 인자(component factor)는 전체적 배치 최적화 및 컴포넌트 이동을 위한 V1 포스터 차일드(poster child)가 될 것이다.6) The BIG V1 IIS application component factory runs mobile components depending on whether the application is allowed. Many of the benefits of global batch optimization will be realized by moving VRoots around, ignoring heavy components such as SQL databases. IIS also naturally supports operations such as drains that facilitate the movement of VRoots. In fact, the IIS VRoot component factor will be the V1 poster child for global placement optimization and component migration.

물리적 자원의 모델링Modeling of Physical Resources

전체 자원 관리 시스템(entire resource management system) 하부에는 하드웨어 자원 그래프가 있다. 하드웨어 자원 그래프는 BIG 자원 관리자(Resource Manager)에 이용 가능한 하드웨어 자원의 접속성(connectivity) 및 하드웨어 자원의 전체성(totality)을 설명한다. 하드웨어 자원 그래프는 서버, 네트워크 장치 및 네트워크 토폴로지(network topology)를 포함한다. 또한, 하드웨어 자원 그래프는 전력망(power grid) 및 물리적 포함 관계에 관한 정보를 포함할 수 있다.Underneath the entire resource management system is a hardware resource graph. The hardware resource graph describes the connectivity of the hardware resources available to the BIG Resource Manager and the totality of the hardware resources. Hardware resource graphs include servers, network devices, and network topologies. In addition, the hardware resource graph may include information regarding a power grid and a physical inclusion relationship.

하드웨어 자원 그래프는 세 개의 기본적인 엘리먼트인 엔티티(entity), 커넥터(connector) 및 접속(connection)으로 이루어진다.The hardware resource graph consists of three basic elements: an entity, a connector, and a connection.

엔티티는 소프트웨어에 의하여 액세스 가능한 하드웨어의 기본적인 유닛이다. 엔티티의 예에는 서버, 디스크 드라이버, 네트워크 장치 등이 포함된다.An entity is a basic unit of hardware accessible by software. Examples of entities include servers, disk drivers, network devices, and the like.

커넥터는 엔티티에 대한 물리적 인터페이스이다. 커넥터는 정확하게 하나의 엔티티와 항상 연관된다. 커넥터의 예에는 네트워크 인터페이스, IDE 인터페이스, AC 전력 커넥터 및 물리적 포함관계 등이 포함된다.A connector is a physical interface to an entity. A connector is always associated with exactly one entity. Examples of connectors include network interfaces, IDE interfaces, AC power connectors and physical containment.

접속은 정확히 두 개의 커넥터들간의 물리적 접속 관계이다. 접속의 예에는 네트워크 케이블, IDE 케이블, AC 케이블 등이 포함된다.A connection is exactly a physical connection between two connectors. Examples of connections include network cables, IDE cables, AC cables, and the like.

모든 세 개의 엘리먼트 유형, 엔티티, 커넥터 및 접속은 연관 특성(associated properties)을 갖는다. 특성은 특성 이름, 최대 값 및 이용 가능한 값으로 이루어진 투플(tuple)이다.All three element types, entities, connectors, and connections have associated properties. A property is a tuple of property names, maximum values, and available values.

모든 세 개의 엘리먼트 유형은 듀얼(dual)을 가질 수 있다. 듀얼은 장애 극복(fail over)을 위하여 사용되는 피어(peer)이다. 엘리먼트 및 이것의 듀얼은 항상 함께 할당되어, 고가용성(high availability)을 위하여 필요한 중복(redundancy)을 제공한다. 일반적인 듀얼의 예에는, 중복 네트워크 상의 장애 극복 스위치, 중복 NIC, 및 중복 NIC를 중복 스위치에 접속하는 케이블이 포함된다. All three element types may have a dual. Dual is a peer used for fail over. The element and its dual are always assigned together, providing the redundancy required for high availability. Typical dual examples include failover switches on redundant networks, redundant NICs, and cables connecting redundant NICs to redundant switches.

모든 커넥터는 커넥터 당 허용된 접속의 최대 수를 지정하는 카디날리티(cardinality)를 갖는다. 예를 들면, IDE 커넥터는 하나의 마스터 및 하나의 슬레이브 장치인 2의 카디날리티를 갖는다. 도 62 참조.Every connector has cardinality that specifies the maximum number of connections allowed per connector. For example, an IDE connector has a cardinality of two, one master and one slave device. See FIG. 62.

기본적인 유형을 정의하는 원리:Principles of defining the basic types:

■무엇이 기본적인 하드웨어 프로토콜인가?What is the basic hardware protocol?

■하드웨어 레벨에서, 장치는 어떤 언어를 말하는(speak)가?At the hardware level, what language does the device speak?

■기본적인 엔티티는 정확히 하나의 소유자(owner)를 갖는다.The basic entity has exactly one owner.

■커넥터 및 접속 카테고리는 부합하여야 한다.■ Connectors and connection categories must match.

■듀얼은 하나로서 할당되어야 하는 장애 극복 쌍이다.Dual is a failover pair that must be assigned as one.

■엔티티, 커넥터 또는 접속은 듀얼일 수 있다.An entity, connector or connection can be dual.

무엇이 모델링 엘리먼트인가?What is a modeling element?

■엔티티Entity

■커넥터 Src = 엔티티Connector Src = entity

■접속 Src = 커넥터, Dst = 커넥터Connection Src = Connector, Dst = Connector

무엇이 기본적인 카테고리인가?What is the basic category?

■엔티티 카테고리:Entity category:

■X86 PC: 소프트웨어/CPU/RAM 상호 작용을 설명한다. CPU 및 RAM은 값(value)이다.X86 PC: Describes software / CPU / RAM interaction. CPU and RAM are values.

■EFI PC: 소프트웨어/CPU/RAM 상호 작용을 설명한다. CPU 및 RAM은 값이다.EFI PC: Describes software / CPU / RAM interaction. CPU and RAM are values.

■네트워크 장치. IP + SNMP를 말한다. 제품 식별자는 값이다.■ Network device. Say IP + SNMP. The product identifier is a value.

■디스크. 섹터(sector)를 송신하고 수신한다.■ Disk. Send and receive sectors.

■물리적 포함기(Physical Container).Physical Container.

■커넥터/접속 카테고리:Connector / connection category:

■에더넷. 대역폭(bandwidth)이 값이다.■ Ethernet. Bandwidth is the value.

■ATA. 대역폭 및 포맷(format)이 값이다.■ ATA. Bandwidth and format are values.

■SCSI. 대역폭 및 포맷이 값이다.SCSI. Bandwidth and format are values.

■전력(Power)Power

■물리적 (포함).■ Physical (included).

■다른 것들: 파이버채널(FibreChannel), 시리얼, 병렬(Parallel), USB, 파이어와이어(FireWire), 802.11, InfinibandOthers: FiberChannel, Serial, Parallel, USB, FireWire, 802.11, Infiniband

초기 물리적 구성(Initial Physical Configuration) - 도 63 참조.Initial Physical Configuration—See FIG. 63.

상세한 예 - 도 64 및 도 65 참조.Detailed example-see FIGS. 64 and 65.

위치 기반 장치 식별자(Location-Based Device Identifiers)Location-Based Device Identifiers

모든 네트워크된 장치는 네트워크에서 그것의 위치의 고유한 식별자를 갖는다.Every networked device has a unique identifier for its location in the network.

각각의 레벨에서, 값 = 부모 스위치(parent switch) 상의 포트 번호.At each level, the value = port number on the parent switch.

종료된 레벨(terminated level)은 종료 값, "#"을 갖는다.The terminated level has a termination value, "#".

예를 들면, 도 66 참조.See, eg, FIG. 66.

두 개의 장치들 간의 경로를 계산Calculate the path between two devices

두 개의 장치 (2,0,1) 및 (2,1,#)를 고려하자.Consider two devices (2,0,1) and (2,1, #).

각각의 장치에 대하여, 종료된 프리픽스(terminated prefix)를 계산:For each device, calculate the terminated prefix:

(2,0,1) -> (#,#,#), (2,#,#), (2,0,#)(2,0,1)-> (#, #, #), (2, #, #), (2,0, #)

(2,1,#)->(#,#,#), (2,#,#)(2,1, #)-> (#, #, #), (2, #, #)

가장 특정한 공통의 종료된 프리픽스는 공통 부모이다.The most specific common terminated prefix is a common parent.

(2,#,#)(2,#,#)

남아있는 종료된 프리픽스는 이름 중간 스위치(name intermediate switch)이다.The remaining terminated prefix is the name intermediate switch.

(2,0,1) -> (2,0,#)(2,0,1)-> (2,0, #)

(2,1,#) -> 없음(none).(2,1, #)-> none.

최종 경로:Final path:

(2,0,1)에서 (2,1,#)로 -> (2,0,#), (2,#,#) = 두 개의 스위치 홉(switch hop) = 세 개의 와이어 홉(wire hop).(2,0,1) to (2,1, #)-> (2,0, #), (2, #, #) = two switch hops = three wire hops ).

또한, 장치에 가장 근접합 피어를 탐색하는 것은 단순하다:Also, finding the closest peer to a device is simple:

(2,0,1) -> (2,0,?)(2,0,1)-> (2,0 ,?)

(2,1,#) -> (2,?,#)(2,1, #)-> (2,?, #)

도 67 참조.See FIG. 67.

자원 요구(Resource Requests)를 모델링Model Resource Requests

BIG 자원 관리자는 BIG 기계(machine)를 노드(node)(자원) 및 에지(edge)(관계)의 그래프로서 모델링한다. 노드 및 에지는 모두 속성(attribute)(이름- 값 쌍)으로 주석 처리될(annotated) 수 있다.The BIG resource manager models the BIG machine as a graph of nodes (resources) and edges (relationships). Both nodes and edges can be annotated with attributes (name-value pairs).

자원 그래프에 대한 질의(query)의 가장 일반적인 유형 중 하나는 서브그래프 동형이질(sub-graph isomorphism)이다. 클라이언트는 요구 그래프를 생성하고, 동일한 형태 및 특성을 가진 하드웨어 자원 그래프 내의 서브그래프를 자원 관리자가 탐색하도록 요청한다. 자원 관리자는 부합하는 것을 탐색하고, 완전히 주석처리된 응답 그래프(reply graph)를 반환한다.One of the most common types of queries for resource graphs is sub-graph isomorphism. The client creates a request graph and requests the resource manager to search for a subgraph in the hardware resource graph with the same shape and characteristics. The resource manager searches for a match and returns a fully commented response graph.

서브그래프 동형이질의 부분으로서, 자원 관리자는 그래프 노드들을 겹치거나 결합해서는 안된다. 즉, 요구 그래프가 두 개의 PC 노드를 포함하면, 응답 그래프는 두 개의 PC 고유한 노드들을 포함해야 한다.As part of the subgraph isomorphism, the resource manager should not overlap or combine graph nodes. In other words, if the request graph includes two PC nodes, then the response graph should include two PC-specific nodes.

요구 그래프는 PC 노드를 탐색하거나 또는 적어도 256MB RAM을 갖는 PC 노드를 탐색하는 것과 같은 검색 파라미터(search parameter)를 포함할 수 있다. 응답 그래프는 각각의 부합하는 엘리먼트(노드 및 에지)의 특정 id를 포함한다.The request graph may include a search parameter, such as searching for a PC node or searching for a PC node with at least 256 MB RAM. The response graph includes the specific id of each matching element (node and edge).

기본적인 경우에, 요구 그래프는 읽기 전용 질의(read-only queries)이다. 그러나, 공통 최적화(common optimization)는 자원 할당(resource allocation)의 형태로 읽기-쓰기 동작을 허용한다. 지면에 그려지면, 쓰기 동작은 괄호로 라벨링된다.In the basic case, the request graph is read-only queries. However, common optimization allows read-write operations in the form of resource allocation. When drawn on the ground, the write operation is labeled with parentheses.

도 68은 IDE 또는 SCSI와 같은 저장 전송(storage transport)을 통하여 접속된 부착 디스크(attached disk) 및 PC를 할당하기 위한 요구 그래프이다. 노드는 끝이 둥근 사각형으로 표시되고, 에지는 속성이 지정된 겹쳐진 사각형을 갖는 어두운 선으로서 표시된다는 것을 유의하여야 한다. 성공적인 할당은 도 69의 응답 그래프를 유발할 것이다.FIG. 68 is a request graph for allocating attached disks and PCs connected via storage transport such as IDE or SCSI. Note that the nodes are indicated by rounded rectangles and the edges are indicated by dark lines with overlapping rectangles with attributes specified. Successful assignment will result in the response graph of FIG. 69.

구동 시나리오(Driving Scenario)Driving Scenario

죠(Joe) 꽃집은 도 70에 도시된 자원 요구를 만든다. MSN은, 죠가 "골드" SLA를 가지고 있기 때문에 적어도 500MHz PC를 얻는다는 것과, 그의 PC가 집약성(locality)을 유지하기 위하여 Switch5에 부착된다는 것을 보장한다. 도 71에 도시된 추가로, Exodus는, MSN이 항상 Rack17의 기계를 얻고 또한 작은 디스크를 얻는다는 것을 보증하는데, 이는 이들이 "2nd" 클래스 저장 SLA를 갖기 때문이다. 도 72 참조.Joe Florist makes the resource needs shown in FIG. MSN guarantees that Joe gets at least a 500MHz PC because he has a "gold" SLA, and that his PC is attached to Switch5 to maintain locality. In addition to that shown in FIG. 71, Exodus assures that MSN always gets a Rack17 machine and also a small disk, because they have a "2 nd " class storage SLA. See FIG. 72.

구현 아이디어Implementation ideas

class Graph;class Graph;

class Clientclass Client

{{

private IResourceMediator mediators[];    private IResourceMediator mediators [];

private Object mediatorStates[];    private Object mediatorStates [];

}}

interface IResourceMediatorinterface IResourceMediator

{{

public void MediateRequest(ref Graph graph, ref Object state);    public void MediateRequest (ref Graph graph, ref Object state);

public void MediateReply(ref Graph graph, ref Object state);    public void MediateReply (ref Graph graph, ref Object state);

}}

class ResourceManagerclass ResourceManager

{{

public Graph Allocate(Graph request, Client client)    public Graph Allocate (Graph request, Client client)

{    {

for (int n = 0; n < client.mediators.Length; n++)        for (int n = 0; n <client.mediators.Length; n ++)

{        {

client.mediators[n].MediateRequest(ref request, ref client.mediatorStates[n]);                    client.mediators [n] .MediateRequest (ref request, ref client.mediatorStates [n]);

}        }

Graph reply = PrimitveAllocate(request);         Graph reply = PrimitveAllocate (request);

for (int n = client.mediators.Length - 1; n >= 0; n--)        for (int n = client.mediators.Length-1; n> = 0; n--)

{        {

client.mediators[n].MediateReply(ref reply, ref client.mediatorStates[n]);            client.mediators [n] .MediateReply (ref reply, ref client.mediatorStates [n]);

}        }

return reply;        return reply;

}    }

private Graph PrimitiveAllocate(Graph request);    private Graph PrimitiveAllocate (Graph request);

}}

기본적인 자원 할당 시나리오Basic resource allocation scenario

이 부분은 다수의 시나리오를 나열한다. 각각의 시나리오와 함께, 해당 요구 그래프가 포함된다. 질의 트랜잭션(query transaction)의 결과로서 할당될 노드는 "[Allocate]"로 라벨링된다. 할당되지 않고 부합에 대한 탐색을 위하여 할당되지 않아야하는 노드는 "[Free]"로 라벨링된다. 괄호로 된 라벨이 없는 노드는 할당되지 않으며, 대신 요구 그래프의 나머지에 대한 콘텍스트(context)를 제공한다.This section lists a number of scenarios. With each scenario, the corresponding demand graph is included. Nodes to be allocated as a result of a query transaction are labeled "[Allocate]". Nodes that are not allocated and should not be allocated for searching for a match are labeled "[Free]". Nodes without parenthesized labels are not assigned, but instead provide a context for the rest of the request graph.

PCPC

Akamai는 적어도 1GHz CPU, 512MB RAM 및 100GB 로컬 디스크 저장 장치를 갖는 Digix 데이터 센터의 서버를 할당할 필요가 있다. 도 73 참조.Akamai needs to allocate servers in the Digix data center with at least 1GHz CPU, 512MB RAM and 100GB local disk storage. See FIG. 73.

VLANVLAN

MSN 인스턴스 메시징은 프론트-엔드(front-end)를 포함하는 DMZ를 구현하기로 결정했다. 이렇게 하기 위하여, 그것은 프론트-엔드의 커버리지(coverage)를 갖는 2 VLAN을 필요로 한다. 도 74 참조.MSN Instance Messaging has decided to implement a DMZ that includes a front-end. To do this, it needs 2 VLANs with front-end coverage. See FIG. 74.

공개 IP 주소 또는 DNS 네임Public IP Address or DNS Name

죠의 웹 서비스는 외부 세계에 자신을 보이게 할 필요가 있다. 그는 DNS 엔트리 및 라우팅 가능한(routable) IP 주소를 할당할 필요가 있다. 도 75 참조.Joe's web service needs to make itself visible to the outside world. He needs to assign DNS entries and routable IP addresses. See FIG. 75.

로드 밸런싱 그룹(Load Balancing Group)Load Balancing Group

죠의 웹 서비스는 단일 PC에 대하여 너무 커졌다. 그는 로드 밸런싱 그룹 및 다른 PC를 할당할 필요가 있다. 그 후, 그는 로드 밸런싱된 그룹의 가상 IP 주소 뒤에 PC들을 위치시킬 필요가 있다. 도 76 참조.Joe's web service is too big for a single PC. He needs to assign load balancing groups and other PCs. Then he needs to place the PCs behind the load balanced group's virtual IP address. See FIG. 76.

경로(Path)Path

핫메일(Hotmail)은 하나의 UStore로부터 다른 것으로 이메일 계정(email account)을 전달하기 위하여 80Mbps 경로를 할달할 필요가 있다. 또한, 핫메일은 경로에 대한 QOS 요건 및 지연(latency)을 지정할 수 있다. 도 77 참조.Hotmail needs an 80 Mbps route to deliver an email account from one UStore to another. Hotmail can also specify QOS requirements and latency for the route. See FIG. 77.

특정 저장 장치Specific storage devices

핫메일은 새로운 UStore를 생성하기를 원한다. 그것은 10,000 RPM 이상으로 회전하는 공유되지 않은 헤드(unshared head)의 적어도 4개의 세트에서 펼쳐진 100GB를 갖는 Raid 1 box를 원한다. 도 78 참조.Hotmail wants to create a new UStore. It wants a Raid 1 box with 100GB unfolded in at least four sets of unshared heads spinning above 10,000 RPM. See FIG. 78.

클러스터(Cluster)(Quorum) 저장 장치Cluster storage device

핫메일은 장애 극복 클러스터를 위하여 공유된 디스크를 갖는 한 쌍의 기계 를 할당하기를 원한다. 그것은 10,000 RPM 이상으로 회전하는 공유되지 않은 헤드의 적어도 4개의 세트에서 펼쳐진 100GB를 갖는 Raid 1 box를 원한다. 도 79 참조.Hotmail wants to allocate a pair of machines with shared disks for failover clusters. It wants a Raid 1 box with 100GB unfolded in at least four sets of unshared heads spinning at over 10,000 RPM. See FIG. 79.

공유된 저장 장치Shared storage

죠의 웹 서비스는 서비스 특정 구성(configuration)의 롤백 이미지(rollback image)를 유지하기 위하여 다수의 기계에 의하여 사용 가능한 50GB 공통 저장 장치를 필요로 한다. 이 저장 장치는 0부터 N 기계까지 이용 가능하다. 도 80 참조.Joe's web services require 50GB of common storage available by multiple machines to maintain a rollback image of a service-specific configuration. This storage device is available from 0 to N machines. See FIG. 80.

할당 배치 시나리오(Allocation Placement Scenario)Allocation Placement Scenario

인접한 기계 할당(Proximal Machine Allocation)Proximal Machine Allocation

핫메일은 새로운 프론트-엔드를 할당할 필요가 있다. 그것은 백-엔드 클러스터(back-end cluster)에 대하여 충분한 대역폭을 갖는 다른 프론트-엔드와 동일한 스위치 상의 기계를 탐색하기를 원한다. 도 81 참조.Hotmail needs to assign a new front-end. It wants to search for machines on the same switch as other front-ends with enough bandwidth for the back-end cluster. See FIG. 81.

원거리 기계 할당Remote machine allocation

Expedia 고객 신상 정보 데이터베이스는 SQL 복제(replication)를 위하여 다른 기계를 필요로 한다. 그것은 상이한 배터리 백업 유닛에 의하여 커버된 데이터 센터의 부분에 위치된다. 도 82 참조. 또는 혹은 도 83의 예.Expedia's personal database of information requires another machine for SQL replication. It is located in a part of the data center covered by different battery backup units. See FIG. 82. Or or the example of FIG. 83.

지연 구동 할당(Latency Driven Allocation)Latency Driven Allocation

핫메일 백-엔드는 클러스터 조정(cluster coordination)을 위한 기계를 할당할 필요가 있다. 기계는 클러스터에 이미 있는 기계의 5ms 지연 내에 있어야 하지만, 대역폭은 낮다. 선택적으로, 이것은 기계가 1 네트워크 홉 내에 있는 것으로 필요로 함으로써 표시될 수 잇다. 도 84 참조.The hotmail back-end needs to allocate a machine for cluster coordination. The machine must be within the 5ms delay of a machine already in the cluster, but the bandwidth is low. Optionally, this can be indicated by requiring the machine to be within one network hop. See FIG. 84.

합성 컴포넌트를 시딩(seeding)Seeding composite components

핫메일은 새로운 이메일 유닛을 생성하려고 한다. 그 유닛은 적어도 500 PC로 성장하기 위한 공간(room)을 갖는 단일 홉 클러스터에 할당되어야 하지만, 핫메일은 단지 초기에 수십개의 기계를 할당할 수 있다. 도 85 참조.Hotmail attempts to create a new email unit. The unit must be allocated to a single hop cluster with room to grow to at least 500 PCs, but Hotmail can only initially allocate dozens of machines. See FIG. 85.

일괄 할당(Batch Allocation)Batch Allocation

MSN 검색은 작은 음악 샘플에 기초하여 MP3를 검색하는 기능을 추가하기로 결정한다. 그것은 400 PC의 블록, 로드 밸런서 및 20TB 저장 장치를 할당하기를 원한다. 그것은 전부가 아니면 아예 없는 할당(all-or-nothing allocation)을 원한다. 도 86 참조.MSN Search decides to add the ability to search for MP3s based on small music samples. It wants to allocate 400 PC blocks, load balancer and 20TB storage. It wants all-or-nothing allocation if not all. See FIG. 86.

폐지 시나리오(Revocation Scenario)Revocation Scenario

복구(Recovery)Recovery

죠의 웹 서비스는 IDC에 지불하는 것을 멈췄다. IDC는 죠의 웹 서비스에 할당된 모든 자원을 복구하고, 이것을 이용 가능한 자원의 풀에 반환할 필요가 있다.Joe's web service stopped paying IDC. IDC needs to recover all resources assigned to Joe's Web service and return them to the pool of available resources.

하드웨어 수명 폐지(Hardware Lifetime Revocation)Hardware Lifetime Revocation

Expedia의 프론트-엔드 중 하나는 생명 주기(life cycle)의 끝에 도달한 PC이다. IDC 동작 논리(operation logic)에 의하여 트리거되면, 자원 관리자는 Expedia에게 그것은 기계가 IDC로 반환되기까지 72 시간을 가졌다는 것을 통지한다.One of Expedia's front-ends is a PC that has reached the end of its life cycle. When triggered by IDC operation logic, the resource manager notifies Expedia that it had 72 hours before the machine returned to IDC.

제어된 폐지Controlled revocation

핫메일은 UStore의 대용량 리셔플링(massive reshuffling)을 위하여 20 단기간 기계(short-term machine)를 할당하였다. 그것의 SLA에 따르면, IDC는 이제 하나의 기계가 반환될 것을 요청한다. 핫메일은 다른 동등한 기계 또는 20개 중 하나를 반환할 수 있다. Hotmail has allocated 20 short-term machines for the massive store resilient of UStore. According to its SLA, IDC now requests that one machine be returned. Hotmail can return another equivalent machine or one of twenty.

BIG 비전(Vision) - 이네이블(Enable)BIG Vision-Enable

■Visual Studio와 SQL, IIS, ...와 같은 재사용 가능한 빌딩 블록을 사용하여 분산되고 스케일링 가능하며(scalable) 고가용성인 서비스(highly available service)의 개발Develop distributed, scalable, and highly available services using reusable building blocks such as Visual Studio and SQL, IIS, ...

■자동으로 할당되고 목적되며(purposed) 구성되는 한 세트의 추상화된 하드웨어(abstracted hardware) 및 소프트웨어에 걸친 배포(deployment)Deployment across a set of abstracted hardware and software that is automatically assigned, purposed, and configured

■서비스 가용성 및 성장을 제어하기 위하여 동작상의 최상의 실시예(operational best practice)를 코드화(codifying)함으로써 자동화를 통하여 소유권(ownership)의 낮은 비용Low cost of ownership through automation by coding operational best practices to control service availability and growth

■물품 경제학(commodity economics)을 레버리지(leverage)하는 표준화된 데이터 센터 하드웨어의 획득(procurement)Procurement of standardized data center hardware leveraging commodity economics

BIG 서비스 플랫폼 아키텍처 - 도 87 참조.BIG Service Platform Architecture-see FIG.

BIG 컴퓨터 - 하드웨어 기준 플랫폼(Hardware Reference Platform)BIG Computers-Hardware Reference Platform

설계, 테스트 및 동작의 비용을 감소시킴:Reduces the cost of design, test and operation:

·지원할 하드웨어 장치의 수를 제한Limit the number of hardware devices to support

·네트워크 토폴로지를 제약Limit network topology

·네트워크 구성의 자동화를 이네이블Enable automation of network configuration

BIG 기술 배포 요건에 관한 고객 염려를 제거Eliminate customer concerns about BIG technology deployment requirements

·PXE, DHCP, DNS, VLANPXE, DHCP, DNS, VLAN

IP 게이트웨이IP gateway

■외부 네트워크와 내부 네트워크간의 IP 트래픽을 조정Coordinate IP traffic between external and internal networks

■네트워크 주소 번역(Network Address Translation; NAT), 방화벽(firewall), 로드 밸런싱Network Address Translation (NAT), Firewall, Load Balancing

내부 네트워크Internal network

■IP 주소 및 VLAN은 BIG에 의하여 배타적으로 관리된다IP addresses and VLANs are managed exclusively by the BIG

■VLAN은 자동으로 구성된다VLAN is automatically configured

하드웨어 빌딩 블록Hardware building blocks

■물품 서버, 네트워크 스위치 및 디스크의 조합. ■ Combination of item server, network switch, and disk.

도 88 참조. See FIG. 88.

도 89는 BIG 컴퓨터 내부에 있을 수 있는 현재의 제품의 예를 설명한다.89 illustrates an example of a current product that may be inside a BIG computer.

자원 관리 특징Resource Management Features

●서버, 저장 장치 또는 네트워크 하드웨어 자원의 동적 발견.Dynamic discovery of server, storage or network hardware resources.

●(물리적 및 논리적) 자원을 포함하는 고가용성 데이터베이스.High availability database containing (physical and logical) resources.

●자원의 열거(enumeration), 질의 및 업데이트를 지원하는 런타임 API.Runtime APIs that support enumeration, querying, and updating of resources.

●자원 드라이버를 물리적 하드웨어 장치에 바인드(bind)하기 위한 논리적 자원 드라이버 모델 및 API.Logical resource driver models and APIs for binding resource drivers to physical hardware devices.

●서버 자원의 프로그램적 할당 및 해제(deallocation).Programmatic allocation and deallocation of server resources.

●VLAN 및 로드 밸런싱 그룹과 같은 네트워크 자원의 자동 구성 및 관리.● Automatic configuration and management of network resources such as VLANs and load balancing groups.

●블록 및 파일 기반 저장 자원의 동적 구성 및 관리.Dynamic configuration and management of block and file-based storage resources.

●장애 검출 모니터링 및 통지.Fault detection monitoring and notification.

자원 관리 컴포넌트Resource Management Component

●자원 관리자는 BIG 컴퓨터 내의 하드웨어 및 소프트웨어 자원의 할당을 책임진다The resource manager is responsible for allocating hardware and software resources within the BIG computer.

■자원 관리자는 BIG 런타임에 등록한다Resource manager registers with BIG runtime

■자원 관리자는 주어진 자원 유형에 대하여 본질적으로 팩토리(factory)이다.A resource manager is essentially a factory for a given resource type.

●하드웨어 자원 관리자Hardware resource manager

■하드웨어 인스턴스를 할당할 책임이 있는 베이스 레벨 팩토리Base-level factory responsible for allocating hardware instances

●네트워크 자원 관리자Network Resource Manager

■VLAN, 로드 밸런싱 그룹, IP 주소 ...를 할당할 책임Responsibility to assign VLANs, load balancing groups, IP addresses ...

●저장 자원 관리자Storage Resource Manager

■디스크 및 파일과 같은 저장 자원을 관리한다■ Manage storage resources such as disks and files

●PC 자원 관리자PC resource manager

■iBIG 서비스를 사용하여 타겟 서버를 할당하고 OS를 배포한다Use iBIG services to allocate target servers and deploy OS

●소프트웨어 자원 관리자● Software Resource Manager

■IIS vroots, SQL 데이터베이스, ASP.NET을 할당하고 구성한다Allocate and configure IIS vroots, SQL databases, and ASP.NET

도 90은 다양한 자원 관리 컴포넌트를 도시한다.90 illustrates various resource management components.

하드웨어 자원 발견 및 관리Hardware resource discovery and management

특성: 전력, 네트워크, 저장 장치, 프로세서, 메모리, 위치(Location)Characteristics: power, network, storage, processor, memory, location

BIG 컴퓨터 내의 하드웨어는 자동으로 발견된다. 자원 드라이버는 하드웨어 장치에 제약되고 논리적 자원을 하드웨어 자원 관리자(Hardware Resource Manager; HRM)에 공개한다. HRM은 논리적 자원 할당 요구를 물리적 자원 바인딩으로 번역한다. 도 63, 64 및 65 참조.The hardware in the BIG computer is automatically discovered. Resource drivers are constrained to hardware devices and expose logical resources to a Hardware Resource Manager (HRM). HRM translates logical resource allocation requests into physical resource bindings. See Figures 63, 64 and 65.

BIG 컴퓨터 내의 네트워크 자원 관리Network resource management within BIG computers

BIG 컴퓨터는 네트워크 자원에 대한 추상화를 정의한다.BIG computers define abstractions for network resources.

네트워크 자원 관리자: BIG 컴퓨터 내에서 네트워크 자원을 할당하고 네트워크 스위치 및 로드 밸런서를 프로그램하며, 네트워크 자원 드라이버와 인터페이스한다.Network Resource Manager: Allocate network resources, program network switches and load balancers within the BIG computer, and interface with network resource drivers.

VLAN은 BIG 컴퓨터 내에서 고립(isolation)을 제공하고 네트워크를 분할한다(partition).VLANs provide isolation and partition networks within BIG computers.

네트워크 자원의 예: VLAN, 로드 밸런싱 그룹, 네트워크 필터, IP 주소, DNS 네임.Examples of network resources: VLANs, load balancing groups, network filters, IP addresses, DNS names.

BIG 저장 자원 관리 요건BIG Storage Resource Management Requirements

●파일 및 블록 기반 저장 자원을 포함하는 BIG 컴퓨터에 접속된 저장 장치의 전체적인 조망(global view).Global view of storage devices connected to BIG computers, including file and block-based storage resources.

●저장 상호 접속 패브릭(storage interconnect fabric)의 가상화(virtualization)Virtualization of the storage interconnect fabric

●LUN, 볼륨, 어레이 등과 같은 고레벨 저장 추상화를 생성하고 관리하는 프레임워크.Framework for creating and managing high-level storage abstractions, such as LUNs, volumes, and arrays.

●기존 및 새로운 저장 장치가 BIG 컴퓨터에 플러그되는 것을 허용하는 드라이버/제공자.Drivers / providers that allow existing and new storage devices to plug into BIG computers.

●SAN 시스템을 갖는 상호운용성(interoperability).Interoperability with SAN system.

기반 구조 서비스(Infrastructure Services){자동화된 배포 서비스(Automated Deployment Services; ADS)} - 특징Infrastructure Services {Automated Deployment Services (ADS)}-Features

●베이스 배포 서비스Base Distribution Service

■기본적인 네트워크 부트 서비스(Basic Network Boot Service)(PXE) 및 이미지 빌더 서비스(Image Builder Service)Basic Network Boot Service (PXE) and Image Builder Service

■프리-부트 OS 환경(Pre-boot OS environment)(BMonitor)Pre-boot OS environment (BMonitor)

■레거시 도구 지원(legacy tools support)을 위하여 네트워크 상으로 전달된 가상 플로피Virtual floppies delivered over the network for legacy tools support

●이미지 배포 및 관리Image distribution and management

■이미지를 생성, 편집 및 삭제하기 위한 도구■ Tools for creating, editing and deleting images

■프리-OS(pre-OS)를 실행하는 시스템에 이미지의 배포■ Deploying an image to a system running pre-OS (pre-OS)

●다중 장치 관리(Multiple Device Management; MDM)Multiple Device Management (MDM)

■공통 작업에 대한 스크립트(script)Scripts for common tasks

■배포에 대한 다중 단계 및 프로세스를 조정하기 위한 작업 시퀀싱(task sequencing)Task sequencing to coordinate multiple steps and processes for deployment

■완전한 프로그램적 인터페이스(Full programmatic interface)(WMI)Full programmatic interface (WMI)

●.NET 서버 RTM으로부터 60일 선적(Ships 60 days)Ships 60 days from .NET server RTM

■Windows 2000 및 .NET 서버 타겟을 지원Supports Windows 2000 and .NET server targets

도 92는 예시적인 ADS 아키텍처를 도시한다.92 illustrates an example ADS architecture.

도 93은 예시적인 ADS 원격 부트 및 이미징 시스템(Remote Boot and Imaging system)을 도시한다.93 shows an example ADS Remote Boot and Imaging system.

서비스 정의 모델(Service Definition Model; SDM)Service Definition Model (SDM)

●전체 서비스의 프로그램적 설명Programmatic description of the whole service

■서비스의 서술적인 정의(declarative definition)■ declarative definition of the service

■스케일 불변 방식(scale-invariant manner)으로 서비스의 전체적인 서비스 구조를 정의한다Define the overall service structure of the service in a scale-invariant manner

■배포, 관리 및 동작에 대한 프레임워크를 제공한다■ Provide a framework for deployment, management and operation

■컴포넌트-기반 모델은 모듈 양식(modular fashion)으로 서비스 엘리먼트를 포착한다Component-based model captures service elements in a modular fashion

●SDML은 서비스 정의 모델을 정의하는 서술적인 언어이다SDML is a descriptive language that defines a service definition model.

■컴포넌트, 포트 및 와이어Component, port and wire

■유형, 멤버 및 인스턴스 공간■ Type, member, and instance space

■조직(composition) 및 캡슐화(encapsulation)를 지원Support for composition and encapsulation

SDM: 컴포넌트, 포트 및 와이어SDM: components, ports, and wires

●컴포넌트는 구현, 배포 및 동작의 유닛이다A component is a unit of implementation, distribution, and operation.

■예를 들면, .NET 서버, IIS 가상 웹 사이트, SQL 데이터베이스를 실행하는 전용 서버For example, a dedicated server running .NET servers, IIS virtual Web sites, and SQL databases.

■포트를 통하여 기능을 공개하고 와이어를 통하여 통신한다■ Disclose functions through ports and communicate via wires

■조직에 의하여 생성된 합성 컴포넌트(compound component)Compound components created by the organization

●포트는 연관 유형(프로토콜)을 갖는 이름(서비스 액세스 포인트)이다Port is a name (service access point) with association type (protocol)

■BIG은 통신을 위하여 어떤 프로토콜을 사용할지를 위임(mandate)하지 않는다BIG does not mandate which protocol to use for communication

■프로토콜은 통신을 확립하기 위하여 요구되는 정보를 포착한다Protocol captures the information required to establish communication

●와이어는 포트들간의 허용 가능한 바인딩(permissible bindings)이다Wires are permissible bindings between ports

■와이어는 포트들간의 토폴로지 관계를 선언한다Wires declare topology relationships between ports

도 94 참조.See FIG. 94.

도 95는 SDML 예를 도시한다: MyService.sdml. 또한, 도 28은 이 SDML 예에 관련된다.95 shows an SDML example: MyService.sdml. In addition, FIG. 28 relates to this SDML example.

서비스 배포 유닛(Service Deployment Unit; SDU) - 다음을 포함하여, 서비스를 구성하는 모든 부분(piece)을 캡슐화한다: 애플리케이션/서비스에 대한 SDM 모델, 컴포넌트 구현을 위한 CLR 어셈블리, 및 MSI, ASP.NET, SQL 스크립트, 스태틱 내용 등. 도 96 참조.Service Deployment Unit (SDU)-encapsulates all the pieces that make up a service, including: SDM model for application / service, CLR assembly for component implementation, and MSI, ASP.NET , SQL scripts, static content, and more. See FIG. 96.

SDM 런타임SDM runtime

●SDM 런타임은 SDM 모델 및 인스턴스를 추적할 책임이 있다SDM runtime is responsible for tracking SDM models and instances

■IIS에 의하여 호스트되는 웹 서비스로서 구현된다Implemented as a web service hosted by IIS

■확장성(scalability)을 위하여 분할될 수 있다Can be partitioned for scalability

●런타임 API는 SOAP 엔드포인트를 공개한다Runtime APIs expose SOAP endpoints

■런타임과의 통신은 런타임 라이브러리를 통하여 수행된다■ Communication with runtime is done through runtime library

●고가용성 SDM Store(Yukon의 중복 데이터베이스 기술을 사용함)Highly available SDM Store (using Yukon's redundant database technology)

■두 개의 SQL 서버 및 목격자 서버(witness server)Two SQL Servers and Witness Server

도 27 참조.See FIG. 27.

예: 컴포넌트 인스턴스 생성(Component Instantiation)Example: Component Instantiation

using Microsoft.SDM;using Microsoft.SDM;

public class MyService:public class MyService:

SDMComponent SDMComponent

{{

public OnCreate(…) {   public OnCreate (…) {

fe1 = CreateInstance("fe", "");   fe1 = CreateInstance ("fe", "");

be1 = CreateInstance("be", "");   be1 = CreateInstance ("be", "");

w1 = CreateWireInstance("tds");   w1 = CreateWireInstance ("tds");

w1.Members.Add(fe1.Ports["catalog"]);   w1.Members.Add (fe1.Ports ["catalog"]);

w1.Members.Add(be1.Ports["sql"]);   w1.Members.Add (be1.Ports ["sql"]);

}}

}}

myservice.cs는 SDM API를 사용하는 C# 코드이다.myservice.cs is C # code that uses the SDM API.

componenttype MyService componenttype MyService

{{

component MyFrontEnd fe;component MyFrontEnd fe;

component MyBackEnd be;component MyBackEnd be;

port http = fe.http;port http = fe.http;

wire TDS tds {wire TDS tds {

fe.catalog;fe.catalog;

be.sql;be.sql;

}}

implementation "MyService, MyCLRApp"implementation "MyService, MyCLRApp"

}}

도 35 참조.See FIG. 35.

SDM 런타임 API를 사용하는 동적 바인딩의 예(도 97 참조)Example of dynamic binding using the SDM runtime APIs (see Figure 97)

1. be[1]은 DeclarePort()를 사용하여, sql[1] 포트가 준비되었고 그것의 포트 접속 정보를 SDM 런타임에 등록한다는 것을 선언한다1. be [1] uses DeclarePort () to declare that the sql [1] port is ready and registers its port connection information with the SDM runtime.

2. fe[1]은 catalog[1] 포트를 위하여 피어 정보에 대한 SDM 런타임을 초기화하고 요청하며, GetPeerPort()를 사용하여 sql[1] 포트에 관한 정보를 수신한다2. fe [1] initializes and requests the SDM runtime for peer information for port catalog [1] and uses GetPeerPort () to receive information about port sql [1].

3. 그 후, fe[1]는 SDM 런타임에 의하여 동적으로 제공된 포트 접속 정보를 사용하여 be[1]에 접속한다3. fe [1] then connects to be [1] using the port connection information dynamically provided by the SDM runtime.

서비스 정의 모델(SDM) 워크그룹Service Definition Model Workgroup

●SDM 워크그룹은 5 팀으로 이루어진다SDM workgroup consists of 5 teams

■IndigoIndigo

■WhitehorseWhitehorse

■FusionFusion

■ManagementManagement

■BIGBIG

●면허장(charter)은, 분산되고 그리고/또는 이종 애플리케이션에 대한 클래스 레벨 애플리케이션 스키마(schema)를 정의하는 것이다A charter is to define a class level application schema for distributed and / or heterogeneous applications.

■컴포넌트, 포트 및 와이어를 사용하여 애플리케이션을 설명한다■ Describe applications using components, ports, and wires

■배포, 구성 및 관리 정보를 포함한다Include distribution, configuration, and management information

●SDM은 Fusion 및 Management(그리고 잠재적으로 다른) 스키마를 참조하는 외골격(exoskeleton)이다SDM is an exoskeleton that references Fusion and Management (and potentially other) schemas

■Fusion 어셈블리는 (적용 가능한 곳에서) 배포를 위하여 참조된다Fusion assemblies are referenced for distribution (where applicable).

■MBU 설정(Setting) 및 계측 스키마(Instrumentation schema)는 구성 및 모니터링을 위하여 참조되고 지정된다MBU Settings and Instrumentation schemas are referenced and specified for configuration and monitoring

SDM 스키마 (간략화됨)SDM schema (simplified)

<sdm><sdm>

<identity /> // identifies the group of definitions   <identity /> // identifies the group of definitions

<porttypes /> // descriptions of ports   <porttypes /> // descriptions of ports

<wiretypes /> // descriptions of topologies   <wiretypes /> // descriptions of topologies

<componenttypes> // set of components defined in this library   <componenttypes> // set of components defined in this library

<componenttype>       <componenttype>

<ports /> // communications capabilities         <ports /> // communications capabilities

<settings /> // configuration settings for component         <settings /> // configuration settings for component

<instrumentation /> // monitoring schema          <instrumentation /> // monitoring schema

<deployment /> // installer type, installer info,(e.g.,Fusion)         <deployment /> // installer type, installer info, (e.g., Fusion)

<components /> // subcomponents for composition         <components /> // subcomponents for composition

<wires /> // defines relationships between ports          <wires /> // defines relationships between ports

</componentType>      </ componentType>

</componenttypes>   </ componenttypes>

</sdm></ sdm>

SDM 및 Fusion - 도 98 참조. SDM and Fusion —see FIG. 98.

●디폴트 값을 갖는 로컬 설정은 Fusion Manifest(또는 다른 로컬 설치 기술)로 지정된다.Local settings with default values are specified with Fusion Manifest (or other local installation technology).

●SDM의 설정은 Ops Logic 및 BIG 런타임에 의하여 처리된다.The configuration of the SDM is handled by the Ops Logic and BIG runtimes.

■예: "사용자의 수"는 애플리케이션의 초기 스케일-아웃 조건(initial scale-out condition)을 결정하기 위하여 사용될 수 있다Example: "Number of users" can be used to determine the initial scale-out condition of an application.

SDM 및 배포 - 도 99 참조.SDM and Deployment-see FIG. 99.

스케일 불변 방식으로 애플리케이션의 구조를 설명하려면, 애플리케이션 호스트 환경의 유사한 스케일 불변 설명이 배포 요건 및 제약의 설계-시간 유효성 검증(design-time validation)을 이네이블할 것이 요구된다. To describe the structure of an application in a scale invariant manner, a similar scale invariant description of the application host environment is required to enable design-time validation of deployment requirements and constraints.

■마이크로소프트 및 고객은 데이터 센터 환경의 정교한 설명을 그리고 그 도면을 설명하기 위하여 매우 많은 문서를 작성하는데 많은 에너지를 소비한다.■ Microsoft and its customers spend a lot of energy to produce so many documents to elaborate descriptions of the data center environment and to illustrate the drawings.

■이들 도면 및 문서는 물리적 기계 이름으로부터 서버 역할(role)에 대한 VLAN에 대한 Ip 주소로의 다수의 계층(layer)의 정보를, 흔히 혼동을 일으키는 하나의 포괄적인 조망(view)으로 병합한다.These figures and documents merge information from multiple layers from the physical machine name to the Ip address for the VLAN for the server role into one comprehensive view, often confusing.

도 100은 예시적인 시스템 아키텍처를 도시한다.100 illustrates an example system architecture.

도 101은 다양한 배포 계층의 예를 도시한다.101 illustrates examples of various distribution layers.

동작 논리(Operations Logic)은 동작의 "비즈니스 논리(Business Logic)"이다Operations logic is the "business logic" of the operation

동작 논리는 재사용 가능한 최상의 실시예로서 인코딩된 반복 가능한 패턴을 포착하는 CLR 코드이다Operational logic is CLR code that captures an encoded repeatable pattern as the best reusable embodiment

■서비스 또는 동작 환경에 특정하지 않음■ Not specific to service or operating environment

■개발되고 테스트되며 선적될 수 있다Can be developed, tested and shipped

■사람이 그것을 실행하도록 요구하는 수동 프로시져에 대한 필요성을 감소시킨다Reduce the need for manual procedures that require people to run it

OpsLogic은 서비스의 전체 동작에 대한 책임이 있다OpsLogic is responsible for the overall operation of the service

■서비스를 구동■ Run service

■서비스 성장 및 축소(shrinkage)■ Service Growth and Shrinkage

■업그레이드 및 업데이트Upgrade and update

■장애 검출 및 복구Fault detection and recovery

■데이터베이스 분할Database partition

OpsLogic은 MS 미들-계층 기술(middle-tier technologies)을 사용하여 구현될 것이다OpsLogic will be implemented using MS middle-tier technologies

■IIS 상에 호스트된 ASP.NET 웹 서비스ASP.NET Web Services Hosted on IIS

■트랜잭션 조정을 위한 DTCDTC for transaction coordination

■저장을 위한 SQL 서버SQL server for storage

■모니터링 및 관리를 위한 WMIWMI for monitoring and management

■메시징을 위한 MSMQMSMQ for messaging

반복 가능한 업그레이드 패턴 -> 동작 논리Repeatable Upgrade Pattern-> Behavior Logic

●업그레이드는, 우리가 BIG과 함께 선적하기를 원하는 재사용 가능한 동작 논리 템플릿(template)의 유형의 예이다Upgrade is an example of the type of reusable motion logic template that we want to ship with the BIG.

●인-플레이스 업그레이드 패턴(In-place Upgrade Pattern)In-place Upgrade Pattern

■데이터를 이동하는 비용은 높고, 코드 인스턴스 생성 비용은 낮다, 또는 어떠한 중복 자원도 없다High cost of moving data, low cost of code instantiation, or no redundant resources

■서비스로부터 컴포넌트를 가져오고, 업데이터를 실행하며, 그것을 서비스에 다시 둔다■ Get the component from the service, run the updater, and put it back in the service

●나란히 있는 업그레이드 패턴(Side-by-side Upgrade Pattern)Side-by-side Upgrade Pattern

■데이터를 이동하는 비용은 높고, 코드 인스턴스 생성 비용은 낮다, 중복 자원을 갖는다High cost of moving data, low cost of code instance creation, redundant resources

■새로운 컴포넌트를 생성; 서비스로부터 오래된 컴포넌트를 가져온다; 데이터를 새로운 컴포넌트로 이송한다(migrate); 새로운 컴포넌트를 서비스에 둔다■ create new components; Pull out old components from services; Migrate data to new components; Put the new component into service

●대체 업그레이드 패턴(Replacement Upgrade Pattern)Replacement Upgrade Pattern

■데이터 이송이 없음No data transfer

■새로운 컴포넌트를 추가; 오래된 컴포넌트를 제거; 서비스 가용성을 유지하기 위하여 조정함■ add new components; Remove old components; Adjusted to maintain service availability

●롤링 업그레이드(Rolling Upgrade)는 코드화된 업그레이드 패턴을 재사용할 수 있는 고레벨 동작 논리의 예이다Rolling Upgrade is an example of high-level operation logic that can reuse coded upgrade patterns.

■동작 논리는 테스트될 수 있고, 프레임워크는 롤백을 지원한다Behavioral logic can be tested, framework supports rollback

■소프트웨어가 단계들을 수행하게 함으로써 실행으로부터 사람의 에러를 제거한다■ Eliminate human errors from execution by having the software perform the steps

동작 논리, BIG 및 마이크로소프트 프로그래밍 모델 - 도 102 참조.Operational Logic, BIG, and Microsoft Programming Model—See FIG. 102.

인터넷은 기업형 애플리케이션(enterprise application)을 변모시킨다 - 증가된 공개는 비용을 증가시켰다. 도 103 참조. 새로운 아키텍처는 HW, 사람에 의한 비용을 증가시켰고, 복잡성에 의하여 민첩성(agility)을 감소시켰다. 도 104 참조. Moore의 변호사업(Law)은 DC 상으로 확장하고 있다 - 디스크 밀도, NW 처리 율(throughput) 및 처리력(processing power)에서의 급격한 증가The Internet is transforming enterprise applications-increased publicity has increased costs. See FIG. 103. The new architecture increases the cost of HW, humans, and reduces agility by complexity. See FIG. 104. Moore's Law is expanding on DC-a sharp increase in disk density, NW throughput, and processing power

서비스 전달은 사람 집약적(human intensive)이다 - 사람이 포함되면, 보안성, 신뢰성, 유연성(flexibility) 및 비용에 큰 영향을 미친다. 도 105 참조.Service delivery is human intensive-including people has a big impact on security, reliability, flexibility and cost. See FIG. 105.

이것은 수명 문제이다 - 고객 고통 스팬(customer pain spans)이 발생하고, 배포되며 페이즈(phase)를 동작한다. 도 106 참조. 애플리케이션은 다음 사항으로 개발되지 않는다: HW 구성에 묶인 마음의 스케일(scale in mind-tied to HW configuration), 마음의 관리 가능성(manageability in mind), 마음의 동작 - 나의 데이터 센터의 요건은 무엇인가? 테스트 - "벽으로 던져짐(Thrown over the wall)". 개발자 데스크톱 -> 테스트 구성? 이것이 나의 생산 환경으로 매핑되는 법. 배포 도전(Deployment challenges): 나는 어떤 서버를 사용하는가? 무엇이 올바른 토폴로지인가? 서버, 저장 장치 및 네트워크 팀을 검사하였는가? 얼마나 많은 미래 수요를 예상할 필요가 있는가? 동작상의 도전: 나는 모든 이러한 경고(alert)를 가지고 무엇을 하는가? 장애가 있는 NIC가 나의 애플리케이션에 어떤 영향을 미치는가? 나의 서비스의 성능이 왜 열화하는가? 나는 나의 이메일 admin을 복제할 수 있기를 소망한다.This is a lifespan problem-customer pain spans occur, are distributed and run phases. See FIG. 106. The application is not developed with: scale in mind-tied to HW configuration, manageability in mind, mind behavior-what are my data center requirements? Test-"Thrown over the wall". Developer Desktop-> Test Configuration? How this maps to my production environment. Deployment challenges: What server am I using? What is the correct topology? Have you checked the server, storage and network teams? How much future demand do you need to anticipate? Operational Challenges: What Do I Do With All These Alerts? How does a failed NIC affect my application? Why is my service degrading? I hope to be able to clone my email admin.

서비스 전달 도전을 발표(addressing) - 고객에 대하여 존립 가능한 솔루션(viable solution)의 코어 테넌트(core tenant)Addressing service delivery challenges-core tenant of viable solutions for customers

수명의 각각의 단계에서의 독립적인 값Independent value at each stage of life

개발, 배포, 동작Development, deployment, behavior

전체 수명에 대한 아키텍처를 통합함Integrate architecture for lifespan

단계들간의 향상된 조정 및 피드백Improved coordination and feedback between steps

비즈니스 필요성을 변화시키는 것(changing business needs)으로의 매핑을 이네이블Enable mapping to changing business needs

매핑은, 당신이 민첩성을 가지면, 단지 수행될 수 있다The mapping can only be performed if you have agility

최하위 TCO 플랫폼 상에서 빌드됨Built on the lowest TCO platform

스케일 아웃을 통하여 산업계 표준 하드웨어를 효과적으로 레버리지한다Effectively leverage industry standard hardware with scale out

프로젝트 서미트(Project Summit) - 혁명적인 서비스 전달 아키텍처. 도 106 참조. 기계가 설치되고(instrumented) 관리 가능한 서비스를 개발한다, 배포 요건을 포함한다, 동작 지식(operations knowledge)을 캡슐화하고, 표준 빌딩 블록을 레버리지한다. 서비스를 용이하게 배포: 빠른 설비 공급(rapid provisioning), DC 자원 가상화(resource virtualization), 자기 포함됨, 원-클릭 배포(one-click deploy), 일관되게 테스트로부터 생산으로, 그리고 스케일에 독립적임. 간략화된 동작: 집합된 운용(aggregated administration), 모니터링 및 변화 관리, 애플리케이션이 아닌 관리 서비스, 콘텍스트를 통한 진정한 자동화, 풍부한 서비스 중심 관리 콘솔(rich service-centric management console)Project Summit-A revolutionary service delivery architecture. See FIG. 106. Develop services that are instrumented and manageable, include deployment requirements, encapsulate operations knowledge, and leverage standard building blocks. Easily deploy services: rapid provisioning, DC resource virtualization, self-contained, one-click deploy, consistently test to production, and scale independent. Simplified operation: Aggregated administration, monitoring and change management, non-application management services, true automation through context, rich service-centric management console

맵 비즈니스는 IT 시스템을 필요로 한다. 도구로 IT 동작 지식을 포착한다.The map business needs IT systems. Capture IT operational knowledge with tools.

프로젝트 서미트 - 포괄적인 새로운 아키텍처 및 산업 범위 이니시어티브(industry wide initiative). 도 107 참조.Project Summit-A comprehensive new architecture and industry wide initiative. See FIG.

개념 -> 아키텍처 -> 제품Concept-> Architecture-> Products

장기간, 고객 및 파트너-구동된 노력(partner-driven effort)Long-term, customer- and partner-driven effort

1999년에 시작하는 주요 투자Key investments starting in 1999

대형 MS 인터넷 특성의 동작 필요에 대한 깊은 재연구로 시작했다Started with a deep re-study on the operational needs of large MS Internet characteristics

넓은 고객 베이스 상에서 유효성이 검증된 초기 발견(Validated initial finding)Validated initial finding on a wide customer base

2000년 후반에서 제품 그룹으로부터의 프로토타입Prototype from product group in late 2000

조인트 개발 파트너의 강한 세트(Strong set of joint development partners)Strong set of joint development partners

제품 정의에 포함된 대형 기업 및 서비스 제공자 고객Large enterprise and service provider customers included in the product definition

API를 통하여 공개된 기능을 정의하는데 도움을 주기위하여 자문된 IHV 및 ISV 파트너Consulted IHV and ISV partners to help define the publicly available functionality through the API

윈도우즈 서버 2003으로 초기 제품 선적Initial product shipments to Windows Server 2003

고객은 복잡한 시스템을 간단한 다이어그램으로 변환한다. 도 108 참조.The customer transforms a complex system into a simple diagram. See FIG. 108.

누가 당신의 IT 서비스를 전달하는데 포함되는가? - 사람은 시스템의 불가분의 부분(integral part)이다.Who is involved in delivering your IT services? People are an integral part of the system.

애플리케이션 설계자(architect) - 서비스를 설계.Application architect-design services.

네트워크 설계자 - 네트워크를 구성.Network Architect-Configure your network.

저장 장치 설계자 - 원격 저장 장치를 구성.Storage Designer-Configure remote storage.

애플리케이션 조작자(operator) - 서비스를 유지함.Application operator-maintains the service.

저장 장치 조작자 - 원격 저장 장치를 유지함.Storage Operator-Maintains remote storage.

서버 조작자 - 서버를 유지함.Server Operator-Keep the server.

이 모델에 있어서의 문제점 - 다수의 사람의 상호 작용, 공통적이지 않은 언어, 도메인 지식(domain knowledge)의 불선명(blurring).Problems with this model-multiple human interactions, uncommon language, blurring of domain knowledge.

솔루션의 상세 사항:Details of the solution:

서비스 정의 모델Service definition model

자원 가상화Resource virtualization

동작 자동화Motion automation

관리 API 및 솔루션Management APIs and Solutions

산업계 범위 이니시어티브를 구동(Driving an Industry wide initiative)Driving an Industry wide initiative

서비스 정의 모델(SDM) - 완전한 서비스를 포착.Service Definition Model (SDM)-Capture complete services.

서비스의 전체적인 설명Overall description of the service

애플리케이션 컴포넌트 및 계측(instrumentation)Application component and instrumentation

서비스 토폴로지Service topology

하부 자원(서버, 저장 장치, 네트워크)Underlying resources (server, storage, network)

개발자 및 조작자에 관련Related to developers and operators

책임을 계층화하고 분리한다Layer and separate responsibilities

기준의 일관된 프레임을 제공한다Provide a consistent frame of reference

개발자를 위하여 Visual Studio에서 공개된Opened in Visual Studio for Developers

조작자를 위하여 런 타임에서의 리빙 모델(living model)Living model at run time for the operator

할당된 자원에 독립하여 논리적으로 일관됨Logically consistent independent of allocated resources

실시간으로 자원을 추적한다Track resources in real time

서비스 조직(service composition) 상의 단일 권위(single authority)Single authority in service composition

진정한 자동화를 위한 콘텍스트를 제공Provide a context for true automation

SDM 전문 용어SDM jargon

컴포넌트 - 서비스의 빌딩 블록Components-Building Blocks of Services

논리적 구조(Logical construct)Logical construct

스케일 불변Invariant to scale

하나의 컴포넌트는 다수의 인스턴스를 가질 수 있다One component can have multiple instances

간단한 또는 합성Simple or synthetic

단일 논리적 엔티티(데이터베이스, 웹 서비스, 파일 분할)Single logical entity (database, web service, file split)

결합된 논리적 엔티티(HA 데이터베이스, 이메일 등)Combined logical entities (HA database, email, etc.)

컴포넌트에 특정한 배포 송장(deployment manifest)을 포함Contains a deployment manifest specific to the component

DB 컴포넌트는 데이터베이스 스키마를 포함한다DB components contain database schemas

웹 서비스 컴포넌트는 URL 디렉토리, 내용, 코드를 포함한다Web service components contain URL directories, content, and code

포트 및 와이어와 상호접속됨Interconnected with ports and wires

포트 - 서비스 액세스 포인트Port-Service Access Point

와이어 - 포트들간의 통신 관계Wire-to-port communication relationship

SDM은 추상화 및 캡슐화를 위한 수단을 제공한다. 도 110 참조.SDM provides a means for abstraction and encapsulation. See FIG. 110.

재사용을 이네이블Enable Reuse

복잡성을 구성한다Construct complexity

사람을 SDM으로 매핑 - 기준의 일관된 프레임을 제공한다. 도 111 참조.Mapping People to SDM-Provides a consistent frame of reference. See FIG. 111.

SDM 애플리케이션을 개발 - 새로운 Visual Studio 설계 표면. 도 112 참조. 레거시 애플리케이션, 새로운 애플리케이션.Developing SDM Applications-New Visual Studio Design Surfaces. See FIG. 112. Legacy application, new application.

데이터 센터에서의 SDM 서비스 - 자원을 추적하는 리빙 모델을 갖는 전체적인 설명. 도 113 참조.SDM Service in the Data Center-A holistic description with a living model that tracks resources. See FIG. 113.

서미트 컴퓨터가 무엇인가?What is a Summit Computer?

가상화된 하드웨어 자원의 민첩한 풀(agile pool)Agile pool of virtualized hardware resources

서버, 저장 장치, 네트워크 장치, 관리된 패브릭.Servers, storage devices, network devices, managed fabrics.

수십개로부터 수천개의 서버.Dozens to thousands of servers.

기존의 HW로부터 어셈블되거나 OEM으로부터 하나의 SKU로서 주문됨(ordered).Assembled from an existing HW or ordered as an SKU from an OEM.

단일 관리된 엔티티Single managed entity

서미트는 서미트 컴퓨터내의 모든 HW 자원을 제공하고 관리한다.The Summit provides and manages all the HW resources in the Summit computer.

서미트는 내부 네트워크 패브릭의 완전한 구성을 소유한다.The summit owns the complete configuration of the internal network fabric.

제어의 제약된 영역Constrained Areas of Control

표준화된 토폴로지는 빌드, 테스트 및 동작의 복잡성을 제약한다.Standardized topologies limit the complexity of build, test, and operation.

서미트 컴퓨터 외부의 자원에 대하여 변화되지 않은 소유권Unchanged Ownership of Resources Outside the Summit Computer

소프트웨어 혁명(innovation)을 위한 촉매제Catalysts for Software Innovation

Q: 나는 나의 서버 애플리케이션을 위하여 어떤 데이터 센터 환경을 타겟으로 해야하는가?Q: What data center environment should I target for my server application?

A: 서미트 컴퓨터.A: Summit computer.

Win3와 같이, ISV가 프린터 및 그래픽 카드의 상세 사항에 관하여 잊어버릴 수 있게 한다.Like Win3, it allows ISVs to forget about the details of printers and graphics cards.

하드웨어 혁명을 위한 촉매제Catalysts for the Hardware Revolution

마이크로소프트는 주요 하드웨어 벤더와 계약하여 기준 플랫폼을 정의하였다.Microsoft has contracted with major hardware vendors to define the reference platform.

WinHEC (2003년 5월)에서 나타나는 제1 스펙 & 혁신First Specification & Innovations in WinHEC (May 2003)

서미트는 집합 혁신(aggregation innovations)을 위한 SW 환경을 제공한다.Summit provides a SW environment for aggregation innovations.

덴스 블레이드(Dense blades), 스마트 랙(Smart racks) 등Dense blades, smart racks, etc.

서미트는 하드웨어의 간략화를 가능하게 한다. 예를 들면, 다음을 허용한다:Summits allow for simplified hardware. For example, allow:

서버로부터 KVM을 그리고 네트워크 장치로부터 사람의 인터페이스를 제거한다.Remove the KVM from the server and the human interface from the network devices.

도 114는 예시적인 자원 관리자를 설명한다.114 illustrates an example resource manager.

자원 가상화 - SDM과 컴포넌트 인스턴스간의 브리지(bridge).Resource Virtualization-Bridge between SDM and component instances.

공유, 할당 및 복구에 대한 책임. 도 115 참조.Responsibility for sharing, allocation and recovery. See FIG. 115.

서버 자원 가상화 - 윈도우즈 서버 2003에서 자동화된 배포 서비스(Automated Deployment Services; ADS).Server Resource Virtualization-Automated Deployment Services (ADS) in Windows Server 2003.

빠르게 윈도우즈 서버를 목적하고 재목적하기 위한 완전한 기반 구조Complete infrastructure to quickly target and repurpose Windows Server

윈도우즈 2000 및 윈도우즈 서버 2003 이미지를 포착하고 편집하기 위한 이미징 도구Imaging tools for capturing and editing Windows 2000 and Windows Server 2003 images

베어 메탈(bare metal)로부터 제로 터치 서버 빌드(zero touch server builds)를 가능하게 하는 보안, 원격 배포 프레임워크Secure, remote deployment framework that enables zero touch server builds from bare metal

대규모 서버 운용을 위한 프레임워크Framework for Large Server Operations

안정한, 신뢰할 수 있는, 스크립트 실행 기반 구조Stable, reliable, script execution infrastructure

당신의 윈도우즈 데이터센터의 프로그램적 모델Programmatic Model of Your Windows Data Center

모든 운용적인 활동의 지속적인 로그Continuous log of all operational activities

그래픽 및 프로그램적 인터페이스Graphical and programmatic interface

GUI 기반 동작을 위한 간단한 MMC UISimple MMC UI for GUI-based Operation

명령어 라인 도구 및/또는 WMI 계층을 통해 공개된 완전한 기능Full functionality exposed through command line tools and / or WMI layer

ADS의 주요 이점Key Benefits of ADS

1. 베어 메탈 서버 빌드 및 스크립트 기반 운용과 연관된 TCO를 낮춘다Lower TCO associated with bare metal server builds and script-based operations

베어 메탈로부터 제로-터치 서버 빌드를 가능하게 한다Enable zero-touch server builds from bare metal

1 서버만큼 용이하게 1000 서버의 스크립트 기반 운용을 안전하게 한다Secure script-based operation of 1000 servers as easily as 1 server

2. 당신의 윈도우즈 서버 데이터센터의 일관성, 보안성 및 확장성을 향상시킨다2. Improve the consistency, security and scalability of your Windows Server data center

동작하는 최상의 실시예를 인코딩하고 사람의 에러를 제거한다Encode the best working example and eliminate human error

모든 운용적인 활동의 지속적인 저장을 유지한다Maintain a continuous storage of all operational activities

당신의 전체 윈도우즈 데이터센터의 안전하고 스크립트 기반 운용을 중앙적으로 수행한다Centralize secure, script-based operation of your entire Windows data center

작업 로드 요건(workload requirement)의 변화에 응답하여 서버 역할을 빠르게 변화시킨다Rapidly change server roles in response to changes in workload requirements

3. 당신의 기존의 서버 운용 투자를 레버리지한다3. Leverage your existing server investment

당신의 기존의 스크립트 기반 자동화 방법을 확장하고 향상시킨다Extend and enhance your existing script-based automation methods

동작 자동화(Operational Automation) - 자동화의 코어 테넌트Operational Automation-Core Tenant of Automation

동작상의 최상의 실시예의 포착 및 재사용을 가능하게 하는 유연한 프레임워크Flexible framework to enable capture and reuse of best-in-class embodiments

동작 논리(Operations Logic)Operations Logic

자동화될 것 내의 풍부한 콘텍스트Rich context within the thing to be automated

이벤트는 SDM에 의하여 콘텍스트화되어(contextualized) 시스템 관리의 진정한 자동화를 가능하게 한다Events are contextualized by SDM to enable true automation of system management

"어떤 애플리케이션이 랙 22의 5번째 DL380 상에서 죽는(die) NIC에 의하여 영향을 받을 것이가?"What applications will be affected by the die NIC on rack 22's fifth DL380?

트랜잭트-에이블(Transact-able)Transact-able

보상 기반 모델(Compensation based model)은 롤백 및 언두(un-do)를 허용한다.Compensation based model allows rollback and undo.

동작 논리 - 개발자 및 조작자 자동화를 위한 프레임워크.Behavioral logic-a framework for developer and operator automation.

동작 논리가 무엇인가?What is the operation logic?

오래 살고, 고가용성이며 내구성(durable)이 있는 인코딩된 동작 프로세스Long live, highly available and durable encoded operating process

서미트 컴퓨터 자원의 제어 및 콘텍스트를 위한 SDM을 레버리지Leverage SDM for control and context of summit computer resources

조작자가 시스템의 자동화 레벨을 변화시키는 것을 가능하게 함Allows the operator to change the automation level of the system

개발자에 대한 이점Benefits for Developers

시스템이 (반환 코드와 같은) 애플리케이션 이벤트 및 메시지에 어떻게 반응하고 해결하는지를 개발자가 포착하도록 허용함Allow developers to capture how the system reacts to and resolves application events and messages (such as return code)

개발자가 사용하거나 확장할 수 있는 미리 정의된 동작상의 프로세스Predefined behavioral processes that developers can use or extend

자원을 배포, 업그레이드, 스케일-아웃 및 제거Deploy, upgrade, scale out, and remove resources

ITPro 또는 조작자에 대한 이점Benefits for ITPro or Operators

데이터센터에 대한 증명된 동작상의 최상의 실시예의 용이한 재사용을 가능하게 함Enables easy reuse of proven operational best practices for data centers

동작 자동화 - 프로그래밍 동작 논리. 도 116 참조.Motion Automation-Programming Motion Logic. See FIG.

SDM이 동작 논리과 상호작용하는 법:How SDM interacts with behavioral logic:

이벤트는 인스턴스 및 컴포넌트 정보를 지시하기 위하여 주석 처리된다Events are annotated to indicate instance and component information.

모니터링 서브시스템은 시간-기반 이벤트 상관(time-based event correlation)을 한다The monitoring subsystem has time-based event correlation

경고는 이벤트의 롤업(roll-up)이다Alerts are rollups of events

더 큰 의미론적 의미(Greater semantic meaning)Greater semantic meaning

코맨드레트(Commandlet)는,Commandlet (Commandlet),

컴포넌트에 의하여 공개된 관리 명령의 세트Set of administrative commands published by a component

자기 설명적(self-describing)이다Self-describing

쉘(shell) 바로 내에서 사용될 수 있다Can be used directly within a shell

GUI 형태 표시를 가질 수 있다Can have a GUI form indication

조작자를 위하여 사용하기 위한 "man-page"를 제공할 수 있다You can provide a "man-page" for use by the operator.

도 117 참조.See FIG.

동작 자동화 - 트랜잭트-에이블Motion Automation-Transact-Enable

트랜잭션은 고장 허용 동작(fault-tolerant operations)을 지원하기 위하여 중요하다Transactions are important to support fault-tolerant operations

예: 웹 서비스를 추가Example: add a web service

애드-혹 쉘 스크립트(ad-hoc shell script)로의 강력한 확장Powerful extension to ad-hoc shell scripts

트랜잭션 모델의 후원(auspices) 하의 모든 형태의 동작 논리All forms of behavioral logic under the auspices of the transaction model

보상-기반Reward-based

내구성durability

편성(orchestration)을 사용하면, 트랜잭션은 다수의 기계에 미칠 수 있다Using orchestration, a transaction can span multiple machines

관리 API 및 솔루션 - SDM의 풍부함을 레버리지.Management API and Solutions-Leverage the richness of SDM.

시각화(visualization)는 SDM을 통하여 발생한다Visualization occurs through SDM

제3자 콘솔(3rd party console)은 SDM으로부터 바로 정보를 끌어내거나 마이크로소프트 관리 솔루션의 플랫폼 노하우를 레버리지할 수 있다Third party consoles can derive information directly from SDM or leverage the platform know-how of Microsoft management solutions.

마이크로소프트는 데이터 센터를 위한 SDM-기반 관리 콘솔을 빌드할 것이다Microsoft will build an SDM-based management console for the data center

고객은 SDM을 통하여 커스텀 콘솔(custom console)을 생성할 수 있었다Customers could create custom consoles via SDM

도 118 참조.See FIG.

산업계 범위 이니시어티브 - IHV, ISV, SI 혁신을 해방함(unleashing).Industry Scope Initiatives-Unleashing IHV, ISV, and SI innovations.

IHV HW 기준 플랫폼 사양(specification)IHV HW Reference Platform Specification

주요 OEM 및 스위치 제조자와 밀접하게 작업함Work closely with major OEMs and switch manufacturers

WinHEC (03년 5월)에서 릴리스하는 것을 목표로 함Aiming to release from WinHEC (May 03)

새로운 강제적인 특징을 미래 HW 신청(offerings)에 넣음Incorporating new mandatory features into future HW offerings

주요 제3자 ISV와 계약함Contracted with major third party ISVs

Visual Studio를 위하여 애플리케이션 컴포넌트를 생성한다Create an application component for Visual Studio

SDM 내의 애플리케이션을 위한 자원 관리자Resource manager for applications within SDM

SDM 기반 관리 콘솔을 생성하기 위한 Mgmt ISVMgmt ISV to create an SDM-based management console

고객 및 파트너로서 SI와 작업한다Work with SI as a customer and partner

고객customer

동작 비용을 급격하게 낮춘다Lower operation costs

파트너partner

이 플랫폼 상에서 혁신적인 새로운 서비스 신청을 생성한다Create innovative new service subscriptions on this platform

동작 전문 지식(operations expertise)을 이용한다 -> 동작 논리를 개발한다Use operations expertise-> develop operational logic

주요 고객 이점: 데이터 센터에 대한 선택권을 제공하고 가장 경제적이며 관리 가능한 플랫폼을 생성할 수 있다.Key customer benefits: Offer choices for your data center and create the most economical and manageable platform.

산업계 범위 시작 - SDM의 풍부함을 이종 환경으로 확장. Visual Studio(윈도우즈를 위한 SDM 애플리케이션의 개발을 가능하게 함) 또는 제3자 도구(다른 플랫폼을 위한 SDM 애플리케이션의 개발을 가능하게 함)를 사용하여 이종 SDM 애플리케이션을 개발.Beginning the Industry Range-Extending the Richness of SDM to Heterogeneous Environments. Develop heterogeneous SDM applications using Visual Studio (which enables the development of SDM applications for Windows) or third-party tools (which enable the development of SDM applications for other platforms).

결론conclusion

본 발명이 구조적인 특징 및/또는 방법론적인 동작에 특정한 말로 설명되었지만, 예시적으로 첨부된 청구항에 정의된 본 발명은 개시된 특정 특징 또는 동작 에 의하여 제한되지 않는다는 것을 이해하여야 한다. 오히려, 특정 특징 및 동작은 청구된 본 발명을 구현하는 예시적인 형태로서 개시된다. 더욱이, 이들 청구항은 범위 및 기술적 사상(subject matter)에서 보면 예시적이다. 본 특징의 다수의 다른 조합 및 서브 조합은 본 출원에 대하여 우선권을 주장하는 특허 출원에서 후에 청구될 수 있다.Although the invention has been described in language specific to structural features and / or methodological acts, it is to be understood that the invention as defined in the appended claims is not limited by the specific features or acts disclosed. Rather, the specific features and acts are disclosed as example forms of implementing the claimed invention. Moreover, these claims are illustrative in scope and subject matter. Many other combinations and sub-combinations of this feature can be claimed later in a patent application claiming priority for the present application.

본 설명이 구조적인 특징 및/또는 방법론적인 동작에 특정한 말로 설명되었지만, 첨부된 청구항에 정의된 본 발명은 개시된 특정 특징 또는 동작에 의하여 제한되지 않는다는 것을 이해하여야 한다. 오히려, 특정 특징 및 동작은 본 발명을 구현하는 예시적인 형태로서 개시된다.Although the description has been described in language specific to structural features and / or methodological acts, it is to be understood that the invention defined in the appended claims is not limited by the specific features or acts disclosed. Rather, the specific features and acts are disclosed as example forms of implementing the invention.

오늘날, 예를 들어, 일부 웹사이트들은 수천개의 컴퓨터들을 운영할 수 있고, 많은 분산형 애플리케이션들을 호스트할 수 있으며, 이들 분산형 애플리케이션은 종종 복잡한 애플리케이션들을 지원할 수 있도록 오퍼레이터가 IDC 내에 와이어링 구성을 수동적으로 배열할 뿐 아니라 어떤 네트워크 스위치들에 연결하도록 요청하는 필수품들(requirements)과 네트워크로 접속된 복합체를 가진다. 이러한 환경 하에서, 사람들의 오류를 적게 일으키면서도 시간 소모적은 프로세스를 방지할 수 있는, 물리적 컴퓨팅 시스템 상에 분산형 애플리케이션을 설계하고 배포하기 위한 개량된 기술을 제공할 수 있게 된다.Today, for example, some websites can run thousands of computers, can host many distributed applications, and these distributed applications often allow the operator to manually configure the wiring configuration within IDC to support complex applications. In addition to arranging them, they have a networked complex with the requirements to request connection to some network switches. Under these circumstances, it is possible to provide an improved technique for designing and deploying distributed applications on physical computing systems that can prevent time-consuming processes while producing fewer human errors.

Claims (26)

가상 데이터 센터(virtual data center) 및 분산형 애플리케이션(distributed application)의 설계를 용이(facilitating)하게 하는 단계;Facilitating the design of virtual data centers and distributed applications; 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치(placing)하는 단계; 및Logically placing portions of the distributed application onto the virtual data center; And 상기 가상 데이터 센터에 기초하여 물리적 데이터 센터(physical data center)를 구현하는 단계Implementing a physical data center based on the virtual data center 를 포함하고,Including, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한 방법.The SDM layer provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources. 제1항에 있어서,The method of claim 1, 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치할 때, 상기 가상 데이터 센터의 오퍼레이터의 뷰(view)는, 상기 분산형 애플리케이션의 배치와 연관된 부분들만을 포함하도록 제한되는 방법.When logically deploying portions of the distributed application onto the virtual data center, a view of an operator of the virtual data center is limited to include only portions associated with the deployment of the distributed application. 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하는 단계;Facilitating the design of virtual data centers and distributed applications; 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하는 단계; 및Logically placing portions of the distributed application onto the virtual data center; And 상기 분산형 애플리케이션의 부분들의 배치가 유효한지 여부를 결정하는 단계Determining whether the placement of parts of the distributed application is valid 를 포함하고,Including, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한 방법.The SDM layer provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources. 제3항에 있어서,The method of claim 3, 상기 분산형 애플리케이션을 지원하기 위하여, 상기 가상 데이터 센터의 자원들을 할당하는 단계를 더 포함하는 방법.Allocating resources of the virtual data center to support the distributed application. 분산형 컴퓨팅 시스템상에서 분산형 애플리케이션들을 설계(designing), 배포(deploying), 및 관리(managing)하는데 사용하기 위한 소프트웨어 아키텍쳐를 컴퓨터에 실현시키기 위한 프로그램을 기록한 컴퓨터 판독 가능 기록 매체로서,A computer-readable recording medium having recorded thereon a program for realizing a software architecture on a computer for use in designing, deploying, and managing distributed applications on a distributed computing system. 기계들을 상기 분산형 컴퓨팅 시스템에 사용되는 서버들로 변환하기 위해 사용되는 도구(tool)들을 위한 제1 소프트웨어 계층;A first software layer for tools used to convert machines into servers used in the distributed computing system; 상기 분산형 애플리케이션들의 가상 토폴로지 생성 및 네트워크 관리를 위한 제2 소프트웨어 계층 - 상기 제2 소프트웨어 계층은 상기 제1 소프트웨어 계층의 최상위에 위치함 -;A second software layer for virtual topology generation and network management of the distributed applications, the second software layer being located at the top of the first software layer; 상기 분산형 컴퓨팅 시스템의 물리적 모델을 유지하기 위한 제3 소프트웨어 계층 - 상기 제3 소프트웨어 계층은 상기 제2 소프트웨어 계층의 최상위에 위치함 -;A third software layer for maintaining a physical model of the distributed computing system, the third software layer being located on top of the second software layer; 상기 분산형 애플리케이션에 의해 요청되는 논리적 자원들의 할당을 용이하게 하기 위한 제4 소프트웨어 계층 - 상기 제4 소프트웨어 계층은 상기 제3 소프트웨어 계층의 최상위에 위치함 -;A fourth software layer for facilitating the allocation of logical resources requested by the distributed application, the fourth software layer being located on top of the third software layer; 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스 (namespace)를 제공하는 서비스 정의 모델(SDM)을 위한 제5 소프트웨어 계층 - 상기 제5 소프트웨어 계층은 상기 제4 소프트웨어 계층의 최상위에 위치함 -;A fifth software layer for a service definition model (SDM) that provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources; A software layer is located on top of the fourth software layer; 문맥, 명칭 부여(naming), 및 바인딩(binding)을 위해 상기 SDM에 의해 제공되는 상기 API를 이용하는 분산형 애플리케이션의 재사용가능한 빌딩 블럭(building block)들을 정의하기 위한 제6 소프트웨어 계층 - 상기 제6 소프트웨어 계층은 상기 제5 소프트웨어 계층의 취상위에 위치함 -; 및Sixth software layer for defining reusable building blocks of a distributed application that uses the API provided by the SDM for context, naming, and binding-the sixth software A layer is located above the fifth software layer; And 상기 분산형 애플리케이션의 동작 관리를 위한 제7 소프트웨어 계층 - 상기 제7 소프트웨어 계층은 상기 제6 소프트웨어 계층의 최상위에 위치함 -A seventh software layer for operation management of the distributed application, wherein the seventh software layer is located at the top of the sixth software layer 을 포함하는 소프트웨어 아키텍쳐를 컴퓨터에 실현시키기 위한 프로그램을 기록한 컴퓨터 판독 가능 기록 매체.A computer-readable recording medium having recorded thereon a program for realizing a software architecture comprising a computer. 분산형 컴퓨팅 시스템들 및 분산형 애플리케이션들의 추상화 기술(abstract description)을 가능하게 하는 서비스 정의 모델(Service definition model;SDM), 및A service definition model (SDM) that enables abstract descriptions of distributed computing systems and distributed applications, and 상기 서비스 정의 모델 내에서 기능적 동작(functional operation)들이 어떻게 지정되어야 하는지를 지시(dictating)하기 위한 스키마(schema)Schema for dictating how functional operations should be specified in the service definition model 를 포함하며,Including; 상기 기능적 동작들은 분산형 애플리케이션들의 설계, 분산형 애플리케이션들의 배포(deployment), 및 분산형 애플리케이션들의 관리를 포함하는 설계 도구(design tool)를 컴퓨터에 실현시키기 위한 프로그램을 기록한 컴퓨터 판독가능 기록 매체.And said functional operations record a program for realizing a design tool on a computer comprising design of distributed applications, deployment of distributed applications, and management of distributed applications. 서비스 정의 모델(SDM)을 이용하여 구축된 분산형 시스템의 구현(implementation)을 호스팅하는(hosting) 단계;Hosting an implementation of a distributed system built using a service definition model (SDM); SDM 유형을 조작하기 위한 설정된 API들을 공개(exposing)하는 단계; 및Exposing established APIs for manipulating the SDM type; And 분산형 애플리케이션들의 배포 및 관리를 위해 SDM 인스턴스(instance)들을 추적(tracking)하는 단계Tracking SDM instances for deployment and management of distributed applications 를 포함하는 방법.How to include. 물리적 데이터 센터(physical data center)를 나타내는 스케일-불변 가상 데이터 센터(scale-invariant virtual data center)의 설계를 용이하게 하는 방법으로서,A method of facilitating the design of a scale-invariant virtual data center representing a physical data center, 서비스 정의 모델에 따라 상기 물리적 데이터 센터를 기술하는 단계 - 상기 서비스 정의 모델은,Describing the physical data center according to a service definition model, wherein the service definition model comprises: 분산형 애플리케이션들의 설계와 관련된 서비스들;Services related to the design of distributed applications; 분산형 애플리케이션들의 배포와 관련된 서비스들; 및Services related to the distribution of distributed applications; And 분산형 애플리케이션들의 관리와 관련된 서비스들을 포함함 - Contains services related to the management of distributed applications 상기 물리적 데이터 센터의 특정한 논리적 컴포넌트를 위해 생성될 인스턴스들의 수를 결정하는 단계; 및Determining a number of instances to be created for a particular logical component of the physical data center; And 상기 물리적 데이터 센터를 구현하기 위해 와이어링 토폴로지를 결정하는 단계Determining a wiring topology to implement the physical data center 를 포함하는 방법.How to include. 삭제delete 복수의 명령어들을 저장하고 있는 하나 이상의 컴퓨터 판독가능 기록 매체로서, 상기 명령어들은 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서로 하여금,One or more computer-readable recording media storing a plurality of instructions, wherein the instructions, when executed by one or more processors, cause the one or more processors to: 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하고,Facilitate the design of virtual data centers and distributed applications, 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하고,Logically deploy portions of the distributed application onto the virtual data center, 상기 가상 데이터 센터에 기초하여 물리적 데이터 센터를 구현하게 하고,Implement a physical data center based on the virtual data center, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한, 컴퓨터 판독가능 기록 매체.The SDM layer is a computer readable recording medium for an SDM that provides a context and a namespace for describing APIs and operational processes for application self-inspection and control of application resources. 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하기 위한 수단;Means for facilitating the design of virtual data centers and distributed applications; 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하기 위한 수단; 및Means for logically placing portions of the distributed application onto the virtual data center; And 상기 가상 데이터 센터에 기초하여 물리적 데이터 센터를 구현하기 위한 수단Means for implementing a physical data center based on the virtual data center 을 포함하고,Including, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한 장치.The SDM layer is an apparatus for SDM that provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources. 하나 이상의 프로세서와,One or more processors, 상기 하나 이상의 프로세서에 의해 실행될 수 있는 명령어들을 갖는 하나 이상의 컴퓨터 판독가능 매체One or more computer readable media having instructions executable by the one or more processors 를 포함하고,Including, 상기 명령어들은,The instructions are 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하기 위한 제1 애플리케이션과,A first application to facilitate the design of virtual data centers and distributed applications, 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하기 위한 제2 애플리케이션과,A second application for logically deploying portions of the distributed application onto the virtual data center; 상기 가상 데이터 센터에 기초하여 물리적 데이터 센터를 구현하기 위한 제3 애플리케이션A third application for implementing a physical data center based on the virtual data center 을 구현하고,Implement 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한 장치.The SDM layer is an apparatus for SDM that provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources. 복수의 명령어들을 저장하고 있는 하나 이상의 컴퓨터 판독가능 기록 매체로서, 상기 명령어들은 하나 이상의 프로세서에 의해 실행될 때, 상기 하나 이상의 프로세서로 하여금,One or more computer-readable recording media storing a plurality of instructions, wherein the instructions, when executed by one or more processors, cause the one or more processors to: 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하고,Facilitate the design of virtual data centers and distributed applications, 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하고,Logically deploy portions of the distributed application onto the virtual data center, 상기 분산형 애플리케이션의 부분들의 배치가 유효한지 여부를 결정하게 하고,Determine whether the placement of parts of the distributed application is valid, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한, 컴퓨터 판독가능 기록 매체.The SDM layer is a computer readable recording medium for an SDM that provides a context and a namespace for describing APIs and operational processes for application self-inspection and control of application resources. 가상 데이터 센터 및 분산형 애플리케이션의 설계를 용이하게 하기 위한 제1 애플리케이션;A first application for facilitating the design of virtual data centers and distributed applications; 상기 분산형 애플리케이션의 부분들을 상기 가상 데이터 센터 상으로 논리적으로 배치하기 위한 제2 애플리케이션; 및A second application for logically placing portions of the distributed application onto the virtual data center; And 상기 분산형 애플리케이션의 부분들의 배치가 유효한지 여부를 결정하기 위한 제3 애플리케이션A third application for determining whether placement of portions of the distributed application is valid 을 포함하고,Including, 상기 가상 데이터 센터는 복수의 서비스 정의 모델(SDM) 계층을 포함하여 각 계층이 그 아래에 있는 계층 상에 논리적으로 배치되고,The virtual data center is logically located on a layer below each layer, including a plurality of service definition model (SDM) layers, 상기 SDM 계층은, 애플리케이션 자체 감시(introspection) 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥(context)과 네임스페이스(namespace)를 제공하는 SDM을 위한, 장치.The SDM layer is for an SDM that provides a context and namespace for describing APIs and operational processes for application self-inspection and control of application resources. 기계들을 분산형 컴퓨팅 시스템에 사용되는 서버들로 변환하기 위해 사용되는 도구들을 위한 제1 소프트웨어 계층을 제공하는 단계;Providing a first software layer for tools used to convert machines into servers used in a distributed computing system; 분산형 애플리케이션들의 가상 토폴로지 생성 및 네트워크 관리를 위한 제2 소프트웨어 계층을 제공하는 단계 - 상기 제2 소프트웨어 계층은 상기 제1 소프트웨어 계층의 최상위에 위치함 -;Providing a second software layer for virtual topology generation and network management of distributed applications, the second software layer being located on top of the first software layer; 상기 분산형 컴퓨팅 시스템의 물리적 모델을 유지하기 위한 제3 소프트웨어 계층을 제공하는 단계 - 상기 제3 소프트웨어 계층은 상기 제2 소프트웨어 계층의 최상위에 위치함 -;Providing a third software layer for maintaining a physical model of the distributed computing system, the third software layer being located at the top of the second software layer; 상기 분산형 애플리케이션에 의해 요청되는 논리적 자원들의 할당을 용이하게 하기 위한 제4 소프트웨어 계층을 제공하는 단계 - 상기 제4 소프트웨어 계층은 상기 제3 소프트웨어 계층의 최상위에 위치함 -;Providing a fourth software layer to facilitate allocation of logical resources requested by the distributed application, the fourth software layer being located at the top of the third software layer; 애플리케이션 자체 감시 및 애플리케이션 자원의 제어를 위한 API 및 동작 프로세스를 기술하기 위한 문맥과 네임스페이스를 제공하는 서비스 정의 모델(SDM)을 위한 제5 소프트웨어 계층을 제공하는 단계 - 상기 제5 소프트웨어 계층은 상기 제4 소프트웨어 계층의 최상위에 위치함 -;Providing a fifth software layer for a service definition model (SDM) that provides a context and namespace for describing APIs and operational processes for application self-monitoring and control of application resources. 4 located at the top of the software layer-; 문맥, 명칭 부여, 및 바인딩을 위해 상기 SDM에 의해 제공되는 상기 API를 이용하는 분산형 애플리케이션의 재사용가능한 빌딩 블럭들을 정의하기 위한 제6 소프트웨어 계층을 제공하는 단계 - 상기 제6 소프트웨어 계층은 상기 제5 소프트웨어 계층의 최상위에 위치함 -; 및Providing a sixth software layer for defining reusable building blocks of a distributed application utilizing the API provided by the SDM for context, naming, and binding, the sixth software layer being the fifth software Located at the top of the hierarchy-; And 상기 분산형 애플리케이션의 동작 관리를 위한 제7 소프트웨어 계층 - 상기 제7 소프트웨어 계층은 상기 제6 소프트웨어 계층의 최상위에 위치함 - A seventh software layer for operation management of the distributed application, wherein the seventh software layer is located at the top of the sixth software layer 을 제공하는 단계를 포함하는 방법.Providing a method. 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete 삭제delete
KR1020040015346A 2003-03-06 2004-03-06 Architecture for distributed computing system and automated design, deployment, and management of distributed applications KR101044173B1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020040015346A KR101044173B1 (en) 2003-03-06 2004-03-06 Architecture for distributed computing system and automated design, deployment, and management of distributed applications

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US60/452,736 2003-03-06
US10/789,440 2004-02-26
KR1020040015346A KR101044173B1 (en) 2003-03-06 2004-03-06 Architecture for distributed computing system and automated design, deployment, and management of distributed applications

Publications (2)

Publication Number Publication Date
KR20040079337A KR20040079337A (en) 2004-09-14
KR101044173B1 true KR101044173B1 (en) 2011-06-24

Family

ID=37364347

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020040015346A KR101044173B1 (en) 2003-03-06 2004-03-06 Architecture for distributed computing system and automated design, deployment, and management of distributed applications

Country Status (1)

Country Link
KR (1) KR101044173B1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101863174B1 (en) * 2013-02-22 2018-05-31 비트데펜더 아이피알 매니지먼트 엘티디 Memory introspection engine for integrity protection of virtual machines

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8332809B2 (en) 2004-09-30 2012-12-11 Microsoft Corporation Workflow schedule authoring tool
KR100819076B1 (en) * 2006-08-22 2008-04-03 삼성전자주식회사 System For Sharing Information Between Multi Platform Processors In Equipment Control Apparatus And Method Thereof
CN111352637B (en) * 2020-02-27 2023-11-21 第四范式(北京)技术有限公司 Method, device and equipment for deploying machine learning system
CN113190239A (en) * 2021-05-20 2021-07-30 洛阳轴承研究所有限公司 Method for rapid deployment of industrial application
CN114138368B (en) * 2021-11-30 2024-03-19 招商局金融科技有限公司 Application deployment system, method, equipment and storage medium based on cloud protogenesis

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6907395B1 (en) * 2000-10-24 2005-06-14 Microsoft Corporation System and method for designing a logical model of a distributed computer system and deploying physical resources according to the logical model

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6907395B1 (en) * 2000-10-24 2005-06-14 Microsoft Corporation System and method for designing a logical model of a distributed computer system and deploying physical resources according to the logical model

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Graupner외 공저, "A Framework for Analyzing and Organizing Complex Systems", 7th IEEE Conf. on Engineering of Complex Computer Systems, pp.155-165, 2001.*

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101863174B1 (en) * 2013-02-22 2018-05-31 비트데펜더 아이피알 매니지먼트 엘티디 Memory introspection engine for integrity protection of virtual machines

Also Published As

Publication number Publication date
KR20040079337A (en) 2004-09-14

Similar Documents

Publication Publication Date Title
US7630877B2 (en) Architecture for distributed computing system and automated design, deployment, and management of distributed applications
Burns et al. Kubernetes: up and running
US8612976B2 (en) Virtual parts having configuration points and virtual ports for virtual solution composition and deployment
Konstantinou et al. An architecture for virtual solution composition and deployment in infrastructure clouds
US9578088B2 (en) Globally distributed utility computing cloud
US8122106B2 (en) Integrating design, deployment, and management phases for systems
US8495352B2 (en) System and method for instantiation of distributed applications from disk snapshots
Brogi et al. TosKer: a synergy between TOSCA and Docker for orchestrating multicomponent applications
US20080294777A1 (en) Method and apparatus for template-based provisioning in a service delivery environment
US20170364844A1 (en) Automated-application-release-management subsystem that supports insertion of advice-based crosscutting functionality into pipelines
US11301262B2 (en) Policy enabled application-release-management subsystem
Munteanu et al. Multi-cloud resource management: cloud service interfacing
US20040025157A1 (en) Installation of a data processing solution
KR101044173B1 (en) Architecture for distributed computing system and automated design, deployment, and management of distributed applications
Cons et al. Pan: A High-Level Configuration Language.
Hicks et al. Integration and implementation (int) cs 5604 f2020
Baker The Official InstallShield for Windows Installer Developer's Guide
Turilli et al. Flexible services for the support of research
Raza A plug-and-play approach with distributed computing alternatives for network configuration management.
Papenfuss Containerizing a User-space Storage Framework for Reproducibility
Hicks et al. Final Report CS 5604: Information Storage and Retrieval
Stefanovic et al. Pro Azure Administration and Automation
Ranabahu Abstraction driven application and data portability in cloud computing
Nadal Bou Support for managing dynamically Hadoop clusters
Candela et al. D5. 1–Blue-Cloud VRE Common Services 1st Release

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20140516

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160517

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20170522

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180516

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20190515

Year of fee payment: 9