SpringCloud
1.从面试题开始
- 什么是微服务
- 微服务之间是如何独立通信的
- SpringCloud和Dubbo有哪些区别
- SpringBoot和SpringCloud,请谈谈对他们的理解
- 什么是服务熔断?什么是服务降级
- 微服务的优缺点分别是什么?说下你在项目开发中碰到的坑
- 你所知道的微服务技术栈有哪些?
- Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别
2.微服务概述
微服务是什么?
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单独的业务服务,一个服务只做自己负责的一件事情,从技术角度看就是一种小而独立的处理过程,类似于进程概念,能够自动单独启动或者销毁,拥有自动独立的数据库。
微服务和微服务架构?
微服务
强调的是服务的大小,他关注的是某一个业务点,是具体解决某一问题/提供对应服务的一个服务应用,狭义的讲,可以看成maven工程中的一个module。
微服务架构
微服务架构是一种架构模式,他提倡将单一的应用程序拆分成一组小的服务,服务之间相互调协调、相互配合、对外提供最终的价值。每一个服务运行独立的进程中,服务和服务之间通过轻量级的通信进行相互调用(通常使用的是Http协议的RESTful API协议)。每一个服务都围绕自己具体的业务构建,可以单独的部署到测试或者类生产环境等当中,另外,避免统一的集中式的服务管理机制、对某一个服务来说、可以根据自己的业务情况选择合适的语言和工具进行构建。
微服务的优点和缺点
优点
- 每一个服务都足够内聚、足够小、代码容易理解
- 开发简单、开发效率高,一个微服务只做一件事情
- 微服务能够让一个小团队单独开发
- 微服务是松耦合的、无论是在开发阶段或是部署阶段都是独立的
- 可以使用不同的语言
- 易于和第三方集成,持续集成工具
- 可以良好的集成最新技术
- 微服务只是逻辑代码,不会和HTML和CSS或者其他页面混合
- 都有自己的存储能力,可以有自己单独的数据库,也可以统一的数据库
缺点
- 运维人员要求比较高
- 数据一致性
- 开发人员需要处理分布式程序的复杂性
- 系统之间依赖性
- 系统测试
- 服务器间通信成本
微服务技术栈有哪些?
微服务条目 | 落地实现 | 备注 |
---|---|---|
服务开发 | Springboot、Spring、SpringMVc | |
服务配置与管理 | Netflix公司的Archaius、阿里的Diamond | |
服务的注册和发现 | Eureka、Consul、Zookeeper等 | |
服务的调用 | Rest、RPC、gRPC | |
服务熔断器 | Hystrix、Envoy等 | |
负载均衡 | Ribbon、Nginx等 | |
服务接口调用(客户端调用服务端的简化工具) | Feign等 | |
消息队列 | Kafaka、RabbitMQ、ActiveMQ等 | |
服务配置中心管理 | SpringCloudConfig、chef等 | |
服务路由(API网关) | Zuul等 | |
服务监控 | Zabbix、Nagios、Metrics、Spectator等 | |
全链路追踪 | Zipkin、Brave、Dapper等 | |
服务部署 | Docker、OpenStack、Kubernetes等 | |
数据量操作开发包 | SpringCloud Stream(封装与Rdis、Rabbit、Kafaka等收发消息) | |
事件消息总线 | SpringCloud Bus | |
为什么选用SpringCloud作为微服务架构?
选型依据
- 整体解决方案和框架成熟度
- 社区热度
- 可维护性
- 学习曲线
当前各大互联网公司的微服务架构有哪些?
- 阿里的Dubbo/HSF
- 京东JSF
- 新浪微博Motan
- 当当网Dubbox
各大微服务框架对比
功能点/服务框架 | Netflix/Spring cloud | Motan | gRPC | Thrift | Dubbo/Dubbox |
---|---|---|---|---|---|
功能定位 | 完整的微服务框架 | RPC框架、单整合了ZK或者Consul,实现集群环境的基本服务注册/发现 | RPC框架 | RPC框架 | 服务框架 |
支持Rest | 是,Ribbon支持多种可插拔的序列化选择 | 否 | 否 | 否 | 否 |
支持RPC | 否 | 是(Hession2) | 是 | 是 | 是 |
支持多语言 | 是(Rest) | 否 | 是 | 是 | 否 |
服务注册/发现 | 是(Eureka)Eureka服务注册表,Karyon服务端框架支持服务自注册和健康检查 | 是(ZK/Consul) | 否 | 否 | 是 |
负载均衡 | 服务端Zuul+客户端Ribbon;Zuul服务动态路由,云端负载均衡;Eureka针对中间层服务器 | 是(客户端) | 否 | 否 | 是(客户端) |
配置服务 | Netflix Archaius SpringCloud Config Server集中配置 | 是(ZK提供) | 否 | 否 | 否 |
服务调用链监控 | 是(Zuul),Zuul提供边缘服务,API网关 | 否 | 否 | 否 | 否 |
高可用/容错 | 是(服务端Hystrix+客户端Ribbon) | 是(客服端) | 否 | 否 | 是(客户端) |
典型应用案例 | Netfilx | Sina | |||
社区活跃 | 高 | 一般 | 高 | 一般 | 停止了五年 |
学习难度 | 中等 | 低 | 高 | 一般 | 低 |
文档丰富度 | 高 | 一般 | 一般 | 一般 | 高 |
3.SpringCloud入门概述
是什么?
SpringCloud,基于Springboot提供的一套微服务解决方案,包括服务注册和发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件,除了基于Netflix的开源组件做了高度抽象的封装之外,还有一些选型中立的开源组件。
SpringCloud利用Springboot的开发便利性巧妙地简化了分布式开发系统的基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等,它们都可以用Springboot的开发风格做到一键启动和部署。
Springboot并没有重复的造轮子,它只是将目前各家公司开发的比价成熟、经得起实际考研的服务框架组合起来,通过SpringBoot风格进行在封装屏蔽了复杂的配置和实现原理,最终给开发者留出了一套简单易用、易部署和易维护的分布式系统开发工具包。
SpringCloud=分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称服务全家桶。
SpringCloud和Springboot是什么关系?
- SpringBoot专注于快速方便的开发单个个体微服务。
- SpringCloud是关注全局的微服务协调治理架构。
- SpringBoot可以单独使用开发项目、单SpringCloud离不开SpringBoot。
Dubbo是怎么到SpringCloud的?那些优缺点?
- 最大区别SpringCloud抛弃了RPC通信,采用是基于HTTP的REST方式
- 品牌机和组装机的区别
- 社区支持和更新力度
成熟的互联网架构(分布式+服务治理Dubbo)
见各大微服务框架对比
总结Cloud和Dubbo
- Dubbo的定位始终是一款RPC框架、而SpringCloud的目标是微服务架构的一站是解决方案
- Cloud和Dubbo只能二选一
能干啥?
上边的特性都有。