架构 1 期第四周作业 1- 大型互联网系统技术梳理
概述
按照角色区分,一个互联网系统的用户可以分为两类:用户、开发者。用户希望系统稳定可靠,开发者还希望系统能高扩展。从开发者的角度,我们可以提炼出好的互联网系统的一般标准:高性能、高可用、高扩展,这也是系统建设、优化的目标。高性能、高可用,意味着能给用户提供可靠的服务,高扩展性意味着系统的复杂度必须要控制,必须符合高内聚低耦合的设计原则。以下针对此三个要求,列举一般互联网系统的解决方案。
高性能
高性能的表现为,更快的响应速度,更高的吞吐量。结合一般业务请求的处理路径,可以提高性能的方法有垂直伸缩、水平伸缩两个方向。
1、垂直伸缩
垂直伸缩是通过提高单点性能从而提升系统整体性能的解决方案。一般提升的是系统瓶颈所在目标结点,如:数据库服务器、应用服务器等。此种方案的优势是改造简单,效果显著,在系统早起几乎能达到线性的提升效率。缺点是:超过某个程度后,需要投入的成本会大大超过收益;受到物理硬件限制;受到操作系统、应用软件本身的限制。
2、水平伸缩
水平伸缩包含两方面内容:复制和拆分。
复制是通过集群的方式,利用多台服务器线性提升系统处理能力。并且如果软件系统设计足够精巧,理论上可以通过无限复制的方式无线扩展系统能力。
拆分是通过把系统功能拆分成更小的高内聚低耦合模块并单独部署,精简单一服务器上处理的业务。从而使拆分出来的模块获得更多的服务器资源以提高性能,从而使得系统整体性能得以提升。拆分出来的模块又继续可以通过垂直伸缩、水平伸缩的方式再度进行优化。
基于前面的分析,垂直伸缩提升空间有限,我们此处重要讨论水平伸缩的实践方法。结合当前一般互联网系统的架构,解决高性能问题的一般手段有如下几种:
应用、数据拆分,独立部署
利用缓存,提高数据获取速度,包括本地缓存、分布式远程缓存。
集群部署,线性提高系统性能。
数据库读写分离。通过读写分离,把原来一台数据库服务器处理的工作拆分到多台服务器上,主库单独负责写请求,其他从库负责读请求。
使用反向代理和CDN加速网站响应。大多数互联网应用请求读多写少,而且读请求往往伴随大量的静态内容如图片、脚本等。通过反向代理和CDN,请求在到达应用服务器之前就可以被响应,大大提高网站响应速度,降低应用服务器压力。
多样化的技术手段,如使用分布式文件系统、分布式数据库、NoSql数据库、搜索引擎等。将系统的某些功能使用独立的第三方技术单独实现,可以获得性能大幅提升。
高可用
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
意外总会发生,我们必须考虑到服务器宕机时,如何保证系统仍然可用,或者部分可用。
高可用的解决方向有两个:冗余和降级
冗余即通过多台、多机房部署,提升系统可用性。
降级则需要结合业务,在核心业务上做降级处理。包括自身的降级和依赖方的降级。
高扩展
高扩展是指当需要新增功能或模块式,对现有系统改动少或者无改动。不仅仅是开发阶段,还包括测试、部署等阶段,都要实现高扩展特性。一个客观规律是,影响范围越小,改动越容易,此影响范围不仅包括软件系统,也包括参与的人。依据此,对系统做微服务化拆分,将高内聚的功能集中到小的范围,则就可以在此小范围内实现快速开发、测试、上线。
当某个微服务不断发展,边界不断扩张,就可能进化成中台。
版权声明: 本文为 InfoQ 作者【道长】的原创文章。
原文链接:【http://xie.infoq.cn/article/ff813a9ae9929be0cc532da31】。未经作者许可,禁止转载。
评论