最近阅读了周立的《Spring Cloud与Docker》收获挺大的,抽了一点时间对书中的内容做了总结。方便大家快速了解什么是Spring Cloud,Spring Cloud主要的功能及Spring Cloud服务治理。如下博客的内容都出自这本书。
什么是微服务
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
微服务架构应该具备以下特性:
每个微服务可独立运行在自己的进程里。
一系列独立运行的微服务共同构建起整个系统。
每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理等。
微服务之间通过一些轻量的通信机制进行通信,例如通过RESTful API进行调用。
可以使用不同的语言与数据存储技术
微服务架构的优点
易于开发和维护
单个微服务启动较快
局部修改容易部署
技术栈不受限
按需伸缩
微服务架构面临的挑战
运维要求高
分布式固有的复杂性
接口调整成本高
重复劳动
微服务整体架构图
服务注册于发现
各个服务在启动时,将自己的网络地址等信息注册到服务发现组件中,服务发现组件会存储这些信息。
服务消费者可以从服务发现组件查询服务提供者的网络地址,并使用该地址调用服务提供者的接口。
各个微服务与服务发现组件使用一定机制(例如心跳)通信。服务发现组件如长时间无法与某为服务实例通信,就会注销该实例。
微服务网络地址发生变更(例如实例增减或者IP端口发生变化等)时,会重新注册到服务发现组件。使用这种方式,服务消费者就无须人工修改提供者的网络地址了。
Fegion实现声明式REST调用
REST(Representational State Transfer ),用中文翻译为"具象状态传输"(也有:"代表性状态传输")。是由 Roy Thomas Fielding博士 在2000年就读加州大学欧文分校期间在学术论文中提出的一个术语。REST 定义了一组体系架构原则,您可以根据这些,包括使用不同语言编写的客户端如何通过 HTTP 处理和传输资源状态。Feign是一个声明式的WebService客户端。使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在接口上添加注解,同时也支持JAX-RS标准的注解。Feign也支持可插拔式的编码器和×××。SpringCloud对Feign进行了封装,使其支持SpringMVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
使用Hystrix实现微服务的容错处理
Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,从而提升系统的可用性和容错性。Hystrix主要通过以下几点实现延迟和容错。
包裹请求:使用HystrixCommand包裹对依赖的调用逻辑,每个命令在独立线程中执行。这使用到了设计模式中的“命令模式”。
如果没有容错处理,“基础服务故障”导致“级联故障”从而形成右边的雪崩效应
使用Zuul构建微服务网关
Zuul是Netflix开源的微服务网关,它可以和Eureka,Ribbon,Hystrix等组件配合使用。Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。
Zuul大部分功能是通过过滤器实现的,如右图所示。
使用Spring CloudConfig统一管理微服务配置
Spring Cloud Config支持在Git, SVN和本地存放配置文件,使用Git或者SVN存储库可以很好地支持版本管理,Spring默认配置是使用Git存储库。具有如下优点:
集中管理配置:一个使用微服务架构的应用系统可能会包含成百上千个微服务,因此几种管理配置是非常有必要的。
不同环境不同配置:例如,数据源配置在不同的环境(开发,测试,预发布,生产等)中是不同的。
运行期间可动态调整:例如可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置是不停止微服务。
配置修改后可自动更新。如配置内容发生变化,微服务能够自动更新配置。
Spring Cloud服务治理
注册中心监控
容错处理监控
微服务健康检查
微服务调用追踪
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。