在搞清楚什么是微服务之前,我们先来弄明白什么是分布式系统。
(插图1)
随着网站流量和业务复杂度的不断增加,单机系统在势必向多机系统转化,多机系统比单机系统更容易扩展,也更方便对系统的计算和存储能力进行提升,这个多机系统就是分布式系统。
(插图2)
分布式系统由若干个计算机节点组成,这些节点之间通过网络进行通信,为共同任务而协同作业。
(插图3)
微服务与分布式系统到底是什么关系?微服务是一种设计理念,它基于分布式系统,为解决系统复杂度和耦合性过高问题提供了解决方案。
(插图4)
随着系统业务复杂程度的逐渐攀升,微服务设计思想应运而生。微服务体现的是分而治之和高内聚低耦合的设计思想,微服务设计就是对复杂系统解耦和重组的过程。
(插图5)
任何事物都有两面性,微服务也不例外,为我们带来好处的同时,也会让我们付出一定的代价。
(插图6)
微服务主张对系统公共和通用功能进行提取,由此可以减少系统的重复性建设工作。
(插图7)
微服务可使用不同的技术独立开发,使得开发模式更加灵活,也便于问题的独立解决。
(插图8)
那它的弊端是什么呢?随着系统的微服务化,服务之间的接口调用关系增加了不少,随之而来的就是,沟通成本提升了,问题定位的难度加大了,系统监控的开销增加了,增加了代码量的同时,也加大了系统维护的难度。
(插图9)
关于微服务的落地,业界有个知名的方法论,叫领域驱动设计,英文是Domain-Driven Design,简称DDD。
(插图10)
该方法论立足于为建立一个边界清晰、可复用的企业级中台业务模型提供理论依据,可用于指导微服务的边界划分和中台领域建模的设计。
(插图11)
DDD分为战略和战术两个维度。战略是指在业务层面上进行抽象和建模,战术则是在技术层面上考虑如何落实抽象和设计。
(插图12)
具体实施可大致分为三个步骤:
首先对业务系统进行切分,根据业务功能划分为若干个业务领域,然后逐一对各业务领域的功能属性进行梳理,将公共功能模块提取出来。
(插图9)
然后定义主领域模型,将功能逻辑相对完整的领域设立为主领域,以主领域模型为基准,横向扫描其他领域模型,将重复的公共模块合并到主领域模型,然后重构主领域模型。
(插图10)
最后在技术层面进行落地,以领域模型为依据,在系统技术层面上提供解决方案,完成微服务的拆分和设计。
(插图11)
微服务在技术实现层面,业界有哪些主流的开源框架?它们各自有哪些优势和不足?
(插图12)
Spring Cloud,为构建微服务架构应用提供了一整套基础工具和解决方案,降低了微服务开发和管理的难度。它是基于Spring Boot 框架的,Spring Boot是快速构建Spring应用的脚手架。
(插图13)
Dubbo ,是阿里开源的一款高性能轻量级的Java RPC 框架,它提供了三个核心能力,面向接口的远程方法调用、智能容错与负载均衡、服务自动注册和发现。
(插图14)
Tars,是腾讯内部使用的微服务框架,多年实践成果总结而成的开源项目,包含一整套开发框架与管理平台,兼顾多语言、易用性、高性能与服务治理,其理念是让开发更聚焦业务逻辑,让运营更高效。
(插图15)
Thrift,也是一个 RPC 框架,跨语言能力较强。它具有功能强大的软件堆栈和代码生成引擎,可构建在 C++、Java、Python、PHP 等多种语言间无缝结合的、高效的服务。
(插图16)
gRPC,是谷歌开源的高性能通用 RPC框架。gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩与单 TCP 连接上的多路复用请求等特性,这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
(插图17)
Spring Cloud 是目前应用最广泛的微服务框架,提供了较为完整的企业级实施微服务的解决方案。
(插图18)
它的聪明之处在于,没有重复造轮子,而是吸各家之长为己所用,形成了Spring Cloud自己的组件。
(插图19)
它把市场上那些经得起考验的分布式框架技术整合起来,通过Spring Boot进行封装,屏蔽掉那些晦涩难懂的细节,给开发者提供了一套简单易用的分布式系统开发工具包。
(插图20:解释spring boot是什么)
Spring Cloud容纳了很多组件,通过这些组件就可以相对容易地构建微服务系统。
(插图21)
Spring Cloud微服务框架提供了,服务治理、服务通信、服务网关、服务容错、服务安全、服务监控、服务配置等功能。
(插图22)
其中一些核心的功能组件,在这里我们来详细地说说。
(插图23)
先来说服务治理中心(Netflix Eureka),它负责对微服务架构中的服务实例进行集中管理,提供服务注册和服务信息查询的REST API,保存各可用服务实例的网络地址、端口、版本号、通信协议等信息。
(插图24)
再来说服务容错(Spring Cloud Hystrix ),它实现了断路器、线程隔离等⼀系列服务保护功能,阻止了故障节点之间可能引起的雪崩效应。
(插图25)
接着说服务网关(Spring Cloud Gateway),它旨在为微服务架构提供简单有效统一的 API 路由管理方式,它不仅提供路由方式,也具备安全、监控和限流的作用。
(插图26)
最后说服务通信,微服务框架中可选择的通信方式有三种:
HTTP REST方式,它使用http协议进行数据传递,json数据格式,使用简易,可读性高。
RPC方式,远程过程调用,二进制数据,性能最佳。
利用消息中间件进行通信。
在微服务中,推荐使用REST风格的调用,而非RPC。
(插图27)