前言
系统架构演变过程,单体模式架构->分布式架构->SOA架构->微服务架构
单体模式
单体模式架构也称传统模式架构,单体模式是指所有功能模块全部包含在一个jar包或者war包中,开发简单,维护简单。适用于小型项目。
单体模式优点
- 开发简单
- 维护简单
单体模式缺点
- 代码耦合度极高。
- 无法针对不同模块进行针对性优化
- 无法水平扩展
- 容错率低,并发能力差
垂直拆分
当系统访问量逐渐加大,单体应用无法满足时,此时为了更高的并发和业务需求,将系统按照模块进行拆分。
垂直拆分优点
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进行优化
- 方便水平扩展,负载均衡,容错率提高
- 系统间相互独立
容错是指当系统中某一个功能模块出错,不会影响到其他功能模块的使用。
垂直拆分缺点
- 服务之间相互调用,如果某个服务的端口或者ip地址发生改变,调用的系统得手动改变
- 搭建集群之后,实现负载均衡比较复杂
分布式服务
当垂直应用越来越多,应用之间交互不可避免,就将核心业务抽取出来,作为独立的服务,逐渐的形成稳定的服务中心,使前端更快速的响应多变的市场需求。
分布式服务优点
- 将基础服务进行了抽取,系统间的相互调用,提高了代码的重用性和开发效率。
分布式服务缺点
- 系统间的耦合度变高,调用关系错综复杂,难以维护。
SOA架构
SOA架构全称为(Services-Oriented-Architectrue),此时需要一个调度中心基于访问的压力实时管理集群容量,提高集群利用率。
阿里巴巴nn欸不使用的框架:HSF,是dubbo的升级版
SOA架构优点
- 抽取公共的功能为服务,提高开发效率
- 对不同的服务进行集群化解决部署解决系统压力
- 基于ESB/DUBBO减少系统耦合,只能减少耦合,但耦合还是存在的。
SOA架构缺点
- 抽取服务的粒度较大(比如说用户模块中包含用户信息,用户的账户,用户的详情等等,它做不到更细致化的拆分)
- 服务提供方与调用方接口耦合度较高
微服务架构
微服务架构概念的诞生主要是为了解决SOA架构中的不足。它可以对服务进行原子化拆分,就是拆分到不能拆分为止,还可以将微服务进行独立的打包运行。它通过轻量级的协议(http协议)对服务提供方和服务调用接口进行了解耦。一个服务只做一件事情,每个服务都会对外开放一个http接口,供前端调用,或者供其他人员调用。
微服务优点
- 通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度降低。
- 微服务遵循单一原则,微服务之间采用http等轻量协议传输。
微服务缺点
- 微服务过多,服务治理成本高,不利于系统维护
SOA和微服务的关系
SOA (Services-Oriented-Architectrue)“面向服务的架构”,它是一种涉及方法,其中包含多个服务,服务之间通过相互的依赖最终提供一系列功能,一个服务通常以独立的形式存在于操作系统进程中,各个服务中通过网络调用。
微服务其实和SOA架构类似,微服务是在SOA上做的升华,微服务架构强调的一个重点是业务需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行的小应用,这些小应用之间通过服务完成交互和集成。
功能 | SOA | 微服务 |
---|---|---|
组件大小 | 大块业务逻辑 | 单独任务或者小块业务逻辑 |
耦合 | 通常松耦合 | 总是松耦合 |
公司架构 | 任何类型 | 小型,专注于功能交叉团队 |
管理 | 着重中央管理(通过一个SOA框架管理所有服务) | 着重分散管理 |
目标 | 确保应用能够交互操作 | 执行新功能,快速拓展开发团队 |
SOA的服务调用技术基于RPC,微服务基于HTTP
RPC
服务消费者通过序列化技术将方法、接口、参数等等转换成二进制字节码,通过TCP协议将字节码传输给服务提供者,服务提供者再以相同的方式返回给消费者需要的东西。
HTTP
HTTP调用技术相对简单,只需要服务消费者发送给服务提供者一个请求,再由服务提供者做出相应的返回即可。而HTTP中有一个相对重要的概念就是restful接口。
RESTFUL
REST(Representational State Transfer)如何一个架构符合REST规则,就称它为restful接口。
Rest规则
REST中的资源所指的不是数据,而是数据和表现形式的组合,比如“最新访问的10位会员”和“最活跃的10位会员”在数据上可能有重叠或者完全相同,而由于他们的表现形式不同,所以被归为不同的资源,这也就是为什么REST的全名是Representational State Transfer的原因。资源标识符就是URI(Uniform Resource Identifier),不管是图片,Word还是视频文件,甚至只是一种虚拟的服务,也不管你是XML(标准通用标记语言下的一个子集)格式、txt文件格式还是其它文件格式,全部通过 URI对资源进行唯一的标识。
文尾
文章均为学习阶段记录笔记,若有不妥请留言指正。谢谢!
本文参考 系统架构演变