架构师训练营 -week04- 作业 1
作业一:
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
一、互联网应用系统区别于传统应用常见问题
问题1:高并发、大流量
需要面对高并发用户,大流量访问。
Google 日均 PV 数35亿,日均 IP 访问数3亿
微信在线用户数10亿
天猫双十一活动一天交易额3000亿。
问题2:高可用
系统7×24小时不间断服务。大型互联网站的宕机事件通常会成为新闻焦点。
问题3:海量数据
需要存储、管理海量数据。
问题4:用户分布广泛,网络情况复杂
许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,有各个运营商网络互通难的问题。而中美光缆的数次故障,也让一些对国外用户依赖较大的网站不得不考虑在海外建立数据中心。
问题5:安全环境恶劣
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会遇到黑客攻击情况。2011年国内多个重要网站泄露用户密码,让普通用户也直面一次互联网安全问题。
问题6:需求快速变更,发布频繁
和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品 发布频率也是极高的。Office 的产品版本以年为单位发布,而一般大型网站的产品每周 都有新版本发布上线,至于中小型网站的发布就更频繁了,有时候一天会发布几十次。
问题7:渐进式发展
不同于传统软件产品或者企业应用系统,一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网站都是从一个小网站开始,渐进的发展起来的。
好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,有巨大背景的网站,后来发展都很惨淡。
二、常用技术方案和手段
1、分层
分层是企业应用架构中最常见的一种架构模式,将系统从横向维度上切分为几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统。在网站的发展过程中,分层架构模式对网站支持高并发向分布式方向发展至关重要,因此在网站规模还很小的时候就应该采用分层的架构,这样将来网站做大时才能有更好地应对。
其主要特征如下:
通过分层,可以更好的将一个庞大的软件系统切分成不同的部分,便于分工合作开发和维护
各层之间具有一定的独立性,只要维持调用接口不变,各层可以根据具体问题独立演化发展而不需要其他层必须做出相应调整
必须规划层次边界和接口,在开发过程中,严格遵循分层架构的约束,禁止跨层次的调用及逆向调用
2、分割
分割就是在纵向维度对软件进行切分,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,其特征如下:
一方面有助于软件的开发和维护
另一方面便于不同模块的分布式部署,提供网站的并发处理能力和功能扩展能力
3、分布式
分层和分割的一个主要目的是为了切分后的模块便于分布式部署,分布式意味着可以使用更多的计算机资源(CPU、内存、存储)完成同样的功能,其特征如下:
能够处理的并发访问和数据量更多更大,为更多的用户提供服务
分布式在解决网站高并发问题带来的问题
分布式的服务调用必须通过网络,可能对性能造成比较严重的影响
服务器越多,服务器宕机的概率也就越大,一台服务器宕机造成的服务不可用可能会导致很多应用不可访问,使网站可用性降低
保持数据一致性难,分布式事务也难以保证,对网站业务正确性和业务流程有可能造成很大影响
分布式导致网站依赖错综复杂,开发管理维护困难
常见分布式方案有:
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
分布式锁
分布式文件系统
4、集群
多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的就是提供系统的可用性。其特征有:
服务器集群有跟多服务器提供相同服务,提供更好的并发能力
当有更多用户访问的时候,只需要向集群中加入新的机器即可
当某台服务器发生故障时,负载均衡设备或系统的将请求转发中集群中的其他服务器,不影响用户使用
5、 缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。大型网站架构设计在很多方面都使用了缓存设计。其特征有:
缓存是改善软件性能的第一手段,现代 CPU 越来越快的一个重要因素就是使用了更多的缓存。
网站应用中,缓存除了可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力
网站数据库都是按照有缓存的前提进行负载能力设计的
使用缓存有两个前提条件
一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;
二是数据在某个时间段内有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性。
常见缓存设计:
CDN:内容分发网络,部署在距离终端用户最近的网络服务商,用户的网络请求总是先到达它的网络服务商哪里,在这里缓存网站的静态资源可以就近一最快的速度返回给用户;
反向代理:反向代理属于网站前端框架的一部分,部署在网站的前端,当用户请求到达网站的数据中心时,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需继续转发请求就能返回给用户;
本地缓存: 在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库;
分布式缓存:将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
6、异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接关系,那么就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦合的手段除了前面提到的分层、分割、分布等手段,还有一个重要手段是异步,就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
异步实现方式包括:
在单一服务器内部通过多线程共享内存队列的方式实现异步,处理业务操作前面的线程将输出写入队列,后面的线程从队列中读取数据进行处理
在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看做内存队列的分布式部署
使用异步方式处理业务可能对用户体验、业务流程造成影响,需要网站产品设计方面的支持。
异步的特征有:
异步架构是典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,有利于网站扩展新功能
提高系统可用性
加快网站响应速度
消除并发访问高峰
7、冗余
互联网应用需要7×24小时连续运行,但是服务器总有可能会出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可 以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。访问和负载很小的服务也必须部署至少两台服务器构成一个集群,目的是通过冗余实现服务高可用。
冗余备份方式有:
冷备份:数据库定期备份、存档保存
热备份:主从分离
灾备
8、自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网的自动化架构设计主要集中在运维方面。
常见自动化有:
发布过程自动化
自动化代码管理
自动化测试
自动化安全检测
自动化部署
自动化监控
自动化报警
自动化失效转移
自动化失效恢复
自动化分配资源
9、安全
互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式,常见的安全模式有:
通过密码和手机校验码进行身份认证;
登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;
为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;
对于常见的用于攻击网站的 XSS 攻击,SQL 注入,进行编码转换等相应处理;对于垃圾信息、敏感信息进行过滤;
对转账交易等重要操作根据交易模式和交易信息进行风险控制。
对垃圾信息、敏感信息进行过滤
评论