系统与子系统
一个系统的架构,只包括顶层这一个层级的架构,而不包括下属子系统层级的架构。所以微信架构,就是指微信系统这个层级的架构。当然,微信的子系统,比如支付系统,也有它自己的架构,同样只包括顶层。
模块与组件
业务--模块
技术--组件
框架与架构
框架关注的是“规范”,架构关注的是“结构”。
软件架构指软件系统的顶层(Rank)结构,它定义了系统由哪些角色(Role)组成,角色之间的关系(Relation)和运作规则(Rule)。
架构设计的目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题。
高性能
软件系统中高性能带来的复杂度主要体现在两方面,一方面是单台计算机内部为了高性能带来的复杂度;另一方面是多台计算机集群为了高性能带来的复杂度。
单机
进程和线程
有了多线程后,操作系统调度的最小单位就变成了线程,而进程变成了操作系统分配资源的最小单位。
集群
任务分配
分配算法:轮询、权重、负载
存储系统、运算系统、缓存系统都可以按照任务分配的方式来搭建架构
任务拆解
简单的系统更加容易做到高性能
可以针对单个任务进行扩展
高可用
高性能增加机器目的在于“扩展”处理性能;高可用增加机器目的在于“冗余”处理单元。
CAP理论
一致性、可用性、分区容错性
决策方式
独裁式
协商式
主备决策
民主式
民主式决策指的是多个独立的个体通过投票的方式来进行状态决策。
可扩展性
方案一
提炼出变化层和稳定层
方案二
提炼出抽象层和实现层
核心思想是封装变化
复杂度来源
低成本、安全、规模
低成本
nosql数据库、全文搜索引擎、hadoop(解决传统文件系统无法对海量数据存储和计算的问题)
安全
功能安全
常见的 XSS 攻击、CSRF 攻击、SQL 注入、Windows 漏洞、密码破解等
架构安全
互联网系统的架构安全目前并没有太好的设计手段来实现,更多地是依靠运营商或者云服务商强大的带宽和流量清洗的能力,较少自己来设计和实现。
规模
规模带来复杂度的主要原因就是“量变引起质变”,当数量超过一定的阈值后,复杂度会发生质的变化。
架构设计的三个原则
合适优于业界领先、简单优于复杂、演化优于一步到位
合适原则
简单原则
结构的复杂性
逻辑的复杂性