1.架构
维基百科里对软件架构的定义:
软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。
软件架构是一个用于指导系统实现的草图,这个草图越详细对于系统实现的指导意义越重大,贯穿于软件的整个生命周期。
2、架构的不同风格
根据各个架构的风格可分为四大类:
- 单体架构阶段
- 垂直架构阶段
- 分布式架构阶段
- 微服务架构阶段
2.1 单体架构
单体架构:整个项目在一个war包里面,可以放到服务器里面运行;内部分为三个部分:表现层(web),业务层(service),持久层(dao)。它比较适用于传统的项目。
缺点:
- 当某些模块访问量增大时,会影响整个项目的性能。
- 当新增模块时,需要重新编译项目,可能导致其他模块无法使用。
2.2 垂直架构
垂直架构:他是有由多个war组成,每个业务模块都放进一个war包里面。
缺点:
- 通用的服务无法共享,对于相同的服务每个war包都要实现一遍
2.3 布式架构
分布式架构:表现层应用层和服务层业务层已经分离,分别部署在不同的服务器上,可以通过RPC框架(远程调用)来实现业务。
缺点:
- 当服务多起起来的时候,存在依赖,服务监控和维护等问题。
2.4面向服务架构
面向服务架构:通过将业务系统服务化,可以将不同模块解耦,各种异构系统间可以轻松实现服务调用、消息交换和资源共享。
可以通过服务注册中心,Rpc框架实现远程调用(避免硬编码问题)。
3、分布式基础
作者:Martin Fowler
微服务:微服务架构风格,以实现一组微服务的方式来开发一个独立的应用系统的方法。其中每个小微服务都运行在自己的进程中,一般采用 HTTP 资源 API 这样轻量的机制相互通信。
简而言之:拒绝大型单体应用,基于业务边界进行服务微化拆分。各个服务独立部署运行。
3.1 微服务特征
1.每个微服务可独立运行在自己的进程里。
2.独立运行的微服务共同构建起整个系统。
3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等。
4.每个微服务可独立运行在自己的进程里一系列独立运行的微服务共同构建起整个系统每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等。微服务之间通过一些轻量的通信机制进行通信,例如通过RESTful API进行调用。可以使用不同的语言与数据存储技术。
5.自动的部署机制。
3.2 微服务架构示例
每⼀个应⽤功能区都使⽤微服务完成。
4、集群&分布式
集群是个服务形态,分布式是个⼯作⽅式。
只要是⼀堆机器,就可以叫集群,他们是不是⼀起协作着⼲活,这个谁也不知道。
- 分布式是指将不同的业务分布在不同的地方
- 集群是指将几台服务器集中在一起,实现同一个业务。
例如:京东是⼀个分布式系统,众多业务运⾏在不同的机器,所有业务构成⼀个⼤型的业务集群,每⼀个⼩的业务,⽐如⽤户系统,访问压⼒⼤的时候⼀台服务器是不够的。我们就应该将⽤户系统部署到多个服务器,也就是每⼀个业务系统也可以做集群化。
分布式中的每一个节点,都可以叫做集群,而集群不一定就是分布式。
节点:集群中的一个服务器。
5、远程调用
在分布式系统中,各个服务可能处于不同主机,但是服务之间不可避免的需要相互调⽤,我们称为远程调⽤。
spring cloud中使⽤HTTP+JSON的发给你时完成远程调⽤