可伸缩性/可扩展性(Scalable/scalability)

   可伸缩性(可扩展性)是一种对软件系统计算处理能力的设计指标,高可伸缩性代表一种弹性,在系统扩展成长过程中,软件能够保证旺盛的生命力,通过很少的改动甚至只是硬件设备的添置,就能实现整个系统处理能力的线性增长,实现高吞吐量和低延迟高性能。

   可伸缩性和纯粹性能调优有本质区别, 可伸缩性是高性能、低成本和可维护性等诸多因素的综合考量和平衡,可伸缩性讲究平滑线性的性能提升,更侧重于系统的水平伸缩,通过廉价的服务器实现分布式计算;而普通性能优化只是单台机器的性能指标优化。他们共同点都是根据应用系统特点在吞吐量和延迟之间进行一个侧重选择,当然水平伸缩分区后会带来CAP定理约束。

   软件的可扩展性设计非常重要,但又比较难以掌握,业界试图通过云计算或高并发语言等方式节省开发者精力,但是,无论采取什么技术,如果应用系统内部是铁板一块,例如严重依赖数据库,系统达到一定访问规模,负载都集中到一两台数据库服务器上,这时进行分区扩展伸缩就比较困难,正如Hibernate框架创建人Gavin King所说:关系数据库是最不可扩展的。

性能和扩展性

  • 什么是性能问题? 如果你的系统对于一个用户访问还很慢,那就是性能问题;
  • 什么是扩展性问题? 如果你的系统对一个用户来说是快的,但是在用户不断增长的高访问量下就慢了。

延迟和吞吐量

   延迟和吞吐量是衡量可扩展性的一对指标,我们希望获得低延迟和高吞吐量的系统架构。所谓低延迟,也就是用户能感受到的系统响应时间,比如一个网页在几秒内打开,越短表示延迟越低,而吞吐量表示同时有多少用户能够享受到这种低延迟,如果并发用户量很大时,用户感觉网页的打开速度很慢,这意味着系统架构的吞吐量有待提高。

  扩展性的目标是用可接受的延迟获得最大的吞吐量。可靠性(可用性)目标:用可接受的延迟获得数据更新的一致性。

 

性能专题

性能专题(数十篇)

是什么阻止了Ruby和Python获得Javascript V8那样的速度?

JVM内存模型和性能优化

JVM有关垃圾回收机制的配置

性能优化的首要法则

Tomcat实战中的微调

性能测试

性能调优

高性能

企业系统扩展性架构设计咨询培训

 

缓存专题

缓存专题(数十篇)

Web缓存教程

对象池

使用proxysql和线程池扩展MySQL性能

 

Reactive响应式编程专题

 

伸缩性文章  

可扩展伸缩架构中的状态

超越分布式事务

Scalable可伸缩性详细设计10页 ( PPT下载 )

JavaEE应用的可扩展性伸缩性

Nginx负载平衡 + Tomcat + 会话存储Redis配置要点

非推倒重来式的读/写伸缩扩展

12306火车票订票系统的伸缩扩展

Go Reactive宣言

Netflix的亚马逊云计算平台使用

服务器后端性能大比拼

可伸缩性Scalable高性能系统设计

OO + 分布式计算 = 软件架构的方向

可伸缩性最佳实战

Docker容器化组件架构

什么是cloud native应用?

更多伸缩性scalable讨论

云计算专题

分布式系统

分布式架构

分布式CAP定理

分布式共识一致性教程

NoSQL数据库

中台数据工程教程

软件弹性工程与设计

分布式事务

分布式事务教程