系统设计一方面需要实现整个系统的功能性属性,另一方面也需要兼顾系统的非功能属性。比如:性能(比如一秒处理的数据量、单位时间内可接收的请求、响应一个请求需要的最长时间等等)、可维护性(后期是否容易做功能变更)、可用性(单位时间内系统可以提供正常服务的时间)等等。要兼顾好这些非功能属性,结合笔者多年的系统设计经历,有以下四点战术可供参考:

一、冗余

即一份复制多份。通常说的主从库复制、多节点部署都本质上都是一种冗余的手段。将一份数据或进程部署到多个节点上,通过统一的接入层将请求分发到后端多份相同的节点上,达到空间换时间的目的。

冗余可以带来性能上的提升,因为服务的节点多了,查询与相应的速度自然加快了。

但是,冗余也带来了新问题——各节点之间如何保证数据的一致性。这其实又引入了分布式系统中经典的CAP问题,结论为:在网络故障的前提下,只能在一致性与可用性之间选其一。关于CAP问题,可以百度搜索分布式系统CAP,这里就不展开讨论。

二、拆分

拆分包括横向拆分与纵向拆分,既包括数据的拆分也包括服务的拆分。

一般来说,横向分层,纵向分模块。

所谓的横向分层,是指对于一个系统来说,将系统看成一块蛋糕,从上至下划分系统,可以将系统划分成多个层次。一般我们可以划分为接入层、应用层、业务层、存储层等。

纵向分模块,是指将系统看成一个个水平连接的积木,沿着Y轴一刀刀切下去之后,系统会被分为一个个独立的模块。

对于数据而言,其实也可以横向划分或者纵向划分。比如常见的分表:横向划分就是将数据按照一定的hash算法分到不同表中,每个表的结构一样。

纵向划分就是将表的结构拆开,容易变的与不容易变的字段分在不同表中;变长的与定长的分在不同表中。每个表的结构不一样。

三、缓存

使用缓存的最基本假设是:离业务越近的数据读起来越快。

按照这个推论,可以得出:内存>硬盘>网络。

因为,对于数据库来说,我们总会将经常用到的数据(数据库的磁盘上)缓存到业务机器上(内存)。

对于BS或CS架构的应用来说,我们也会将css、js或者一些用户数据缓存到用户的浏览器或者设备端,以提高系统性能。

四、异步计算

异步是相对于同步而言,即对于任何一个请求会马上响应,但是这个响应不代表是否成功,只代表服务收到请求。而真正的业务会通过一种消息队列机制转入异步执行,整个业务看起来是没有在任何环节有等待的流程。

对于非阻塞的场景,在引入异步计算之后,也可以提供系统的吞吐量。

但是,随之也会带来一个问题:异步处理完成的任务如何通知请求方? 一般的处理方式是轮询或者引入回调机制。

以上就是系统设计中常用的四个战术,他们在性能、可维护性、可用性上都可以带来收益,但是同时也会引入一致性、用户体验等问题。如何使用这些战术,还是要看实际的业务场景。

系统设计中的四个常用战术相关推荐

  1. 后台CS代码中创建四种常用的SL动画效果

    http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html后台CS代码中创建四种常用的动画效果[附带源码实例] 转载于: ...

  2. 盘点自动化设备中的四种常用模组

    自动化设备在行业中已经逐渐取代人工了,而作为自动化必备传动配件的直线模组在市场上的需求量也越来越大.直线模组的种类也越来越多样化,但是常用的直线模组其实就四种,分别是滚珠丝杆模组.同步带模组.齿轮齿条 ...

  3. 消费类无人机图传系统设计中的一些关键

    导语:本次公开课从技术的角度详细介绍了图传系统设计中的: 1 个核心问题,2 个设计红线,4 个基本设计参数,8 个设计重点,以及 1 个中肯的设计建议. 自从大疆新品 Mavic 的关键特性之一:& ...

  4. 20145223《信息安全系统设计》 实验四 驱动程序设计

    20145223杨梦云<信息安全系统设计>实验四实验报告 一.配置开发环境(同实验一) 二.阅读和理解源代码 进入/arm2410cl/exp/drivers/01_demo,使用vi编辑 ...

  5. 效率系列(四) VS常用快捷键

    写在前面的话 :最近博主整理了一些关于 Visual Studio 2017 的常用快捷键,希望可以帮助到大家更高效更愉快的打码 1.打开 快捷键 描述 Ctrl + Shift + N 新建项目 C ...

  6. 四个常用的Java连接池

    C3P0.BoneCP.DBCP.Proxool是四个常用的Java连接池,根据环境需求和项目要求选取适当的线程池完成数据库相关操作. C3P0 是一个开放源代码的JDBC连接池,它在lib目录中与H ...

  7. Intent中的四个重要属性——Action、Data、Category、Extras

    Intent中的四个重要属性--Action.Data.Category.Extras 支持原文:点击链接进入原文阅读-->http://www.cnblogs.com/wisekingokok ...

  8. db2 删除schema中所有表_常用SQL系列之(六):删除方式、数据库、表及索引元信息查询等...

    本系统为@牛旦教育IT课堂在微头条上的内容, 为便于查阅,特辑录于此,都是常用SQL基本用法.. 前两篇连接: (一):SQL点滴(查询篇):数据库基础查询案例实战 (二):SQL点滴(排序篇):数据 ...

  9. xshell 6 连接debian系统拒绝了密码_Xshell中操作Linux的常用命令,你知道几个?

    作为IT人员,想必都知道Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.Xshell作为专业的终端模拟器,可以用 ...

最新文章

  1. 【力扣网练习题】有效的括号
  2. 曲线拟合最小二乘法优缺点_最小二乘法的优缺点
  3. [Android] ubuntu 下不识别 Android 设备
  4. wamp支持win10吗?怎么设置?
  5. Go 语言编程 — gormigrate GORM 的数据库迁移助手
  6. gis 大屏_gis大屏可视化应用技术方案_gis大屏可视化应用技术_gis大屏可视化应用 - 帆软...
  7. 转Oracle Data Guard 理论知识3-自动裂缝检测和解决
  8. HTTP_响应消息_响应行_状态码
  9. Delphi 按Esc快捷键退出程序的简单方法
  10. Android之网络编程利用PHP操作MySql插入数据(四)
  11. python redis list_Python redis list列表操作
  12. STM32库中自定义的数据类型
  13. 2021最新15个App跨平台开发框架
  14. JAVA刺客信条大革命_黑色沙漠单机版
  15. 计算机编程直播,微信小程序直播电脑端OBS推流直播教程
  16. 怎么将两段视频合并在一起?快速操作技巧
  17. 设计师必备的设计类导航网站
  18. NAT与NAT穿透(二)
  19. 高地址和低地址、高字节低字节、大小端模式(及如何互换),存储顺序(!!)
  20. 由浅入深,66条JavaScript面试知识点

热门文章

  1. 做自媒体想要快速涨粉,并不是很难,抓住粉丝痛点至关重要
  2. http协议数据传输方式
  3. Linux格式化磁盘
  4. interrupt用法C语言,interrupt
  5. 滨海广场景观设计理念总结
  6. 第一款能运行Android11 的RK3399开发板 tinkerboard2
  7. 【转载】buildroot教程
  8. 设计Youtube或Netflix
  9. houdini入门学习教程01
  10. linux下MQTT介绍和开发