BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

响应式世界中的可伸缩性

| 作者 Jan Stenberg 关注 34 他的粉丝 ,译者 臧秀涛 关注 4 他的粉丝 发布于 2014年5月7日. 估计阅读时间: 2 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

关于可伸缩性,Jonas Bonér最近在第一届React Conference上的演讲中指出,要使系统真正地可伸缩,我们必须将访问局部性( locality of reference )最大化,同时将竞争(contention)最小化。

Jonas是Akka项目的创建者,Typesafe的CTO。他认为,通过使用无共享架构(share nothing architecture),并基于事件驱动基础设施构建(event-driven foundation),我们可以编写真正可伸缩的系统。

Jonas将性能定义为一个系统能够提供特定响应时间的能力,主要有三个方面:延迟、吞吐量和可伸缩性。他对可伸缩性的定义是,系统能够维持该响应时间的能力。

纵向伸缩(Scale up)意味着我们需要以有效的方式利用多核架构,而且在Jonas看来,干净的代码和良好的实践对实现纵向伸缩至关重要——使用做一件事和简单逻辑的小方法。有两个方面非常重要:最大化访问局部性,确保数据保存在处理上下文的本地极为重要;竞争是可伸缩性的第二个杀手,例如过度使用同步锁。

一个一般性的原则是不要阻塞。通过使用异步,完全拥抱异步消息传递,我们将得到一个设计上支持并发的系统。不同于处理低层次的线程与锁,我们可以将抽象级别提高到处理流经系统的事件。

Jonas认为,从异步编程入手,一开始碰到的本质复杂性(essential complexity)的冲击会更高一些,但这种复杂性通常比较稳定,伴生的偶发复杂性非常低。而在同步系统中,一开始会感觉很熟悉,只有较低的本质复杂性,但随着系统的成长,很容易失控,我们可能会沉没在使用共享互斥状态和紧耦合的系统所伴生的偶发复杂性中。

要真正地可伸缩,我们需要一种方式来向系统中添加资源,水平伸缩(scale out)就是关于管理弹性、添加节点或资源的。

按需伸缩是一个重要因素,有效利用集群云计算架构,能够在线添加资源,从而支持我们的应用对负载的增减做出反应。

Jonas的结论是,通过坚守那些长期以来已经证明有效的核心原则,我们可以编写真正可伸缩的系统。

查看英文原文:Scalability in a Reactive World

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT