共计 1905 个字符,预计需要花费 5 分钟才能阅读完成。
一、单体架构
1. 单体架构的简介
2. 单体架构的架构图
3. 单体架构的优点
4. 单体架构的缺点
二、微服务架构
1. 微服务架构的简介
- 微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。
- 微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个有上下文边界的服务。
2. 微服务架构的架构图
3. 微服务架构的设计原则
- 拆分足够小
- 服务与服务之间轻量级通信
4. 微服务架构的优点
- 相对于单体架构,它的主要特点是组件化、松耦合、自治、去中心化。
- 一组小的服务其服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。
- 独立部署运行和扩展:每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和应对变化成为可能。
- 独立开发和演化:技术选型灵活,不受遗留系统技术约束。合适的业务问题选择合适的技术可以独立演化。服务与服务之间采取与语言无关的 API 进行集成。相对单体架构,微服务架构是更面向业务创新的一种架构模式。
- 独立团队和自治:团队对服务的整个生命周期负责,工作在独立的上下文中,自己决策自己治理,而不需要统一的指挥中心。团队和团队之间通过松散的社区部落进行衔接。
5. 微服务架构的缺点
- 服务拆分微服务架构可能带来过多的操作
- 分布式系统可能复杂难以管理,因为分布部署跟踪问题难。
- 分布式事务比较难处理
- 当服务数量增加,管理复杂性增加。
6. 微服务架构的拆分思路
6.1 横向拆分:根据业务来拆分
6.2 纵向拆分:根据层次来拆分
7. 微服务架构的选择
7.1 Dubbo(RPC)
7.1.1 Dubbo
- Dubbo 是阿里集团开源的一个极为出名的 RPC 框架,在很多互联网公司和企业应用中广泛使用。
- 协议和序列化框架都可以插拔是及其鲜明的特色。
- 远程接口是基于 Java Interface,并且依托于 Spring 框架方便开发。
- 可以方便的打包成单一文件,独立进程运行,和现在的微服务概念一致。
- Dubbo 目前是一种广泛使用的微服务架构框架。
7.1.2 RPC
- RPC,Remote Process Call,即跨进程调用
- RPC 的本质是提供了一种轻量无感知的跨进程通信的方式,在分布式机器上调用其他方法与本地调用无异(远程调用的过程是透明的,你并不知道这个调用的方法是部署在哪里,通过 PRC 能够解耦服务)
- RPC 是根据语言的 API 来定义的,而不是基于网络的应用来定义的,调用更方便,协议私密更安全、内容更小效率更高。
- 客户端(Client),服务的调用方。
- 服务端(Server),真正的服务提供者。
- 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
- 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法。
- 基于 TCP/IP 协议。速度快。
7.2 SpringCloud(HTTP)
7.2.1 SpringCloud
- Spring Cloud 来源于 Spring,利用 Spring Boot 进行快捷开发。
- Spring Cloud 基本上都是使用了现有的开源框架进行的集成,学习的难度和部署的门槛就比较低,对于中小型企业来说,更易于使用和落地。
- Spring Cloud 核心组件 Eureka 是 Netflix 开源的一款提供服务注册和发现的产品,它提供了完整的 Service Registry 和 Service Discovery 实现,这也是 Spring Cloud 体系中最重要最核心的组件之一。
7.2.2 HTTP
- 应用层协议,简单。
HTTP 接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的 HTTP 协议 进行传输。
- 使用 HTTP 协议的微服务,通常返回 JSON 数据,然后把 JSON 转换为对象。
7.3 小结
RPC 服务和 HTTP 服务还是存在很多的不同点的:
- 一般来说,RPC 服务主要是针对大型企业的,而 HTTP 服务主要是针对小企业的
- 因为 RPC 效率更高,而 HTTP 服务开发迭代会更快。
- 选用什么样的框架不是按照市场上流行什么而决定的,而是要对整个项目进行完整地评估。
8. 微服务架构的基本概念
8.1 服务提供者 (Provider)
- 提供服务的具体实现
- 同一个微服务,既可以是 provider,也可以是 consumer。
8.2 服务调用者 (Consumer)
- 通过一些框架来调用服务提供者提供的服务
- 同一个微服务,既可以是 provider,也可以是 consumer。
正文完
发表至: java
2019-08-26