本文译自: 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程序确有意义。
|