天天看点

架构设计

架构设计的目的:

为了解决软件系统复杂度带来的问题。

复杂度的来源:

一:高性能

1.单机复杂度

需要考虑多进程、多线程、进程间通信、多线程并发等技术

2.集群的复杂度

(1)任务分配:比如Nginx负载均衡。Nginx也可以是集群。

(2)任务分解:业务本身越来越复杂,需要进行任务分解。

二:高可用

1.计算高可用

2.存储高可用

三:高扩展性

1.正确预测变化

2.完美封装变化

四:低成本

五:安全

1.功能安全

2.架构安全

互联网系统的架构安全目前并没有太好的设计手段来实现,更多地是依靠运营商或者云服务商强大的带宽和流量清洗的能力,较少自己来设计和实现。

六:规模

规模带来复杂度的主要原因就是“量变引起质变”,比如功能、数据,当数量超过一定的阈值后,复杂度会发生质的变化。

架构设计的三个原则:

第一:合适,优于业界领先

第二:简单,优于复杂

第三:演化,优于一步到位

架构设计流程:

第一:识别复杂度

架构设计的本质目的是为了解决软件系统的复杂性,所以在设计架构时,首先就要分析系统的复杂性。只有正确分析出了系统的复杂性,后续的架构设计方案才不会偏离方向。将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。

第二:设计备选方案

第三:评估和选择备选方案

列出我们需要关注的质量属性点,然后分别从这些质量属性的维度去评估每个方案,再综合挑选适合当时情况的最优方案。

第四:详细方案设计

高性能数据库集群:读写分离

读写分离的基本实现是:

数据库服务器搭建主从集群,一主一从、一主多从都可以。

数据库主机负责读写操作,从机只负责读操作。

数据库主机通过复制将数据同步到从机,每台数据库服务器都存储了所有的业务数据。

业务服务器将写操作发给数据库主机,将读操作发给数据库从机。

有两个细节点将引入设计复杂度:主从复制延迟和分配机制。

主从复制延迟:

解决主从复制延迟有几种常见的方法:

写操作后的读操作指定发给数据库主服务器

读从机失败后再读一次主机

关键业务读写操作全部指向主机,非关键业务采用读写分离

分配机制:

将读写操作区分开来,然后访问不同的数据库服务器,一般有两种方式:程序代码封装和中间件封装。

继续阅读