什么是微服务?
微服务架构就是将单体的应用程序分成多个应用程序,这多个应用程序就成为微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理
微服务之间是如何独立通讯的?
-
同步(REST HTTP协议,RPC TCP 协议)
-
异步(消息中间件,例如Kafka、ActiveMQ、RabbitMQ、RocketMQ)
-
REST HTTP 协议(编写restful风格接口,调用接口)(springcloud使用REST通信)
REST 请求在微服务中是最为常用的一种通讯方式,它依赖于 HTTP\HTTPS 协议。RESTFUL 的特点是:
-
每一个 URI 代表 1 种资源
-
客户端使用 GET、POST、PUT、DELETE 4 个表示操作方式的动词对服务端资源进行操作:GET 用来获取资源,POST 用来新建资源(也可以用于更新资源),PUT 用来更新资源,DELETE 用来删除资源
-
通过操作资源的表现形式来操作资源
-
资源的表现形式是 XML 或者 HTML
-
客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息
举例,有一个服务方提供了如下接口:另外一个服务需要去调用该接口,调用方只需要根据 API 文档发送请求即可获取返回结果。通过这样的方式可以实现服务之间的通讯。
为什么需要学习Spring Cloud
spingboot简省xml、springmvc、mybatis错综复杂的配置
springcloud基于spingboot的优雅简洁,基于SpringBoot把市场上优秀的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理
什么叫做开箱即用?即使是当年的黄金搭档dubbo+zookeeper下载配置起来也是颇费心神的!而springcloud完成这些只需要一个jar的依赖就可以了!
springcloud大多数子模块都是直击痛点,像zuul解决的跨域,fegin解决的负载均衡,hystrix的熔断机制等等等等
Spring Cloud 是什么
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
SpringCloud的优缺点
优点:
- 耦合度比较低。不会影响其他模块的开发。
- 减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发。
- 配置比较简单,基本用注解就能实现,不用使用过多的配置文件。
- 微服务跨平台的,可以用任何一种语言开发。
- 每个微服务可以有自己的独立的数据库也有用公共的数据库。
- 直接写后端的代码,不用关注前端怎么开发,直接写自己的后端代码即可,然后暴露接口,通过组件进行服务通信。
缺点:
- 部署比较麻烦,给运维工程师带来一定的麻烦。
- 针对数据的管理比麻烦,因为微服务可以每个微服务使用一个数据库。
- 系统集成测试比较麻烦
- 性能的监控比较麻烦。【最好开发一个大屏监控系统】
总的来说优点大过于缺点,目前看来Spring Cloud是一套非常完善的分布式框架
SpringBoot和SpringCloud的区别?
SpringBoot专注于快速方便的开发单个个体微服务。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,
为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于依赖的关系
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。
Spring Cloud 和dubbo区别?
(1)服务调用方式:dubbo是RPC ,springcloud 是Rest Api
(2)注册中心:dubbo 是zookeeper, springcloud是eureka,也可以是zookeeper
(3)服务网关,dubbo本身没有实现,只能通过其他第三方技术整合,springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素。
大型网站架构演变过程
传统架构 → 分布式架构 → SOA架构 → 微服务架构
- 分布式架构
分布式架构就是将传统结构按照模块进行拆分,不同的人负责不同的模块,不会产生代码冲突问题,方便开发。
- SOA架构
SOA架构就是将业务逻辑层提取出来,将相似的业务逻辑形成一个服务,提供外部访问接口,服务之间访问通过RPC调用实现。
- 微服务架构
微服务类似于SOA架构,但是比SOA架构粒度更细,更轻量。
- 微服务架构与SOA架构区别
SOA基于WebService和ESP实现,底层基于HTTP协议和使用XML方式传输,XML在网络传输过程中会产生大量冗余。微服务由SOA架构演变而来,继承了SOA架构的优点,同时对SOA架构缺点进行改善,数据传输采用JSON格式,相比于XML更轻量和快捷,粒度更细,更加便于敏捷开发。SOA数据库会存在共享,微服务提倡每个服务连接独立的数据库。
开发概念以及技术理解
服务注册与发现
-
为什么需要服务注册与发现?
在服务启动时,服务提供者会向注册中心注册服务,暴露自己的地址和端口等,注册中心会更新服务列表。服务消费者启动时会向注册中心请求可用的服务地址,并且在本地缓存一份提供者列表,这样即便注册中心宕机了,仍然可以正常调用服务。
如果提供者集群发生变更,注册中心会将变更推送给服务消费者,更新可用的服务地址列表建立各个服务之间联系的纽带
-
典型的服务发现组件
Zookeeper(雅虎Apache)Eureka(Netfix)
Nacos(Alibaba)
Consul(Google)
小节面试题
为什么要将服务注册到nacos?(为了更好的查找这些服务)
在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?(5秒心跳)
对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
服务启动时如何找到服务启动注册配置类?(NacosNamingService)
服务消费方是如何调用服务提供方的服务的?(RestTemplate)
配置中心
-
传统项目处理配置的问题
- 静态化配置: 大多数在项目配置写在例如 application.propertie,做法虽然简单,但如果参数需要修改,就非常的不灵活,甚