写点什么

架构师训练营第四周学习总结

用户头像
fenix
关注
发布于: 2020 年 06 月 30 日

本周第一节讲解了系统架构的概述,第二节课讲解了几个系统架构的实现实例。

互联网系统所面对的问题

与二十多年前的传统的软件系统相比:

1.高并发、大流量:需要面对高并发用户,大流量访问

2.高可用:系统需要提供7×24小时不间断服务

3.海量数据:需要存储和管理海量数据

4.用户分布广泛、网络环境复杂:许多大型互联网都是为全球用户提供服务,用户分布广泛,各地网络情况千差万别

5.安全环境恶劣:由于互联网的开放性,更容易受到攻击

6.需求快速变更,发布频繁

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

应对这些挑战的两个技术处理方向

1.垂直伸缩

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

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

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

  3. 通过增加内存减少I/O操作。

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

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

垂直伸缩的缺点:

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

  2. 垂直伸缩有物理极限。

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

2.水平伸缩

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

水平伸缩被认为是伸缩性的圣杯,水平伸缩可以克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题。

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

互联网架构的演进

第0阶段:单体架构

第1阶段:应用数据分离

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

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

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

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

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

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

第8阶段:业务拆分

第9阶段:微服务和中台化

第10阶段:大数据和智能化

互联网架构模式

1.分层:将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。

2.分割:纵向切分。将不同的功能和服务分割开来,包装成高内聚低耦合的模块单元。有助于软件的开发和维护,也便于分布式部署,提高网站的并发处理能力和功能扩展能力。

3.分布式:将不同模块部署在不同的服务器上,通过rpc协同工作。

4.集群:多台服务器部署相同应用构成一个集群,通过负载均衡共同对外提供服务。

5.异步:将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。通过消息队列、实现加快响应速度、削峰和提供系统可用性的功能。

6.冗余:保证服务器在出现故障的时候可以继续服务,数据不会丢失,就需要一定程度的服务器冗余、数据冗余备份。

7.自动化:在无人值守的情况下网站可以正常运行。目前互联网的自动化架构设计主要集中在运维方面。

8.安全:通过密码和手机验证码进行身份认证;对网络通讯和敏感数据加密;使用验证码验证非机器人程序的滥用网络资源的操作;对于XSS、SQL注入进行编码转换;对于垃圾信息、敏感信息过滤;对转账交易等重要操作根据特点进行风险控制等。

互联网架构核心要素

1.高性能

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

也正是因为性能问题几乎无处不再,所以优化网站性能的手段也非常多,从用户端到数据库,从代码到机房部署,影响用户请求的所有环节都可以进行性能优化。

2.高可用

因为互联网分布式系统使用的服务器硬件通常是普通的商用服务器,这些服务器的设计目标并不保证高可用,也就是说,很有可能会出现服务器硬件故障,也就是俗称的服务器宕机。大型互联网系统通常都会有上万台服务器,每天都必定会有一些服务器宕机,因此系统高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。

系统高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。

3.可伸缩

大型互联网应用通过集群的方式将多台服务器组成一个整体共同提供服务。所谓伸缩性是指不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

衡量架构伸缩性的主要标准就是是否可以用多台服务器构成集群,是否融入能够以向集群中添加信的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。

4.可扩展

不同于其他架构要素主要关注非功能性需求,扩展性架构直接关注系统的功能需求。互联网应用快速发展,功能不断扩展,如何设计系统的架构使其能够快速响应需求变化,是系统可扩展架构主要的目的。

衡量系统架构扩展性好坏的主要标准就是在系统增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。不同产品之间是否很少耦合,一个产品改动对其他产品无影响,其他产品和功能不需要受牵连进行改动。

可扩展性架构的主要手段是事件驱动架构和分布式服务。

5.安全

互联网是开放的,任何人在任何地方都可以访问系统。系统的安全架构就是保护系统不受恶意访问和攻击,保护网站的重要数据不被窃取。

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

互联网架构技术一览

1.前端架构

App 及 Web 开发技术

浏览器及HTTP优化技术

CDN

动静分离

图片服务

反向代理

DNS

2.网关及应用层架构

网关架构

负载均衡

动态页面静态化

业务拆分

3.服务层架构

微服务架构

分布式消息队列

分布式缓存

分布式一致性(锁)服务

4.存储层架构

分布式文件

分布式关系数据库

NoSQL数据库

5.后台架构

大数据平台

搜索引擎

推荐引擎

数据仓库

6.运维与安全

数据采集与展示

数据监控与报警

攻击与防护

数据加密与解密



用户头像

fenix

关注

还未添加个人签名 2018.03.02 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第四周学习总结