최근에 akka를보고 있는데 꽤 인상적입니다. 위치 투명성, 감독 계층 구조 등 erlang의 킬러 기능 대부분이있는 것 같습니다. erlang이 akka에없는 기능이 있습니까?
답변
면책 조항 : 나는 Akka의 PO입니다
- Erlang은 전송시 복사를 수행합니다. Akka는 VM 내 전송에 공유 메모리 (불변 개체)를 사용합니다.
- Erlang은 프로세스 별 GC를 수행합니다-Akka는 JVM GC를 사용합니다.
- Erlang에는 OTP가 있습니다 . Akka는 전체 Java 에코 시스템 (Apache Camel, JAX-RS 등)과 통합됩니다.
- Erlang이 프로세스 스케줄링을 수행합니다. Akka를 사용하면 무한 구성 기회로 다양한 Dispatcher를 사용할 수 있습니다.
- Erlang은 핫 코드 재로드를 수행합니다. Akka는이를 지원할 수 있지만 JVM 클래스 로딩으로 인해 유연성이 떨어집니다.
그것들은 내 머리 꼭대기에서 나온 것입니다.
반면에 Akka를 사용한다는 것은 Scala, Java, Groovy 또는 JRuby를 사용하여 애플리케이션을 작성할 수 있음을 의미합니다.
답변
Erlang에서 프로세스는 약 1000 회 감소 할 때마다 전환됩니다. Scala / Akka와 같은 순진한 프레임 워크에서 에이전트는 수신 작업이 완료 될 때까지 스케줄러를 소유합니다. 장군. 게임 끝. Hasta la vista 🙂 사람들, 의사 기술에 시간을 낭비하지 마십시오. 여기 사람들이 Scala와 Erlang을 비교하는 것에 충격을 받았습니다.
또한 소위 “킬러 기능”이라고하는 다른 많은 기능이 있지만 여기에 제 조언이 있습니다. 기능에 대해 생각하지 말고 특정 언어를 가능하게하는 관용구에 대해 생각하십시오. Scala는 “최고의 기능”을 훔칩니다. Erlang은 올바른 관용구에서 파생 된 높은 수준의 언어로 시스템을 안정적으로 구축 할 수 있도록 올바른 관용구를 사용 / 구현합니다. 당신이 Erlang을 배울 때 당신은 당신의 마음을 재건하고 있고, 신뢰할 수있는 분산 시스템에 대해 생각하는 방식을, Erlang은 당신을 가르치고 업그레이드합니다. Scala는 다른 언어에서 좋은 기능을 훔치려는 또 다른 명령형 (오, 죄송합니다, 다중 패러다임, 재미있는 단어) 언어입니다.
답변
거의 아무도 프로세스 격리에 대해 언급하지 않습니다. “당신의 쓰레드는 내 쓰레기를 엉망으로 만들 수 없다”는 보장이 없다면 분산 시스템은 추론하기가 훨씬 더 어렵습니다. (그들은 이미 충분히 어려운 것 와 얼랑의 프로세스.)
AFAIK (JVM에 대한 나의 제한된 직접적인 경험을 감안할 때 멀지 않음), Erlang만이 실제로 JVM에서 “올바른”프로세스 격리를 얻습니다. Google은 “마이크로 재부팅”기술 ( “복구 지향 컴퓨팅”)을 사용하는 연구 시스템에 대해 Fox와 Candea (?)의 연구를 어디서 찾을 수 있는지에 대한 몇 가지 힌트를 줄 수 있습니다. 얼랭 개발자는 그 연구를 읽고 몇 가지를 말합니다.
- 클럽에 오신 것을 환영합니다. 왜 그렇게 오래 걸렸나요?
- 하지만 JVM은 가입을 끔찍하게, 끔찍하게 어렵게 만듭니다. 🙂
답변
저에게있어 다운 타임없이 전체 Erlang 클러스터에서 핫 코드 스와핑 (예 make:all([netload]
:)은 Erlang 킬러 기능 중 하나입니다.
그러나 당신의 질문을 뒤집어 보겠습니다. Erlang이 가지고 있지 않은 akka는 무엇입니까? 물론 자바에 수십 개의 확장 및 라이브러리 (scala, akka, spring, osgi, …)를 추가하여 Erlang에 가까워 질 수 있습니다. 그러나 요점은 어디입니까? 요약하면, 이러한 모든 확장은 다운 타임없이 최고의 확장 성을 제공하는 작업을 수행 할 수 있음이 20 년 이상 입증 된 단순한 Erlang 언어를 배우는 것보다 훨씬 더 복잡합니다.
답변
아마도 Erlang은 더 큰 분산 시스템 (vjache의 대답에 따름)에 더 좋지만 여러 CPU의 전체 성능을 사용하려는 일반 서버의 경우 Akka가 좋은 선택입니다. 우수한 추상화, 성능 및 Java 에코 시스템과의 통합을 제공합니다.