Erlang和Web

本文译自:

http://ninenines.eu/docs/en/cowboy/1.0/guide/erlang_web/

Web是并发的

当你访问一个网站,很少有并发。几个连接打开,请求通过这些连接发送,然后网页显示在你的屏幕上。你的浏览器一般会打开4到8个连接到服务器,和设置有关,确实不多。

但是想象一下,在同一时间,你不是唯一访问这个站点服务器的人。可能有几百,上千或上百万的并发连接。

甚至今天,很多系统都没有解决C10K问题(1万个并发连接)。更不要说C100K。Erlang同时处理100万个连接没有问题。当前,Erlang可以在单个内存和CPU都不富余的服务器上同时处理超过200万连接。Web是并发的,Erlanger是一门并发的语言,正好相配。

当然,各种平台需要超过几百万的连接,因此需要Erlanger内建的分布式机制。如果一个服务器不过用,增加更多的服务器。Erlanger允许用户使用相同的代码与本地的或集群中其他的进程通信,这意味着用户可以非常快地扩展系统。

Web有巨大的用户群,Erlang平台设计为分布式,因此完美匹配。

得了吧,我们可以用我们喜欢的语言找到解决更多并发问题的方法。可是,这些方法将在未来几年中崩溃。为毛线?首先因为服务器不会一直强大下去,给你更多的内存和CPU。Erlang在这个领域已经领先了几光年。其次,今天你的手机和PC在线,明天你的手表,眼镜,自行车,汽车,冰箱等等成吨的设备都将连接到互联网上。

只要Erlang已经为将要发生的一切做好了准备。

Web是软实时的

什么是软实时?也许你要问。它意味着操作必须尽可能地快。对于Web程序,数据必须快速传递。与此类似的是硬实时,它要求操作在几毫秒内完成否则系统彻底失败。

Web程序的用户没那么挑剔。他们允许一些合理延时,注册登录时额可以等几秒也没问题。但是再长一点他们就会焦虑。

Web的软实时还因为操作超时会降低服务质量。、

Erlang是软实时系统。它一直合理运行多进程,一次一点,然后切换到其他进程。不会导致一个进程独占资源。因此,Erlanger能保证稳定和低延时。满足Web软实时的需求。

Web是异步的

很早之前,Web是同步的,因为HTTP是同步的。用户发起请求,然后等待响应。后来是XmlHttpRequest开启了异步调用时代。

Websocket 的出现解决了客户端和服务器之间互相异步发送数据。数据在帧中保持,不必等待响应。

Erlang进程的工作类似,它们互相发送数据,不需要等待,继续运行,不需要响应。进程多数时间是不活动的,只是等待消息,然后一有消息到来,Erlang虚拟机会激活进程。

很容易想象出Erlang非常擅长接收Websocket 帧,这些帧不知什么时间到来,然后传递到等待处理消息的响应进程,执行操作仅仅激活要求的进程。

更近的Web技术,Websocket,还有SPDY和HTTP/2.0,都是全异步的协议。当然请求和响应的概念仍然不变,只是任何数据都可以在客户端和服务器之间传递和接收,与次序无关。

Erlang天生异步,非常优秀,这样感谢多年打磨的虚拟机。生来就是异步的,尤其使它适合异步Web。

Web 无所不在(omnipresent)

Web组成了我们生活的重要部分。我们都连接在网,无论电话,PC,平板,无论在洗澡间,吃饭。每个家中的设备将来都要在线。

全部设备都连接上网,可供选择的太多,用户不会容忍出现问题,如果一直有问题,用户就会流失。

不算上面的原因,开发人员选择开发Web程序只关心是否足够快,他们到处查看性能指标测试,找出几百个并发连接的情况下发送“HelloWorld”最快的一个。Web性能指标测试不可能完全和现实一致,随着时间过去,性能会严重漂移。

当开发者真心自问,是否我能服务所有用户不出问题。他们会发现2种抉择。要么傻了吧唧装没事,要么使用Erlang。

Erlang是容错的。 用其他语言写代码,你不得不检查返回值,正确处理,避免不可预期的错误。如果幸运,你会处理大多数重要情形。当使用Erlang编程,你只要检查是否成功,忽略所有错误。当错误发生,Erlang 进程自动崩溃,然后被一个称为督程的特定进程重启。

因此,Erlang开发者不必担心未处理的错误,只需要处理正确的逻辑错误代码,给用户以反馈,剩下的让系统去处理。这样的好处是代码写得少,晚上休息好。

Erlang的面向容错的设计是使它成为无所不在的,一直可用的Web的开发的第一优选。

第二个优选是Erlang内建的分布式。分布式是建立容错系统的关键,因为可以处理更大范围的错误,比如一个服务器宕机或一个数据中心不可用。

容错和分布式特性今天看来是重要的,对于将来的Web更是至关重要。Erlang已经准备好了,你呢?

Erlang是Web的理想平台

Erlang支持全部Web要求的,包括未来的重要功能。Erlang与Web完美契合,用它来搭建Web程序确有意义。

Erlang和Web的更多相关文章

  1. Erlang的Web库和框架

    ChicagoBoss,Nitrogen ,Zotontic,BeepBeep,ErlyWeb,Erlang Boss. 转自:http://bbs.chinaunix.net/thread-3764 ...

  2. cowboy-高性能简洁的erlang版web框架

    那么Cowboy是什么呢? Cowboy is a small, fast and modular HTTP server written in Erlang. 其定位非常明确: Cowboy aim ...

  3. [Erlang 0105] Erlang Resources 小站 2013年1月~6月资讯合集

    很多事情要做,一件一件来; Erlang Resources 小站 2013年1月~6月资讯合集,方便检索.      小站地址: http://site.douban.com/204209/     ...

  4. 使用Erlang和Yaws开发REST式的服务

    看过那张很出名的“Apache vs. Yaws”图么?是不是在考虑你也应该使用Yaws了?这些图给人的第一印象是,Yaws在可伸缩性上具有难以置信的巨大优势,它可以扩展到80000个并行的连接,而 ...

  5. Erlang 命令行监控工具

    http://www.cnblogs.com/me-sa/archive/2012/11/22/erlang_vm_monitor_text_mode.html 之前介绍过一个Erlang的Web监控 ...

  6. 必须关注的25位知名JavaScript开发者

    必须关注的25位知名JavaScript开发者 发表于2012-08-07 17:30| 16215次阅读| 来源Crossrider Blog| 46 条评论| 作者Crossrider Blog ...

  7. Scala系统学习(一):Scala概述

    Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...

  8. Spark记录-Scala介绍

    Scala是可扩展语言的缩写,是一种混合功能编程语言. 它由Martin Odersky创建. Scala顺利整合面向对象和函数式语言的功能. Scala被编译后在Java虚拟机上运行. 许多现有公司 ...

  9. Erlang cowboy 入门参考之现代Web的发展历史

    Erlang cowboy 入门参考之现代Web发展史 原文: http://ninenines.eu/docs/en/cowboy/1.0/guide/modern_web/ 让我回顾一下web技术 ...

随机推荐

  1. Java异常处理-----抛出处理

    抛出处理 定义一个功能,进行除法运算例如(div(int x,int y))如果除数为0,进行处理. 功能内部不想处理,或者处理不了.就抛出使用throw new Exception("除数 ...

  2. [ExtJS5学习笔记]第三十四节 sencha extjs 5 grid表格之java后台导出excel

    继上次使用js前端导出excel之后,还有一个主要大家比较关注的是后台实现导出excel,因为本人开发使用的java所以这里使用apache的开源项目poi进行后台excel的导出. 本文目录 本文目 ...

  3. 关于bootstrap在IE8下不能支持自适应的问题

    说到这个问题,我就想吐槽下IE了,开发这么多版本,每个版本都有一些这样那样的问题不支持,别的正常的浏览器咋都能支持呢?真是垃圾浏览器!!!! 说归说,但是IE现在用的人多啊,怎么办?这个问题还是得解决 ...

  4. 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法

    Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法    获取Class类实例的方法:   类名.class   实例名.getClass()   Class.forNam ...

  5. Java 拓展之调用其他语言

    目前而言,编程语言真的是太多了.每一种都是一种智慧的结晶,但是每个都存在其缺点.网上经常能看到一些程序员争论"XX是世界上最好的语言"之类的话题.其实我们大可不必这样.语言本身只是 ...

  6. 实现一个最简单的VIM文本编辑器(可能有bug,随便写了一个)

    简单的写了一个文本编辑器,功能很简单,但足以把文件IO相关的操作熟悉了,可能功能或者分配的大小还不够完善.请参考参考: #include <stdio.h> #include <co ...

  7. SSH网上商城---需求分析+表关系分析

    SSH---小编初次接触的时候傻傻的以为这个跟SHE有什么关系呢?又是哪路明星歌手,后来才知道小编又土鳖了,原来SSH是这个样子滴,百度百科对她这样阐述,SSH即 Spring + Struts +H ...

  8. C语言函数--atoi

          在Java语言中,由于面向对象的思想,它对基本数据类型也进行了相应的封装,例如 int 就封装成了 Integer 类,这无疑会使我们的操作方便了许多,例如,有一个字符串,我想把它转换为i ...

  9. UE4使用C++创建枚举变量适用于C++与蓝图

    这个月勉勉强强才写了一篇,都快月底了,都还没有写第二篇博客的冲动,证明这个月确实收获甚少,有点状态不佳,懒毒入骨啊.刚刚看了这个月其实已经写了三篇,然而事实是这博客还有另外一个人也在更新文章,博主并没 ...

  10. C++编写ATM

          偶然看到的一段代码,代码虽然简单,但是挺有意思: #include <iostream> #include <conio.h> //全局变量 float sum_m ...