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. linux添加环境变量(path)

    分为三步 1.sudo vim /etc/profile 2.export PATH="全路径:$PATH" 3.source /etc/profile 我的微信二维码如下,欢迎交 ...

  2. Combiners和Partitioner编程

    Combiners的作用: 每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量. combiner最基本是实现本地key的归并 ...

  3. IE下的deflate模式

    浏览器有一个非常有用的特性:自动解压. 在使用AJAX请求数据的时候,数据在服务器端压缩传输,在浏览器端自动解压,请求直接得到解压后的结果. 在Request Header中,一般会列出浏览器支持的压 ...

  4. qsort函数应用大全

    七种qsort排序方法 <本文中排序都是采用的从小到大排序> 一.对int类型数组排序  int num[100]; Sample: int cmp ( const void *a , c ...

  5. 【shell脚本】mysql每日备份shell脚本

    每天固定时间用mysqldump 备份mysql数据. #!/bin/bash #每天早上4点, mysql备份数据 orangleliu #chmod 700 backup.sh #crontab ...

  6. Deploying Customizations in Oracle E-Business Suite Release 12.2

    DeployingCustomizations in Oracle E-Business Suite Release 12.2 This documentdescribes how to deploy ...

  7. Mac下关于->您不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。<-的删除

    打开 Terminal 应用程序. 键入: sudo rm -rf注意:在"-rf"后键入一个空格.没有空格该命令将不能执行.在步骤 6 之前请不要按下 Return 键. 打开您 ...

  8. JavaScript压缩工具JSA使用介绍

    JavaScript压缩工具JSA使用介绍 JSA绝对是我使用过的JS压缩工具中最上乘的一个.认识它是从ligerUI开始.在ligerUI的QQ讨论组里,大神--ligerUI的作者告诉我他的lig ...

  9. UNIX环境高级编程——标准I/O库函数和Unbuffered I/O函数

    以写文件为例,C标准I/O库函数(printf(3) .putchar(3) .fputs(3) )与系统调用write(2) 的关 系如下图所示. 库函数与系统调用的层次关系 open .read ...

  10. UNIX环境高级编程——文件I/O

    一.文件描述符 对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的.当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数).后续对文件的操作只需通过该文件描述符,内核记 ...