首页 > 代码库 > Erlang和Web
Erlang和Web
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