Scalable系统设计

 Scala可伸缩可扩展设计PPT

  • 伸缩自如是Java一大独特优势。
  • 全球最大的微博网站Twitter 从Ruby的Rails移植到Java,以及LinkedIn和Ebay都采取Java架构,这些成功经验都说明Java独特的可伸缩性。

基本原理

  • Scalable != performance
  • 可伸缩性是高性能,低成本和可维护性等诸多因素的综合考量。水平伸缩,通过廉价的服务器实现分布式。
  • 性能是指单用户访问时系统的快慢,当负载超出服务器可承受能力之外后急剧下降。垂直伸缩。

  性能和可伸缩性

  • 什么是性能问题?

    如果你的系统对于一个用户访问还很慢,那就是性能问题;

  • 什么是可伸缩性问题?

    如果你的系统对一个用户来说是快的,但是在用户不断增长的高访问量下就慢了。


 

伸缩性方案

  • scale up   垂直伸缩: 升级到更强大的服务器(多CPU 昂贵大中型机)。
  • Scale out  水平伸缩: 增加更便宜的机器。

vertical scaling 垂直伸缩

  • 垂直伸缩==集中式计算。
  • 有系统最大容量限制,有天花板。

 

  • 垂直伸缩昂贵,成本高,为了增加处理能力,需要巨资采购,推动GDP。

把握两种平衡

  • 评价指标:延迟性Latency(响应时间)、吞吐量Throughput以及一致性。
  • 伸缩性目标:用可接受的延迟获得最大的吞吐量。(延迟性 vs 吞吐量)

 

  • 可靠性目标:用可接受的延迟获得数据更新的一致性,(延迟性 vs 一致性) 。

可用性(Availability)

  • 客户端发出的每次请求必须有响应,响应时间长短以不影响用户体验为标准。
  • 可用性或延迟性测试。

可伸缩性设计

  • 状态的scalable:状态是指保存数据的地方,如内存或数据库
  • 无状态的scalable:侧重行为计算方面,类似提升CPU处理能力。

 

状态的可伸缩性方案

  • Partitioning 分区
  • HTTP Caching  CDN:静态页面缓存
  • Distributed Caching 分布式缓存
  • RDBMS Sharding
  • NOSQL
  • Data Grids 数据网格 集群
  • Concurrency 并发模式

分区:服务器农场

  • 如果有大量并发请求,可以在一个负载平衡器后加多台服务器。
  • 应用程序本身必须要求是无态的,能被无条件的分发。
  • 更有效的是使用云计算,这样应用程序有一个统一的API调用,服务器台数可以不断加入,应用程序丝毫无影响。
  • 不要使用Session,可使用Application

 

下页

Scalable可伸缩可扩展设计PPT

更多伸缩性scalable

NOSQL