本文章的内容是根据书籍《从零开始学架构》整理的资料,供作者以及读者查阅。

1. 架构的定义

软件架构指软件系统的顶层架构。详细阐述如下:

a. “系统由一群关联个体组成”,个体分别是:系统、子系统、模块、组件等。架构需要明确系统包含哪些“个体”。

b. 系统中的个体需要“按照某种规则”运作,架构需要明确个体运作和协作的规则。

2. 架构设计的目的

2.1. 软件架构的历史背景

(1)机器语言:其是最早的开发语言,直接使用0和1来表示机器可以识别的指令和数据。主要问题:太难写、太难读、太难改。

(2)汇编语言:为了解决机器语言的问题,汇编语言应运而生。汇编语言虽然解决了机器语言读写复杂的问题,但本质还是面向机器的,因为需要我们精确了解计算底层的知识才可编写汇编语言。

(3)高级语言:为了解决汇编语言的问题,计算机前辈开始又设计了多个高级语言,其可以让程序员不需要关注机器底层的低级结构和逻辑,只需关注具体的问题和业务即可。优势:通过编译处理,高级语言可以被编译成适合不同CPU指令的机器语言。

2.2. 软件危机

(1)20世纪60年代第一次出现软件危机引入了“结构化编程”,创建了“模块”概念;

(2)20世纪80年代第二次软件危机引出了“面向对象编程”,创造了“对象”概念;

(3)20世纪90年代“软件架构”开始流行,创建了“组件”该鸟。

2.3.架构设计真正目的

从软件开发历史可以看到,整个软件技术发展的历史,其实就是一部与“复杂度”斗争的历史,架构出现也不例外。架构设计主要目的就是为了解决复杂度带来的问题。

2.4.复杂度来源

2.4.1. 高性能

软件系统高性能带来的复杂度主要体现在:a. 单台计算机内部为了高性能带来的复杂度;b. 多台计算机集群为了高性能带来的复杂  度。

操作系统和性能相关的就是进程和线程,最早的计算机是没有操作系统的,只有输入、计算和输出功能,用户输入一指令,计算机完成操作。这样的处理性能是很低效的。

为了解决手工操作的低效性,批处理系统应运而生。批处理就是先把要执行的指令记下来(写在纸带、磁带、磁盘等),形成指令清单(任务),然后交给计算机执行。批处理操作系统负责读取任务进行处理,无需等待人工操作,这样性能就有了很大提升。但是具有明显缺点:计算机一次只能执行一个任务,例如现需从I/O设备读取大量数据,在进行I/O操作时,CPU其实是空闲的,而这个空闲时间是可以进行其他计算操作。

为了进一步提升性能,人们发明了“进程”,用进程对应一个任务,每个任务都有独立的内存空间,进程间互不相关,由操作系统进行调度。由于此时还没有多核和多线程的概念,为了达到多进程并行执行的目的,采取分时操作(即把CPU的时间分成很多片段,每片段只能执行某进程的指令)。

多进程虽然要求每个任务都有独立的空间,进程互不相关。但是在用户角度来看,如果进程在运行过程中可以进行通信会使任务设计更加灵活高效。例如现存在两个任务A和B,两任务不能相互通信,A只能将结果写入存储,B读取进行处理,这样不仅任务低效,而且任务设计更加复杂。为了解决此问题,进程间通信的各种方式被设计出来,如:管道、消息队列、信号量、共享存储等。

多进程可以使任务并行处理,但是进程内部只能串行处理,而进程内部之间的子任务有时也需要并行处理。为了解决此问题,人们又发明了线程(进程内部的子任务)。为了保证数据的完成性,又发明了互斥锁机制。有了多线程以后,操作系统的调度的最小单位是线程,资源分配的最小单位是进程。

操作系统发展到现在,如果我们需要完成一个高性能的软件系统,需考虑如下技术点:多进程、多线程、进程间通信、多线程并发等。

2.4.2. 高可用

高可用是指“系统无中断的执行其功能”的能力,本质是通过“冗余”来实现高可用,即是通过增加更多机器来达到效果。

2.4.3. 可扩展性

可扩展性是指系统为了应对将来需求变化而提供的一种扩展能力,当有新的需求出现时,系统无需或者少量修改就可以支持,无须整个系统重建或重构。

2.4.4. 低成本

2.4.2. 安全以及规模

从零开始学架构——架构基础相关推荐

  1. 从零开始学 Python 之基础篇

    从零开始学 Python 之基础篇 前言 大家好,这里是「痴海」从零开始学习 Python 系列教程.此文首发于「痴海」公众号,欢迎大家去关注.学习一门语言最好的办法,就是教懂别人.在这公众号,我会从 ...

  2. 【从零开始学Skynet】基础篇(九):调试控制台服务

    Skynet自带了一个调试控制台服务debug_console,启动它之后,可以查看节点的内部状态. 1.启用调试控制台 (1)在skynet/examples目录下新建main_console.lu ...

  3. 从零开始学Android架构(一)——什么是设计模式?

    前言 不少人会觉得架构师是一个高大上的岗位,只有技术顶尖的人才能胜任,但其实它并没有这么高大上,大部分的架构师,都只是开发经验非常丰富,并且热爱学习,善于知识迁移和总结.应用的架构是一件非常成熟,有非 ...

  4. 从零开始学SEO的基础概念

    SEO的意思是搜索引擎优化,它一般由两部分组成:站内优化和站外优化.站内优化主要是指通过网站技术.网站内容结构.域名.服务器和代码等操作,促使用户的网站能够在百度搜索引擎当中获得更好的排名:而站外优化 ...

  5. 【从零开始学Skynet】基础篇(五):简易聊天室

            在游戏中各玩家之间都可以进行聊天之类的交互,在这一篇中,我们就来实现一个简易的聊天室功能,这在上一篇代码的 基础上很容易就能实现. 1.功能需求  客户端发送一条消息,经由服务端转发, ...

  6. 【从零开始学Skynet】基础篇(四):网络模块常用API

            游戏服务端要处理客户端请求,作为服务端引擎,网络编程也是Skynet的核心功能. 1.学习网络模块   skynet.socket 模块提供了网络编程的 API,常用的API如下表所示 ...

  7. 【从零开始学c++】——基础语法的详细讲解

    目录 前言 1.输入和输出 2.命名空间 2.1命名空间的定义 3.如何使用std中的函数 4.缺省参数 4.1 概念 4.2缺省参数分类 全缺省参数 半缺省参数 5.函数重载 5.1 函数重载概念 ...

  8. 【从零开始学Skynet】基础篇(二):了解Skynet

    1.节点和服务 在下图所示的服务端系统中,每个Skynet进程(操作系统进程)都称为一个节点,每个节点都可以开启数千个Lua服务,每个服务都是一个Actor.不同节点可以部署在不同的物理机上,提供分布 ...

  9. 【从零开始学Skynet】基础篇(三):服务模块常用API

    1.服务模块 Skynet提供了开启服务和发送消息的API,必须要先掌握它们.列出了Skynet中8个最重要的API,PingPong程序会用到它们. Lua API 说明 newservice(na ...

  10. 从零开始学jQuery(1)--基础知识

    别问我为什么突然跳到jquery了-我只能说-前面一点刚看的没怎么理解-就这里比较好理解 jQuery jQuery可能很多人都有一点印象,是个比较好用的查询方式,利用jQuery可以比较容易的查询到 ...

最新文章

  1. pdf批量添加图章_关于添加图章,过来人有哪些实用经验
  2. 轻松 [2007年4月22日]
  3. 在SharePoint Foundation 2010中显示来自其他站点的列表
  4. 计算机专业有python课程吗-作为计算机专业学生,最应该学习的课程前五位是什么?...
  5. (数论)51NOD 1135 原根
  6. 性能优化18招提速宝典
  7. 武汉国家光电实验室计算机考研,2018年华中科技大学武汉国家光电实验室408计算机学科专业基础综合之计算机操作系统考研基础五套测试题...
  8. ffplay分析(从启动到读取数据线程插入到字幕、音频、视频解码前的队列操作)
  9. 剑指offer 56 - 1.数组中数字出现的次数
  10. MSDN Visual系列:在MOSS中创建一个BDC实体
  11. Lifecycle使用与分析-基础
  12. matlab 请验证三角等式,[转载]matlab
  13. Django------多表操作
  14. 芝柏 bmw oracle,魅力十足的潜水腕表
  15. PAT 1079 Total Sales of Supply Chain[比较]
  16. c语言注释符的作用有哪两种,C语言编程的注释符号是?
  17. 《数据科学概论》教材介绍
  18. 微信群二维码七天失效如何解决?有没有办法创建一个长期有效的微信群?
  19. html如何调用less,LESS
  20. 【总结】NPU/CPU/GPU 傻傻分不清?

热门文章

  1. java.lang.NullPointterException:
  2. 机器学习笔记(3)——使用聚类分析算法对文本分类(分类数k未知)
  3. shell 中字符串变量处理
  4. 关于DCDC选型OVP的经验
  5. 利用计算机教学的好处,计算机基础课程的重要性
  6. 软件许可证管理应该怎么做?
  7. 异构数据源DDL转换的两种方式
  8. DRM框架(vkms)分析(3)----connector->func connector->helper_private的使用
  9. Windows下的pixhawk环境搭建
  10. Additive smoothing