Erlang được sử dụng ở đâu và tại sao? [đóng cửa]


258

Tôi muốn biết một danh sách các ứng dụng / trang web / giải pháp phổ biến nhất mà Erlang được sử dụng, thành công hay không .

Giải thích tại sao nó được sử dụng vào một giải pháp cụ thể thay vì các ngôn ngữ lập trình khác cũng sẽ được đánh giá rất cao.

Liệt kê các nghiên cứu trường hợp BAD Erlang (trường hợp Erlang bị lạm dụng) cũng rất thú vị.


13
Vấn đề với các nghiên cứu trường hợp BAD là họ không thực sự nổi tiếng hoặc nhìn thấy ánh sáng trong ngày.
Eric

2
WHATSAPP Sử dụng Erlang! Google để biết chi tiết
Muzaaya Joshua

18
Tại sao điều này bị đóng cửa? Tôi googled câu hỏi chính xác và được dẫn đến đây.
canhazbits

EMqtt là một nhà môi giới MQTT rất phổ biến và ngày nay đã được sử dụng rất nhiều trong IoT, được phát triển ở erlang với 1 triệu người dùng bền vững.
LAMRIN TAWSRAS

Câu trả lời:


214

Từ lập trình Erlang :

văn bản thay thế http://bks8.books.google.com/books?id=Qr_WuvfTSpEC&printsec=frontcover&img=1&zoom=5&sig=ACfU3U2F4YY4KqO0vCuZ4CHZjdE2yFFv

Nhiều công ty đang sử dụng Erlang trong các hệ thống sản xuất của họ:

Amazon sử dụng Erlang để triển khai SimpleDB, cung cấp các dịch vụ cơ sở dữ liệu như một phần của Đám mây điện toán đàn hồi Amazon (EC2).

Yahoo!sử dụng nó trong dịch vụ đánh dấu trang xã hội của mình, Delicious, có hơn 5 triệu người dùng và 150 triệu URL được đánh dấu.

Facebook sử dụng Erlang để cung cấp năng lượng cho phụ trợ của dịch vụ trò chuyện của mình, xử lý hơn 100 triệu người dùng hoạt động.

WhatsApp sử dụng Erlang để chạy các máy chủ nhắn tin, đạt được tới 2 triệu người dùng được kết nối trên mỗi máy chủ.

T-Mobile sử dụng Erlang trong các hệ thống SMS và xác thực.

Motorola đang sử dụng Erlang trong các sản phẩm xử lý cuộc gọi trong ngành an toàn công cộng.

Ericsson sử dụng Erlang trong các nút hỗ trợ của mình, được sử dụng trong các mạng di động GPRS và 3G trên toàn thế giới.


Các ứng dụng Erlang mã nguồn mở phổ biến nhất bao gồm:

• Trình tạo mô hình phân khu 3D Wings 3D , được sử dụng để mô hình hóa và kết cấu các lưới đa giác.

• Hệ thống Ejabberd , cung cấp máy chủ ứng dụng nhắn tin tức thời (IM) Giao thức hiện diện và nhắn tin mở rộng (XMPP).

• Cơ sở dữ liệu định hướng tài liệu không có lược đồ CouchDB , cung cấp khả năng mở rộng trên các cụm đa lõi và đa tầng.

• Thư viện MochiWeb cung cấp hỗ trợ xây dựng các máy chủ HTTP nhẹ. Nó được sử dụng để cung cấp năng lượng cho các dịch vụ như MochiBot và MochiAds, phục vụ nội dung được tạo động cho hàng triệu người xem hàng ngày.

RabbitMQ , triển khai giao thức nhắn tin AMQP. AMQP là một tiêu chuẩn mới nổi cho nhắn tin doanh nghiệp hiệu suất cao.


27
Ramiz Uddin - bạn đang nói về hệ thống mới nào khi bạn nói "Không, không phải vậy sao?"
Rùa lớn

10
@RamizUddin bạn đang nói về hệ thống mới nào khi bạn nói "Không, không phải vậy sao?" (Tôi chỉ đang lặp lại một câu hỏi của Great Rùa, một vài năm trước đã quên @ trước tên của bạn - Tôi nghĩ rằng dù sao nó cũng xứng đáng nhận được câu trả lời)
Walter Tross


Facebook đã phá hỏng sự đơn giản và hiệu suất của WhatsApp.
PC của Krishnadas

Bạn có thể cập nhật các liên kết bị hỏng cho cuốn sách?
pradyumnad

83

ejabberd là một trong những ứng dụng erlang được biết đến nhiều nhất và là ứng dụng tôi học erlang.

Tôi nghĩ đó là một trong những dự án thú vị nhất để học erlang bởi vì nó thực sự dựa trên sức mạnh của erlang. (Tuy nhiên, một số người sẽ cho rằng đó không phải là OTP, nhưng đừng lo lắng vẫn còn một kho mã tuyệt vời bên trong ...)

Tại sao ?

Một máy chủ XMPP (như ejabberd) có thể được xem như một bộ định tuyến cấp cao, định tuyến tin nhắn giữa những người dùng cuối. Tất nhiên có những tính năng khác, nhưng đây là khía cạnh quan trọng nhất của một máy chủ nhắn tin tức thời. Nó phải định tuyến nhiều tin nhắn đồng thời và xử lý nhiều kết nối TCP / IP.

Vì vậy, chúng tôi có 2 tính năng:

  • xử lý nhiều kết nối
  • tin nhắn định tuyến đưa ra một số khía cạnh của tin nhắn

Đây là những ví dụ nơi erlang tỏa sáng.

xử lý nhiều kết nối

Rất dễ dàng để xây dựng các máy chủ TCP / IP không chặn có thể mở rộng với erlang. Trong thực tế, nó được thiết kế để giải quyết vấn đề này. Và cho nó có thể sinh ra hàng trăm ngàn quá trình (và không phải chủ đề , đó là cách tiếp cận không chia sẻ, đơn giản hơn để thiết kế), ejabberd được thiết kế như một tập hợp các quy trình erlang (có thể được phân phối trên nhiều máy chủ):

  • quá trình kết nối khách hàng
  • quá trình định tuyến
  • quá trình phòng chat
  • quy trình máy chủ đến máy chủ

Tất cả đều trao đổi tin nhắn.

tin nhắn định tuyến đưa ra một số khía cạnh của tin nhắn

Một tính năng rất đáng yêu khác của erlang là khớp mẫu . Nó được sử dụng trong suốt ngôn ngữ.

Chẳng hạn, như sau:

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.

Đó là 5 phiên bản khác nhau của accesschức năng. Erlang sẽ chọn phiên bản phù hợp nhất với các đối số nhận được. ( Configlà một cấu trúc của loại#configtypethuộc tính).

Điều đó có nghĩa là nó rất dễ dàng và rõ ràng hơn nhiều so với xích if/elsehoặcswitch/case đưa ra các quy tắc kinh doanh.

Bọc lại

Viết các máy chủ có thể mở rộng, đó là toàn bộ quan điểm của erlang. Tất cả mọi thứ được thiết kế nó làm cho điều này dễ dàng. Trên hai tính năng trước, tôi sẽ thêm:

  • nâng cấp mã nóng
  • mnesia, cơ sở dữ liệu quan hệ phân tán (bao gồm trong phân phối cơ sở)
  • mochiweb, trên đó hầu hết các máy chủ http erlang được xây dựng trên
  • hỗ trợ nhị phân (giải mã và mã hóa giao thức nhị phân dễ dàng hơn bao giờ hết)
  • một cộng đồng lớn với các dự án mã nguồn mở tuyệt vời ( ejabberd, couchdbmà còn webmachine, riakvà một loạt các thư viện rất dễ dàng để nhúng)

Ít địa phương hơn

Ngoài ra còn có bài viết này từ Richard Jones. Ông viết lại một ứng dụng từ C ++ sang erlang: 75% số dòng trong erlang.


6
Công bằng mà nói, hầu như bất kỳ mã C ++ nào được viết lại bằng ngôn ngữ hiện đại sẽ làm giảm LỘC.
Zack

52

Danh sách các ứng dụng phổ biến nhất cho Erlang đã được đề cập (CouchDb, ejabberd, RabbitMQ, v.v.) nhưng tôi muốn đóng góp như sau.

Lý do tại sao nó được sử dụng trong các ứng dụng này xuất phát từ sức mạnh cốt lõi của Erlang: quản lý tính khả dụng của ứng dụng .

Erlang được xây dựng từ nền tảng cho môi trường telco yêu cầu các hệ thống đáp ứng ít nhất khả năng sẵn có của 5x9 (99,999% thời gian hoạt động hàng năm). Con số này không còn nhiều chỗ cho thời gian chết trong một năm! Vì lý do này chủ yếu, Erlang được tải với các tính năng sau (không đầy đủ):

  • Khả năng mở rộng theo chiều ngang (khả năng phân phối công việc qua các ranh giới máy dễ dàng thông qua liên lạc nội bộ & liên máy liền mạch). Cơ sở dữ liệu tích hợp (Mnesia) cũng được phân phối theo tự nhiên.

  • Khả năng mở rộng theo chiều dọc (khả năng phân phối công việc trên các tài nguyên xử lý trên cùng một máy): SMP được xử lý nguyên bản.

  • Trao đổi mã nóng : khả năng cập nhật / nâng cấp mã trực tiếp trong các hoạt động

  • Không đồng bộ : thế giới thực không đồng bộ nên Erlang được xây dựng để giải thích cho tính chất cơ bản này. Một tính năng góp phần vào yêu cầu này: các quy trình "miễn phí" của Erlang (> 32000 có thể chạy đồng thời).

  • Giám sát : nhiều chiến lược khác nhau để giám sát quá trình với chiến lược khởi động lại, ngưỡng, v.v ... Giúp phục hồi từ các trường hợp góc / quá tải dễ dàng hơn trong khi vẫn duy trì dấu vết của các vấn đề để xử lý sự cố sau này, phân tích sau khi chết, v.v.

  • Quản lý tài nguyên : chiến lược lập lịch, giám sát tài nguyên, v.v ... Lưu ý rằng bộ lập lịch quy trình mặc định hoạt động với tỷ lệ O (1).

  • Gỡ lỗi trực tiếp : khả năng "đăng nhập" vào các nút trực tiếp sẽ giúp các hoạt động xử lý sự cố. Việc gỡ lỗi có thể được thực hiện trực tiếp với toàn quyền truy cập vào bất kỳ trạng thái đang chạy nào của quy trình. Ngoài ra, các công cụ báo cáo lỗi tích hợp rất hữu ích (nhưng đôi khi hơi khó sử dụng).

Tất nhiên tôi có thể nói về gốc rễ chức năng của nó nhưng khía cạnh này có phần trực giao với mục tiêu chính (tính sẵn sàng cao). Thành phần chính của bản chất chức năng đóng góp hào phóng cho mục tiêu là IMO: "không chia sẻ gì". Đặc tính này giúp chứa "tác dụng phụ" và giảm nhu cầu về cơ chế đồng bộ hóa tốn kém.

Tôi đoán tất cả các đặc điểm này giúp mở rộng trường hợp sử dụng Erlang trong các ứng dụng quan trọng trong kinh doanh.

Một điều mà Erlang không thực sự giỏi : xử lý các khối dữ liệu lớn.


4
Bạn có thể giải thích như sau: "Một điều mà Erlang không thực sự giỏi: xử lý các khối dữ liệu lớn."
Kirill Trofimov

9
Anh ta có nghĩa là những thứ như giải mã dữ liệu mpeg. Có quá nhiều tính toán số mà Erlang không được tối ưu hóa. Nếu việc xử lý chỉ liên quan đến việc xáo trộn các khối dữ liệu lớn từ nơi này sang nơi khác, thì Erlang khá giỏi về việc đó. (Tệp vào ổ cắm TPC, v.v.)
Christian

4
Bạn không thể cập nhật các khối dữ liệu được chia sẻ (không có con trỏ trong Erlang) và do đó dữ liệu phải được chuyển qua các quy trình để lần lượt chuyển thành không hiệu quả.
jldupont

Ở một khía cạnh khác, Ericsson, tôi tin rằng, Erlang đã đạt được tính khả dụng của 9x9.
Jono

Chúng tôi đang dự tính cải thiện điểm yếu của Erlang được trích dẫn ở đây.
Shelby Moore III

19

Erlang đến từ Ericsson và được sử dụng trong một số hệ thống viễn thông của họ.

Viễn thông bên ngoài, CouchDb (một cơ sở dữ liệu định hướng tài liệu) có thể là ứng dụng Erlang nổi tiếng nhất cho đến nay.

Tại sao lại là Erlang? Từ tổng quan (đáng đọc toàn bộ):

Các mô hình tài liệu, khung nhìn, bảo mật và sao chép, ngôn ngữ truy vấn mục đích đặc biệt, bố cục đĩa hiệu quả và mạnh mẽ và tính chất đồng thời và đáng tin cậy của nền tảng Erlang đều được tích hợp cẩn thận cho một hệ thống đáng tin cậy và hiệu quả.


1
Đối với một số hệ thống viễn thông của họ.
jldupont

1
CouchDB không phải là cơ sở dữ liệu OO, đây là cơ sở dữ liệu hướng tài liệu.
TÔI ĐÃ TƯ VẤN TERRIBLE

5
@I GIVE TƯ VẤN TERRIBLE - vâng, tất nhiên. Đã sửa. Tôi sẽ thay đổi biệt danh của bạn :-)
Brian Agnew

Có một ngôn ngữ đồng thời trước đó được sử dụng bởi Ericsson có tên PLEX (Ngôn ngữ lập trình để trao đổi), chạy các trao đổi điện thoại kỹ thuật số trong suốt cuối thập niên 80 cho đến nay. Tôi nghĩ erlang là phiên bản tinh tế của PLEX.
dùng50619

19

Chúng tôi đã xây dựng một sàn giao dịch cá cược (còn gọi là thị trường dự đoán) bằng Erlang. Chúng tôi đã chọn Erlang trên một số ngôn ngữ tài chính truyền thống hơn (C ++, Java, v.v.) vì tính đồng thời tích hợp sẵn. Thị trường hoạt động rất giống với trao đổi điện thoại. CTO của chúng tôi đã nói chuyện về việc sử dụng Erlang của chúng tôi tại buổi nói chuyện CTO .

Chúng tôi cũng sử dụng CouchDB và RabbitMQ như một phần của ngăn xếp của chúng tôi.


10
Chỉ cần một lưu ý, liên kết đến cuộc nói chuyện của bạn bây giờ là riêng tư.
JDong

15

Tôi tình cờ thấy điều này đang trong quá trình viết báo cáo: Erlang trong Truy tìm tia âm thanh .

Đó là một báo cáo kinh nghiệm về nỗ lực của nhóm nghiên cứu sử dụng Erlang cho Truy tìm tia âm thanh. Họ phát hiện ra rằng trong khi viết chương trình dễ dàng hơn, ít lỗi hơn, v.v. Nó bị thu nhỏ hơn và hoạt động chậm hơn 10 lần so với chương trình C tương đương. Vì vậy, một điểm mà nó có thể không phù hợp là các tình huống thâm dụng CPU.

Mặc dù vậy, xin lưu ý rằng những người đã viết bài báo đang ở giai đoạn đầu tiên học Erlang và có thể chưa biết các quy trình phát triển phù hợp cho Erlang thâm dụng CPU.


2
Bài báo là một đọc thú vị. Nó không trực tiếp đưa ra sự khái quát hóa về sự phù hợp, nó chỉ ra rằng họ thấy Erlang không phù hợp nếu bạn đang cố gắng triển khai trên bộ xử lý IBM Cell BE, được tìm thấy trong Playstation 3. Nó cũng cho biết họ thiếu kinh nghiệm với Erlang. Với nhiều kinh nghiệm và phần cứng phù hợp, họ có thể đã đi đến một kết luận khác. Tôi có ấn tượng rằng mã của họ có thể bao gồm việc sử dụng các hàm không đệ quy; nếu vậy thì nó có thể đi một số cách để giải thích vấn đề của họ với bộ nhớ, bộ sưu tập rác, sự cố và hiệu suất.
Tim

3
Tôi nghĩ rằng bạn đọc sai bài viết. Không thể chạy trên bộ xử lý Cell là không may, nhưng đó chỉ là một lưu ý phụ. Sự khác biệt hiệu năng 12x giữa C ++ và triển khai Erlang chạy trên nền tảng x86 là vấn đề thực sự, kết hợp với thực tế là nó không mở rộng tuyến tính. Điều đó nói rằng, họ là người mới đối với ngôn ngữ và có thể đã thực hiện một vài con đường mã không khôn ngoan ... đó là cuộc sống. Tôi tò mò về quy mô phi tuyến tính mặc dù.
CoderTao

4
Tôi đã khắc phục vấn đề hiệu năng 12x liên quan đến Intel so với Cell, nhưng tôi cho rằng Erlang có thể rất phù hợp với các kịch bản thách thức CPU. Điều đó không có nghĩa là họ không đúng: đây thực sự có thể là một vấn đề trong đó một giải pháp C ++ tốt sẽ luôn đánh bại một giải pháp Erlang tốt. Có lẽ điều này đi theo hướng nào đó để phục vụ như một lời nhắc nhở cho một số người rằng Erlang, giống như bất kỳ công nghệ nào khác, không phải là viên đạn bạc và nó sẽ chỉ tỏa sáng khi được sử dụng đúng cách, đúng chỗ.
Tim

14

Rõ ràng, Yahoo đã sử dụng Erlang để tạo ra thứ mà nó gọi là Harvestester. Bài viết về nó ở đây: http://www.ddj.com/architect/220600332


4
Đọc từ bài báo: "Mặc dù Harvestester ban đầu được viết bằng Perl, nhưng các cấu trúc đồng thời cấp cao của Erlang - cùng với các nguyên tắc thiết kế OTP - làm cho nó trở thành một nền tảng lý tưởng để xây dựng các ứng dụng đáng tin cậy, có khả năng mở rộng và có khả năng mở rộng như Harvestester. có khả năng mở rộng hơn, khả dụng, đáng tin cậy và có thể tuân thủ các thỏa thuận cấp độ dịch vụ (SLA) chặt chẽ hơn trên cơ sở mã nhẹ hơn và các nỗ lực phát triển ít tốn kém hơn. ". Cảm ơn rất nhiều :)
Roberto Aloi

11

Erlang dùng để làm gì?

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

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

http://www.reddit.com/r/programming/comments/9q0lr/erlang_and_highfrequency_trading/ (câu trả lời của jerf)

Điều quan trọng là phải nhận ra rằng 4 phần của Erlang: ngôn ngữ, các ngôn ngữ chuẩn VM (BEAM, hipe) (cộng với các mô-đun trên github, CEAN, v.v.) và môi trường phát triển đang được cập nhật / mở rộng / cải thiện đều đặn. Ví dụ, tôi nhớ đã đọc rằng hiệu suất của dấu phẩy động được cải thiện khi tác giả của Wings3d nhận ra rằng nó cần phải cải thiện (tôi không thể tìm thấy nguồn nào cho việc này). Và anh chàng này chỉ viết về nó:

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

Một vài năm trước, công khai Wide Finder của Tim Bray và tất cả những người bắt đầu thực hiện các khung ứng dụng web và máy chủ HTTP (ít nhất là một phần) để cải thiện việc xử lý regex và nhị phân. Và có tất cả các công việc tích hợp HiPE và SMP, dự án dialyzer, thử nghiệm nhiều đơn vị và xây dựng libs mọc lên, ..

Vì vậy, điểm ngọt ngào của nó đang mở rộng, Điều khó khăn là các tài liệu chính thức không thể theo kịp, và danh sách gửi thư và khối lượng thế giới blog erlang đang tăng lên nhanh chóng


10

Chúng tôi đang sử dụng Erlang để cung cấp sức mạnh cơ bắp cho trò chơi nhiều người chơi dựa trên trình duyệt thời gian thực Pixza của chúng tôi . Chúng tôi không sử dụng Flash hoặc bất kỳ plugin nào của bên thứ ba nào khác, mặc dù trò chơi là nhiều người chơi thời gian thực. Chúng tôi sử dụng các kỹ thuật JS và COMET thuần túy thay thế. Và Erlang hỗ trợ "tính thực tế" của Pixza.


10

Tôi đang làm việc cho wooga, một công ty trò chơi xã hội và chúng tôi sử dụng Erlang cho một số phụ trợ trò chơi của chúng tôi (về cơ bản là http apis cho hàng triệu người dùng hàng ngày) và các dịch vụ phụ trợ như nhà cung cấp thông báo đẩy ios, thanh toán, v.v.

Tôi nghĩ rằng nó thực sự tỏa sáng trong các nhiệm vụ liên quan đến mạng và nó làm cho nó trở nên đơn giản để cấu trúc và thực hiện các dịch vụ mạng đơn giản và phức tạp như nhau trong đó. Phân phối, khả năng chịu lỗi và hiệu suất rất dễ đạt được vì Erlang đã có sẵn một số thành phần chính được xây dựng và chúng đang được sử dụng trong một thời gian dài trong cơ sở hạ tầng sản xuất quan trọng. Vì vậy, nó không giống như "điều công nghệ hông mới 0.0.2 alpha".

Tôi biết rằng các công ty trò chơi khác cũng sử dụng Erlang. Bạn sẽ có thể tìm thấy các bài thuyết trình trên trình chiếu về điều đó.


6

Erlang rút ra sức mạnh của nó từ việc trở thành một ngôn ngữ chức năng không có bộ nhớ chia sẻ. Do đó IMO, Erlang sẽ không phù hợp cho các ứng dụng yêu cầu thao tác bộ nhớ tại chỗ. Chỉnh sửa hình ảnh chẳng hạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.