Erlang은 어디에 사용되며 왜 그런가요? [닫은]


258

내가 얼랑, 사용되는 가장 일반적인 응용 프로그램 / 웹 사이트 / 솔루션의 목록을 알고 싶습니다 성공적 여부를 .

다른 프로그래밍 언어 대신 특정 솔루션에 사용되는 이유를 설명하는 것도 대단히 감사하겠습니다.

BAD Erlang 사례 연구 (Erlang이 잘못 사용 된 사례)를 나열하는 것도 흥미로울 것입니다.


13
BAD 사례 연구의 문제점은 실제로 유명하지 않거나 오늘의 빛을 보지 못한다는 것입니다.
Eric

2
WHATSAPP는 Erlang을 사용합니다! 자세한 내용은 Google it
Muzaaya Joshua

18
왜 닫혀 있습니까? 나는 정확한 질문을 봤고 여기로 이끌 렸다.
canhazbits

EMqtt는 개발 매우 인기있는 MQTT 브로커와 현재의 IoT에 너무 익숙해있다 얼랑 100 만 사용자 지속 가능성과 함께.
LAMRIN TAWSRAS

답변:


214

에서 얼랑 프로그래밍 :

대체 텍스트 http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4WEZjdE2yFFvvg

많은 회사들이 생산 시스템에서 Erlang을 사용하고 있습니다.

Amazon 은 Erlang을 사용하여 SimpleDB를 구현하여 Amazon Elastic Compute Cloud (EC2)의 일부로 데이터베이스 서비스를 제공합니다.

야후! 소셜 북 마킹 서비스 인 Delicious는 5 백만 명 이상의 사용자와 1 억 5 천만 개의 북마크 URL을 보유하고 있습니다.

Facebook 은 Erlang을 사용하여 채팅 서비스의 백엔드를 강화하여 1 억 명 이상의 활성 사용자를 처리합니다.

WhatsApp 은 Erlang을 사용하여 메시징 서버를 실행하여 서버 당 최대 2 백만 명의 연결된 사용자를 달성합니다.

T-Mobile 은 SMS 및 인증 시스템에서 Erlang을 사용합니다.

Motorola 는 공공 안전 산업의 통화 처리 제품에 Erlang을 사용하고 있습니다.

Ericsson 은 전 세계 GPRS 및 3G 모바일 네트워크에서 사용되는 지원 노드에서 Erlang을 사용합니다.


가장 널리 사용되는 오픈 소스 Erlang 응용 프로그램은 다음과 같습니다.

• 다각형 메쉬를 모델링하고 텍스처링 하는 데 사용되는 3D 세분화 모델러 Wings 3D .

Ejabberd 시스템 : XMPP (Extensible Messaging and Presence Protocol) 기반 IM (인스턴트 메시징) 응용 프로그램 서버를 제공합니다.

CouchDB “스키마가없는”문서 지향 데이터베이스로 멀티 코어 및 멀티 서버 클러스터에서 확장 성을 제공합니다.

• 경량 HTTP 서버 구축을 지원 하는 MochiWeb 라이브러리. MochiBot 및 MochiAds와 같은 서비스에 전원을 공급하여 매일 수백만 명의 시청자에게 동적으로 생성 된 컨텐츠를 제공합니다.

• AMQP 메시징 프로토콜 구현 인 RabbitMQ . AMQP는 고성능 엔터프라이즈 메시징을위한 새로운 표준입니다.


27
Ramiz Uddin- "아니요, 그렇지 않습니까?"라고 말할 때 어떤 새로운 시스템에 대해 이야기하고 있습니까?
Great Turtle

10
"아니오, 그렇지 않습니까?"라고 말할 때 어떤 새로운 시스템에 대해 이야기하고 있습니까? (나는 단지 몇 년 전에 당신의 이름 앞에 @를 잊어 버린 Great Turtle의 질문을 반복하고 있습니다
Walter Tross

4
페이스 북에서 erlang으로 전환 : facebook.com/notes/facebook-engineering/…quora.com/…
A. Binzxxxxxx

Facebook은 WhatsApp의 단순성과 성능을 망쳤습니다.
Krishnadas PC

책의 깨진 링크를 업데이트 할 수 있습니까?
pradyumnad

83

ejabberd 는 가장 잘 알려진 erlang 응용 프로그램 중 하나이며 내가 erlang을 배운 응용 프로그램입니다.

저는 이것이 얼랭의 강점을 바탕으로하고 있기 때문에 얼랑을 배우는 데있어 가장 흥미로운 프로젝트 중 하나라고 생각합니다. (그러나 일부는 OTP가 아니라고 주장하지만 내부에 여전히 훌륭한 코드가 있다고 걱정하지 마십시오 ...)

왜 ?

ejabberd와 같은 XMPP 서버는 최종 사용자간에 메시지를 라우팅하는 고급 라우터로 볼 수 있습니다. 물론 다른 기능도 있지만 이것이 인스턴트 메시징 서버의 가장 중요한 측면입니다. 많은 메시지를 동시에 라우팅하고 많은 TCP / IP 연결을 처리해야합니다.

그래서 우리는 두 가지 기능을 가지고 있습니다 :

  • 많은 연결을 처리
  • 메시지의 일부 측면에서 메시지 라우팅

이것은 얼랭이 빛나는 예입니다.

많은 연결을 처리

erlang을 사용하여 확장 가능한 비 차단 TCP / IP 서버를 구축하는 것은 매우 쉽습니다. 실제로이 문제를 해결하도록 설계되었습니다. 그리고 스레드가 아닌 수십만 개의 프로세스를 생성 할 수 있다고 가정하면 ejabberd는 erlang 프로세스 세트로 설계됩니다 (여러 서버에 분산 가능).

  • 클라이언트 연결 프로세스
  • 라우터 프로세스
  • 대화방 프로세스
  • 서버 간 프로세스

그들 모두는 메시지를 교환합니다.

메시지의 일부 측면에서 메시지 라우팅

erlang의 또 다른 매우 사랑스러운 기능은 패턴 일치 입니다. 언어 전체에서 사용됩니다.

예를 들어 다음과 같습니다.

access(moderator, _Config)->  rw;
access(participant, _Config)->  rw;
access(visitor, #config{type="public"})->  r;
access(visitor, #config{type="public_rw"})->  rw;
access(_User,_Config)->  none.

그것은 5 가지 버전의 access기능입니다. Erlang은 접수 된 인수에 따라 가장 적합한 버전을 선택합니다. ( 속성 이있는 Config유형의 구조입니다 ).#configtype

즉, 체인 if/else또는 switch/case비즈니스 규칙을 만드는 것보다 매우 쉽고 명확 합니다.

마무리하려고

확장 가능한 서버를 작성하는 것이 erlang의 요점입니다. 모든 것이 이것을 쉽게 할 수 있도록 설계되었습니다. 이전의 두 가지 기능에 다음을 추가합니다.

  • 핫 코드 업그레이드
  • mnesia분산 관계형 데이터베이스 (기본 분배에 포함)
  • mochiweb대부분의 http erlang 서버가 구축 된
  • 이진 지원 (이진 프로토콜 디코딩 및 인코딩)
  • 큰 오픈 소스 프로젝트와 큰 사회 ( ejabberd, couchdb도하지만 webmachine, riak매우 쉽게 삽입에 대한 라이브러리의 슬루)

더 적은 LOC

Richard Jones 의이 기사 도 있습니다 . 그는 C ++에서 erlang으로 애플리케이션을 다시 작성했습니다. erlang에서 줄이 75 % 줄었습니다.


6
공평하게 말하면, 현대 언어로 다시 작성된 거의 모든 C ++ 코드는 LOC를 줄입니다.

52

Erlang의 가장 일반적인 응용 프로그램 목록 (CouchDb, ejabberd, RabbitMQ 등)이 있지만 다음을 기고하고 싶습니다.

이러한 응용 프로그램에 사용되는 이유는 Erlang의 핵심 강점 인 응용 프로그램 가용성 관리에서 비롯됩니다 .

Erlang은 시스템이 최소 5x9의 가용성 (연간 가동 시간 99.999 %)을 충족해야하는 통신 환경을 위해 처음부터 구축되었습니다. 이 수치는 1 년 동안 다운 타임을위한 공간을 많이 남겨 두지 않습니다! 이러한 이유로 Erlang은 주로 다음과 같은 기능을 제공합니다.

  • 수평 적 확장 성 (매끄러운 인트라 및 머신 간 통신을 통해 머신 경계에 쉽게 작업을 분배 할 수있는 기능) 내장 데이터베이스 (Mnesia)도 기본적으로 배포됩니다.

  • 수직 확장 성 (동일한 시스템의 처리 자원에 작업을 분배 할 수있는 기능) : SMP는 기본적으로 처리됩니다.

  • Code Hot-Swapping (코드 핫스왑) : 작업 중 실시간 코드 업데이트 / 업그레이드 기능

  • 비동기 : 현실 세계는 비동기 적이므로 Erlang은 이러한 기본 특성을 설명하기 위해 만들어졌습니다. 이 요구 사항에 기여하는 기능 중 하나는 Erlang의 "무료"프로세스입니다 (> 32000이 동시에 실행될 수 있음).

  • 감독 : 재시작 전략, 임계 값 등으로 프로세스 감독을위한 다양한 전략

  • 자원 관리 : 스케줄링 전략, 자원 모니터링 등 기본 프로세스 스케줄러는 O (1) 스케일링으로 작동합니다.

  • 실시간 디버깅 : 실시간 노드에 "로그"하는 기능은 문제 해결 활동에 도움이됩니다. 모든 프로세스의 실행 상태에 대한 모든 액세스 권한으로 디버깅을 실시간으로 수행 할 수 있습니다. 또한 내장 된 오류보고 도구는 매우 유용하지만 때로는 사용하기에 다소 어색합니다.

물론 그 기능적 근본에 대해 이야기 할 수는 있지만이 측면은 주요 목표 (고 가용성)와 다소 직교합니다. 목표 목표에 관대하게 기여하는 기능적 특성의 주요 구성 요소는 IMO입니다. "아무것도 공유하지 않습니다". 이 특성은 "부작용"을 포함하고 값 비싼 동기화 메커니즘의 필요성을 줄입니다.

이러한 모든 특성이 업무상 중요한 응용 프로그램에서 Erlang을 사용하는 사례를 확장하는 데 도움이 될 것 같습니다.

Erlang이 잘하지 못하는 한 가지는 큰 데이터 블록을 처리하는 것입니다.


4
다음과 같은 설명을 할 수 있습니다. "Erlang이 실제로 좋지 않은 것 : 큰 데이터 블록 처리"
Kirill Trofimov

9
그는 MPEG 데이터 디코딩과 같은 것을 의미합니다. Erlang에 최적화되지 않은 수치 계산이 너무 많습니다. 처리가 단지 한 장소에서 다른 장소로 큰 데이터 블록을 섞는 것을 포함한다면, Erlang은 그것을 아주 잘합니다. (TCP 소켓 등의 파일)
Christian

4
공유 데이터 블록을 업데이트 할 수 없으며 (Erlang에 포인터가 없음) 따라서 데이터가 프로세스 전체에서 셔틀되어야하므로 결과적으로 비 효율성이 발생합니다.
jldupont

에릭슨은 얼랭이 9x9의 가용성을 달성했다고 말했다.
Jono

우리는있어 고민 얼랑의 약점이 여기에 인용에 개선.
쉘비 무어 III

19

Erlang은 Ericsson에서 왔으며 일부 통신 시스템에서 사용됩니다.

통신 이외의 CouchDb (문서 지향 데이터베이스)는 지금까지 가장 잘 알려진 Erlang 애플리케이션 일 것입니다.

왜 얼랭인가? 로부터 개요 (가치 전체 읽기) :

Erlang 플랫폼의 문서,보기, 보안 및 복제 모델, 특수 목적 쿼리 언어, 효율적이고 강력한 디스크 레이아웃 및 동시적이고 안정적인 특성은 모두 신뢰할 수 있고 효율적인 시스템을 위해 신중하게 통합됩니다.


1
들어 일부 자신 텔레콤 시스템.
jldupont

1
CouchDB는 OO 데이터베이스가 아니며 문서 지향 데이터베이스입니다.
나는 끔찍한 조언을한다

5
@ 나는 끔찍한 조언을한다-물론이다. 수정했습니다. 나는 당신의 모니 커 :-) 바꿀 것
브라이언 애그뉴

Ericsson은 PLEX (Programming Language for Exchanges)라고하는 동시성 언어를 사용하여 80 년대 후반까지 디지털 전화 교환을 운영했습니다. Erlang은 PLEX의 세련된 버전이라고 생각합니다.
user50619

19

우리는 Erlang을 사용하여 베팅 거래소 (일명 예측 시장)를 만들었습니다 . 우리는 내장 된 동시성 (concurrency) 때문에 전통적인 금융 언어 (C ++, Java 등)보다 Erlang을 선택했습니다. 시장은 전화 교환과 매우 유사하게 작동합니다. 우리 CTO는 CTO talk 에서 Erlang 사용에 대해 이야기했습니다 .

또한 CouchDB와 RabbitMQ를 스택의 일부로 사용합니다.


10
참고로, 귀하의 대화에 대한 링크는 이제 비공개입니다.
JDong

15

나는 이것을 발견했다 : Erlang in Acoustic Ray Tracing 보고서를 작성하는 중이다 .

어쿠스틱 레이 트레이싱에 Erlang을 사용하려는 리서치 그룹의 시도에 대한 경험 보고서입니다. 그들은 프로그램을 작성하는 것이 쉬우면서도 버그가 적다는 것을 알았습니다. 규모가 커지고 비슷한 C 프로그램보다 10 배 느리게 수행되었습니다. 따라서 적합하지 않을 수있는 한 가지 지점은 CPU 집약적 시나리오입니다.

그러나 사람들은이 논문을 Erlang을 처음 배우는 단계에 있었으며 CPU 집약적 Erlang을위한 적절한 개발 절차를 알지 못했을 수도 있습니다.


2
이 신문은 흥미로운 기사입니다. PlayStation 3에서 찾을 수있는 IBM Cell BE 프로세서에 배포하려고하면 Erlang이 부적합하다는 것을 알았습니다. 또한 Erlang에 대한 경험이 없음을 나타냅니다. 더 많은 경험과 적절한 하드웨어로 그들은 다른 결론에 도달했을 수 있습니다. 나는 그들의 코드가 비-꼬리 재귀 함수의 사용을 포함했을 것이라는 인상을 받는다; 그렇다면 메모리, 가비지 수집, 충돌 및 성능 관련 문제를 설명하는 데 도움이 될 수 있습니다.
Tim

3
기사를 잘못 읽은 것 같습니다. 셀 프로세서에서 실행할 수 없다는 점은 유감 스럽지만 부수적 인 내용이었습니다. x86 플랫폼에서 실행되는 C ++과 Erlang 구현 간의 12 배의 성능 차이는 실제 문제이며 선형으로 확장되지 않았다는 사실과 결합되었습니다. 즉, 그들은 언어에 익숙하지 않았으며 몇 가지 현명하지 않은 코드 경로를 취했을 수도 있습니다 ... 그런 삶입니다. 그래도 비선형 스케일링이 궁금합니다.
CoderTao

4
Intel 대 Cell과 관련하여 12x 성능 문제를 수정했지만 Erlang은 CPU 까다로운 시나리오에 적합 할 수 있다고 생각합니다. 그것은 그들이 옳지 않다고 말하는 것은 아닙니다. 이것은 좋은 C ++ 솔루션이 항상 좋은 Erlang 솔루션을 능가하는 문제 일 수 있습니다. 어쩌면 이것은 다른 기술과 마찬가지로 Erlang도 은총 알이 아니며 올바른 장소에서 올바른 방법으로 사용될 때만 빛날 것입니다.
Tim

14

야후는 Erlang을 사용하여 Harvester라고 불리는 것을 만들었습니다. 여기에 대한 기사 : http://www.ddj.com/architect/220600332


4
"하베스터는 원래 Perl로 작성되었지만 OTP 디자인 원칙과 함께 Erlang의 높은 수준의 동시성 구조는 Harvester와 같은 신뢰할 수 있고 내결함성이 있으며 확장 가능한 응용 프로그램을 구축하기위한 이상적인 플랫폼입니다. "확장 성, 가용성, 안정성이 뛰어나고보다 가벼운 코드 기반과보다 저렴한 개발 노력으로보다 엄격한 SLA (서비스 수준 계약)를 준수 할 수 있습니다." 정말 감사합니다 :)
Roberto Aloi

11

에를 랑은 무엇에 좋은가요?

http://beebole.com/en/blog/erlang/why-erlang/

http://www.aquabu.com/2008/2/15/erlang-pragmatic-studio-day-3-notes

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (jerf 's answer)

Erlang의 4 가지 부분 인 언어 자체, VM (BEAM, hipe) 표준 라이브러리 (github, CEAN 등의 모듈 포함) 및 개발 환경이 꾸준히 업데이트 / 확장 / 개선되고 있음을 인식해야합니다. 예를 들어, Wings3d의 저자가 개선해야한다는 것을 깨달았을 때 부동 소수점 성능이 향상되었다는 것을 기억합니다 (저는 소스를 찾을 수 없습니다). 그리고이 사람은 방금 그것에 대해 썼습니다 :

http://marian-dan.com/wordpress/?p=324

몇 년 전 Tim Bray의 Wide Finder 홍보와 웹 앱 프레임 워크 및 HTTP 서버를 시작하는 모든 사람들은 정규식 및 이진 처리를 향상시킵니다. 그리고 HiPE와 SMP, 투석기 프로젝트, 다중 단위 테스트 및 빌드 라이브러리 생성을 통합하는 모든 작업이 있습니다.

스위트 스팟이 확대되고 있으며, 어려운 점은 공식 문서를 잘 유지할 수 없으며 메일 링리스트와 얼랭 블로그 스피어 볼륨이 빠르게 커지고 있다는 것입니다


10

우리는 Erlang을 사용하여 실시간 브라우저 기반 멀티 플레이어 게임 Pixza에 백엔드 기능을 제공하고 있습니다. 게임은 실시간 멀티 플레이어이지만 Flash 또는 기타 타사 플러그인을 사용하지 않습니다. 대신 순수 JS 및 COMET 기술을 사용합니다. 그리고 Erlang은 Pixza의 "실시간"을 지원합니다.


10

나는 소셜 게임 회사 인 wooga에서 일하고 있으며 우리는 일부 게임 백엔드 (기본적으로 수백만 명의 사용자를위한 http api) 및 iOS 푸시 알림 공급자, 지불 등과 같은 보조 서비스에 Erlang을 사용합니다.

네트워크 관련 작업에서 실제로 빛을 발하며 단순하고 복잡한 네트워크 서비스를 구조화하고 구현하는 데 앞장서고 있습니다. Erlang은 이미 몇 가지 주요 구성 요소를 내장하고 있으며 중요한 생산 인프라에서 오랫동안 사용되고 있기 때문에 배포, 내결함성 및 성능을 쉽게 달성 할 수 있습니다. 그래서 "새로운 힙합 기술 0.0.2 알파"와는 다릅니다.

다른 게임 회사도 Erlang을 사용한다는 것을 알고 있습니다. 이에 대한 슬라이드 공유에서 프레젠테이션을 찾을 수 있어야합니다.


6

Erlang은 공유 메모리가없는 기능적 언어라는 장점을 가지고 있습니다. 따라서 IMO에서 Erlang은 메모리 조작이 필요한 응용 프로그램에는 적합하지 않습니다. 예를 들어 이미지 편집.

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