내가 얼랑, 사용되는 가장 일반적인 응용 프로그램 / 웹 사이트 / 솔루션의 목록을 알고 싶습니다 성공적 여부를 .
다른 프로그래밍 언어 대신 특정 솔루션에 사용되는 이유를 설명하는 것도 대단히 감사하겠습니다.
BAD Erlang 사례 연구 (Erlang이 잘못 사용 된 사례)를 나열하는 것도 흥미로울 것입니다.
내가 얼랑, 사용되는 가장 일반적인 응용 프로그램 / 웹 사이트 / 솔루션의 목록을 알고 싶습니다 성공적 여부를 .
다른 프로그래밍 언어 대신 특정 솔루션에 사용되는 이유를 설명하는 것도 대단히 감사하겠습니다.
BAD 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을 사용합니다.
• 다각형 메쉬를 모델링하고 텍스처링 하는 데 사용되는 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은 시스템이 최소 5x9의 가용성 (연간 가동 시간 99.999 %)을 충족해야하는 통신 환경을 위해 처음부터 구축되었습니다. 이 수치는 1 년 동안 다운 타임을위한 공간을 많이 남겨 두지 않습니다! 이러한 이유로 Erlang은 주로 다음과 같은 기능을 제공합니다.
수평 적 확장 성 (매끄러운 인트라 및 머신 간 통신을 통해 머신 경계에 쉽게 작업을 분배 할 수있는 기능) 내장 데이터베이스 (Mnesia)도 기본적으로 배포됩니다.
수직 확장 성 (동일한 시스템의 처리 자원에 작업을 분배 할 수있는 기능) : SMP는 기본적으로 처리됩니다.
Code Hot-Swapping (코드 핫스왑) : 작업 중 실시간 코드 업데이트 / 업그레이드 기능
비동기 : 현실 세계는 비동기 적이므로 Erlang은 이러한 기본 특성을 설명하기 위해 만들어졌습니다. 이 요구 사항에 기여하는 기능 중 하나는 Erlang의 "무료"프로세스입니다 (> 32000이 동시에 실행될 수 있음).
감독 : 재시작 전략, 임계 값 등으로 프로세스 감독을위한 다양한 전략
자원 관리 : 스케줄링 전략, 자원 모니터링 등 기본 프로세스 스케줄러는 O (1) 스케일링으로 작동합니다.
실시간 디버깅 : 실시간 노드에 "로그"하는 기능은 문제 해결 활동에 도움이됩니다. 모든 프로세스의 실행 상태에 대한 모든 액세스 권한으로 디버깅을 실시간으로 수행 할 수 있습니다. 또한 내장 된 오류보고 도구는 매우 유용하지만 때로는 사용하기에 다소 어색합니다.
물론 그 기능적 근본에 대해 이야기 할 수는 있지만이 측면은 주요 목표 (고 가용성)와 다소 직교합니다. 목표 목표에 관대하게 기여하는 기능적 특성의 주요 구성 요소는 IMO입니다. "아무것도 공유하지 않습니다". 이 특성은 "부작용"을 포함하고 값 비싼 동기화 메커니즘의 필요성을 줄입니다.
이러한 모든 특성이 업무상 중요한 응용 프로그램에서 Erlang을 사용하는 사례를 확장하는 데 도움이 될 것 같습니다.
Erlang이 잘하지 못하는 한 가지는 큰 데이터 블록을 처리하는 것입니다.
Erlang은 Ericsson에서 왔으며 일부 통신 시스템에서 사용됩니다.
통신 이외의 CouchDb (문서 지향 데이터베이스)는 지금까지 가장 잘 알려진 Erlang 애플리케이션 일 것입니다.
왜 얼랭인가? 로부터 개요 (가치 전체 읽기) :
Erlang 플랫폼의 문서,보기, 보안 및 복제 모델, 특수 목적 쿼리 언어, 효율적이고 강력한 디스크 레이아웃 및 동시적이고 안정적인 특성은 모두 신뢰할 수 있고 효율적인 시스템을 위해 신중하게 통합됩니다.
나는 이것을 발견했다 : Erlang in Acoustic Ray Tracing 보고서를 작성하는 중이다 .
어쿠스틱 레이 트레이싱에 Erlang을 사용하려는 리서치 그룹의 시도에 대한 경험 보고서입니다. 그들은 프로그램을 작성하는 것이 쉬우면서도 버그가 적다는 것을 알았습니다. 규모가 커지고 비슷한 C 프로그램보다 10 배 느리게 수행되었습니다. 따라서 적합하지 않을 수있는 한 가지 지점은 CPU 집약적 시나리오입니다.
그러나 사람들은이 논문을 Erlang을 처음 배우는 단계에 있었으며 CPU 집약적 Erlang을위한 적절한 개발 절차를 알지 못했을 수도 있습니다.
야후는 Erlang을 사용하여 Harvester라고 불리는 것을 만들었습니다. 여기에 대한 기사 : http://www.ddj.com/architect/220600332
에를 랑은 무엇에 좋은가요?
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, 투석기 프로젝트, 다중 단위 테스트 및 빌드 라이브러리 생성을 통합하는 모든 작업이 있습니다.
스위트 스팟이 확대되고 있으며, 어려운 점은 공식 문서를 잘 유지할 수 없으며 메일 링리스트와 얼랭 블로그 스피어 볼륨이 빠르게 커지고 있다는 것입니다
우리는 Erlang을 사용하여 실시간 브라우저 기반 멀티 플레이어 게임 Pixza에 백엔드 기능을 제공하고 있습니다. 게임은 실시간 멀티 플레이어이지만 Flash 또는 기타 타사 플러그인을 사용하지 않습니다. 대신 순수 JS 및 COMET 기술을 사용합니다. 그리고 Erlang은 Pixza의 "실시간"을 지원합니다.
나는 소셜 게임 회사 인 wooga에서 일하고 있으며 우리는 일부 게임 백엔드 (기본적으로 수백만 명의 사용자를위한 http api) 및 iOS 푸시 알림 공급자, 지불 등과 같은 보조 서비스에 Erlang을 사용합니다.
네트워크 관련 작업에서 실제로 빛을 발하며 단순하고 복잡한 네트워크 서비스를 구조화하고 구현하는 데 앞장서고 있습니다. Erlang은 이미 몇 가지 주요 구성 요소를 내장하고 있으며 중요한 생산 인프라에서 오랫동안 사용되고 있기 때문에 배포, 내결함성 및 성능을 쉽게 달성 할 수 있습니다. 그래서 "새로운 힙합 기술 0.0.2 알파"와는 다릅니다.
다른 게임 회사도 Erlang을 사용한다는 것을 알고 있습니다. 이에 대한 슬라이드 공유에서 프레젠테이션을 찾을 수 있어야합니다.