写点什么

Week 04 学习总结

用户头像
卧石漾溪
关注
发布于: 2020 年 06 月 30 日

 

本周主要介绍了互联网架构的演化过程;互联网系统面临的挑战;互联网机构模式以及互联网系统核心架构要素等内容。

 

【好的设计不是生搬硬套,而是对问题深刻理解之上的创造与创新,看是否对问题和需求真正理解与把握】

 

1       互联网架构演化过程

1.1     最简单的互联网应用架构





1.2     应用服务与数据服务分离





1.3     使用缓存改善系统性能





1.4     使用应用服务器集群改善系统的并发处理能力





1.5     数据库读写分离





1.6     使用反向代理和CDN加速网站响应





1.7     使用分布式文件系统和分布式数据库系统





1.8     使用 NoSQL 和搜索引擎





1.9     业务拆分





1.10   微服务及中台化





1.11   大数据与智能化

今后很多应都用会围绕着大数据和智能化来展开。

 

2       互联网系统面临的挑战

高并发,大流量访问;

高可用,系统7 x 24小时不间断服务;

海量数据需要存储和管理;

用户分布广泛,网络情况复杂;

安全环境恶劣;

需求快速变更,发布频繁;

渐进式发展:

       不同于传统软件产品或者企业应用系统,一开始就规划好全部的功能和非功能需求,几

乎所有的大型互联网站都是从一个小网站开始,渐进的发展起来的。

       好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,

有巨大背景的网站,后来发展都很惨淡。

 

3       互联网架构模式

每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这

样,你就能一次又一次的使用该方案而不必做重复工作。

模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。

互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸

缩、安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网

软件系统的重要组成部分。

      

3.1     分层

分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,

每个部分负责部分相对比较单一 的职责,然后通过上层对下层依赖和调用组成 一个完

整的系统。

3.2     分割

如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。

系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

3.3     分布式

对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将

不同模块部署在不同的服务器上,通过远程调用协同工作。

分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大。

 

网站中常用的分布式方案如下:

a.分布式应用与服务:

将分层、分割后的应用与服务模块分布式部署,除了可以改善网站性能与并发性、加快开发与发布速度、减少数据库连接资源消耗外;还可以使不同的应用复用共同的服务,便于业务功能扩展。

 

     b.分布式静态资源:

网站静态资源如JS、CSS、图片等独立分布式部署,并采用独立的域名,即人们常说的动静分离。这样可以减轻应用服务器的负载压力;通过独立域名访问加快浏览器并发加载的速度;由负责用户体验的团队进行开发与维护,使不同技术工种术业有专攻。

           

     c.分布式数据和存储:

大型网站有海量数据,单台计算机无法提供如此大的存储控件,所以需要进行分布式存储。存储方式除了传统的关系数据库进行分布式部署外还可以使用各种NoSQL产品。

 

     d.分布式计算:

除了应用、服务、实时数据这些在线业务外,还有很多后台业务要处理,比如搜索引擎的索引构建、数据仓库、的数据分析统计等。这些业务的计算规模很庞大。

目前网站普遍使用Hadoop及其MapReduce分布式计算框架进行此类批处理计算,其特点是移动计算而不是移动数据,将计算程序分发到数据所在位置以加速计算和分布式计算。

此外还有可以支持网站线上服务器配置实时更新的分布式配置

分布式环境下实现并发和协同的分布式锁

支持云存储的分布式文件系统等。

 

3.4     集群

分布式虽然已经将分层和分割后的模块独立部署了,但对于用户访问几种的模块(比如网站首页),还需要将独立部署的服务器集群化,即多台服务器部署相同的应用构成集群,通过负载均衡对外提供服务。

使用集群可提高系统的并发能力及可用性

 

3.5     缓存

缓存就是将数据存放在距离计算最近的位置以加快处理速度。

缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。

使用缓存除了可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力。

网站常用的缓存方案有:

a.CDN:内容分发网络,部署在距离终端用户最近的网络服务商。这里缓存网站的一些静态资源(较少变化的数据),如视频网站和门户网站会将用户访问量大的热点内容缓存在CND。

b.反向代理:部署在网站的前端,这里缓存网站的静态资源,使用户请求无需转发给应用服务器就能返回给用户。

c.本地缓存:在应用服务器本地缓存着热点数据,应用程序可直接在本机内存中直接访问数据而无需访问数据库。

d.分布式缓存:由于大型网站数据量非常大,本地缓存不能存储过多数据,此时需要分布式缓存,将缓存存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据。

 

使用缓存的前提条件:

1.数据访问热点不均衡,某些数据会被频繁访问,则这些数据应该存放在缓存中。

2.数据在某个时间段内有效,不会很快过期。

      

3.6     异步

业务之间的消息传递不是通过同步调用的,而是将一个业务操作分为多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作的。

在单一服务器内部可通过多线程共享内存队列的方式实现异步。

在分布式系统中,多个服务器集群通过分布式消息队列实现异步(分布式消息队列可看

作是内存队列的分布式部署)。

异步架构使典型的生产者消费者模式,两者之间不存在直接调用,这对网站扩展新功能提供便利。

       使用异步的好处:

-提高系统可用性

-加快网站响应速度

-消除并发访问高峰

3.7     冗余

       为保证服务器宕机的情况下网站依然可以继续服务,不丢失数据,需要服务器的冗余运行,数据冗余备份

a.服务器可以通过集群搭建来实现服务高可用。

 

b.数据库除了定期备份冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离实时同步实现热备份

 

c.更进一步,还可以在全球范围内部署灾备数据中心,对整个数据中心进行备份,网站程序和数据实时同步到多个灾备数据中心。

 

3.8     自动化

在无人值守的情况下网站可以正常运行,-切都可以自动化是网站的理想状态。目前互

联网的自动化架构设计主要集中在运维方面。

发布过程自动化包括:

a.自动化代码管理

b.自动化测试

c.自动化安全检测

d.自动化部署

 

线上生产环境自动化包含:

a.自动化监控(对服务器进行心跳检测,监控其各项性能指标和应用的关键数据指标)

b.自动化报警(发现异常如超出预设阈值时,向相关人员发送报警信息)

c.自动化失效转移(将失效的服务器从集群中移除出去)

d.自动化降级(网站超出最大处理能力时,可通过拒绝部分请求及关闭不重要的服务将系统负载降至一个安全水平)

e.自动化分配资源(将空闲资源分配给重要的服务,扩大其部署规模)

 

3.9     安全

互联网的开放特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累

了许多模式:

-通过密码和手机校验码进行身份认证;

-登录、交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;

-为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;

-对于常见的用于攻击网站的XSS攻击,SQL注入,进行编码转换等相应处理;

-对于垃圾信息、敏感信息进行过滤;

-对转账交易等重要操作根据交易模式和交易信息进行风险控制。

 

4       互联网系统核心架构要素

4.1     高性能

重要的衡量指标:

            响应时间、

            TPS、

            系统性能计数器

           

浏览器优化:

浏览器缓存、

页面压缩、

合理布局页面、

减少Cookie传输、

CDN、

反向代理缓存热点文件

 

                     应用服务器优化:

                            本地缓存、

                            分布式缓存、

                            异步操作消息队列等待后续处理,当前请求直接返回、

                            集群部署

                    

                     代码优化:

                            使用多线程、             

                            改善内存管理

                    

                     数据库优化:

                            索引、

                            缓存、

                            SQL优化、

                            NoSQL

4.2     高可用

网站高可用的主要手段是冗余

a.应用服务器:集群搭建    

 

b.存储服务器:数据备份

4.3     可伸缩

衡量伸缩性的主要标准:

是否可以用多台服务器构建集群,

是否容易向集群中添加新的服务器,

加入新的服务器后是否可以提供和原来一样的服务,

集群中可容纳的总的服务器数量是否有限制。

4.4     可扩展

衡量系统架构扩展性好坏的主要标准就是在系统增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。

不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需

要受牵连进行改动。

主要手段是事件驱动架构和分布式服务。

 

4.5     安全性

衡量系统安全架构的标准就是针对现存和潜在的各种攻击与窃密手段,是否有可靠

的应对策略。

 

5       应对高并发的两个技术方向

5.1     垂直伸缩

通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常

被认为是最简单的短期伸缩性方案:

-通过使用RAID (独立冗余磁盘阵列)增加I/O 吞吐能力。

-通过切换到SSD (固态硬盘)改善I/O 访问速度。

-通过增加内存减少/O操作

-通过升级网络接口或者增加网络接口提高网络吞吐能力。

-更新服务器使用更多处理器或者更多超线程。

 



缺点:

       -达到某个程度后,增加计算能力需要的更多的花费。

-垂直伸缩有物理极限。

-操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点。





5.2     水平伸缩

水平伸缩是指通过增加服务器提升计算能力的一类架构方法。

水平伸缩被认为是伸缩性的圣杯,水平伸缩可以克服垂直伸缩带来的单位计算成本随计

算能力增加而迅速飙升的问题。

另外,水平伸缩总是可以增加更多服务器,这样,就不会像垂直伸缩那样遭遇到单台服

务器的极限。







6       互联网架构技术一览





6.1     前端架构

App及Web开发技术

浏览器及HTTP优化技术

CDN

动静分离

图片服务

反向代理

DNS

 

6.2     网关及应用层架构

网关架构

负载均衡

动态页面静态化

业务拆分

6.3     服务层架构

微服务框架

分布式消息队列

分布式缓存

分布式一致性(锁)服务

6.4     存储层架构

分布式文件

分布式关系数据库

NoSQL数据库

6.5     后台架构

大数据平台

搜索引擎

推荐引擎

数据仓库

6.6     运维与安全

数据采集与展示

数据监控与报警

攻击与防护

数据加密与解密

 

用户头像

卧石漾溪

关注

还未添加个人签名 2020.05.04 加入

还未添加个人简介

评论

发布
暂无评论
Week 04 学习总结