术语‘云’已经被过度使用了,每个软件供应商都有云,每个软件供应商的平台都是支持云的,但是如果穿透这些天花乱坠的广告宣传,我们会发现云计算有三种基本的模式。
- 基础设置即服务(IaaS)
- 平台即服务(PaaS)
- 软件即服务(SaaS)
然后新兴的平台‘函数即服务(FaaS)’和容器即服务(CaaS),微服务概念的重点在于构建有限职责的小性微服务,并使用HTTP的接口进行通信。
微服务架构的核心概念之一就是每个服务都被打包和部署为离散的独立制品,服务的实例应该迅速启动,服务的每一个实例都是完全相同的。
作为开发人员,我们迟早要决定是否将服务部署到下列某个环境之中
- 物理服务器-虽然可以构建和部署到物理机器,但是由于物理机器的局限性,我们很少这么做,
- 虚拟机镜像-微服务的主要优点之一是 能够快速启动和关闭微服务实例,以响应可伸缩性和服务的故障事件,虚拟机是主要云供应商的心脏和灵魂,
- 虚拟容器-虚拟容器是在虚拟机镜像上部署微服务的自然延伸,许多开发人员不是将服务部署到完整的虚拟机,而是将Docker容器部署云上。
微服务、原生云的应用。
微服务是近两年来非常火的概念,他的含义是:使用定义好边界的小的独立组件来做好一件事情,微服务是相对于传统单模块架构而言的。下面介绍微服务里面的模块
配置服务:
Spring Cloud 提供了Config Server ,它有在分布式系统开发中外部配置的功能,通过Config Server 我们可以集中存储所有应用的配置文件。可以参开我的博客。
在使用的时候需要添加@EnableConfigServer的注解来启动配置服务
服务的发现:
Spring Cloud 通过Netflix OSS 的Eureka 来实现服务发现,服务发现的主要目的是为了让每个服务之间可以相互通信,Eureka Server 为微服务注册中心。
Spring Cloud 使用注解的方式提供了Eureka 服务端(@EnableEurekaServer)和客户端(@EnableEurekaClient)
路由网关:
路由网关的主要目的是为了让所有的微服务对外只有一个接口,我们只需要访问一个网关地址,既可以由网关将我们请求代理到不同的服务中。
Spring Cloud 是通过Zuul来实现的,支持自动路由映射到Eureka Server 上注册的服务,Spring Cloud 提供了注解@EnableZuulProxy来启用路由代理。
负载均衡
Spring Cloud 提供了Ribbon和Feign作为客户端的负载均衡,在Spring Cloud下,使用Ribbon直接注入一个RestTemplate对象即可,此RestTemplate已做好负载均衡的配置,如果使用Feign 只需要定义注解,有@FeignClient 注解的接口,然后使用@RequestMapping注解在方法上映射远程的REST服务,此方法也是做好负载均衡的配置的。
断路器:
主要是为了解决当某个方法盗用失败的时候,调用后备反方来替代失败的方法,以达到容错,阻止级联错误等功能
Spring Cloud 使用@EnableCiruitBreaker 来启用断路器支持,使用@HystrixCommand的fallbackMethod来指定后备的方法
spring Cloud 还给我们提供了一个控制台来监控断路器的运行情况,通过@EnableHystrixDashboard注解开启