SpringCloud学习笔记(一):微服务是什么?SpringCloud是什么?

一、什么是微服务

  1. 马丁福勒对微服务的概述:微服务架构一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协作、相互配合,为用户提供最终价值。服务之间采用轻量级的通讯机制互相沟通(通常是基于Http和RESful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据储存。

  2. 技术维度理解 :微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底的去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是小而独立的处理过程,类似进程概念,能够自行独立启动或者销毁,拥有自己独立的数据库

  3. 微服务与微服务架构:

    1. 微服务:强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题、提供落地的对应服务的一个服务应用,它具体是使用SpringCloud开发的一个小模块,专业的事情交给专业的模块来做,一个模块制作一个事情。

    2. 微服务架构:微服务架构一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协作、相互配合,为用户提供最终价值。强调的是多个微服务形成的一个对外的整体。

二、微服务的优缺点分别是什么?

  1. 优点:

    1. 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求

    2. 开发简单、开发效率高,一个服务可能就是注意的只做一件事情

    3. 微服务能够被小团队单独开发,2到5个人的开发人组成

    4. 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的

    5. 微服务能使用不同的语言开发

    6. 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署。

    7. 微服务容易被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。

    8. 微服务只是业务逻辑的代码,不会和HTML,css或其他界面组件混合

    9. 每个微服务可以有自己独立的数据库,也可以有统一的数据库

  2. 缺点:

    1. 开发人员要处理分布式系统的复杂性

    2. 多服务运维难度,随着服务的增加,运维的压力也在增大

    3. 系统部署依赖

    4. 服务间通信成本

    5. 数据一致性

    6. 系统集成测试

    7. 性能监控

三、微服务技术栈有哪些

  • 服务开发:springboot、spring、springMVC

  • 服务配置与管理:Netflix公司的Archaius、阿里的Diamond

  • 服务注册与发现:Eureka、Consul、zookeeper

  • 服务调用:Rest、RPC、gRPC

  • 服务熔断器:Hystrix、Envoy

  • 服务负载均衡:Ribbon、Nginx

  • 服务接口调用(客户端调用服务的简化工具):Feign

  • 消息队列:Kaka、RabbitMq、ActiveMq

  • 服务配置中心管理:SpringCloudConfig、Chef

  • 服务路由(api网关):Zuul

  • 服务监控:Zabbix、Nagios、Metrics、Spectator

  • 全链路追踪:Zipkin,Brave、Dapper

  • 服务部署:Docker、OpenStack、Dapper

  • 数据流操作开发包:SpringCloud Stream(封装与Redis、Rabbit、kafka等发送接收消息)

  • 事件消息总线:SpringCloud Bus

四、为什么选择SpringCloud作为微服务架构

  1. 选型依据

    1. 整体解决方案和框架成熟度

    2. 社区热度

    3. 可维护性

    4. 学习曲线

  2. 当前各大It公司用的微服务架构有哪些

    1. 阿里Dubbo/HSF(好舒服)

    2. 京东JSF(京舒服)

    3. 新浪微博Motan(茅台)

    4. 当当网DubboX

  3. 各微服务架构对比

    • 一个微服务应满足微服务架构各维度需求,并且看重如何满足

功能点/服务框架

备选方案

框架

Netflix/SpringCloud

Motan

gRPC

Thrift

Dubbo/Dubbox

功能定位

完整的微服务架构

PRC架构,但整合了zk或Consul,实现集群环境的基本的服务注册发现

RPC框架

RPC框架

服务框架

支持Rest

是,Ribbon支持多种可插拔的序列化选择

支持RPC

支持多语言

服务注册/发现

是(Eureka)

Eureka服务注册表,Karyon服务端框架支持服务自注册和健康检查

是(zookeeper、Consul)

负载均衡

是(服务端zuul+客户端Ribbon)Zuul服务,动态路由  云端负载均衡

Eureka(针对中间层服务器)

是(客户端)

是(客户端)

配置服务

Netfix Archaius SpringCloud Config Server集中配置

是(zookeeper)

服务调用链监控

是(zuul) zuul提供边缘服务,Api网关

是(客户端)

高可用/容错

是(服务端Hystrix+客户端Ribbon)

是(客户端)

典型应用案例

Netflix

sina

Google

Facebook

社区活跃度

一般

一般

学习难度

文档丰富度

一般

一般

一般

其他

Spring cloud Bus带来了更多管理端点

支持降级

Netflix内部在开发集成gRPc

IDL定义

实践公司比较多

五、springCloud是什么

  1. 分布式系统的简化版: 构建分布式系统不需要复杂且容易出错。Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序。Spring Cloud构建于Spring Boot之上,使开发人员可以轻松入门并快速提高工作效率。(摘自spring官网)

  2. springCloud,基于springBoot提供了一套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。

  3. SpringCloud利用springboot的开发便利性巧妙的简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速搭建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,他们都可以用springBoot的开发风格做到一件启动和部署​

  4. springCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶​

六、springCloud和springBoot是什么关系

  1. springCloud关注宏观  依赖于springboot  关注全局的微服务协调治理框架

  2. SpringBoot关注微观  可以独立使用  专注于快速方便的开发单个个体微服务

七、SpringCloud和Dubbo有哪些区别  哪些优缺点可以技术选型

dubbo

SpringCloud

服务注册中心

zookeeper

SpringCloud Netflix Eureka

服务调用方式

Rpc

Rest Api

服务监控

dubbo-monitor

springBoot Admin

断路器

不完善

SpringCloud Netflix Hystrix 

服务网关

SpringCloud Netflix Zuul

分布式配置

SpringCloud Config

服务跟踪

SpringCloud Sleuth

消息总线

SpringCloud Bus

数据流

SpringCloud Stream

批量任务

SpringCloud Task

最大区别:SpringCloud抛弃了Dubbo的RPC通信,采用的是局域HTTP的REST方式

dubbo的定位是RPC框架,而SpringCloud的目标是微服务框架下的一站式解决方案,dubbo可以类比到Netflix oss技术栈,而SpringCloud集成了Netflix Oss作为分布式服务治理解决方案,但除此之外springCloud还提供了包括config、stream、security、sleuth等等分布式问题解决方案

猜你喜欢

转载自blog.csdn.net/qq_34886352/article/details/81237430