Spring Cloud项目实践【1 基本概念篇】

来源:互联网 发布:android 内存回收算法 编辑:程序博客网 时间:2024/05/29 02:39

前言

Spring Cloud入门教程这里推荐一篇博文方志朋 史上最简单的 SpringCloud 教程 | 终章写的比较通俗易懂,适合入门的朋友观看,本文也是在这基础上进行的项目实践。本文完全是个人目前的理解,肯定有些不妥和不对的地方,这里记录下来方便后续记忆。这里假设你已经会以下技术:

  1. 已经写过完整的传统web网站开发项目,知道struts,spring,spring mvc,mybatis,hibernate等流行框架。
  2. 已经掌握过maven技术,并知道如何部署maven项目

分布式概述

一开始有人就有疑问,我已经掌握了一个web网站的开发,为什么>要学习分布式?分布式应用是用来处理高并发,高响应的问题而出>现的。我们只有明白为什么要用分布式才会有学习的动力以及后续>的理论基础

传统的web开发是网页端发起请求后台获取请求(action or controller)并通过service处理业务这里通常还需要数据库获取数据dao,最终返回一个处理结果给客户端。

Created with Raphaël 2.1.0客户端1客户端1服务端服务端访问,请求业务处理action/controller->service->daoaction/controller<-service<-dao返回,处理的结果。

当业务扩展后,需要处理多并发。这时候可以用 负载均衡【Nginx】+集群来扩展服务端的性能。

Created with Raphaël 2.1.0客户端客户端负载均衡负载均衡服务端1服务端1服务端2服务端2访问,请求业务处理访问,请求业务处理返回,处理的结果。访问,请求业务处理返回,处理的结果。返回,处理的结果。

这里服务端可以先理解为tomcat,也就是前期可以先搭建nginx负载均衡用来分发请求到不同的服务端(tomcat)。


当业务量进一步拓展的时候我们就需要把服务端里面的controller ,service,dao进行拆分成不同的项目分开部署。同时用上负载均衡。也就是一个请求,他可以分发到不同的controller上面,controller可以通过负载均衡调用不同服务器上的service,service再通过负载均衡调用不同的dao。

Created with Raphaël 2.1.0客户端客户端负载均衡负载均衡服务A【controller】服务A【controller】负载均衡A负载均衡A服务B【DAO】服务B【DAO】访问,请求业务处理返回,处理的结果。访问,请求业务处理返回,处理结果访问,请求业务处理返回,处理的结果。访问,请求业务处理返回,处理结果

到后面就变成无数个服务相互间的访问了,每个服务单独一个服务器。这也就是RPC远程服务调用,这里先说理论,具体如何实现后面再描述。这里图画的不是很严谨,大概意思表述到位了。


这里我们需要知道每个服务具体在哪里,才能让每个服务去互相访问,也就是服务发现。常用的服务发现有zookeeper/eureka,这两个的区别有兴趣的可以自行百度。eureka更适合web项目的服务发现,zookeeper更适合分布式计算的服务发现。所以我们要认识到服务发现的重要性,每个服务向服务发现服务器注册服务,调用的时候,由服务发现服务器告诉每个服务的访问地址。


因为所有的服务是分开的,那么配置文件分开放会导致后续更新程序或者更改配置文件非常不方便。想象一下100台机器部署同一个服务,我改一个配置要改100个地方是不是很不方便。这里就有配置服务器的概念。服务的配置来访问配置服务器进行获取,并且还可以在不停止服务的情况下更新更改配置文件的内容,使其马上生效。这里还需要一个消息队列,用来通知所有的服务需要从配置服务器重新获取配置的信息。消息队列有activeMQ,rubbitMQ等。区别也请自行百度。spring cloud使用的是后者。


因为服务特别多,我希望/a/*的连接都指向service-a这个服务,/c/*的连接地址都指向service-c这个服务,这里就有另外一个概念:智能路由,spring cloud提供了Netflix-zuul进行智能路由服务和过滤。


以上这些可以组成一个基本的分布式架构。其中可能还有需要一些其他的服务,例如需要监控每个服务调用的关联关系服务链路追踪【sleuth(zipkin)】以及请求时间过长无响应的熔断器,当然如果我们一个个去把这些组件组合起来非常耗时,并且还要处理他们之间的兼容配置,协同工作等。所以spring-cloud诞生了,作为微服务框架,他帮你把这些所需的组件组合起来,并且使你的配置最小化,约定优先配置概念让你可以轻松构建自己的分布式服务。


描述的不好的地方望提出修正。了解了基本概念希望可以好好认真的学习一下上面推荐的博文。后续将基于博文的代码进行构建自己的分布式项目。时候不早了,晚安!