第四周总结
本周主要粗略的过了一下互联网架构的起源,演化,以及相关的主流技术,为后面深入讲解相关的技术点打下基础。
一、什么是互联网架构
课程的一开始,我们给软件架构下了一个定义:软件架构指软件系统的顶层结构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
那为什么在这里需要单独指出是互联网的架构设计,它与传统的软件架构有哪些不同,首先要从互联网系统面临的挑战说起。
传统的软件系统相对来说用户数量较少,处理的信息量也比较少,所以相对来说都比较简单。比如说建站非常多的 LAMP 架构,基于 SSH 的企业开发,但是随着互联网与移动互联网的兴起,在面对海量用户时传统的软件架构已经显得力不从心,主要问题有:
高并发、大流量
高可用
海量数据
用户分布广泛、网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
所以互联网架构是为了解决这些问题而演进出来的软件架构。
二、应对高并发挑战的两个技术方向
垂直伸缩
通过升级硬件和网络吞吐能力
优点:简单
缺点:
(1)达到某个程度后,增加计算能力需要更多的花费
(2)垂直伸缩有物理极限
(3)操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩
通过增加服务器提升计算能力的一类架构方法
优点:
(1)它可以克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题
(2)总时可以增加更多的服务器,不会想垂直伸缩那样遭遇到单台服务器的极限
缺点:
系统的复杂度就上来了,需要用到一些负载均衡、分布式协调 等技术。
从图中可以看出,过了某个平衡点后,垂直伸缩的成本直线上升,能提供的计算能力也越来越少。在实际的扩容中,一般也是先垂直伸缩,再水平伸缩。
三、互联网架构演化
3.1 最简单的互联网应用架构
3.2 应用数据分离
3.3 使用缓存改善系统性能
3.4 使用应用服务器集群改善系统的并发处理能力
3.5 数据库读写分离
3.6 使用反向代理和 CDN 加速网站响应
3.7 使用分布式文件系统和分布式数据库系统
3.8 使用 NoSQL 和搜索引擎
3.9 业务拆分
3.10 微服务及中台化
3.11 大数据与智能化
五、互联网架构模式
分层
分割
分布式
集群
缓存
异步
冗余
自动化
安全
六、互联网架构设计核心要素
高性能
高可用
可伸缩
可扩展
安全
七、互联网架构技术一览
前端架构
APP 及 Web 开发技术
浏览器及 Http 优化技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构
网关架构
负载均衡
动态页面静态化
业务拆分
服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构
分布式文件
分布式关系数据库
NoSQL 数据库
后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
八、一些案例
维基百科
淘宝、微博、宅米的架构演进
九、总结
从分享几个案例总可以看出,互联网架构是随着公司的业务不断的演进的。
1.初创期
业务简单,为了快速的验证市场,业务对技术就一个要求:“快”,能买就买,有开源的就用开源的。比如早起的淘宝,微博。
2.发展期
随着用户的不断增长,业务复杂度的不断提升,系统面临着越来越多的问题。数据库压力大,接口响应慢,开发效率低,部署困难 等问题。
这个时候需要对系统进行一些优化与重构:
提升单台机器的性能(CPU、内存、磁盘 等)
多台机器集群部署
业务拆分、SOA、微服务架构(服务治理、metrics 监控、调用链监控、服务降级、熔断、限流 等)
数据库分片(分库、分表),读写分离
NoSQL
引入缓存(本地缓存、分布式缓存)
异步(消息队列)
3 .成熟期
业务已经趋于稳定的状态,主要任务是提升用户体验,提升系统的性能与稳定性。
CDN
多机房部署
平台化
大数据平台、推荐系统 等
架构设计的原则:合适原则、简单原则、演化原则
核心还是要识别出系统的复杂度,然后才能设计出合适的架构方案,比如维基百科的架构设计。
评论