내가 얼랑, 사용되는 가장 일반적인 응용 프로그램 / 웹 사이트 / 솔루션의 목록을 알고 싶습니다 성공적 여부를 .
다른 프로그래밍 언어 대신 특정 솔루션에 사용되는 이유를 설명하는 것도 대단히 감사하겠습니다.
BAD Erlang 사례 연구 (Erlang이 잘못 사용 된 사례)를 나열하는 것도 흥미로울 것입니다.
답변
에서 얼랑 프로그래밍 :
많은 회사들이 생산 시스템에서 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는 고성능 엔터프라이즈 메시징을위한 새로운 표준입니다.
답변
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
유형의 구조입니다 ).#config
type
즉, 체인 if/else
또는 switch/case
비즈니스 규칙을 만드는 것보다 매우 쉽고 명확 합니다.
마무리하려고
확장 가능한 서버를 작성하는 것이 erlang의 요점입니다. 모든 것이 이것을 쉽게 할 수 있도록 설계되었습니다. 이전의 두 가지 기능에 다음을 추가합니다.
- 핫 코드 업그레이드
mnesia
분산 관계형 데이터베이스 (기본 분배에 포함)mochiweb
대부분의 http erlang 서버가 구축 된- 이진 지원 (이진 프로토콜 디코딩 및 인코딩)
- 큰 오픈 소스 프로젝트와 큰 사회 (
ejabberd
,couchdb
도하지만webmachine
,riak
매우 쉽게 삽입에 대한 라이브러리의 슬루)
더 적은 LOC
Richard Jones 의이 기사 도 있습니다 . 그는 C ++에서 erlang으로 애플리케이션을 다시 작성했습니다. erlang에서 줄이 75 % 줄었습니다.
답변
Erlang의 가장 일반적인 응용 프로그램 목록 (CouchDb, ejabberd, RabbitMQ 등)이 있지만 다음을 기고하고 싶습니다.
이러한 응용 프로그램에 사용되는 이유는 Erlang의 핵심 강점 인 응용 프로그램 가용성 관리에서 비롯됩니다 .
Erlang은 시스템이 최소 5×9의 가용성 (연간 가동 시간 99.999 %)을 충족해야하는 통신 환경을 위해 처음부터 구축되었습니다. 이 수치는 1 년 동안 다운 타임을위한 공간을 많이 남겨 두지 않습니다! 이러한 이유로 Erlang은 주로 다음과 같은 기능을 제공합니다.
-
수평 적 확장 성 (매끄러운 인트라 및 머신 간 통신을 통해 머신 경계에 쉽게 작업을 분배 할 수있는 기능) 내장 데이터베이스 (Mnesia)도 기본적으로 배포됩니다.
-
수직 확장 성 (동일한 시스템의 처리 자원에 작업을 분배 할 수있는 기능) : SMP는 기본적으로 처리됩니다.
-
Code Hot-Swapping (코드 핫스왑) : 작업 중 실시간 코드 업데이트 / 업그레이드 기능
-
비동기 : 현실 세계는 비동기 적이므로 Erlang은 이러한 기본 특성을 설명하기 위해 만들어졌습니다. 이 요구 사항에 기여하는 기능 중 하나는 Erlang의 “무료”프로세스입니다 (> 32000이 동시에 실행될 수 있음).
-
감독 : 재시작 전략, 임계 값 등으로 프로세스 감독을위한 다양한 전략
-
자원 관리 : 스케줄링 전략, 자원 모니터링 등 기본 프로세스 스케줄러는 O (1) 스케일링으로 작동합니다.
-
실시간 디버깅 : 실시간 노드에 “로그”하는 기능은 문제 해결 활동에 도움이됩니다. 모든 프로세스의 실행 상태에 대한 모든 액세스 권한으로 디버깅을 실시간으로 수행 할 수 있습니다. 또한 내장 된 오류보고 도구는 매우 유용하지만 때로는 사용하기에 다소 어색합니다.
물론 그 기능적 근본에 대해 이야기 할 수는 있지만이 측면은 주요 목표 (고 가용성)와 다소 직교합니다. 목표 목표에 관대하게 기여하는 기능적 특성의 주요 구성 요소는 IMO입니다. “아무것도 공유하지 않습니다”. 이 특성은 “부작용”을 포함하고 값 비싼 동기화 메커니즘의 필요성을 줄입니다.
이러한 모든 특성이 업무상 중요한 응용 프로그램에서 Erlang을 사용하는 사례를 확장하는 데 도움이 될 것 같습니다.
Erlang이 잘하지 못하는 한 가지는 큰 데이터 블록을 처리하는 것입니다.
답변
Erlang은 Ericsson에서 왔으며 일부 통신 시스템에서 사용됩니다.
통신 이외의 CouchDb (문서 지향 데이터베이스)는 지금까지 가장 잘 알려진 Erlang 애플리케이션 일 것입니다.
왜 얼랭인가? 로부터 개요 (가치 전체 읽기) :
Erlang 플랫폼의 문서,보기, 보안 및 복제 모델, 특수 목적 쿼리 언어, 효율적이고 강력한 디스크 레이아웃 및 동시적이고 안정적인 특성은 모두 신뢰할 수 있고 효율적인 시스템을 위해 신중하게 통합됩니다.
답변
우리는 Erlang을 사용하여 베팅 거래소 (일명 예측 시장)를 만들었습니다 . 우리는 내장 된 동시성 (concurrency) 때문에 전통적인 금융 언어 (C ++, Java 등)보다 Erlang을 선택했습니다. 시장은 전화 교환과 매우 유사하게 작동합니다. 우리 CTO는 CTO talk 에서 Erlang 사용에 대해 이야기했습니다 .
또한 CouchDB와 RabbitMQ를 스택의 일부로 사용합니다.
답변
나는 이것을 발견했다 : Erlang in Acoustic Ray Tracing 보고서를 작성하는 중이다 .
어쿠스틱 레이 트레이싱에 Erlang을 사용하려는 리서치 그룹의 시도에 대한 경험 보고서입니다. 그들은 프로그램을 작성하는 것이 쉬우면서도 버그가 적다는 것을 알았습니다. 규모가 커지고 비슷한 C 프로그램보다 10 배 느리게 수행되었습니다. 따라서 적합하지 않을 수있는 한 가지 지점은 CPU 집약적 시나리오입니다.
그러나 사람들은이 논문을 Erlang을 처음 배우는 단계에 있었으며 CPU 집약적 Erlang을위한 적절한 개발 절차를 알지 못했을 수도 있습니다.