系统架构过程当中经常使用到的术语

性能:Web系统的性能受多方面因素的影响,但大多数开发人员主要关心的是响应时间和可扩展性这两方面。web

n 响应时间:Web应用从收到请求到返回响应结果所花费的时间。而应用系统应该在可接受的时间范围内返回响应结果,不然就不能算是一个性能良好的应用系统。数据库

n 可扩展性:若是Web应用经过增长更多硬件可使处理的请求数呈线性增加,那么该应用是可扩展的。服务器

在同一个应用中,响应时间和可扩展性并不老是可以同时达到最好的效果。要么应用程序有可接受的响应时间可是不能处理超过必定数量的请求;要么应用程序能够处理大量请求,可是响应时间却不尽如人意,甚至很是糟糕。所以,一般状况下咱们须要在这两个要素中寻求平衡点使咱们的应用系统性能达到最佳状态。架构

扩展的方式能够分为纵向扩展和横向扩展两种。并发

n 纵向扩展(垂直扩展):为单台机器增长CPU或者提升单台机器CPU性能。负载均衡

n 横向扩展(水平扩展):增长服务器数量函数

通常状况下水平扩展比垂直扩展更重要,主要是由于普通硬件商品远比须要特殊配置的硬件便宜(好比大型机);可是加强单个应用在一个硬件商品上处理的请求数一样也是比较重要的。同时,一个应用系统在不下降响应时间的前提下,若是经过添加更多的资源可以处理更多的请求,那么这个系统表现良好。性能

容量规划:须要咱们根据产品指望的负载量来预估所须要的硬件数量。除了总体的预估外,这一般还包括使用更少硬件时系统的性能表现状况以及单台机器下性能的测试及评估。学习

架构扩展:若是Web应用的每一层在多层架构体系中都是可扩展的,那么该应用也具备可扩展性(横向扩展)。例如,以下图所示,咱们就能够经过增长额外的资源来实现应用层和数据库层的线性扩展。测试

负载均衡器扩展:能够经过将DNS指向多个IP以及使用DNS轮循查找IP地址的方式来实现负载均衡器的横向扩展。或者可使用多级负载均衡,使上一级负载均衡器来分发至下一级负载均衡器,但使用多个负载均衡器的状况比较少,主要是因为Web容器通常能够处理几千并发请求,而使用Nginx或者HAProxy的单个负载均衡器能够处理超过20000的并发请求,所以单个负载均衡器彻底能够代理多个web应用。

数据库功能扩展:数据库功能扩展是很是经常使用的方式,可是扩展数据库功能(好比建立存储过程或自定义函数)都会给数据层带来额外开销以及增长数据层的复杂性。

n 关系型数据库:能够经过主从同步的模式实现扩展,主库以写入数据为主,从库只作读操做。可是,若是业务量比较大时主从同步模式所提供的扩展能力很是有限,此外,开发人员还须要经过数据库拆分技术来进一步知足业务需求。

n NoSQL:CAP定理(译者注:不熟悉的读者可经过谷歌查阅)告诉咱们一个应用不可能同时知足一致性、可用性、分区容错性三个要求。而NoSQL通常则是经过牺牲必定的一致性来得到更高可用性以及更好的分区容错性。

数据库拆分能够垂直拆分和水平拆分:

n 垂直拆分(Partitioning):根据领域模型概念的基础能够将数据库拆分为几个松耦合的子库。例如,拆分为消费者数据库、产品数据库。另外一种垂直拆分数据库的方式是将一个实体的一部分字段拆分出来做为一个新数据库,另外一部分字段做为另外一个数据库。例如,将消费者数据拆分为消费者联系信息和订单数据两部分。

n 水平拆分(Sharding):能够根据数据的离散属性将数据进行水平分割。例如,消费者能够根据地域不一样拆分为美国消费者数据库和欧洲消费者数据库。

将数据库从单个数据库使用分区或者sharding拆分为多个数据库是一项很是有挑战性的任务。

欢迎关注麦克叔叔每晚10点说,让咱们一块儿交流与学习。