架构师训练营第四周 - 系统架构综述
系统类型演变
当前,各行各业都在互联网化,互联网+的口号已经喊了有些年头了。
互联网行业风起云涌,互联网系统支撑着行业发展。互联网服务的人群是社会中所有人,只要你有个手机,可联网,那么互联网就为你提供服务。以前的系统,是企业或者事业等单位内部使用,面对的用户群是特定的,且不用7*24小时服务。比如,银行柜台服务系统,在全国范围内满打满算也就10万+终端用户,这个数字是所有用户群体,它的同时并发数也就几百,而且只在上班时间内提供服务,下班后,系统就可以是维护状态。
互联网系统由于其开放性,用户群和规模的不确定性,使用时间的随意性,那么其必然是一个高性能、高可用、可扩展的系统。互联网系统天然面临着高并发、大流量、不宕机的挑战。这些挑战,要求系统必须使用不同的技术手段来应对。
应对高并发,有两个技术发展方向
垂直扩展
垂直扩展的意思是通过升级硬件来提高系统响应能力。换句话来说就是靠增强个体实力。
内存不足,增加内存;CPU不够,增加CPU个数;带宽不够,升级带宽;等等。这种方法不需要投入开发成本,只需要硬件投入,而且时间成本低,硬件更换完毕,就齐活了。看起来,很好,对不对,但是,垂直伸缩有其天花板。
达到某个程度后,增加计算能力需要的单位花费更多
硬件有其物理极限
操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩
水平伸缩是通过增加服务器提升计算能力的一类架构方法。被认为是伸缩性的圣杯,可以克服垂直伸缩带来的单位计算成本随计算能力迅速飙升的问题。水平伸缩通过增加服务器,打破单台服务器计算极限。
水平伸缩就是通过增加硬件,来提高计算能力、存储能力。有点像是人海战术,一个不行,我就一群。但是,这个一群,可不只是数量,一群内部是要有管理的,有组织,有纪律,才能打赢战争。
所以,水平伸缩技术含量更高。比如,增加一台机器,要让这台机器提供服务,需要把请求路由进来,就是说需要加一个负载均衡器。负载均衡的算法就有轮询、权重、哈希、一致性哈希等。技术含量高,实现起来,就要花费更长的开发时间,带来人力资源成本、时间成本等的投入。
互联网系统架构演化
我们都知道好的系统是演化出来的,而不是设计出来的。那么就让我们来看下互联网系统架构的演化过程。
单服务器系统
应用数据分离
使用缓存改善系统性能(远程缓存、本地缓存)
应用服务集群改善系统并发处理能力
数据库读写分离
使用反向代理和CDN加速系统响应
使用分布式文件系统和分布式数据库系统
使用NoSQL和搜索引擎
业务拆分
微服务及中台化
大数据及智能化
以上过程,反映出软件在提供高性能、高可用、可伸缩、可扩展的系统时,所做出的应对。
演进过程不需要严格按照上述步骤来。比如,现今很多系统,上来就直接是微服务了,NoSQL直接上,使用NoSQL的无模式表结构更好的应对变化的业务数据存储。
互联网架构模式
模式描述了不断重复出现的问题及其解决方案的核心。模式的可用性,在于问题与场景的不断重复性。
互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网软件系统的重要组成部分。
分层
横向水平拆分,每层负责单一职责,通过上层对下层的依赖和调用组成一个完整的系统
分割
分割相对于分层,是纵向进行软件切分,一般是按照业务维度进行切分,DDD是一个切分分析工具。系统切分成高内聚低耦合模块单元,一方面有助于软件的开发和维护,另一方面便于不同模块的部署
分布式
分层和分割后便于分布式部署,通过远程调用协同工作。分布式投入更多的计算机,意味着CPU、内存、存储资源也就越多。能够处理的并发访问和数据量也就越大
集群
一些访问压力大的模块,如网站首页,可以通过集群的方式,通过负载均衡器对外提供服务
缓存
缓存在现代系统中,无处不在。本地缓存、远程缓存、CDN、反向代理。缓存是改善软件性能的第一手段
异步
异步可降低软件耦合,将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方式进行写作。异步作用有提高系统可用性,加快响应速度,消除并发高峰
冗余
互联网系统7*24小时运行,系统运行于服务器之上。单台服务器宕机的概率很小,但是互联网系统一般需要的服务器数量很大,几百上千俯拾皆是。这种情况下,服务器宕机就是一个必然事件了。要想保证在服务器宕机的情况下依然可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份
自动化
理想情况下,系统一切都可自动化。目前互联网的自动化架构主要集中在运维方面
安全
互联网开放特性决定了其安全方面面临巨大挑战,系统在安全架构方面积累了很多经验。
密码和手机号校验码进行身份认证;网络通讯加密,敏感信息存储加密;验证码进行人类识别;特殊字符编码转化;垃圾、敏感信息过滤;转账等操作依据交易模式和交易信息进行风险控制。
案例研究总结
淘宝、微博、wiki官网、宅米科技等公司的架构设计,体现了架构模式的运用以及架构的演进。
架构不需要追求高大上、华丽的术语、最新的技术。架构是面对系统应对的挑战而设计。所以,首先应该找到挑战,即核心问题。做一个善于发现问题的人。问题找出后,使用我们的架构模式,解决问题。
系统架构的处理能力要具备一定的冗余度。比如,并发量实际预估为10万,那么设计时,可以按照20万的并发量来设计。
实际业务发展过程中,根据每日、每周、每月的访问数据来估测未来的业务发展,进而做好架构升级的规划。
不变的是变化,让我们遵循着演化的视角,使用系统架构演化规律来迭代设计系统架构。
评论