Week 04 命题作业
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
解答:
感觉这个题目确实范围很广啊,咳咳,下面是能想到的一些技术方案以及他们能解决的问题:
1. CDN:
内容分发网络,部署在距离终端用户最近的网络服务商。
CDN本质上是一种缓存,一般缓存静态资源,如图片、文件、CSS、JS、静态网页等,对于访问频度很高的这些类型的文件,缓存在CDN可极大改善网页打开的速度。
2. 反向代理:
部署在网站的前端,这里缓存网站的静态资源,使用户请求无需转发给应用服务器就能返回给用户。
传统的代理服务器位于浏览器一侧,代理浏览器将HTTP请求发送到互联网上;
反向代理位于网站机房一侧,代理网站Web服务器接收HTTP请求。
a.反向代理服务器也具备保护网站安全的作用。
b.代理服务器可以通过配置缓存功能加速Web请求,比如用户第一次访问静态资源时,反向代理服务器可进行缓存。
(有些动态内容也可以缓存在代理服务器上,不过当动态内容变化时,需要通过内部通知机制通知反向代理服务器缓存失效。)
c.反向代理可实现负载均衡。
3. 本地缓存:
在应用服务器本地缓存着热点数据,应用程序可直接在本机内存中直接访问数据而无需访问数据库。
4. 分布式缓存:
由于大型网站数据量非常大,本地缓存不能存储过多数据,此时需要分布式缓存,将缓存存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。
5. 异步操作:
使用消息队列将调用异步化,可改善网站的扩展性。
业务之间的消息传递不是通过同步调用的,而是将一个业务操作分为多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作的。
在单一服务器内部可通过多线程共享内存队列的方式实现异步。
在分布式系统中,多个服务器集群通过分布式消息队列实现异步(分布式消息队列可看作是内存队列的分布式部署)。
用户请求的数据发送给消息队列后立即返回,再由消息队列的消费者进程(该进程通常独立部署在专门的服务器集群上)从消息队列中获取数据,异步写入数据库。
消息队列具有很好的削峰作用:通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。
6. 分布式:
网站中常用的分布式方案如下:
a.分布式应用与服务:
将分层、分割后的应用与服务模块分布式部署,除了可以改善网站性能与并发性、加快开发与发布速度、减少数据库连接资源消耗外;还可以使不同的应用复用共同的服务,便于业务功能扩展。
b.分布式静态资源:
网站静态资源如JS、CSS、图片等独立分布式部署,并采用独立的域名,即人们常说的动静分离。这样可以减轻应用服务器的负载压力;通过独立域名访问加快浏览器并发加载的速度;由负责用户体验的团队进行开发与维护,使不同技术工种术业有专攻。
c.分布式数据和存储:
大型网站有海量数据,单台计算机无法提供如此大的存储控件,所以需要进行分布式存储。存储方式除了传统的关系数据库进行分布式部署外,还可以使用各种NoSQL产品。
d.分布式计算:
除了应用、服务、实时数据这些在线业务外,还有很多后台业务要处理,比如搜索引擎的索引构建、数据仓库、的数据分析统计等。这些业务的计算规模很庞大。
目前网站普遍使用Hadoop及其MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在位置以加速计算和分布式计算。
此外还有可以支持网站线上服务器配置实时更新的分布式配置;
分布式环境下实现并发和协同的分布式锁;
支持云存储的分布式文件系统等。
7. 集群:
分布式虽然已经将分层和分割后的模块独立部署了,但对于用户访问集中的模块(比如网站首页),还需要将独立部署的服务器集群化,即多台服务器部署相同的应用构成集群,通过负载均衡对外提供服务。
使用集群可提高系统的并发能力及可用性。
可通过负载均衡进行无状态服务的失效转移:
8. 自动化:
发布过程自动化包括:
a.自动化代码管理
b.自动化测试
c.自动化安全检测
d.自动化部署
线上生产环境自动化包含:
a.自动化监控(对服务器进行心跳检测,监控其各项性能指标和应用的关键数据指标)
b.自动化报警(发现异常如超出预设阈值时,向相关人员发送报警信息)
c.自动化失效转移(将失效的服务器从集群中移除出去)
d.自动化降级(网站超出最大处理能力时,可通过拒绝部分请求及关闭不重要的服务将系统负载降至一个安全水平)
e.自动化分配资源(将空闲资源分配给重要的服务,扩大其部署规模)
9. 数据备份:
为保证服务器宕机的情况下网站依然可以继续服务,不丢失数据,需要数据冗余备份:
a.冷备份:
指定期备份数据;
不能保证数据最终一致性 (毕竟备份不是实时);
不能保证数据可用性(从备份中恢复数据需要较长时间,可能导致这段时间系统不可用)。
b.热备份:
分为异步热备方式和同步热备方式两种。
异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写
操作成功响应时,只写成功了一份,存储系统将会异步地写其他副本(这个过程有可能
会失败):
同步方式是指多份数据副本的写入操作同步完成,即应用程序收到数据服务系统的
写成功响应时,多份数据都已经写操作成功。但是当应用程序收到数据写操作失败的响
应时,可能有部分副本或者全部副本都已经写成功了(因为网络或者系统故障,无法返,
回操作成功的响应):
关系型数据库热备机制就是Master-Slave同步。
这样不仅解决数据备份问题,还有效改善数据库系统的性能。
通常使用读写分离的方法,写操作只访问Master库,读操作只访问Slave库。
10. NoSQL:
关系数据库不善于处理海量数据,NoSQL的出现弥补了这个不足。
NoSQL是非关系的、分布式的数据库设计模式,它是对关系数据库的补充,而不是替代方案!
NoSQL舍弃了关系数据库的结构化查询语言(SQL)及事务一致性保证(ACID),强化了高可用性和可伸缩性。
评论