什么是微服务
微服务既是一种设计理念,也是一种解决方案,随着微服务思想的诞生与共识,很多开源的微服务框架应运而生,它们为微服务分布式系统的开发提供了很多实用的功能组件和解决方案。
微服务化的意义
微服务化是分布式系统架构设计的理念之一,它符合高内聚低耦合的设计理念,是对复杂系统解耦和重组的过程,提取出公共和通用的部分,从而降低系统复杂性,减少重复建设。各微服务可使用不同的技术独立开发,使得开发模式更灵活,便于问题的独立解决。
微服务化的代价
各微服务之间接口众多,不仅增加了代码量,也加大了系统维护的难度,如沟通成本,定位问题,监控的开销等。
微服务化如何落地
领域驱动设计(DDD, 全称 “Domain-Driven Design”)是指导微服务实际落地的方法论,该方法为建立一个边界清晰、可高度复用的企业级中台业务模型提供了理论依据,可以用于指导微服务边界划分和中台领域建模的设计工作。它分为战略和战术两个维度,战略是指在业务层面上的抽象和建模,战术则是如何在系统技术层面上的解决抽象和设计的问题。
大致分为三个步骤:
步骤一,各业务领域建模,对各个业务领域的功能属性进行梳理,沉淀公共功能模块到通用中台。
步骤二,定义主领域模型,将功能逻辑相对完整的领域设立为主领域,以主领域模型为基准,横向扫描其他领域模型,将重复的通用中台合并到主领域模型,然后重构主领域模型。
步骤三,在技术层面落地,以领域模型为依据,在系统技术层面上提供解决方案,完成微服务的拆分和设计。
微服务的开源框架
Spring Cloud,为构建微服务架构应用提供了一整套基础工具和解决方案,降低了微服务开发和管理的难度。它是基于Spring Boot 框架的,Spring Boot是快速构建Spring应用的脚手架。
Dubbo ,是阿里开源的一款高性能轻量级的Java RPC 框架,它提供了三个核心能力,面向接口的远程方法调用、智能容错与负载均衡、服务自动注册和发现。
Tars,是腾讯内部使用的微服务框架,多年实践成果总结而成的开源项目,包含一整套开发框架与管理平台,兼顾多语言、易用性、高性能与服务治理,其理念是让开发更聚焦业务逻辑,让运营更高效。
Thrift,也是一个 RPC 框架,跨语言能力较强。它具有功能强大的软件堆栈和代码生成引擎,可构建在 C++、Java、Python、PHP 等多种语言间无缝结合的、高效的服务。
gRPC,是谷歌开源的高性能通用 RPC框架。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩与单 TCP 连接上的多路复用请求等特性,这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
微服务框架核心功能和组件
微服务框架的核心功能包括:服务治理、服务通信、服务容错、网关、安全、监控、配置等。
微服务治理
服务治理中心是微服务(分布式)架构中最基础和最核心的功能组件,它负责对微服务架构中的服务实例进行集中管理,提供了服务注册和服务信息查询的REST API,保存了各可用服务实例的网络地址、端口、版本号、通信协议等信息。
微服务容错
Spring Cloud Hystrix 实现了断路器、线程隔离等⼀系列服务保护功能。Hystrix 是Netflix 中的一个组件库,它隔离了服务节点,并提供了后备选项,阻止了故障节点之间可能引起的雪崩效应。
在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应⽤间通过服务注册与订阅的⽅式相互依赖。但由于每个单元都在不同的进程中运⾏,⼀来通过远程调⽤的⽅式执⾏,这样就有可能因为⽹络原因或是依赖服务⾃⾝问题出现调⽤故障或延迟,⽽这些问题会直接导致调⽤⽅的对外服务也出现延迟,若此时调⽤⽅的请求不断增加,最后就会因等待出现故障的依赖⽅响应形成任务积压,最终导致⾃⾝服务的瘫痪。
微服务网关
Spring Cloud Gateway 旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式,它不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,如安全、监控和限流。
微服务安全
Spring Cloud 可以通过认证和授权来增加服务连接的安全性。相关组件有:
- JWT - 网络安全第一站
- CORS - 跨域安全解决
- Spring Security - 服务安全卫士
微服务通信
HTTP REST方式 使用http协议进行数据传递,json格式数据,使用上简易,可读性高。
RPC方式 远程过程调用,二进制数据,性能最佳。
利用消息中间件进行通信。
在微服务中,推荐使用REST风格的调用,而非RPC。