架构, 架构师, architecture

架构师: 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

并发编程

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

database

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