从零开始学架构 - 架构基础
概念
系统与子系统
系统:指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。(关联、规则、能力)
子系统也是由一群关联的个体所组成的系统,多半是更大系统中的一部分。
例如微信本身是一个系统,同时又包含聊天、支持、朋友圈等子系统。
朋友圈这个系统又包含动态、评论、点赞等子系统。
模块与组件
软件模块:是一套一致且互相有紧密关联的软件组织,它包含程序和数据结构两部分。
软件组件:定义为自包含的、可编程、可重用的、与语言无关的软件单元,软件组件可以很容易地被用于组装应用程序。
例如学生信息管理系统,从逻辑角度拆分,可以分为登陆注册模块、个人信息模块、个人成绩模块;从物理角度可以拆分成nginx、web服务器、MySQL.
- 从逻辑角度,拆分系统得到的就是模块
- 从物理角度,拆分系统得到的就是组件
- 划分模块是为了职责分离,划分组件为了单元复用。
框架与架构
软件框架:为了实现某个业界标准或完成特定基本任务的软件组织规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。
软件架构:是指软件系统的基础结构,创造这些基础结构的准则,以及对这些准则的描述。
(软件架构指软件系统的顶层结构)
架构设计的目的:为了解决复杂度带来的问题。
复杂度来源
高性能
单机的复杂度
- 考虑多进程、多线程、进程间通信、多线程并发等。
集群的复杂度
任务分配
- 一个任务分配器多个业务服务器,逐渐演变到多个任务分配器和多个业务服务器。
任务分解
- 将复杂的业务系统拆分成小而简单的多个系统配合的业务系统 - 任务分解提升性能的原因 - 简单的系统更容易做到高性能 - 可以针对单个任务进行扩展,也并且系统拆分越细越好,因为过多的子系统,用户一次访问需要多个迭代地调用,才能得到响应结果。
高可用
通过“冗余”来实现高可用。
计算高可用
存储高可用
状态决策高可用
- 独裁式:仅存在一个决策者,其他都是上报者。 - 协商式:两个独立的个体通过交流信息,然后根据规则进行决策。 - 民主式:多个独立的个体通过投票的方式进行状态决策。
可扩展性
为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统不需要或仅需要少量修改就可以支持,无需整个系统重构或重建。
- 正确预测变化
- 完美封装变化
低成本
只有创新才能达到低成本目标
例子
- NoSQL(Redis,Memcache等)的出现是为了解决关系型数据库无法应对高并发访问带来的访问压力。 - 全文搜索引擎(Sphinx、Elasticsearch、Solr)的出现是为了解决关系型数据库like搜索的低效问题。 - Hadoop的出现时为了解决传统文件系统无法应对海量数据存储和计算的问题。
安全
功能安全
- 常见的XSS攻击、CSRF攻击、SQL注入、Windows漏洞、密码破解等,本质上是因为系统存在漏洞,才让黑客有机可乘。
架构安全
主要依靠防火墙,为隔离网络
- DDos 分布式拒绝服务攻击(英文意思是Distributed Denial of Service,简称DDoS)是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。由于攻击的发出点是分布在不同地方的,这类攻击称为分布式拒绝服务攻击,其中的攻击者可以有多个。
规模
- 功能越来越多,导致系统复杂度指数级上升
- 数据越来越多,系统复杂度发生质变