系统架构学习笔记

一、系统技术挑战与方案
互联网系统的挑战:
高并发、大流量:面对高并发用户和大流量访问
高可用:系统7X24小时不间断服务
海量数据:需要存储和管理海量数据
用户分布广泛:有可能对全球用户提供服务,在国内或海外需要建立多数据中心
系统安全:由于互联网的开放性,使得互联网容易受到攻击
产品版本迭代更新频繁:为了快速适应市场,满足用户需求,产品发布频率会很高
几乎所有大型互联网网站都是从一个小网站逐渐发展起来的
应对高并发挑战的两个技术方向:
垂直伸缩:利用增强单一服务器的功能或计算能力来提升系统处理能力。通过升级硬件和网络吞吐能力可以实现垂直伸缩
通过使用RAID(独立冗余磁盘阵列)增加I/O吞吐能力
通过切换到SSD(固态硬盘)改善I/O访问速度
通过增加内存减少I/O操作
通过升级网络接口或者增加网络接口提高网络吞吐能力
更新服务器使用更多处理器或者更多超线程
垂直伸缩缺陷:
达到某个程度后,增加计算能力需要更多的花费
垂直伸缩有物理极限
操作系统的设计或应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩:通过增加服务器提升计算能力的一类架构方法
二、分布式架构演化
最简单的互联网应用架构。应用系统、文件系统和数据库都部署在同一台服务器上

演化的第一阶段:应用数据分离。应用系统、文件系统和数据库分别部署在不同服务器上

演化的第二阶段:使用缓存改善系统性能

演化的第三阶段:使用应用服务器集群改善系统的并发处理能力

演化的第四个阶段:数据库读写分离

演化的第五个阶段:使用反向代理和CDN加速网站响应

演化的第六个阶段:使用分布式文件系统和分布式数据库

演化的第七个阶段:使用NoSQL和搜索引擎

演化的第八个阶段:业务拆分

演化的第九个阶段:微服务及中台化

演化的第十个阶段:大数据与智能化

三、架构模式与要素
架构模式:模式的关键在于其可重复性,问题与场景的可重复性带来解决方案的可重复使用。互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决方案。
分层:企业应用中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。不同层可以分别部署在不同服务器上进行分布式部署,如视图层、应用层、服务层、基础设施层和存储层等
分割:如果说分层是将软件横向进行切分,那么分割就是对软件进行纵向切分。系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力
分布式:对于大型网站,分层和分割的一个主要目的就是为了切分后的模块便于分布式部署。分布式意味着解决同样的问题可以使用更多的计算机、CPU、内存等资源,能够处理的并发访问和数据量就越大
集群:分布式虽然将功能模块进行了独立部署,但用户访问集中的模块,还需要将独立部署的服务集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务
缓存:将数据存放在距离计算机最近的位置以加快处理速度
异步:计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接关系,就越少被彼此影响,越可以独立发展。大型网站中,系统解耦的手段除了分层、分割和分布手段,还有就是异步,就是将业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
提供系统可用性
加快网站响应速度
消除并发访问高峰
冗余:互联网应用需要7X24小时连续运行,但是服务总有可能宕机,为了保证数据不丢失就需要一定程度的服务冗余运行,数据冗余备份
自动化:无人值守情况下保证网站正常运行,目前主要集中在运维方面
安全:互联网的开放性使其面对巨大安全挑战,网站安全架构积累了许多模式
通过密码和手机校验码进行身份认证
登录、交易等操作需要对网络通讯进行加密
网站服务器上存储的敏感数据如用户信息等也进行加密处理
为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别
对于常见的用于攻击网站的XSS攻击,SQL注入,进行编码转换等相应处理
对于垃圾信息、敏感信息进行过滤
对转账交易等重要操作根据交易模式和交易信息进行风险控制
互联网架构核心要素
高性能:性能是互联网的一个重要指标。影响用户请求的所有环节都可以进行性能优化,如从用户端到数据库,从代码到机房部署都可以进行性能优化
高可用:高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。系统高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上相互备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失
可伸缩:伸缩性是指通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。衡量架构伸缩性的主要标准就是,是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器,加入新的服务器是否可以提供和原来的服务器无差别的服务,集群中可容纳的总的服务器数量是否有限制
可扩展:互联网应用快速发展,功能不断扩展,需要设计出能够快速响应需求变化的系统架构。衡量系统扩展性好坏的主要标准就是在系统新加业务产品或功能时,不需要或很少改动既有业务功能就可以上线新产品。不同产品之间耦合低,一个产品的改动对其他产品无影响,其他产品和功能不需要受到牵连而进行改动。可扩展的主要手段是事件驱动架构和分布式服务
安全:互联网是开放的,任何人在任何地方都可以访问系统。系统安全架构就是保护系统不受恶意访问和攻击,保护网站的重要数据不被窃取。衡量系统安全架构的标准就是针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略
互联网架构总览

前端架构
App及Web开发技术
浏览器及HTTP优化技术
CDN,内容分发网络
动静分离,以缓存静态内容
图片服务
反向代理
DNS,域名解析
网关及应用层架构
网关架构,包含用户请求的安全认证、身份识别、负载均衡等
负载均衡
动态页面静态化
业务拆分
服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构
分布式文件
分布式关系数据库
NoSQL数据库
后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
三、案例:维基百科技术架构

GeoDNS:基于地理位置的DNS服务器,可以根据用户请求的域名解析成IP地址,找到最近的数据中心IP地址返给用户,完成请求响应,加快访问速度
LVS( Linux Virtual Server ):Linux虚拟服务器实现负载均衡
Squid:主要用于缓存前端网页
Lighttpd:用于缓存图片的文件服务器
Memcached:数据缓存服务器
Search(Lucene):基于Lucene开发的一个搜索引擎服务器
Invalidation notification:用于接收应用服务器发来的页面缓存失效指令,然后发给Squid清除缓存
版权声明: 本文为 InfoQ 作者【胡家鹏】的原创文章。
原文链接:【http://xie.infoq.cn/article/6cd0dfb262d417020c0941785】。未经作者许可,禁止转载。
评论