第四周作业
典型的互联网应用系统架构方案基本原则有高性能、高可用、可伸缩、可扩展以及安全。
高性能
高性能的表现为,更快的响应速度,更高的吞吐量。结合一般业务请求的处理路径,可以提高性能的方法有垂直伸缩、水平伸缩两个方向。
1、垂直伸缩
垂直伸缩是通过提高单点性能从而提升系统整体性能的解决方案。一般提升的是系统瓶颈所在目标结点,如:数据库服务器、应用服务器等。此种方案的优势是改造简单,效果显著,在系统早起几乎能达到线性的提升效率。缺点是:超过某个程度后,需要投入的成本会大大超过收益;受到物理硬件限制;受到操作系统、应用软件本身的限制。
2、水平伸缩
水平伸缩通过增加服务器数量扩充系统性能。当垂直扩展达到物理瓶颈时,我们只能通过水平扩展提升性能。水平扩展是互联网公司最常用的手段,但也对系统架构提出了更高的要求,小公司还是得审慎采用
水平伸缩包含两方面内容:复制和拆分。
复制是通过集群的方式,利用多台服务器线性提升系统处理能力。并且如果软件系统设计足够精巧,理论上可以通过无限复制的方式无线扩展系统能力。
拆分是通过把系统功能拆分成更小的高内聚低耦合模块并单独部署,精简单一服务器上处理的业务。从而使拆分出来的模块获得更多的服务器资源以提高性能,从而使得系统整体性能得以提升。拆分出来的模块又继续可以通过垂直伸缩、水平伸缩的方式再度进行优化。
基于前面的分析,垂直伸缩提升空间有限,我们此处重要讨论水平伸缩的实践方法。结合当前一般互联网系统的架构,解决高性能问题的一般手段有如下几种:
应用、数据拆分,独立部署
利用缓存,提高数据获取速度,包括本地缓存、分布式远程缓存。
集群部署,线性提高系统性能。
数据库读写分离。通过读写分离,把原来一台数据库服务器处理的工作拆分到多台服务器上,主库单独负责写请求,其他从库负责读请求。
使用反向代理和 CDN 加速网站响应。大多数互联网应用请求读多写少,而且读请求往往伴随大量的静态内容如图片、脚本等。通过反向代理和 CDN,请求在到达应用服务器之前就可以被响应,大大提高网站响应速度,降低应用服务器压力。
多样化的技术手段,如使用分布式文件系统、分布式数据库、NoSql 数据库、搜索引擎等。将系统的某些功能使用独立的第三方技术单独实现,可以获得性能大幅提升。
高可用
“高可用性”通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
高可用的解决方向有两个:冗余和降级
冗余即通过多台、多机房部署,提升系统可用性。
降级则需要结合业务,在核心业务上做降级处理。包括自身的降级和依赖方的降级。
高扩展
高扩展是指当需要新增功能或模块式,对现有系统改动少或者无改动。不仅仅是开发阶段,还包括测试、部署等阶段,都要实现高扩展特性。一个客观规律是,影响范围越小,改动越容易,此影响范围不仅包括软件系统,也包括参与的人。依据此,对系统做微服务化拆分,将高内聚的功能集中到小的范围,则就可以在此小范围内实现快速开发、测试、上线。
评论