046 架构学习②基础概念【技术】

1 基础概念

系统泛指由一群有关联的个体组成,根据某种规则运作,能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。

子系统也是由一群有关联的个体所组成的系统,多半会是更大系统中的一部分。

软件模块(Module)是一套一致而互相有紧密关连的软件组织。它分别包含了程序和数据结构两部分。现代软件开发往往利用模块作为合成的单位。模块的接口表达了由该模块提供的功能和调用它时所需的元素。模块是可能分开被编写的单位。这使它们可再用和允许人员同时协作、编写及研究不同的模块。(逻辑角度拆分,划分目的是职责分离)

软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元,软件组件可以很容易被用于组装应用程序中。(物理角度拆分,划分目的是单元复用,独立且可替换)

软件框架(Software framework)通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

软件架构指软件系统的“基础结构”,创造这些基础结构的准则,以及对这些结构的描述。

架构是顶层设计;框架是面向编程或配置的半成品;组件是从技术维度上的复用;模块是从业务维度上职责的划分;系统是相互协同可运行的实体。

架构设计三原则:合适原则,简单原则,演化原则。

设计流程:识别复杂度,设计备选方案,评估和选择备选方案,详细方案设计。

2 复杂度来源

①高性能

提高单机性能+集群。性能是软件的一个重要质量属性。衡量软件性能包括了响应时间、TPS、服务器资源利用率等客观指标,也可以是用户的主观感受(从程序员、业务用户、终端用户/客户不同的视角,可能会得出不同的结论)。

常用手段:读写分离,分库分表,NoSQL,缓存,负载均衡,Reactor。

负载均衡:硬件F5(百万级),A10。软件Nginx(万级,7层),LVS(十万级,4层)

每秒事务处理量(TPS,Transaction Per Second)每秒钟系统能够处理的交易或事务的数量。它是衡量系统处理能力的重要指标。

每秒查询率(QPS,Queries Per Second)是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

Reactor:I/O多路复用+资源池(进程池/线程池)

进程池:不再单独为每个连接创建进程,而是创建一个进程池,将连接分配给进程,一个进程可以处理多个连接的业务。

I/O多路复用:只有当连接上有数据的时候进程才去处理。当多条连接共用一个阻塞对象后,进程只需要在一个阻塞对象上等待,而无须再轮询所有连接,当某条连接有新的数据可以处理时,操作系统会通知进程,进程从阻塞状态返回,开始进行业务处理。

单Reactor单进程(Redis),单Reactor多线程,多Reactor多进程(Nginx),多Reactor多线程(Memcache,Netty)

②高可用

是系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。

常用手段:双机架构(主从,主备,主主,主从/主备切换),集群,分区,异地多活(同城,跨地,跨国)。

业务分级(核心,访问量大,主要收入)——数据分类(数据量,唯一性,实时性,可丢失性,可恢复性)——数据同步(消息队列,二次读取,存储系统同步,回源读取,重新生成)——异常处理(多通道同步,同步和访问结合,日志记录,用户补偿)

异地多活要点:核心业务异地多活,核心数据最终一致,多手段同步数据,保证绝大部分用户异地多活。

CAP理论:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性(Consistence)、可用性(Availability)、分区容错性 (Partition Tolerance)三者中的两个,另外一个必须被牺牲。

ACID理论:是数据库管理系统为了保证事务的正确性而提出来的一个理论,ACID包含四个约束

Atomicity(原子性):一个事务中的所有操作,要么全部完成,要么全部不完成,不会在中间某个环节结束。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。

Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

Isolation(隔离性):数据库允许多个并发事务同时对数据进行读写和修改的能力。隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

BASE理论:是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency),核心思想是即使无法做到强一致性(CAP的一致性就是强一致 性),但应用可以采用适合的方式达到最终一致性。

FMEA(Failure mode and efects analysis,故障模式与影响分析):是一种在各行各业都有广泛应用的可用性分析方法,通过对系统范围内潜在的故障模式加以分析,并按照严重程度进行分类,以确定失效对于系统的最终影响。

初始架构
FMEA分析
优化架构

③可扩展性

业务需求、运行环境方面的变化都会导致软件系统发生变化,而这种软件系统对上述变化的适应能力就是可扩展性。

面向流程拆分:分层架构。2层(C/S架构、B/S架构),3层(MVC架构、MVP架构),多层(逻辑分层)。

面向服务拆分:SOA(Service Oriented Architecture,面向服务的架构)、微服务。

面向功能拆分:微内核架构,也被称为插件化架构。

④低成本:往往只有“创新”才能达到低成本目标,引入新技术或创造新技术。

⑤安全:功能安全其实就是“防小偷”,架构安全就是“防强盗”。

⑥规模:是“量变引起质变”,当数量超过一定的阈值后,复杂度会发生质的变化。功能增加/数据增加。

3 相关技术

①存储技术

NoSQL

K-V存储:解决关系数据库无法存储数据结构的问题,以Memcache,Redis为代表。

文档数据库:解决关系数据库强schema约束的问题,以MongoDB为代表。

列式数据库:解决关系数据库大数据场景下的I/O问题,以HBase为代表。

全文搜索引擎:解决关系数据库的全文搜索性能问题,以Elasticsearch为代表。

SQL:MySQL,PostgreSQL,Oracle。

小文件存储:淘宝的TFS、京东JFS、Facebook的Haystack。

大文件存储:Hadoop、HBase、Storm、Hive,淘宝的云梯系统、腾讯的TDW系统。

②开发技术

开发框架

Java的SSH、SpringMVC、Play等。

Ruby的Ruby on Rails。

PHP的ThinkPHP。

Python的Django。

web服务器

Java的Tomcat、JBoss、Resin等,PHP/Python的用Nginx,最保险的就是用Apache了,什么语言都支持。

容器

Docker。

消息队列

RocketMQ、Kafka、ActiveMQ。

③网络技术

负载均衡

DNS,Nginx 、LVS 、F5,如阿里云的SLB、UCloud的ULB,CDN

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,928评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,748评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,282评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,065评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,101评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,855评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,521评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,414评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,931评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,053评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,191评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,873评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,529评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,074评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,188评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,491评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,173评论 2 357

推荐阅读更多精彩内容