SpringCloud学习笔记(一):微服务是什么?SpringCloud是什么?
一、什么是微服务马丁福勒对微服务的概述:微服务架构一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协作、相互配合,为用户提供最终价值。服务之间采用轻量级的通讯机制互相沟通(通常是基于Http和RESful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的...
一、什么是微服务
-
马丁福勒对微服务的概述:微服务架构一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协作、相互配合,为用户提供最终价值。服务之间采用轻量级的通讯机制互相沟通(通常是基于Http和RESful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据储存。
-
技术维度理解 :微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底的去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是小而独立的处理过程,类似进程概念,能够自行独立启动或者销毁,拥有自己独立的数据库
-
微服务与微服务架构:
-
微服务:强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题、提供落地的对应服务的一个服务应用,它具体是使用SpringCloud开发的一个小模块,专业的事情交给专业的模块来做,一个模块制作一个事情。
-
微服务架构:微服务架构一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协作、相互配合,为用户提供最终价值。强调的是多个微服务形成的一个对外的整体。
-
二、微服务的优缺点分别是什么?
-
优点:
-
每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求
-
开发简单、开发效率高,一个服务可能就是注意的只做一件事情
-
微服务能够被小团队单独开发,2到5个人的开发人组成
-
微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的
-
微服务能使用不同的语言开发
-
易于和第三方集成,微服务允许容易且灵活的方式集成自动部署。
-
微服务容易被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。
-
微服务只是业务逻辑的代码,不会和HTML,css或其他界面组件混合
-
每个微服务可以有自己独立的数据库,也可以有统一的数据库
-
-
缺点:
-
开发人员要处理分布式系统的复杂性
-
多服务运维难度,随着服务的增加,运维的压力也在增大
-
系统部署依赖
-
服务间通信成本
-
数据一致性
-
系统集成测试
-
性能监控
-
三、微服务技术栈有哪些
-
服务开发: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作为微服务架构
-
选型依据
-
整体解决方案和框架成熟度
-
社区热度
-
可维护性
-
学习曲线
-
-
当前各大It公司用的微服务架构有哪些
-
阿里Dubbo/HSF(好舒服)
-
京东JSF(京舒服)
-
新浪微博Motan(茅台)
-
当当网DubboX
-
-
各微服务架构对比
-
一个微服务应满足微服务架构各维度需求,并且看重如何满足
-
功能点/服务框架 | 备选方案 |
|
|
|
|
框架 | 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 | | |
|
社区活跃度 | 高 | 一般 | 高 | 一般 | 高 |
学习难度 | 中 | 低 | 高 | 高 | 低 |
文档丰富度 | 高 | 一般 | 一般 | 一般 | 高 |
其他 | Spring cloud Bus带来了更多管理端点 | 支持降级 | Netflix内部在开发集成gRPc | IDL定义 | 实践公司比较多 |
五、springCloud是什么
-
分布式系统的简化版: 构建分布式系统不需要复杂且容易出错。Spring Cloud为最常见的分布式系统模式提供了简单易用的编程模型,帮助开发人员构建弹性,可靠和协调的应用程序。Spring Cloud构建于Spring Boot之上,使开发人员可以轻松入门并快速提高工作效率。(摘自spring官网)
-
springCloud,基于springBoot提供了一套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
-
SpringCloud利用springboot的开发便利性巧妙的简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速搭建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,他们都可以用springBoot的开发风格做到一件启动和部署
-
springCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶
六、springCloud和springBoot是什么关系
-
springCloud关注宏观 依赖于springboot 关注全局的微服务协调治理框架
-
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等等分布式问题解决方案
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)