近几年,微服务这个概念越来越火了,火到什么程度呢?2019年有一个统计说,两千家企业里,45%在使用微服务,16%在实验开发和测试微服务架构,24%在学习微服务准备转型,只有剩下的15%的企业没有使用微服务。因此,今天了解一下微服务。
微服务架构
微服务架构能够实现由小型自主服务组成一个整体应用,各个组成部分之间是松耦合的,复杂性低,各个部分可以独立部署,修复bug或者引入新特性更容易,能够独立扩展,不同技术栈之间可以使用不同框架、不同版本库甚至不同的操作系统平台。
微服务产生背景
软件系统架构演进历史
单体架构
- 单体架构是一种所有功能打包在一个容器中运行的设计风格
- 一个实例中集成了一个系统的所有功能
- 通过负载均衡软件 / 设备实现多例调用
单体架构的优缺点有如下几点
- . 优点
- 易开发
- 易调试
- 易部署
- . 缺点
- 可靠性差, 某个bug的错误会导致整个应用的崩溃;
- 不易协同,协同开发时版本冲突频繁;
- 升级困难,牵一发而动全身
面向服务的架构
是一种分布式服务架构的常见方式,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义明确的接口和协议联系起来,进而实现跨服务单元 / 系统交互的能力
有如下优缺点
- 优点
- 松耦合:SOA定义了良好的对外接口,通过网络协议对外提供服务,服务之间表现为松耦合性
- 独立性:某个服务的结构发生改变时,只要接口保持不变,不影响整个流程对外提供服务
- 可重用:SOA通过定义标准的对外接口,可以让多个使用方同时使用,增加可重复使用性
- 面临的挑战
- 随着大型互联网公司对和组织机构对大规模弹性部署和敏捷开发的需求,面向服务的框架(SOA)逐渐难以应付
- 同时伴随着虚拟化技术、容器技术的不断发展,持续交付方法论的深入人心,微服务应用而生
微服务
微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块(即服务)为基础,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相沟通。每个服务都围绕具体业务进行构建,并且能够被独立部署。
- 是一套架构方法和体系
- 由很多体量小实现特定功能或业务的服务构成
- 服务松耦合,独立开发、独立部署
- 服务可以用不同语言开发
微服务比SOA的优势
- 复用率更高
- 快速响应
- 弹性扩展
- 支持异构
微服务怎么实现
微服务要解决的问题
- 服务划分
- 服务注册与调用
- 延迟队列
- 服务熔断处理
- 缓存设计
- 分布式事务实现
服务的划分原则
服务的划分是微服务设计的第一步,也是成败的关键 - 业务边界清晰
各服务有清晰的责任及边界,一个服务对应一块业务,服务间多为单向依赖 - 最小化的变更
新增或变更业务上有很明确的服务对应,某一业务需求的变更影响的服务应该尽可能的少 - 最大化的复用
服务设定要考虑复用的场景,应该尽可能最大化的实现服务复用
微服务技术框架
Spring Cloud
Spring Cloud 是一个基于Spring Boot实现的服务治理框架,Spring boot专注于快速、方便集成的单个个体,Spring Cloud关注全局服务治理
Dubbo
Dubbo 是阿里巴巴公司开源的一款高性能、轻量级分布式RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
- Netflix Eureka 服务发现:核心组件、负责服务注册、管理服务列表
- Netflix Ribbon 负载均衡:提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起
- Netflix Hystrix 服务容错:隔离措施的一种实现,可以设置在某种超时或者失败情形下断开依赖调用 or 返回指定逻辑,从而提高分布式系统的稳定性
- SpringCloud Config:解决分布式系统的配置管理方案,包含了客户端和服务端两个部分,将配置信息中央化保存
- SpringCloud Security 安全认证:SpringCloud Security 用于构建安全的应用程序和服务,在Spring Boot基础上,可以快速创建实现常见模式的系统安全,如单点登录,令牌中继和交换。
- SpringCloud Sleuth 服务链路跟踪:能跟踪一个用户请求的过程,捕获这些跟踪数据,构建微服务整个调用链的视图,是调试和监控微服务的关键工具。
微服务的困难
- 业务结构复杂
- 拆分粒度难以把握
- 部署维护困难