系统架构演变和服务调用方式
1.系统架构演变
1.1集中式架构
将所有的功能部署在一个应用中,以减少部署节点和成本
优点:
- 系统开发速度快
- 维护成本低
- 适用于并发较低的系统
缺点:
- 代码耦合度高,后期维护困难
- 无法对不同模块进行针对性优化
- 无法水平扩展
- 单点容错率低,并发能力差
1.2 垂直拆分架构
根据业务功能对系统进行拆分
优点:
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同模块进行优化
- 方便水平扩展,负载均衡,容错率高
缺点:
系统间相互独立,会有许多重复开发工作,重用率低,影响开发效率
1.3 分布式服务
将核心业务抽取出来,作为独立的服务
优点:
将基础服务进行了抽取,系统间相互调用,提高了代码复用和开发效率
缺点:
系统间耦合度变高,调用关系错综复杂,难以维护
1.4 面向服务架构(SOA)
一种设计思想,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在于操作系统进程中,各个服务之间通过网络调用
优点:
- 重复功能或模块抽取为服务,提高开发效率
- 可重用性高
- 可维护性高
缺点: - 各系统间业务不同,很难确定功能或模块是重复的
- 抽取服务的粒度大
- 系统和服务之间耦合度高
1.5微服务架构
使用一套小服务来开发单个应用的方式或途径,每个服务基于单一业务能力构建,运行在自己的进程中,并且使用轻量级机制通信,通常是HttpAPI
优点:
- 服务拆分粒度更细,有利于提高开发效率
- 可以针对不同服务制定对应的优化方案
- 使用与互联网时代,产品迭代周期更短
缺点:
- 粒度太细导致服务太多,维护成本高
- 分布式系统开发的技术成本高,对团队的挑战大
微服务的特点:
- 单一职责:微服务中每一个服务都对应唯一的业务能力
- 微:微服务的服务拆分粒度很小
- 面向服务:每个服务都要对外暴露REST风格服务接口API
- 自治:服务间互相独立,互不干扰
2.服务调用方式
2.1 RPC和HTTP
常见的远程调用方式:
- RPC: Remote Procedure Call 远程过程调用
RPC基于Socket,工作在会话层,自定义数据格式,速度快,效率高
早期的WebService,现在的dubbo都是RPC的典型代表 - HTTP:一种网络传输协议,基于TCP,工作在应用层,规定了数 据传输的格式,消息封装臃肿,但是对服务提供方和调用方没有任何技术限定,自由灵活
2.2HTTP客户端工具
- HttpClient
- OKHttp
- URLConnection
Spring对这些客户端工具进行了封装,提供了一个工具类叫做RestTemplate,可以实现对象与json的序列化与反序列化