Spring Cloud 简单入门

1、微服务简介

微服务核心就是把传统的单机应用,根据业务拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是微服务。

微服务架构提倡:
① 将一个单一应用程序开发为一组小型服务
② 每个服务运行在自己的进程中
③ 服务之间通过轻量级的通信机制(http rest api)
④ 每个服务都能够独立的部署
⑤ 每个服务甚至可以拥有自己的数据库

微服务优点:
① 每个服务足够小,足够内聚,代码更加容易理解,专注一个业务功能点(对比传统应用,可能改几行代码需要了解整个系统)
② 开发简单,一个服务只干一个事情
③ 微服务能够被2-5个人的小团队开发,提高效率
④ 按需伸缩,服务松耦合,每个服务都能够开发部署
⑤ 前后端分离, 作为java开发人员,我们只要关心后端接口的安全性以及性能,不要去关注页面的人机交互
⑥ 一个服务可拥有自己的数据库,也可以多个服务连接同一个数据库

微服务缺点:
① 增加了运维人员的工作量,以前只要部署一个war包,现在可能需要部署成百上千个war 包 (k8s+docker+jenkins )
② 服务之间相互调用,增加通信成本
③ 数据一致性问题(分布式事务问题)
④ 性能监控等,问题定位

2、Spring Cloud

Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、 分布式会话、集群状态)。

官网: https://spring.io/projects/spring-cloud
中文文档: https://www.springcloud.cc/
Spring Cloud中国社区:http://springcloud.cn/

Spring Cloud 微服务架构生态圈:

微服务架构技术栈实现技术
服务开发springboot,springmvc
服务配置config
服务注册与发现spring cloud eureka
服务调用ribbon,feign
服务熔断hystrix
服务全链路监控sleuth+zipkin
服务部署docker k8s

Spring Cloud Netflix包含的组件:

Eureka,服务注册和发现,它提供了一个服务注册中心和服务发现的客户端, 还有一个方便查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。

Zuul,网关,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。

Ribbon,负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候, 如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。

Feign,服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。

Hystrix,监控和断路器。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。

Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。

Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统 一查看。这样就不需要挨个打开一个个的页面一个个查看。

在这里插入图片描述

3、RestTemplate实现服务间调用

Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接, 我们只需要传入url及返回值类型即可。相较于HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。 在SpringBoot中可以通过RestTemplate 调用方式来进行服务调用,比如user服务(服务 消费者)调用order服务(服务提供者):

 String url = "http://localhost:8010/order/findOrderByUserId/"+id;
 ResponseEntity<List> responseEntity = restTemplate.getForEntity(url,List.class);
  List<Order> orderList = responseEntity.getBody();

什么是Rest和RESTful ?

Rest就是一种设计API的模式,最常用的数据格式是JSON。 Rest架构的主要原则:

网络上的所有事物都被抽象为资源
每个资源都有一个唯一的资源标识符
同一个资源具有多种表现形式(xml,json等)
对资源的各种操作不会改变资源标识符
所有的操作都是无状态的

符合REST原则的架构方式即可称为RESTful

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值