Erlang이 클라우드 애플리케이션에 적합한 이유는 무엇입니까?


9

우리는 새로운 프로젝트를 시작하고 회사의 오픈 스택 클라우드 인스턴스화를 구현하고 있습니다 ( http://www.openstack.org/ 참조 ). 이 프로젝트는 우리 회사의 보안 도구입니다. 현재 보안 도구를 위해 수백 개의 전용 서버를 운영하고 있으며이를 기업의 오픈 스택 인스턴스화로 옮기고 있습니다.

우리 회사의 다른 프로젝트는 현재 여러 분산 서버 응용 프로그램에서 erlang을 사용하고 있으며 다른 Q / A 지적 erlang은 널리 사용되는 여러 클라우드 서비스에서 사용됩니다. 다른 사람들에게 프로젝트에서 적용 가능한 위치를 고려하도록 설득하려고합니다.

클라우드 프로그래밍에 대한 Erlang의 강점은 무엇입니까? Erlang을 사용하는 것이 특히 적합한 영역은 어디입니까?


15
"클라우드"를 정의 하면 알고 싶은 내용을 알려줄 수 있습니다. "클라우드" 라는 용어 는 마케팅을 말하며이를 사용하는 사람마다 다른 것을 의미합니다.

오픈 스택 클라우드는 우리가 구현하는 것에 대한 정의로 충분하다고 생각했습니다. openstack.org를 참조하십시오 . 아니면 프로젝트에 대한 추가 정보를 요청하고 있습니까? 우리 회사의 보안 도구입니다. 현재 보안 도구를 위해 수백 개의 전용 서버를 운영하고 있으며이를 기업의 오픈 스택 인스턴스화로 옮기고 있습니다.
던컨

희망적으로 개선하여 '마케팅'문제를 해결하기 위해 질문을 편집했습니다. 내 문제는 작업에 가장 적합한 도구를 선택하는 것입니다. 나는 stackexchange의 신인이기 때문에 그만 두지 않아도됩니다.
던컨

1
특히 "클라우드" 라는 용어 는 성가 시며 구체적인 의미가 아니며, 마케팅이라고 말하며, 실제로 클라우드 애플리케이션으로 무언가를 검증하는 것은 아직 정의하지 않았습니다 . 개인적으로 나는 그것이 내가 생각 하는 바가 무엇인지 아는 것을 안다. 나는 그것이 당신이 생각하는 바가 아니라고 확신 한다 .

" '구름'이라는 용어는 성가시다"-좋습니다! 그것은 가상의 것을 의미하며 "뭔가"가 소프트웨어, 운영 체제, 단일 머신, 다중 머신 및 네트워크 또는 다른 것인지 지정해야합니다.
GlenPeterson

답변:


8

Erlang이 동시 / 병렬화 / 분산 상황에서 실행되도록 특별히 개발되었다는 사실 외에,이를 가능하게하는 두 가지 주요 기술은 다음과 같습니다.

부작용 없음 :

즉, 함수에 실행할 데이터를 제공 할 때 매우 엄격한 경우를 제외하고는 시스템 / 실행 프로세스의 다른 항목에 영향을 미치지 않습니다. 즉, 한 번에 300 번 동시에 함수를 실행하면 300 번의 함수 실행 중 어느 것도 다른 함수에 영향을 미치지 않습니다.

부작용을 방지하기위한 구현 기술을 "불변성 (immutability)"이라하며, 이는 대략 변경되지 않을 수 있음을 의미한다. 이는 변수를 생성하자마자 해당 변수의 값이 수정되지 않을 수 있음을 의미합니다. Erlang은 "단일 할당"으로이 동작을 구현하므로 변수에 값을 할당 한 후에는 값을 다시 할당 할 수 없습니다.

X = 1.
X = 2. // This is not a valid operation

이렇게하면 코드가 실수로 X의 값을 변경하여 경쟁 조건을 유발하지 않도록 할 수 있으므로 본질적으로 스레드 안전하고 동시 사용이 쉽지 않습니다. 이것은 소프트웨어 언어에서 매우 드문 일이며 Erlang이 동시 실행에 매우 적합하도록 관리하는 가장 큰 방법입니다.

배우 모델 :

이는 동시 처리의 구현 및 관리를 개발자에게 매우 간단하게 보여주는 특정 모델링 방법입니다. Wikipedia에서 직접 (http://en.wikipedia.org/wiki/Actor_model) :

액터 모델은 모든 것이 액터라는 철학을 채택합니다. 이것은 모든 객체 지향 프로그래밍 언어에서 사용되는 객체 철학과 유사하지만 액터 모델은 본질적으로 동시적인 반면 객체 지향 소프트웨어는 일반적으로 순차적으로 실행된다는 점이 다릅니다. 액터는 수신 한 메시지에 응답하여 동시에 다음과 같은 작업을 수행 할 수있는 계산 엔티티입니다. 유한 액수의 메시지를 다른 액터에게 보냅니다. 한정된 수의 새로운 배우를 만듭니다. 다음에받는 메시지에 사용할 동작을 지정하십시오. 위의 동작에 대한 가정 된 순서는 없으며 병렬로 수행 할 수 있습니다. 발신자와 발신 통신을 분리하는 것은 비동기 통신 및 제어 구조를 메시지 전달 패턴으로 사용할 수있는 Actor 모델의 근본적인 발전이었습니다.


"부작용 없음"에 대해 "소프트웨어 언어 중에서 매우 드문 경우입니다"라고 말합니다. Java와 C #이 오늘 이것을 할 수 없습니까? 함수를 호출 할 때 부작용이있는 언어는 무엇입니까?
NoChance

3
@EmmadKareem 부작용없이 프로그램을 작성할 있는지 여부는 문제가되지 않습니다 . 언급했듯이 Java 또는 C #에서이 작업을 수행 할 수 있습니다. 기본값에 부작용이 없는지 여부와 컴파일러가이를 지원하는지 여부입니다. 예를 들어, Java에서는 컴파일러에게 "이 메소드에는 부작용이 없습니다"라고 말할 수 없습니다. 이것은 규칙을 어길 때 컴파일러가 경고 할 수 없다는 것을 의미합니다!
Andres F.

@EmmadKareem 나는 부작용없이 C # 또는 java를 작성할 수 없다고 말하는 것이 아니라 (매우 드물지만) 프로그래밍 언어가없는 기능을 가진 언어와의 기능을 분리하는 엄격한 정책을 가진 사람은 거의 없다는 것입니다.
지미 호파

Java에 @NoSideEffects 어노테이션이 있으면 컴파일러에게 해당 메소드에 부작용이 없도록 강제하는 메소드를 작성하는 것이 좋습니다. 내 코드에서는 메서드가 부작용이없는 것이 일반적이라고 생각합니다. 물론 일부 메소드는 Java와 같은 언어에서 뮤 테이터 여야하지만 많은 메소드는 그렇지 않습니다. 특히 디자인에서 불변의 객체를 선호하는 경우.
GlenPeterson

Jimmy Hoffa와 @AndresF., 설명해 주셔서 감사합니다.
NoChance

9

Erlang은 특히 동시 / 병렬 컴퓨팅에서 강력합니다. 사실, 그것은 바로 그 목적을 위해 설계되었습니다. 클라우드와 관련이없는 경우가 많지만 계산시 많은 애플리케이션이 "클라우드"인스턴스에 병렬화되고 배포되어 필요에 따라 용량을 쉽게 늘리거나 줄일 수 있다는 점을 제외하고는 그렇지 않습니다.

나머지는 마케팅에 관한 것입니다.


7
Erlang은 내결함성 컴퓨팅을 위해 설계되었습니다 . 그것은 단지의 분산 컴퓨팅이 (당신이 안정적으로 누군가가 실수로 단일 시스템을 통해 커피를 유출하는 경우 결과를 반환, 당신이 할 수있는 방법이에 대한 prerequesite입니다 필요 최소한 두 기계) 및 병렬동시 컴퓨팅 얼랑 때문에, 분산 컴퓨팅의 단지 특별한 경우를 그들도 능숙합니다. 그러나 그것은 그것이 설계된 것이 아닙니다.
Jörg W Mittag

1
@ JörgWMittag 머리카락을 나누는 한 ... 예, 목적 은 내결함성을 달성하는 것입니다. 그것은 달성 병렬화를 통해이. 그것은 한 디자인구현 뜨거운 대기로 한 작업으로 두 개의 격리, 병렬 계산 파이프를 실시 AX 디지털 전화 스위치에서이.
pap

1
예, 죄송합니다. 클라우드 컴퓨팅은 정의에 따라 거의 분산되어 있으며, 저렴하고 더 중요 하지 않은 머신의 클러스터에 의해 구현되는 경우가 많지만 항상 신뢰할 수는 있지만 안정적인 서비스를 제공하도록 설계되었습니다. 이것이 바로 Erlang을 적합하게 만드는 이유입니다.
Jörg W Mittag

3

기존 하드웨어 배포와 다른 클라우드의 한 가지 측면은 필요할 때 새 인스턴스를 쉽게 시작할 수 있다는 것입니다. 다른 노드를 모니터링하고 다른 노드에서 프로세스를 수행 할 수 있으므로 vms를 추가 또는 제거하고 필요에 따라 관리 할 수있는 매우 동적 인 시스템을 구축하는 것이 비교적 간단합니다.

erlang의 OTP (Open Telecom PLatform) 프레임 워크를 사용하여 시스템을 구축하는 경우, 이는 구조와 메커니즘 (감독자 트리)을 모두 제공하여 상상할 수있는 것보다 훨씬 덜 약한 매우 정교한 물건을 만드는 것을 지원합니다. Erlang은 모든 까다로운 비트를 처리하므로 필요하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.