大型互联网应用系统的技术方案和手段
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
一.大型互联网应用系统面临的挑战和问题
高并发、大流量
需要面对高并发用户,大流量访问。
Google日均PV数35亿,日均IP访问数3亿
微信在线用户数10亿,天猫双十一活动一天交易额3000亿。
高可用
系统7x24习、时不间断服务。大型互联网站的宕机事件通常会成为新闻焦点
海量数据
需要存储、管理海量数据。
Facebook每周上传的照片数目接近10亿,百度收录的网页数目有数百亿,Google有近百万台服务器为 全球用户提供服务
用户广泛分布,网络环境复杂
许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。
在国内,有各个运营商网络互通难的问题。而中美光缆的数次故障,也让一些对国外用
户依赖较大的网站不得不考虑在海外建立数据中心。
安全环境恶劣
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会遇到黑客
攻击情况。2011年国内多个重要网站泄露用户密码,让普通用户也直面一次互联网安全
问题。
需求变更快,发布频繁
互联网产品为快速适应市场,满足用户需求,其产品发布频率也是极高的都有新版本发布上线Office的产品版本以年为单位发布至于中小型网站的发布就更频繁了而一般大型网站的产品每周有时候一天会发布几十次。
渐进式开发
一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网站都是从一个小网站开始,渐进的发展起来的。
二.大型互联网应用系统的目标
大型互联网公司实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术框架目标。
三.大型互联网应用系统的采用技术方案和手段
网站架构模式: 大型互联网公司在实践中提出了许多解决方案,以实现技术框架目标。这些解决方案又被更多网站重复使用,从而逐渐形成大型网站架构模式。
以下是一个大型互联网应用系统的架构,按照架构模式进标识
图 3 大型互联网应用系统的架构
分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,
每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完
整的系统。
目的
软件清晰的逻辑结构便于开发维护
分层结构对网站支持高并发向分布式方向发展至关重要
在网站规模还小的时候就应该采用分层的架构,这样将来网站做大时才能有更好地应对
举例
在网站的分层架构中,常见的为4层,即应用层、服务层、数据层、基础架构层。
分割
分割是在纵向方面对软件进行切分。系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低藕合的模块单元。
目的
有助于软件的开发和维护
便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力
有大量可重用的模块以便于开发新的业务
每个模块可以单独部署,业务简单,方便扩容
举例
以 图 3 大型互联网应用系统的架构为例:根据业务属性进行垂直切分,划分为A应用、B应用等
分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。
目的
不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题
举例
分布式应用和服务:将分层和分割后的应用和服务模块分布式微服务部署, 以 图 3 大型互联网应用系统的架构为例:分布式服务服务器、分布式文件服务、分布式数据库服务、分布式缓存服务
分布式静态资源:网站的静态资源如JS、CSS、Logo图片等资源独立分布式部署,并采用独立域名,即动静分离。
分布式数据和存储:大型网站需处理以P为单位的海量数据,单台计算机无法提供如此大的存储空间,此时需分布式存储。以 图 3 大型互联网应用系统的架构为例:分布式文件服务、分布式数据库服务
集群
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
目的
同一个业务部署在多台机器上,提高系统可用性
举例
以 图 3 大型互联网应用系统的架构为例:A应用、B应用采用集群加负载均衡服务器
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。
目的
缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
举例
以 图 3 大型互联网应用系统的架构为例:CDN + 反向代理、本地缓存、分布式远程缓存
异步
单一服务器内部可通过多线程共享内部队列方式实现异步,业务操作前面的线程将输出写入队列,后面的线程从队列读取数据处理。分布式系统中,多个服务器集群通过分布式消息队列实现异步。
目的
提高系统可用性
加快网站响应速度
消除并发访问高峰
举例
以 图 3 大型互联网应用系统的架构为例:A应用、B应用采用分布式消息队列实现异步
冗余
任何服务都必须部署至少两台服务器构成的一个集群。
目的
网站需要7×24小时连续运行,那么就得有相应的冗余机制,以防某台机器宕掉时无法访问,而冗余则可以通过部署至少两台服务器构成一个集群实现服务高可用。
举例
冷备份:定期备份,存档保存。
热备份:主从分离,实时同步
全球范围内部署灾备数据中心
自动化
在无人值守的情况下网站可以正常行,一切都可以自动化是网站的理想状态。
目的
通过减少人为干预,使发布过程和营业过程自动化中可有效减少故障
举例
自动化发布
自动化代码管理:代码版本控制、代码分支创建合并等过程自动化,开发工程师只要提交自己参与开发的产品代号,系统自动为其创建开发分支,后期自动合并代码。
自动化测试:代码开发完成,提交测试后,系统自动将代码部署到测试环境,启动自动化测试用例测试,向相关人员发送测试报告,向系统反馈测试结果。
自动化安全检测:安全检测工具对代码静态安全扫描及部署到安全测试环境进行安全攻击测试,评估安全性。
自动化部署:将工程代码自动部署到线上生产环境。
自动化监控
自动化报警:对线上生产环境自动化监控,对服务器心跳检测,及各项性能指标和应用程序的关键数据指标。如果发现异常、超出预设阀值,自动化向相关人员发送报警,警告故障可能发生。
自动化失效转移:检测到故障发生后,系统自动化将失效服务器从集群隔离,不再处理请求。
自动化失效恢复:待故障消除后,系统自动化重新启动服务,同步数据保证数据一致性。
自动化降级:网站遇到访问高峰,超出网站最大处理能力时,为保证整个网站安全可用,会自动化拒绝部分请求及关闭部分不重要服务将系统负载降至安全水平。
自动化分配资源:将空闲资源分配给重要服务,扩大部署规模。
安全
互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:
举例
通过密码和手机校验码进行身份认证;
登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;
对于常见的用于攻击网站的XSS攻击,SQL注入,进行编码转换等相应处理;
对于垃圾信息、敏感信息进行过滤;
对转账交易等重要操作根据交易模式和交易信息进行风险控制
以上技术方案和手段要考虑成本、团队的能力。
如果再提一下垂直伸缩
通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩性方案。
通过使用RAID(独立冗余磁盘阵列)增加吞吐能力。
通过切换到SSD(固态硬盘)改善访问速度。
通过增加内存减少操作。
通过升级网络接口或者增加网络接口提高网络吞吐能力。
更新服务器使用更多更强CPU。
评论