Software architecture = {Elements, Forms, Rationale/Constraints}html
元素、形式/模式、基本原理和限制前端
软件架构的终极目标是用最小的人力成原本知足构建和维护系统的需求数据库
一个软件架构的优劣,能够用它知足用户需求的成原本衡量。若是该成本很低,而且在系统的整个生命周期内一直都维持这样的低成本,那么这个系统的设计就是优良的,若是该系统的每次发布都会提高下一次变动的成本,那么这个设计就是很差的,就这么简单。后端
--架构整洁之道设计模式
负责总体系统的架构设计,主要是基础服务和各系统间的协调上,着眼全局不太注重某个应用自己架构,好比关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方法的基础架构设计缓存
负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面安全
关注某一个行业、业务的领域分析,获取领域模型,最终得到系统的模型服务器
也能够叫业务领域专家、行业专家、产品咨询师、资深顾问网络
经过设计和实现优良的软件架构来持续下降软件的构建和维护成本架构
软件架构这项工做的实质就是规划如何将系统拆分红组件,并安排好组件之间的排列关系以及组件之间互相通讯的方式
设计原则会给咱们答案
软件架构师的目标是建立一种系统形态,该形态会以策略为最基本的元素,并让细节与策略脱离关系,一个优秀的软件架构师应该致力于最大化可选项数量
从架构师的工做内容上来划分能够分为三类:
系统架构师/基础架构师
从系统的维度,负责总体系统的架构设计,主要是基础服务和各系统间协调上,着眼全局不太注重某个应用自己架构,好比关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方面的基础架构设计。
应用架构师
从应用程序的维度,负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面。
业务架构师
从业务流程的维度,关注某一个行业、业务的领域分析,获取领域模型,最终得到系统的模型。也能够叫业务领域专家、行业专家、产品咨询师、资深顾问。
基础架构、前端架构、后端架构是从职责上的分类。
https://mp.weixin.qq.com/s/JWOIScGrX0Hszz4uqdA6qw
http://www.ruanyifeng.com/blog/2016/09/software-architecture.html
https://book.douban.com/subject/26307910/
面向对象分解
用来支持功能性需求、系统应该被拆分为哪些问题域、对象
关注软件模块组织和开发环境上、从组件、模块、子系统的组织和分层
每一层为上层提供有限的良好定义的接口供调用
关注进程、线程、对象等运行的概念,以及相关的并发、同步、通讯等问题
从软件实现的角度去关注非功能性需求
从硬件角度去关注非功能属性
https://microservices.io/patterns/cn/monolithic.html
在对等节点之间作故障转移,相对来讲简单些
在这类系统中全部节点都承担读写流量,而且节点中不保存状态,每一个节点均可以做为另外一个节点的镜像
使用最普遍的故障检测机制是“心跳”
你能够在客户端上按期地向主节点发送心跳包,也能够从备份节点上按期发送心跳包
当一段时间内未收到心跳包,就能够认为主节点已经发生故障,能够触发选主操做
水平(也叫横向扩展):用更多的节点支撑更大的请求
如成千上万的蚂蚁完成一项搬运工做
垂直(也叫纵向扩展):扩展一个点的能力支撑更大的请求
如利用一我的的能力,如蜘蛛侠逼停火车
X 轴:表明无差异的克隆服务和数据,工做能够很均匀的分散在不一样的服务实例上
Y 轴:关注应用中职责的划分,好比数据类型,交易执行类型的划分
Z 轴:关注服务和数据的优先级划分,如分地域划分
https://mp.weixin.qq.com/s/HE7BxH_RZo45bY2baNgt5Q
云原生技术有利于各组织再公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用
云原生的表明技术包括容器、微服务、服务网络、不可变基础设施和声明式 API
这些技术可让咱们构建高度稳定、可控、可观测的松散耦合应用
但云原生方案的重点并非应用部署在何处,而是如何构建、部署和管理应用
云原生方案与微服务架构相似
然而,尽管微服务可经过构建云原生应用来交付,可企业仍须要采起许多措施,才能在生产环境中熟练地管理微服务
而想要享受云原生应用的各类益处,也并不是必定须要微服务
不少企业都经过基于相同的原则,构建出更优秀的模块化单体式应用,从而取得云原生方案的种种效益