微服务-框架教程文件

上传人:youn****329 文档编号:132279761 上传时间:2020-05-14 格式:PPTX 页数:27 大小:1.12MB
返回 下载 相关 举报
微服务-框架教程文件_第1页
第1页 / 共27页
微服务-框架教程文件_第2页
第2页 / 共27页
微服务-框架教程文件_第3页
第3页 / 共27页
微服务-框架教程文件_第4页
第4页 / 共27页
微服务-框架教程文件_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《微服务-框架教程文件》由会员分享,可在线阅读,更多相关《微服务-框架教程文件(27页珍藏版)》请在金锄头文库上搜索。

1、微服务 微服务以及其框架 简介 什么是微服务微服务架构需要解决哪些问题开源框架CompletableFuture 微服务架构要解决哪些问题 服务注册 发现负载均衡服务网关服务容错配置管理 服务注册 发现 和单体 Monolithic 架构不同 微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构 服务之间通过轻量机制进行通信 这时候必然引入一个服务注册发现问题 也就是说服务提供方要注册通告服务地址 服务的调用方要能发现目标服务 服务注册后会发送健康信息到注册中心 注册中心收不到健康信息时会移除此服务 支持集群部署 避免单点问题 负载均衡 集中式负载均衡在服务消费者和服务提供者之间有一个

2、独立的LB LB通常是专门的硬件设备如F5 或者基于软件如LVS HAproxy等实现 1 单点问题2 所有服务调用流量都经过LB 当服务数量和调用量大的时候 LB容易成为瓶颈3 LB在服务消费方和服务提供方之间增加了一跳 hop 有一定性能开销 负载均衡 主机独立LB 部署较复杂 环节多 出错调试排查问题不方便 负载均衡 进程内LB 进程内LB方案是一种分布式方案 LB和服务发现能力被分散到每一个服务消费者的进程内部 同时服务消费方和服务提供方之间是直接调用 没有额外开销 性能比较好 服务网关 服务反向路由 网关要负责将外部请求反向路由到内部具体的微服务 这样虽然企业内部是复杂的分布式微服务

3、结构 但是外部系统从网关上看到的就像是一个统一的完整服务 网关屏蔽了后台服务的复杂性 同时也屏蔽了后台服务的升级和变化 安全认证和防爬虫 所有外部请求必须经过网关 网关可以集中对访问进行安全控制 比如用户认证和授权 同时还可以分析访问模式实现防爬虫功能 网关是连接企业内外系统的安全之门 限流和容错 在流量高峰期 网关可以限制流量 保护后台系统不被大流量冲垮 在内部系统出现故障时 网关可以集中做容错 保持外部良好的用户体验 监控 网关可以集中监控访问量 调用延迟 错误计数和访问模式 为后端的性能优化或者扩容提供数据支持 日志 网关可以收集所有的访问日志 进入后台系统做进一步分析 服务容错 当企业

4、微服务化以后 服务之间会有错综复杂的依赖关系 例如 一个前端请求一般会依赖于多个后端服务 技术上称为1 N扇出 服务之间相互依赖 服务容错 在实际生产环境中 服务往往不是百分百可靠 服务可能会出错或者产生延迟 如果一个应用不能对其依赖的故障进行容错和隔离 那么该应用本身就处在被拖垮的风险中 在一个高流量的网站中 某个单一后端一旦发生延迟 可能在数秒内导致所有应用资源 线程 队列等 被耗尽 造成所谓的雪崩效应 CascadingFailure 严重时可致整个网站瘫痪 单服务异常导致雪崩 服务容错 最佳实践 电路熔断器模式 CircuitBreakerPatten 该模式的原理类似于家里的电路熔断

5、器 如果家里的电路发生短路 熔断器能够主动熔断电路 以避免灾难性损失 在分布式系统中应用电路熔断器模式后 当目标服务慢或者大量超时 调用方能够主动熔断 以防止服务被进一步拖垮 如果情况又好转了 电路又能自动恢复 这就是所谓的弹性容错 系统有自恢复能力 上图是一个典型的具备弹性恢复能力的电路保护器状态图 正常状态下 电路处于关闭状态 Closed 如果调用持续出错或者超时 电路被打开进入熔断状态 Open 后续一段时间内的所有调用都会被拒绝 FailFast 一段时间以后 保护器会尝试进入半熔断状态 Half Open 允许少量请求进来尝试 如果调用仍然失败 则回到熔断状态 如果调用成功 则回到

6、电路闭合状态 服务容错 最佳实践 限流 RateLimiting LoadShedder 该模式像舱壁一样对资源或失败单元进行隔离 如果一个船舱破了进水 只损失一个船舱 其它船舱可以不受影响 线程隔离 ThreadIsolation 就是舱壁隔离模式的一个例子 假定一个应用程序A调用了Svc1 Svc2 Svc3三个服务 且部署A的容器一共有120个工作线程 采用线程隔离机制 可以给对Svc1 Svc2 Svc3的调用各分配40个线程 当Svc2慢了 给Svc2分配的40个线程因慢而阻塞并最终耗尽 线程隔离可以保证给Svc1 Svc3分配的80个线程可以不受影响 如果没有这种隔离机制 当Svc

7、2慢的时候 120个工作线程会很快全部被对Svc2的调用吃光 整个应用程序会全部慢下来 舱壁隔离模式 BulkheadIsolationPattern 服务总有容量限制 没有限流机制的服务很容易在突发流量 秒杀 双十一 时被冲垮 限流通常指对服务限定并发访问量 比如单位时间只允许100个并发调用 对超过这个限制的请求要拒绝并回退 回退 fallback 在熔断或者限流发生的时候 应用程序的后续处理逻辑是什么 回退是系统的弹性恢复能力 常见的处理策略有 直接抛出异常 也称快速失败 FailFast 也可以返回空值或缺省值 还可以返回备份数据 如果主服务熔断了 可以从备份服务获取数据 简化的微服务

8、架构图 上图展示整个微服务体系内的服务注册发现和路由机制 假定采用进程内LB服务发现和负载均衡机制 服务简化为两层 后端通用服务 也称中间层服务MiddleTierService 和前端服务 也称边缘服务EdgeService 前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备 如PC Pad或者Phone 后端服务启动时会将地址信息注册到服务注册表 前端服务通过查询服务注册表就可以发现然后调用后端服务 前端服务启动时也会将地址信息注册到服务注册表 这样网关通过查询服务注册表就可以将请求路由到目标前端服务 这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起

9、来了 如果以面向对象设计模式的视角来看 网关类似Proxy代理或者Fa ade门面模式 而服务注册表和服务自注册自发现类似IoC依赖注入模式 微服务可以理解为基于网关代理和注册表IoC构建的分布式系统 服务框架 微服务化以后 为了让业务开发人员专注于业务逻辑实现 避免冗余和重复劳动 规范研发提升效率 必然要将一些公共关注点推到框架层面 服务框架主要封装公共关注点逻辑 让用户只要专注于业务逻辑 服务框架 封装公共关注点 服务注册 发现 负载均衡和健康检查 Netflix是一家成功实践微服务架构的互联网公司 几年前 Netflix就把它的几乎整个微服务框架栈开源贡献给了社区 这些框架和组件包括 R

10、EST RPC和序列化 框架层要支持将业务逻辑以HTTP REST或者RPC方式暴露出来 HTTP REST是当前主流API暴露方式 在性能要求高的场合则可采用Binary RPC方式 针对当前多样化的设备类型 浏览器 普通PC 无线设备等 框架层要支持可定制的序列化机制 例如 对浏览器 框架支持输出Ajax友好的JSON消息格式 而对无线设备上的NativeApp 框架支持输出性能高的Binary消息格式 配置 除了支持普通配置文件方式的配置 框架层还可集成动态运行时配置 能够在运行时针对不同环境动态调整服务的参数和配置 限流和容错 框架集成限流容错组件 能够在运行时自动限流和容错 保护服务

11、 如果进一步和动态配置相结合 还可以实现动态限流和熔断 服务框架 封装公共关注点 管理接口 框架集成管理接口 一方面可以在线查看框架和服务内部状态 同时还可以动态调整内部状态 对调试 监控和管理能提供快速反馈 SpringBoot微框架的Actuator模块就是一个强大的管理接口 安全 安全和访问控制逻辑可以在框架层统一进行封装 可做成插件形式 具体业务服务根据需要加载相关安全插件 文档自动生成 文档的书写和同步一直是一个痛点 框架层如果能支持文档的自动生成和同步 会给使用API的开发和测试人员带来极大便利 Swagger是一种流行RestfulAPI的文档方案 开源框架 Netflix的微服

12、务框架 Eureka 服务注册发现框架Zuul 服务网关Ribbon 客户端框架 提供客户端负载均衡Hystrix 服务容错组件Archaius 服务配置组件 配置文件工具类Servo Metrics组件 java8及以上用SpectatorBlitz4j 日志组件 Netflix是一家成功实践微服务架构的互联网公司 几年前 Netflix就把它的几乎整个微服务框架栈开源贡献给了社区 这些框架和组件包括 开源框架 Springcloud Springcloud为开发人员提供了工具 快速建立分布式系统中的一些常见的模式 例如配置管理 服务发现 断路器 智能路由 微代理 控制总线 一次性令牌 全局

13、锁 领导选举 分布式会话 集群状态 SpringCloudConfig提供集中式的配置管理服务 支持Git Svn 文件系统等 SpringCloudNetflix提供与Netflix开源的各种服务组件 Eureka Hystrix Zuul Archaius等 的整合SpringCloudBus分布式系统中的轻量级消息代理总线 用于在集群节点之间传播状态改变事件 配置改变等 目前只用AMQP协议的实现 SpringCloudSecurity用一个注解就可以实现OAuth2方式的权限认证 单点登录 可以通过Zuul代理传递单点登录信息到后端服务 开源框架 springcloud SpringC

14、loudSleuth追踪分布式系统的调用链及依赖信息 可以通过Zipkin等图形化展示 也可以存入ELK等日志追踪系统 SpringCloudDataFlow在结构化的数据平台上 开发人员可以创建和编排数据管道 例如数据采集 实时分析 数据导入 导出 SpringCloudStream在SpringCloud应用内通过简单的声明就可以发送接收消息 消息总线支持RabbitMq Redis Kafka SpringCloudTaskSpringCloud项目簇是针对云平台的 然而对于大部分云平台 任何运行于之上的应用都是长实效的 如果退出 那么平台会自动重启它们已达到 恢复 的目的 但是有些需求

15、并不是这样的 可能存在一个生命周期极短的应用 它是定时执行的 当结束之后我并希望平台自动重启它 可能的话也希望能够获得应用运行的细节 比如起始时间 退出值等等 这就是SpringCloudTask希望解决的问题 目前该项目只有一个注解 EnableTask 支持主流数据库 能够获得应用 或者任务 的相关信息 也提供了生命周期的管理和对应的代码执行切面方便自定义 SpringCloudZookeeper与Apachezookeeper的整合 用于服务发现及配置管理 可以使用RabbitMq kafka redis Gemfire等 查看服务之间的调用情况及依赖关系 查看服务调用的容错情况 Zuu

16、l Ribbon Feign等 高效服务调用 Thrift 目前流行的服务调用方式有很多种 例如基于SOAP消息格式的WebService 基于JSON消息格式的RESTful服务等 其中所用到的数据传输方式包括XML JSON等 然而XML相对体积太大 传输效率低 JSON体积较小 新颖 但还不够完善 由Facebook开发的远程服务调用框架ApacheThrift 采用接口描述语言定义并创建服务 支持可扩展的跨语言服务开发 所包含的代码生成引擎可以在多种语言中 如C Java Python PHP Ruby Erlang Perl Haskell C Cocoa Smalltalk等创建高效的 无缝的服务 其传输数据采用二进制格式 相对XML和JSON体积更小 对于高并发 大数据量和多语言的环境更有优势Thrift可以很好的与springcloud集成 方便使用 ProtocolBuffers是Google公司开发的一种数据描述语言可用于数据存储 通信协议等方面 它不依赖于语言和平台并且可扩展性极强 gRPC是一个高性能 通用的开源RPC框架 其由Google主要面向移动应用开发并

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号