架构师: architect
架构: architecture

软件架构

软件架构(software architecture)就是软件的基本结构。

分层架构

分层架构(layered architecture)是最常见的软件架构,也是事实上的标准架构。如果你不知道要用什么架构,那就用它。

这种架构将软件分成若干个水平层,每一层都有清晰的角色和分工,不需要知道其他层的细节。层与层之间通过接口通信。

虽然没有明确约定,软件一定要分成多少层,但是四层的结构最常见。 表现层(presentation):用户界面,负责视觉和用户互动 业务层(business):实现业务逻辑 持久层(persistence):提供数据,SQL 语句就放在这一层 数据库(database) :保存数据 有的软件在逻辑层和持久层之间,加了一个服务层(service),提供不同业务逻辑需要的一些通用接口。

用户的请求将依次通过这四层的处理,不能跳过其中任何一层。

事件驱动架构

事件(event)是状态发生变化时,软件发出的通知。

事件驱动架构(event-driven architecture)就是通过事件进行通信的软件架构。它分成四个部分。 事件队列(event queue):接收事件的入口 分发器(event mediator):将不同的事件分发到不同的业务逻辑单元 事件通道(event channel):分发器与处理器之间的联系渠道 事件处理器(event processor):实现业务逻辑,处理完成后会发出事件,触发下一步操作

微核架构

微核架构(microkernel architecture)又称为"插件架构”(plug-in architecture),指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。

内核(core)通常只包含系统运行的最小功能。插件则是互相独立的,插件之间的通信,应该减少到最低,避免出现互相依赖的问题。

微服务架构

微服务架构(microservices architecture)是服务导向架构(service-oriented architecture,缩写 SOA)的升级。

每一个服务就是一个独立的部署单元(separately deployed unit)。这些单元都是分布式的,互相解耦,通过远程通信协议(比如REST、SOAP)联系。

云架构

云结构(cloud architecture)主要解决扩展性和并发的问题,是最容易扩展的架构。

它的高扩展性,主要原因是没使用中央数据库,而是把数据都复制到内存中,变成可复制的内存数据单元。然后,业务处理能力封装成一个个处理单元(prcessing unit)。访问量增加,就新建处理单元;访问量减少,就关闭处理单元。由于没有中央数据库,所以扩展性的最大瓶颈消失了。由于每个处理单元的数据都在内存里,最好要进行数据持久化。

这个模式主要分成两部分:处理单元(processing unit)和虚拟中间件(virtualized middleware)。

面向服务架构

SOA SOA是Service Oriented Architecture的缩写,面向服务架构。Bezos(亚马逊CEO)将Amazon的软件架构完全转换为SOA,它是如此关键,从某种程度上改变了亚马逊 Amazon 的命运。 SOA的精髓是严格的松散耦合,不允许直接访问其它服务的数据,大家按照一个契约或标准(service interface)来进行交流。

微服务架构和面向服务架构的区别:

  1. 微服务说的直白一些就是组合化,它的每部分需要实现的功能可以有不同的小程序单独构成,然后相互之间协同实现一个大的目标。这个角度上来说,它们是一脉相承的额,但是面向服务的架构,没有微服务的分离度高,相互之间的关联度还是相对较高。举一个很简单的例子,就拿常见的医院和诊所,医院就是微服务架构,不同的部分分工不同,但是诊所就是一个医生必须全科,啥都要做,这就是SOA。

  2. 微服务相比较来说,在各个组件上可以使用不一样的编程语言。

系统架构

https://www.infoq.cn/article/fwhQ-dIN2xTUH6zNLYZp

https://www.infoq.cn/article/sCF83heYqQJ4U8vTEQWk?utm_source=rss&utm_medium=article

" 系统架构 " 可以拆分成两部分:“系统 " 和 " 架构”。“系统 " 在百科中的定义是” 系统就是若干相互联系、相互作用、相互依赖的要素结合而成的,具有一定结构和功能,并处在一定环境下的有机整体”,从这句话可以提炼出两点内容:一是整体与部分 (由要素结合而成的);二是结构性 (具有一定的结构和功能)。所以谈系统一定具有多个组成部分,并且这些部分是相互作用的,这点非常重要。

再看架构在百科中的定义是” 架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计 “。初看到这个定义,从中获取的有效信息不大,只知道这个很厉害,用于指导大型软件系统各个方面的设计。细细分析,它又和系统有类似表述,有一个重要的词是抽象描述,换言之,架构是把系统中的整体结构和组件之间的关系体现出来。

至此,总结出第一个结论:系统架构是描述系统要素之间的关系。

系统架构 = 要素 + 连接 + 解决特定问题。

系统架构是为了解决特定的问题,把系统中的要素找出来,通过一定的手段把这些要素组合起来。

一般架构分为:业务架构、应用架构、数据架构、技术架构、安全架构、部署架构。TOGAF 对下面四种架构有如下描述:

业务架构 : 定义业务战略、治理、组织和关键业务流程。

数据架构 : 描述组织的逻辑与物理数据资产及数据管理资源的结构。

应用架构 : 应用之间结构和交互的描述。

技术架构 : 描述支持业务、数据和应用服务部署所需的逻辑的软件与硬件能力,包括 IT 基础设施、中间件、网络、通信、处理和标准等。

架构师技术范围大致如下

https://zhuanlan.zhihu.com/p/96078129

1) 集合框架(源码) List ArrayList LinkedList Set:HashSet、TreeSet Map:TreeMap、ConcurrentHashMap Collection的synchronized等方法 2)、工具类 Google guava(推荐) Apache common lang/BeanUtils/Collctions/IO JSON fastjson gson jackson 3) 框架

Spring:IOC、AOP、常用注解 SpringMVC Spring Boot Mybatis Shiro Netty 4) 安全

单项散列算法:MD5、SHA 对称加密:DES 非对称加密:RSA、HTTPS 5) JVM

Java虚拟机(Hotspot实现) 类加载机制 内存模型 GC:回收算法、垃圾收集器 调优 工具:jstack、jmap、jconsole 6) 并发编程

Executor框架 Fork/join happen-before 数据结构:ConcurrentHashMap 线程池:参数设置、原理、拒绝策略 线程状态 Lock/synchronized 原子操作类 并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger IO、BIO、AIO、NIO 7) 数据

NoSQL:MongoDB 分布式缓存:Memcached、Redis(推荐) 关系数据库 MySQL 引擎 InnoDB(支持事务) 分库分表 Cobar Mycat 8) SQL优化

索引 主键索引 组合索引 explain 存储过程 SQL注入:使用#而不使用$ 9) 事务隔离级别(ACID)

原子性 一致性 隔离性 持久性 10) 锁

表锁 行锁 悲观锁 11) 大数据

Hadoop Hbase Spark Storm/JStorm 12) 算法与数据结构

数组 链表 栈 队列 树 二叉树 B Tree/B+ Tree 红黑树 哈希 13) 分布式系统

从集中到分布式 分布式Session:Session复制、Session绑定、Session服务器(靠谱) 分布式缓存:Redis、一致性Hash算法 数据库:读写分离、主从热备、分库分表、一致性 分布式事务、CAP、BASE、2PC/3PC 分布式锁 Redisson 负载均衡、硬件、F5、软件、LVS、Nginx 消息队列:RabbitMQ、ZeroMQ、ActiveMQ、Kafka(推荐) 服务化:服务注册与发现、Zookeeper 架构 微服务 Spring Boot Dubbo RPC SOA 虚拟化 Docker

http://www.ruanyifeng.com/blog/2016/09/software-architecture.html

https://learning.oreilly.com/library/view/software-architecture-patterns/9781491971437/titlepage01.html https://www.jianshu.com/p/c34aac5646e9 https://cloud.tencent.com/developer/ask/127141