软件系统架构与开发环境
Evan_Gu
专注大数据可视化和可视分析相关的理论、方法与技术,探索行业中最佳实践与应用。
展开
-
第一章 系统架构与软件工程
声明:本文为作者阅读《软件系统架构与开发环境》后摘录的笔记。 1 软件系统的流程要素1.1 系统工程概要 钱学森于1978年给出的定义“系统工程是组织管理的技术。把极其复杂的研究对象称为系统,即由相互作用和相互依赖的组成部分结合成具有特定功能的有机整体,而这个系统本身又是其从属的一个更大系统的组成部分。系统工程则是组织管理这种系统的规划、研究、开发、设计、制造原创 2015-01-27 18:52:22 · 1793 阅读 · 0 评论 -
微服务框架---中后台框架
微服务框架微服务定义:一种架构风格,将单体应用划分成一组小的服务,服务之间相互协作,实现业务功能;每个服务运行在独立的进程中,服务间采用轻量级的通信机制协作(通常是HTTP/JSON)服务围绕业务能力进行构建,并且能够通过自动化机制独立地部署很少有集中式的服务管理,每个服务可以使用不同的语言开发,使用不同的存储技术。 优点 缺点 强模块化边界 分布式原创 2018-02-04 15:23:43 · 3356 阅读 · 0 评论 -
【系统架构师】软件架构设计——2需求与质量属性
软件架构设计——需求与质量软件的属性包括功能属性和质量属性,但是,软件架构重点关注的是质量属性。因为,在大量可能的结构中,可以使用不同的结构来实现同样的功能性,即功能性在很大程度上是独立于结构的,架构设计师面临决策(对结构的选择),而功能性所关心的是它如何与其他质量属性进行交互,以及它如何限制其他质量属性。2 质量软件质量特性主要包括: 1.功能性(适合性、准确性、互操作性、依从...原创 2018-04-12 11:22:43 · 3265 阅读 · 0 评论 -
【分布式系统】两段式提交2PC
2PC(two-phase commit protocol) 在事务过程,数据库和计算网络,两阶段提交协议,是一原子提交协议类型ACP(atomic commitment protocol). 它是一个分布式算法,用于协调分布式原子事务是否需要“提交”或“取消”。无论系统中出现何种失败(进程、网络节点、通讯),该协议都会成功。两阶段提交具体方案,在多个服务中,一个服务节点作为协调器Coor...原创 2018-04-27 10:03:27 · 1229 阅读 · 0 评论 -
中间件术语
前言最近跟同事谈到中间件技术,突然发现,不知道如何定义中间件,于是找到了国标下述内容根据国标/推荐 GB/T 33847-2017 描述信息技术 中间件术语Information technology—Middleware terminology中间件(middleware) 位于系统软件之上,用于支持分布式应用软件,连接不同软件实体的支持软件。事务处理中间件(transaction...原创 2019-01-31 15:40:08 · 1153 阅读 · 0 评论 -
【微服务架构】微服务简介
微服务简介(MicroServices)微服务是一种架构风格,一个或多个小的微服务组成一个复杂、庞大的软件应用。每个微服务集中在完成一个较小业务能力的任务。这些微服务可以用任意语言开发。Martin Fowler’s 定义的微服务,微服务用于组成复杂的应用,微服务够小,独立、进程可替代、微服务之间使用轻量级的API, 并且微服务不依赖统一的开发语言更多信息参考:Martin Fowler的论...原创 2019-04-25 21:09:56 · 350 阅读 · 0 评论 -
【微服务架构】创建微服务
1 创建微服务1.1 定义服务采用领域驱动设计原则在领域驱动设计中,一个domain表示一个特定的知识领域或活动。一个model代表领域某个重要方面的抽象,用于理解领域的变化。这个模型用于构建解决方案,跨团队交流。Bounded Context允许领域被分为多个独立的子系统。每个Bounded Context可以拥有自己的模型来表示Domain中的概念。将领域元素转换为服务应用和服务结...原创 2019-04-26 18:14:18 · 708 阅读 · 0 评论 -
【微服务架构】3 服务注册与发现
服务注册与发现微服务被设计成能够容易水平扩展,需要一种方法来解决多个服务实例如何定位,并且对多个服务的调用如何负载均衡。服务定位包括以下三个部分内容:1.服务注册2.服务调用3.API网关服务注册服务注册是一个持久化的存储,用于记录当前可用的微服务列表,以及访问他们的路由信息。微服务之间通信需要注册服务,主要因为以下几个原因:1.注册当一个服务成功的部署后,微服务需要通过服务注册进...原创 2019-04-27 18:07:19 · 486 阅读 · 0 评论 -
【微服务架构】4 微服务间通信
4 微服务间通信在分布式系统中,服务内部的通信很重要的。组成应用的微服务需要一起无缝的工作,向客户端提供服务。不同服务之间的通信有两种形式,同步和异步调用。4.1 同步和异步同步通信,即请求后立马获得响应。异步通信,是一种消息,不需要响应。高度分布式系统中使用异步事件或消息就是强有力的应用场景。对于任何一种调用风格,开放的API需要提供文档说明。事件或消息负载也需要提供文档说明。事件订阅...原创 2019-04-28 20:31:18 · 922 阅读 · 1 评论 -
【微服务架构】7 微服务测试
7 测试微服务应用在建造的时候应该考虑到测试。好的测试能够让代码更加友好,正向影响持续提交流程。根据应用组件的生命周期,可以分为以下几类测试:单服务测试由分离的团队实行测试临时环境在临时环境执行测试,微服务组成一个特别的应用部署到一个临时环境中,用于测试。生产环境运行在生产环境的测试测试应该作为构建(build)、发行版(release)、运行(run)流程中自动执行的部分。...原创 2019-05-04 20:17:59 · 1912 阅读 · 0 评论 -
【微服务架构】5 数据处理
5 数据处理5.1 微服务中数据特征定义微服务中的存储数据有一种方法,即从上到下方法。有业务级开始设计数据模型。如何定义数据、如何处理数据、如何与其他微服务的数据存储进行共享。领域驱动设计实体根据领域驱动设计,我们将会有以下几类对象:实体 Entity一个不是由它的属性进行定义的对象,而是根据线程定义的。Value Object一个对象包含属性,但是没有概念的定义,可以被认为是不...原创 2019-04-29 21:54:04 · 602 阅读 · 0 评论 -
【微服务体系】6 应用安全
6 应用安全安全作为应用重要部分,必须要考虑。本章讨论在云原生的微服务架构下的安全要求。6.1 微服务架构安全微服务架构动态的本质,改变了安全的方式。安全与如何定义应用或服务边界相关。如下图所示,表示单块应用和微服务应用的请求流程图。单块应用和微服务应用两者最大的区别,单块应用的组成是固定的,而微服务的组成经常发生变化。微服务独立更新。安全边界永远不够。如何以一种有机的方式保护这种快速变...原创 2019-04-30 16:57:50 · 594 阅读 · 0 评论 -
【微服务架构】 8 部署与配置
8 从开发环境到生产环境本节讨论如何构建微服务、部署微服务。通过这节内容,促进开发环境到生产环境的平滑移动:一个微服务必须独立部署一个新版本的微服务应该在一分钟内部署完毕,而不是一个小时一个微服务应该具有容错能力,能够避免雪崩式的失败一个微服务可以不改变代码就部署到不同目标环境微服务架构需要很好的自动部署工具,帮助管理部署、测试和提升服务跨目标环境。本章主要包括以下几个主题:...原创 2019-05-18 22:10:01 · 1230 阅读 · 0 评论 -
【系统架构师】软件架构设计——1 软件架构概念与模型
软件架构设计软件架构是软件抽象发展到一定阶段的产物,从编程的角度,可以清晰地看到软件抽象层次和表达工具的发展历史。软件或计算机系统的软件架构是该系统的一个(或多个)结构,而结构由软件元素、元素的外部可见属性及它们之间的关系组成。1 软件架构软件架构有一下6个特点: 1. 架构是对系统的抽象,它通过描述元素、元素的外部可见属性及元素之间的关系来反映这种抽象。因此,仅与内部具体实原创 2018-01-28 13:14:28 · 3724 阅读 · 0 评论 -
【系统架构】操作系统
操作系统计算机系统由硬件和软件组成的,而操作系统是计算机中最基本的系统软件,它既管理计算机系统的软、硬件资源,又控制程序的执行。虽然系统具体实现方式随着时间在不断变化,但是系统内在的概念却没有改变。为了提升程序员或工程师自身能力,向架构师方向迈进,很有必要加深对操作系统的理解。操作系统(Operating System, OS) 是计算机系统中的核心系统软件,负责管理和控制计算机系统中的硬件和软件资原创 2018-01-22 23:05:22 · 3009 阅读 · 0 评论 -
Unix与Linux 简介
转至:http://blog.csdn.net/preciousboy/article/details/5867382UNIX是历史最悠久的通用操作系统。1969年,美国贝尔实验室的K.Thompson和D.M.Ritchie在规模较小及较简单的分时操作系统MULTICS的基础上开发出UNIX, 当时是在DEC的PDP—7小型计算机上实现的,1970年正式投入运行。此后数年,UNIX一直是转载 2015-01-26 21:05:40 · 670 阅读 · 0 评论 -
第三章 C-S架构的常用协议
声明:本文是作者阅读《软件系统架构与开发环境》后的摘录笔记。1 概述 C-S架构是最常用的分布式软件系统架构,分别为“客户端”和“服务器端”构件。它们往往通过某种协议互相连接,这个协议就是连接器,一般来说,采用标准化或部分标准化的协议有助于提高系统的可理解性、可验证性、互操作性、可移植性、可复用性。 C-S协议的相关标准分为两类:一类详细规定了客户与服务原创 2015-01-27 20:19:28 · 7646 阅读 · 1 评论 -
第五章 中间件与分布式软件架构
声明:本文为作者阅读《软件系统架构与开发环境》后的摘录笔记。1 概述一般说,任何独立的系统软件或服务程序,只要其功能介于操作系统和应用软件之间,都可以称为中间件。中间件的优势:1)能屏蔽下层软件与硬件的复杂性(包括异构性),从而简化分布式应用系统的设计与开发过程,提高效率,降低应用系统的获取成本2)能扮演“专家”的角色,承揽解决系统架构中与“分布式”三个字关系比较密切的问题,包原创 2015-01-27 20:51:16 · 2552 阅读 · 0 评论 -
第二章 软件开发平台与软件系统架构
声明:本文为作者阅读《软件系统框架与开发环境》后的摘录笔记1 Java的三个开发平台Java EE 企业版Java SE 标准版Java ME 微型版 Applet技术 Running AnApplet WIDTH=300 HEIGHT=100>原创 2015-01-27 19:35:44 · 1289 阅读 · 0 评论 -
第四章 中立化信息交换语言
1 ASN.1 概述ASN.1(abstract Syntax Notation One,抽象语法标记1),一种对信息模型进行描述的抽象化语法,以及对信息内容进行传输的编码方法和数据格式。2 基于DTD的元素与属性声明DTD(document type definition),是可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明原创 2015-01-27 20:38:02 · 697 阅读 · 0 评论 -
JDK,JRE,JVM这三者的联系与区别
注:来源于部分网络资源 JDK : Java Development ToolKit(Java开发工具包) JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。 最主流的JDK是Sun公司发布的原创 2015-04-13 17:35:20 · 693 阅读 · 0 评论 -
Struts Spring Hibernate
表现层、持久层、业务层为了实现web层(struts)和持久层(Hibernate)之间的松散耦合,我们采用业务代表(Business Delegate)和DAO(Data Access Object)两种模式。DAO模式为了减少业务逻辑和数据访问逻辑之间的耦合,当一个持久曾框架被应用时,该模式将会减少业务对象和该框架之间的耦合,这样我们可以不修改业务对象而选择不同的持久层框架的实现。实际转载 2016-02-24 16:35:07 · 670 阅读 · 0 评论 -
面向对象设计中SOLID原则
最近我听到了很多关于函数式编程(FP),受之启发我觉得也应该关注面向对象编程(OOP)和面向对象设计(OOD),因为在设计系统时这些仍然非常重要。我们将以SOLID原则为起点开始我们的旅程。SOLID原则是类级别的,面向对象的设计理念,它们与测试工具一起帮你改进腐坏的代码。SOLID由程序员们最喜欢的大叔 Robert C. Martin(Bob大叔)提出,它其实是五个其他缩略词的组合——SRP,转载 2016-04-06 19:26:27 · 486 阅读 · 0 评论 -
Ubuntu 16.04安装 openssh-server问题
查看系统当前ssh 信息dpkg -l | grep ssh在ubuntu安装软件过程出现的类似问题: ssh: 依赖: openssh-server 但是此软件包将不会被安装 再次安装openssh-server时,发现: openssh-server: 依赖于:openssh-client。但目前系统openssh-client的版本高于要求的版本出现这种软件安装问题,主要是源的问题转载 2016-12-16 15:15:15 · 7126 阅读 · 0 评论 -
【深入理解计算机系统】系统的基本组成
总线贯穿系统的电子管道,传输字节块I/O设备输入/输出设备是系统与外部世界的联系通道。包括用户输入的键盘和鼠标。主存主存是一个临时存储设备 DRAM处理器中央处理器CPU,解释或执行存储在主存中指令的引擎。原创 2017-10-11 22:30:53 · 613 阅读 · 0 评论 -
【深入理解计算机系统】系统级I/O
输入/输出(I/O)是在主存和外部设备(例如磁盘驱动器、终端和网络)之间复制数据的过程。输入操作是从I/O设备复制数据到主存,输出操作是从主存复制数据到I/O设备。在Linux系统中,通过使用由内核提供的系统级Unix I/O函数来实现较高级别的I/O函数。Unix I/O一个Linux文件就是一个m个字节的序列,所有I/O设备(例如网络、磁盘和终端)都被模型化为文件,而所有输入和输出都被当作对相应原创 2017-11-12 20:23:27 · 890 阅读 · 0 评论 -
【深入理解计算机系统】程序是如何运行的
程序是如何运行的现代计算机存储和处理的信息以二值信号表示,程序对于计算机而言就是一串二进制数据流,以流水线的方式进入CPU进行运算。主要在;CPU与内存之间进行数据传递。本文将从程序源码的结构与表现形式开始,到编译生成可执行文件,再到执行文件的加载,最终到执行文件的运行整个过程进行梳理。1 程序的结构与表现形式大多数计算使用8位的块,即字节(byte),作为最小的可寻址的内存单元。程序对象,即程序数原创 2017-11-05 20:53:14 · 18634 阅读 · 0 评论 -
【微服务架构】9 管理和运维
9 管理和运维微服务与单块应用的运行方式有几方面不一样。在微服务中,但应用可以变成一个分布式系统,由多个相关关联的微服务组成。因此,我们必须管理高度分离的系统,以及每个服务之间的通信。运行中的服务比单块应用中的服务运行更高。当加载的特征变化后,一个微服务应用应该快速调整多个运行的服务进行响应。因此,我们必须自动化的部署新的、移除就的服务实例,来确保所有的应用运行合适的状态。在每个生产系统中,...原创 2019-05-26 19:03:38 · 1746 阅读 · 0 评论