SpringCloud(微服务)

一、SpringCloud基础

1、SpringCloud五大组件

  • 服务注册与发现——Netflix Eureka
  • 负载均衡:
    • 客户端负载均衡——Netflix Ribbon
    • 服务端负载均衡:——Feign(其也是依赖于Ribbon,只是将调用方式RestTemplete 更改成Service 接口)
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
Feign:基于Ribbon和Hystrix的声明式服务调用组件;
Zuul:API网关组件,对请求提供路由及过滤功能。

2、什么是微服务

微服务 (Microservices) 就是一些协同工作小而自治的服务。

微服务(Microservice Architecture) 是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。

究竟什么是微服务呢?我们在此引用ThoughtWorks 公司的首席科学家 Martin Fowler 于2014年提出的一段话:

原文:https://martinfowler.com/articles/microservices.html

汉化:https://www.cnblogs.com/liuning8023/p/4493156.html

  • 就目前而言,对于微服务,业界并没有一个统一的,标准的定义。
  • 但通常而言,微服务架构是一种架构模式,或者说是一种架构风格,它体长将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建,并且能狗被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应该根据业务上下文,选择合适的语言,工具(Maven)对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。

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

3、什么是微服务架构

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的

类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

**概念:**把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

**定义:**围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

**本质:**用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

类似于Idea中一个project包含了多个model

4、微服务的特点

优点:独立部署、扩展性强
缺点:运维的新挑战;接口的一致性;分布式的复杂性;

优点

  • 单一职责原则;
  • 每个服务足够内聚,足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求;
  • 开发简单,开发效率高,一个服务可能就是专一的只干一件事;
  • 微服务能够被小团队单独开发,这个团队只需2-5个开发人员组成;
  • 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;
  • 微服务能使用不同的语言开发;
  • 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如jenkins,Hudson,bamboo;
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值;
  • 微服务允许利用和融合最新技术;
  • 微服务只是业务逻辑的代码,不会和HTML,CSS,或其他的界面混合;
  • 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库;

缺点

  • 开发人员要处理分布式系统的复杂性;
  • 多服务运维难度,随着服务的增加,运维的压力也在增大;
  • 系统部署依赖问题;
  • 服务间通信成本问题;
  • 数据一致性问题;
  • 系统集成测试问题;
  • 性能和监控问题;

5、微服务架构

服务组件化;
按业务组织团队;
做”产品“的态度;
智能端点与哑管道(服务调用方式,实时,异步中间件)
去中心化治理(组件能针对不同的业务特点选择不同的技术平台)
去中心化管理数据(多个不同的MySql实例,各服务之间进行“无事务”的调用,数据一致性,只要求数据在最后的处理状态是一致的即可。补偿机制)
基础设施自动化(自动化测试、自动化部署)
容错设计(快速检测出故障资源并尽可能地自动回复服务是必须被设计和考虑的)
演进式设计

  • 围绕业务功能进行组织(organized around business capability),不再是以前的纵向切分,而改为按业务功能横向划分,一个微服务最好由一个小团队针对一个业务单元来构建。
  • 做产品而非做项目(product not project),不再是做完一个个项目,交付后就完工了,而是做产品,从设计编码到产品运维,做到全过程掌控和负责,即自己构建,自己运维(you build it,you run it)。
  • 智能终端加简单通道(smart endpoints and dumb pipe),使用基于资源的API,将大量逻辑放在客户端,而服务器端则着重于提供资源,推荐基于Web而不是在Web之后做复杂逻辑(be of the Web,not behind the Web)。
  • 去中心化管理(decentralized governance),自行其是,自我管理,不必在局限在一个系统里,不必围绕着一个中心。
  • 去中心化数据管理(decentralized data management),只管理和维护自己的数据,相互之间互不直接访问彼此的数据,只通过API来存取数据。
  • 基础设施自动化(infrastructure automation),每个微服务应该关注于自己的业务功能实现,基础设施应该尽量自动化——构建自动化、测试自动化、部署自动化、监控自动化。
  • 为应对失败而设计(design for failure),设计之初就要考虑高可靠性(high reliability)和灾难恢复(disaster recover),并考虑如何着手进行错误监测和错误诊断。
  • 演进式设计(evolutionary design),没有完美的架构,唯一不变的是变化。要善于应对变化,容易改变其设计和实现,因为其小,故而易变。

6、微服务技术栈

微服务条目 技术
服务开发 Springboot、Spring、SpringMVC
服务配置与管理 Netflix公司的Archaius、阿里的Diamond等
服务注册与发现 Eureka、Consul、Zookeeper等
服务调用 REST、RPC、gRPC
服务熔断器 Hystrix、Envoy等
负载均衡 Ribbon、Nginx等
服务接口调用(客户端调用服务发简单工具) Feign等
消息队列 kafka、RabbitMQ、ActiveMQ等
服务配置中心管理 SpringCloudConfig、Chef等
服务路由(API网关) Zuul等
服务监控 Zabbix、Nagios、Metrics、Spectator等
全链路追踪 Zipkin、Brave、Dapper等
服务部署 Docker、OpenStack、Kubernetes等
数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线 SpringCloud Bus

7、为什么选择springcloud作为微服务架构

1.造型依据
  • 整体解决方案和框架成熟度

  • 社区热度

  • 可维护性

  • 学习曲线

2.各大IT公司用的微服务架构有那些
  • 阿里Dubbo/HSF
  • 京东JSF
  • 新浪微博Motan
  • 当当网DubboX
3.各微服务框架对比
功能点/服务框架 Netflix/Spring cloud Motan gRPC Thrift Dubbo/DubboX
功能定位 完整的微服务框架 RPC框架,但整合了ZK或Consul,实现集群环境的基本的服务注册/发现 RPC框架 RPC框架 服务框架
支持Rest 是 Ribbon支持多种可插拔的序列化选择
支持RPC 是(Hession2)
支持多语言 是(Rest形式)
服务的注册/发现 是(Eureka) Eureka服务注册表,Karyon服务端框架支持服务注册和健康检查 是(zookeeper/consul)
负载均衡 是(服务端zuul+客户端Ribbon) Zuul-服务,动态路由 云端负载均衡 Eureka(针对中间层服务器) 是(客户端) 是(客户端)
配置服务 Netflix Archaius Spring cloud Config Server 集中配置 是(zookeeper提供)
服务调用链监控 是(zuul)Zuul提供边缘服务,API网关
高可用/容错 是(服务端Hystrix+客户端Ribbon) 是(客户端) 是(客户端)
典型应用案例 Netflix Sina Google Facebook
社区活跃度 一般 一般 已经不维护了(2017年以前)
学习难度 中等
文档丰富度 一般 一般 一般
其他 Spring Cloud Bus为我们的应用程序带来了更多管理端点 支持降级 Netflix内部在开发集成gRPC IDL定义 实践的公司比较多

【SpringCloud(微服务)】SpringCloud基础相关推荐

  1. SpringCloud微服务技术实践与总结(基础篇)

    1.认识微服务 1.1.单体架构 单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署. 单体架构的优缺点如下: 优点: 架构简单.部署成本低 缺点: 耦合度高(维护困难.升级困难) 1.2 ...

  2. 学习笔记:SpringCloud 微服务技术栈_实用篇①_基础知识

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 前言 学习视频链接 SpringCloud + RabbitMQ + Docker + Redis + 搜 ...

  3. springCloud(微服务)基础及五大组件

    版本:SpringCloud 格林威治 目录 SpringCloud基础 什么是软件架构? ​编辑软件架构类型:(根据产品来进行如何选择架构) 微服务架构: SpringCloud优缺点: 为什么选择 ...

  4. SpringCloud 微服务架构,适合接私活(附源码)

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...

  5. springboot2新版springcloud微服务,带你了解不一样的springboot2

    sb2.0新版springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin springbo ...

  6. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  7. SpringCloud微服务架构,Spring Cloud 服务治理(Eureka,Consul,Nacos),Ribbon 客户端负载均衡,RestTemplate与OpenFeign实现远程调用

    什么是SpringCloud 微服务架构 • "微服务"一词源于 Martin Fowler的名为 Microservices的博文,可以在他的官方博客上找到 http://mar ...

  8. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  9. 微服务 前台调用后台的慢的原因_20年IT农民工分享SpringCloud微服务架构实战文档...

    前言 越来越多的企业使用 SpringCloud 实现微服务架构设计.我们可以看到这样一种现象:不管是全新开发,还是系统重构,大家似乎都在争先恐后地使用微服务.对于一个Java开发人员来说,学习微服务 ...

  10. 快速搭建 SpringCloud 微服务开发环境的脚手架

    快速搭建 SpringCloud 微服务开发环境的脚手架 本文作者:HelloGitHub-秦人 本文适合有 SpringBoot 和 SpringCloud 基础知识的人群,跟着本文可使用和快速搭建 ...

最新文章

  1. 为什么谐振时电抗为0_变频串联谐振试验装置的接线原理
  2. 根据当前记录获取前一条与下一条记录常用 sql语句
  3. java mouselistener,Java MouseListener接口
  4. mysql dump hbase_mysqldump导出全数据库
  5. 从头学Qt Quick(3)-- 用QML写一个简单的颜色选择器
  6. h5 右下角浮动按钮_意派Epub360丨国庆黄金周将至,分享9个H5互动营销思路
  7. PHP. 02®. Ajax异步处理、常见的响应状态、XMLHttpRequest对象及API、ajax的get/post方法、...
  8. 4a怎么打开sqlserver_百元级别荣耀路由X3和小米路由4A,哪款真的香?
  9. NDK 下利用 arm-linux-androideabi-addr2line 定位 so 库问题点
  10. android simple-xml,使用Maven构建Android项目-dexer在simple-xml依赖项上失败
  11. [转载] JAVA的throw用法及扩展
  12. 快回家了,感觉什么事情都不想做,除了吃饭睡觉
  13. 【Django 2021年最新版教程30】django项目部署到华为云(nginx uWSGI mysql方式)
  14. session同步问题
  15. android dm 分区异常,硬盘分区时损坏,无法使用PQ和DM,如何修复
  16. 【MySQL】黑马教程MySQL数据库 MySQL基础(二)
  17. C语言实现贪吃蛇(四)----游戏存档读档(文件操作)
  18. 验证码识别平台哪个好?
  19. UE5 Gameplay 框架拆解
  20. linux gt; gt;gt;区别,linux中amp;gt;什么意思? - 懂得

热门文章

  1. 6.0 动态数码管 _ [AT89C51/2] [从零开始的单片机]
  2. PHP正式开发第1日
  3. C语言人民币的构造的关键,C语言程序设计 教学课件 任文 孔庆彦电子课件 全书习题及习题参考答案 第2章 C程序设计的初步知识.pdf...
  4. 百度智能云ABC赋能小程序,让开发更美好
  5. BMS系统相关的PE-53913NL详情及BMS局域网滤波器产品型号有哪些
  6. python复数类型及其特点_python 复数类型
  7. d2admin 登陆 笔记
  8. 深度相机(九)--OpenNI API及中间件说明
  9. 【感悟】战略上藐视敌人,战术上重视敌人
  10. 模块化设计的一般准则