目录
01架构到底是指什么?
“架构”到底指什么?
涉及到的关键概念分析:
区别与联系 |
|
---|---|
系统与子系统 |
系统 系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。 关键点:关联、规则、能力
子系统 |
模块与组件 |
举例:学生信息管理系统。从逻辑角度拆分,分为“登录注册模块”、“个人信息模块”、“个人成绩模块”。从物理角度拆分,可分为Nginx、WebServer、MySQL |
框架与架构 |
|
重新定义架构:
架构:软件架构指软件系统的顶层架构。
02架构设计的历史背景
20 世纪 60 年代第一次软件危机引出了“结构化编程”,创造了“模块”概念;20 世纪 80 年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;到了 20 世纪 90年代“软件架构”开始流行,创造了“组件”概念。我们可以看到,“模块”“对象”“组件”本质上都是对达到一定规模的软件进行拆分,差别只是在于随着软件的复杂度不断增加,拆分的粒度越来越粗,拆分的层次越来越高。
03架构设计的目的
架构设计的目的:架构设计的主要目的是为了解决软件系统复杂度带来的问题
04复杂度来源:高性能
单台计算机内部为了高性能带来的复杂度
-
单机如何高性能?多进程、多线程、进程间通信、多线程并发
-
如何选择?Nginx可以多进程也可多线程、Redis采用单进程、Memchache采用多线程,都实现了高性能
多台计算机集群为了高性能带来的复杂度
多台机器配合达到高性能的方式有
任务分配:(业务比较简单的情况)每台机器都可以处理完整的业务,不同任务分配到不同机器上执行
任务分解:(业务很复杂)将复杂的业务系统,拆分为多个简单但需要配合的业务系统
05复杂度来源:高可用
高可用方案的本质
高可用方案本质都是通过“冗余”实现高可用
-
一台不够两台
-
一个机房可能断点,那就两个机房
-
一台通道可能故障,那就两条,两条不够就三条(移动、联通、电信)
高性能与高可用的区别
高可用的“冗余”解决方案,单纯从形式上来看,和之前讲的高性能是一样的,都是通过增加更多机器来达到目的,但其实本质上是有根本区别的:高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。
冗余”带来的复杂性
一、计算高可用
特点:无论从哪台机器上进行计算,同样的算法和输入,产出都是一样的。
复杂度分析举例:双机架构
1)任务分配器的选择,性能、成本、可维护性、可用性等因素
2)任务分配器和计算服务器交互。什么连接方式、如何进行连接管理(连接建立、连