目录
? ? ? ? 一个归档包(如war包)包含所有功能的应用程序通常称为单体应用,而架构单体应用的方法论(指采用单体应用架构的一种设计和开发理念),就是单体应用架构。
单体应用架构图:
总结:单体架构对一些简单的项目架构是比较适行的,但面对一些比较庞大的项目当单体架构的缺点就比较明显,这时候就需要根据项目业务流程复杂难度合理构建项目。
????????由于单体应用的各种缺点,在2014年的时候出现了一个大佬Martin Fowler(马丁·福勒)提出的微服务概念,从此微服务走向的世界的顶流。
截止到目前微服务并没有一个完全的定义,可能大家理解的微服务都不完全一样,下面是我对微服务的理解:
????????微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。?
????????Spring Cloud 是一个基于 Spring Boot 实现的云应用开发工具,它提供了一套微服务解决方案,包括服务治理????????、配置管理、消息总线、负载均衡、断路器、数据监控等功能。下面是一些 Spring Cloud 的核心模块:
服务治理(Eureka):?Eureka 是 Netflix 开源的一款提供服务注册和发现的产品,它提供了完整的 Service Registry 和 Service Discovery 实现。服务注册中心是微服务架构中的重要组成部分,主要用于实现微服务的自动化注册和发现。
????????基于REST(一种软件架构风格,一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性)的服务。主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移。
·?管理各种服务功能包括服务的注册、发现、熔断、负载、降级等,比如dubbo admin后台的各种功能。有了服务中心后,任何一个服务都不能直接去相互调用,必须通过注册中心来调用。
·?服务端提供服务注册,当客户端服务启动的时候,会主动向服务端进行注册,服务端会存储所有已经注册服务节点信息。服务端会管理这些节点信息,并且会将异常的节点移除服务列表。
负载均衡(Ribbon):?Ribbon 是 Netflix 发布的云中间层服务调用工具,它提供了一套完整的配置项,包括连接超时、重试、重试算法等。Ribbon 已经默认整合了服务发现组件 Eureka,为我们的服务提供了客户端负载均衡的功能。
声明式服务调用(Feign):?Feign 是一个声明式的 Web Service 客户端,它使得编写 Web Service 客户端变得更简单。在Spring体系中,只要是通过调用接口来进行某个操作的,应该都是使用了动态代理技术,比如MyBatis中通过接口对应到对应的XML中的SQL。
在Spring解析的时候,核心有2个步骤:
·?通过接口来动态注册Bean
·?对接口方法进行动态代理,比如Feign就是解析@GetMapping 这类注解将其转为对应的Http Get请求。
配置管理(Spring Cloud Config):?Spring Cloud Config 提供了服务器端和客户端的支持,用于外部化配置在分布式系统中的实现。配置服务器存储实际的配置内容,而客户端则负责从服务器获取并使用配置。
引入spring cloud config后,我们的外部配置文件就可以集中放置在一个git仓库里,再新建一个config server,用来管理所有的配置文件,维护的时候需要更改配置时,只需要在本地更改后,推送到远程仓库,所有的服务实例都可以通过config server来获取配置文件,这时每个服务实例就相当于配置服务的客户端config client,为了保证系统的稳定,配置服务端config server可以进行集群部署。
断路器(Hystrix):?在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。
服务网关(Zuul):?Zuul 是 Netflix 提供的一个基于 JVM 路由和服务端负载均衡器,主要用于动态路由、监控、弹性和安全性。
zuul的核心是一系列的filters, 其作用可以类比Servlet框架Filter。
Zuul的主要功能是路由和过滤器。是各种服务的统一入口,同时还会用来提供监控、授权、安全、调度等等;可以通过扩展ZuulFilter,在执行方法之前,做各种检查工作。
????????以上就是 Spring Cloud 的一些核心模块,每个模块都对应了微服务架构中的一种或多种功能,通过这些模块的组合,可以快速地构建和部署微服务架构的应用。?
1:首先把整个系统根据业务拆分成几个子系统。
2:每个子系统可以部署多个应用,多个应用之间使用负载均衡。
3:需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。
4:所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候也使用负载均衡。
5:服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据。
6:需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。
7:还需要一个监控功能,监控每个服务调用花费的时间等。
目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等,目前国内的中小企业用的大多数都是Dubbo,SpringCloud。
目前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等