SpringCloud与微服务
2020-10-09 本文已影响0人
quanCN
微服务要求

- 大小适当(Right-sized)
正确的划分微服务的大小,以避免微服务承担太多的指责,适当的大小允许快速更改应用程序,并降低整个应用程序中断的总体风险 - 位置透明(Location transparent)
在微服务应用程序中,多个微服务可以快速启动和关闭时,如何管理服务调用的物理细节? - 有弹性(Resilient)
通过绕过失败的服务,取保采取“快速启动”的方法来保护微服务消费者和应用程序的整体完整性 - 可重复(Repeatable)
确保提供的每个新服务实例与生产环境中的所有其他服务实例具有相同的配置和代码库 - 可伸缩(scalable)
使用异步处理和事件来最小化服务之间的直接依赖关系,并确保可以优雅的扩展微服务
开发模式
核心微服务开发模式

- 服务粒度(Service granularity)
将业务域分解为微服务,使每个服务都具有适当程度的职责 - 通信协议(Communication protocols)
JSON已经成为向微服务发送和接收数据的最常见的选择 - 接口设计(Interface design)
设计实际的服务接口,以便开发人员进行服务调用。构建服务URL来传达服务意图,版本化服务,接口设计更加直观 - 服务的配置管理(Configuration management)
管理微服务的配置,以便在不同云环境之间移动时,不必更改核心应用程序代码或配置 - 服务之间事件处理(Event processing)
使用事件解耦微服务,提供应用程序的弹性
微服务路由模式

- 服务发现(Service discovery)
使每个服务变得可以被发现,以便客户端应用程序不需要将服务的位置硬编码到应用程序的情况找到它们。确保从可用的服务实例池中删除表现不佳的微服务实例 - 服务路由(Service routing)
为所有服务提供单个入口点,以便将安全策略和路由规则统一应用于微服务应用程序中的多个服务实例。
微服务客户端弹性模式

- 客户端负载均衡(Client-side load balancing)
在服务客户端上缓存服务实例的位置,以便将该微服务的所有健康实例进行负载均衡 - 断路器模式(Circuit breakers pattern)
阻止客户继续调用出现故障的或遭遇性能问题的服务。出现故障的服务调用能够快速的失败,以便服务器客户端可以快速响应并采取适当的措施 - 后备模式(Fallback pattern)
当服务调用失败时,如何提供“插件”机制,允许服务的客户端尝试通过调用微服务之外的其他方法来执行工作 - 舱壁模式(Bulkhead pattern)
微服务应用程序使用多个分布式资源来执行工作。如何划分这些调用,以便表现不佳的服务调用不会对应用程序的其余部分产生负面影响
微服务安全模式

- 验证(Authentication)
确定调用服务的客户端的身份 - 授权(Authorization)
确定调用微服务的客户端操作的合法性 - 凭证管理和传播(Credential management and propagation)
避免客户端每次都要提供凭证信息才能访问事务中涉及的服务调用。使用基于令牌的安全标准来获取可以从一个服务调用传递到另一个服务调用的令牌,用于验证和授权用户
微服务日志记录和追踪模式

- 日志关联(Log correlation)
一个用户事务会调用多个服务,将这些服务所生成的日志关联到一起 - 日志聚合(Log aggregation)
将微服务(及其各个实例)生成的所有日志合并到一个可以查询的数据库中 - 微服务跟踪(Microservice tracing)
查询日志数据来查找单个事务,还能够可视化事务中涉及的所有服务流程
微服务构建和部署模式

- 构建和部署管道(Build and deployment pipeline)
创建一个可重复的构建和部署过程,只需一键即可构建和部署到组织中的任何环境中 - 基础设施即代码(Infrastructure as code)
将基础设施视为代码,微服务被编译和打包时,立即制作和提供安装带有微服务的虚拟机服务器或容器镜像 - 不可变服务器(Immutable servers)
设置服务器不能被手动修改,只能通过自动化部署形式更改配置。这种服务器就叫不可变服务器 - 凤凰服务器(Phoenix servers)
确保运行微服务的服务器定期被拆卸,并重新创建一个不可变的镜像
注
:当构建好的服务被部署在服务器上后,由于有人登陆该服务器并修改了一个东西,导致该服务的配置被更改,从而使机器上的实际配置与源代码管理的配置不一致。这种现象就叫配置漂移。
SpringCloud微服务技术栈

开发模式
- Spring Boot
Spring Boot是微服务实现中使用的核心技术 - Spring Cloud Config
Spring Cloud Config通过集中式服务来处理应用程序配置数据的管理,因此应用程序配置数据与部署的微服务完全分离 - Spring Cloud Stream
Spring Cloud Stream
可以快速将微服务与消息中间件组件进行整合
路由模式
- Spring Cloud 服务发现
通过SpringCloud服务发现,开发人员可以从客户端消费的服务中抽象出部署服务器的物理位置。服务消费者通过逻辑名称而不是物理位置来调用服务器的业务逻辑。SpringCloud服务发现也处理服务实例的注册和注销。SpringCloud服务发现可以使用Consul
和Eureka
作为服务发现引擎 - Spring Cloud与Netflix Zuul
Spring Cloud
使用Netflix Zuul
项目为微服务应用程序提供服务路由功能
客户端弹性模式
- Spring Cloud与
Netflix Hystrix
和Netflix Ribbon
Spring Cloud与Netflix的开源项目进行了大量整合
使用Netflix Hystrix
库,开发人员可以快速实现服务客户端弹性模式,如断路器模式和壁舱模式
Netflix Ribbon
项目简化了与诸如Eureka
这样的服务发现代理集成,但它也为服务消费者提供了客户端对服务调用的负载均衡
构建部署模式
Spring并没有提供构建部署工具,需要使用其他工具,如Travis CI
和Docker
日志记录模式
- Spring Cloud Sleuth
Spring Cloud Sleuth
允许将唯一跟踪标识符集成到应用程序所使用的HTTP调用和消息中间件之中。这些跟踪号码能够让开发人员在事务流经应用程序中的不同服务时跟踪事务。有了Spring Cloud Sleuth,这些跟踪ID将自动添加到微服务生成的任何日志记录中
安全模式
- Spring Cloud Security
pring Cloud Security
是一个验证和授权框架,可以控制哪些人可以访问服务,以及他们可以用服务做什么