微服务

1.1什么是微服务
微服务:是一种架构风格。不是组件,不是框架。架构风格就说明没有强制性,没有绝对标准的答案,是一种建议而已

  • 一系列微小的服务共同组成(一个大服务拆分成各个小服务)

  • 跑在自己的进程里(一个微服务对应一个进程,进程是独立的,耗资源的,部署微服务时尽量用多台服务器分散出来来减轻微服务的集中压力)

  • 每个服务为独立的业务开发

  • 独立部署(分开部署)

  • 分布式的管理,以前是集中式的管理(保障系统的安全稳定)
    1.1.2 系统的演进
    单一架构(spring mvc)
    在这里插入图片描述优点:

  • 容易测试

  • 容易部署(单一独立的一套,tomcat只用部署一台)

缺点:

  • 开发效率低(所有服务都在一起,耦合度高)
  • 代码维护难(业务耦合高,思前想后要考虑会不会对其他代码影响很大)
  • 部署不灵活(所有服务在一起,修改一个整个服务都要重新部署)
  • 稳定性不高(如果一个出bug会影响整个项目出问题)
  • 扩展性不够, 不能做到商品服务部署10台服务器,订单部署一台
    (造成资源浪费,例如有十个人逛商品,只有一个人下单,希望做到商品服务部署十台订单服务部署一台)
1.1.2 微服务架构

在这里插入图片描述(画图可用app.diagrams.net)
缺点:需要知道所有的IP,一个更改全都要进行修改,引入了服务的注册中心(类似中介),订单服务——>服务注册中心(将服务放到注册中心),商品服务——>服务注册中心(将信息注册到注册中心,进行托管),服务注册中心——>订单服务(发现,将需要的信息进行反馈)

1.1.3 分布式和集群

将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式),然后部署多个相同的子系统在不同的服务器上(这叫集群),部署在不同服务器上的同一个子系统应做负载均衡

分布式:需要按照功能点把大系统拆分成各个独立的子系统,每个子系统对应每个独立功能,对每个子系统(专业名词叫节点)进行集群,需要系统之间配合才能完成整个业务逻辑。

集群:是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性和可用性的服务平台。(万一有损坏可进行替换,解决高可用)

负载均衡:把任务比较均衡的分配到集群环境下的计算和网络资源。

集群的可扩展和高可用:

可扩展性:集群的性能不限于单一的服务实体,新的服务实体可以动态的加入到集群中(举例:例如购物在平时是十万购买量,在双十一等情况下1000万购买量,服务器则需要增加10倍的服务器,针对特殊情况做好可扩展的能力)

高可用性:同样的服务可以由多个服务实体提供,如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。

分布式和集群的区别(关系)?

分布式中每个节点,都可以做集群。而集群不一定是分布式的。

集群能保证系统的并发量和高可用。保证集群高可用,必须要有三台或三台以上的服务器。Redis集群,五台服务器间采用自动选举机制选出主从服务器,采用乒乓机制连接,当有其中一台机器挂掉,超过半数以上机器乒乓机制连不上一台机器时,我们就可以发现这个问题,并拿坏掉的服务器去修理。

优点:

1、把模块拆分,使用接口通信,降低模块之间的耦合度(降低它们的依赖程度和关联性)。

2、把项目拆分成若干个子项目,不同的团队负责不同的子项目(对于团队来说可以更好地分配任务)。

3、增加功能时只需要再增加一个子项目,调用其他系统的接口就可以。

4、可以灵活的进行分布式部署。

缺点:

1、系统之间交互需要使用远程通信,接口开发增加工作量。

2、各个模块有一些通用的业务逻辑无法共用。(通过Dubbo提供服务解决这一问题)

3、沟通成本很高。

1.2.1 springCloud介绍

spring springBootspringCloud关系

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

1.2.2 springCloud的子项目

springCloud的子项目非常多,重点介绍Eureka(服务的注册中心)、Ribbon(负载均衡)、Zuul(网关)、Hystrix(熔断器)、Config(配置中心)

1.2.3dubbo和springCloud(百度百科)

Dubbo(读音[ˈdʌbəʊ])是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [1] Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Remoting: 网络通信框架,实现了 sync-over-async 和Logo
request-response 消息机制.
RPC: 一个远程过程调用的抽象,支持负载均衡、容灾和集群功能
Registry: 服务目录框架用于服务的注册和服务事件发布和订阅
Provider
暴露服务方称之为“服务提供者”。
Consumer
调用远程服务方称之为“服务消费者”。
Registry
服务注册与发现的中心目录服务称之为“服务注册中心”。
Monitor
统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。
(1) 连通性:
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小
监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示
服务提供者向注册中心注册其提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销
服务消费者向注册中心获取服务提供者地址列表,并根据负载算法直接调用提供者,同时汇报调用时间到监控中心,此时间包含网络开销
注册中心,服务提供者,服务消费者三者之间均为长连接,监控中心除外
注册中心通过长连接感知服务提供者的存在,服务提供者宕机,注册中心将立即推送事件通知消费者
注册中心和监控中心全部宕机,不影响已运行的提供者和消费者,消费者在本地缓存了提供者列表
注册中心和监控中心都是可选的,服务消费者可以直连服务提供者
(2) 健壮性:
监控中心宕掉不影响使用,只是丢失部分采样数据
数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但不能注册新服务
注册中心对等集群,任意一台宕掉后,将自动切换到另一台
注册中心全部宕掉后,服务提供者和服务消费者仍能通过本地缓存通讯
服务提供者无状态,任意一台宕掉后,不影响使用
服务提供者全部宕掉后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复
(3) 伸缩性:
注册中心为对等集群,可动态增加机器部署实例,所有客户端将自动发现新的注册中心
服务提供者无状态,可动态增加机器部署实例,注册中心将推送新的服务提供者信息给消费者
在这里插入图片描述Spring Cloud是一个开发工具集,含了多个子项目

  • 利用SpringBoot的开发便利
  • 主要是基于对Netflix开源组件的进一步封装
  • spring cloud简化了分布式开发

1.3 RestTemplate

  1. 微服务之间的调用采用RESTFul风格API

  2. RestTemplate是Spring提供的工具类,简化服务调用

  3. Spring-Cloud中的部分组件也对RestTemplate提供了扩展支持
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值