架构师训练营 -week04 学习总结

用户头像
GunShotPanda
关注
发布于: 2020 年 07 月 01 日
架构师训练营 -week04 学习总结

互联网系统面临的挑战

高并发,大流量

即是需要面对高并发用户,大流量访问。如:

  • Google日均PV数35亿,日均IP访问数3亿

  • 微信在线用户数10亿

  • 天猫双十一活动一天交易额3000亿

高可用

系统7*24小时不间断服务。大型互联网站的宕机事件通常会成为新闻焦点

海量数据

需要存储、管理海量数据。如:

  • Facebook每周上传的照片数目接近10亿

  • 百度收录的网页数目数百亿

  • Google有近百万台服务器为全球用户提供服务

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

许多大型互联网都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,有各个运营商网络互通难的问题。而中美光缆的数次故障,也让一些对国外用户依赖较大的网站不得不考虑在海外建立数据中心。

安全环境恶劣

由于互联网的开放性,使得互联网网站更容易受到攻击,大型网站几乎每天都会遇到黑客攻击的情况。2011年国内多个重要网站泄露用户密码,让普通用户也直面一次互联网安全问题。

需求快速变更,发布频繁

和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率也是极高的。Office的产品版本以年为单位发布,而一般大型网站的产品每周都有新版本发布上线,至于中小型网站的发布就更频繁了,有时候一天会发布十几次。

渐进式发展

不同于传统软件产品或者企业应用系统,一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网站都是从一个小网站开始,渐进地发展起来的。

  • Facebook是伯克扎格与同学在哈佛大学的宿舍里开发的

  • Google的第一台服务器部署在斯坦福大学的实验室里

  • 阿里巴巴则是马云家的客厅里诞生的

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

垂直伸缩



通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩性方案。

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

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

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

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

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

垂直伸缩的缺点
  • 达到某个程度后,增加计算能力需要更多的花费

  • 垂直伸缩有物理极限

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



水平伸缩



是指通过增加服务器来提升计算能力的一类架构方法

水平伸缩与垂直伸缩的比较



在规模不大时,使用垂直伸缩更为适合。因为维护成本和开发成本更低。



互联网架构演化

第零阶段:最简单的互联网应用架构





第一阶段:应用服务与数据服务分离





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





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





第四阶段:数据库读写分离





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





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





第七阶段:使用 NoSQL 和搜索引擎





第八阶段:业务拆分





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





互联网架构模式

架构模式

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

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

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

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

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

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

      

分层

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

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

整的系统。

分割

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

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

分布式

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

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

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

 

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

a.分布式应用与服务:

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

 

b.分布式静态资源:

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

           

c.分布式数据和存储:

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

 

d.分布式计算:

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

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

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

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

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

 

集群

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

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

 

缓存

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

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

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

网站常用的缓存方案有:

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

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

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

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

 

使用缓存的前提条件:

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

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

      

异步

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

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

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

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

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

       使用异步的好处:

-提高系统可用性

-加快网站响应速度

-消除并发访问高峰

冗余

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

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

 

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

 

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

 

自动化

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

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

发布过程自动化包括:

a.自动化代码管理

b.自动化测试

c.自动化安全检测

d.自动化部署

 

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

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

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

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

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

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

 

安全

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

了许多模式:

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

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

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

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

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

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

 

互联网系统核心架构要素

如何衡量一个系统的架构设计

高性能

性能是互联网的一个重要指标,除非是没得选择,否则用户无法忍受一个响应缓慢的应用。一个打开缓慢应用会导致严重的用户流失,很多时候系统性能问题是系统架构升级优化的触发器。可以说性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能会带来的性能问题。



重要的衡量指标:

响应时间、TPS、系统性能计数器        

浏览器优化:

浏览器缓存、页面压缩、合理布局页面、减少Cookie传输、CDN、反向代理缓存热点文件

应用服务器优化:本地缓存、分布式缓存、异步操作消息队列等待后续处理,当前请求直接返回、集群部署

代码优化:使用多线程、改善内存管理

数据库优化:索引、缓存、SQL优化、NoSQL

高可用

统高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上相互备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。

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

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

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

可伸缩

衡量伸缩性的主要标准:

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

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

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

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

可扩展

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

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

要受牵连进行改动。

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

 

安全性

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

的应对策略。

 

发布于: 2020 年 07 月 01 日 阅读数: 107
用户头像

GunShotPanda

关注

JAVA开发 2019.09.03 加入

This is a letter for myself, for my future, for the past, for the better man of (health) Just got to do you and nobody else

评论

发布
暂无评论
架构师训练营 -week04 学习总结