微服务-框架.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

微服务-微服务以及其框架简介什么是微服务微服务架构需要解决哪些问题开源框架CompletableFuture什么是微服务微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于HTTP协议的RESTfulAPI)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。特点小,且专注于做⼀件事情轻量级的通信机制松耦合、独立部署微服务架构要解决哪些问题服务注册、发现负载均衡服务网关服务容错配置管理服务注册、发现和单体(Monolithic)架构不同,微服务架构是由一系列职责单一的细粒度服务构成的分布式网状结构,服务之间通过轻量机制进行通信,这时候必然引入一个服务注册发现问题,也就是说服务提供方要注册通告服务地址,服务的调用方要能发现目标服务服务注册后会发送健康信息到注册中心,注册中心收不到健康信息时会移除此服务支持集群部署,避免单点问题负载均衡集中式负载均衡在服务消费者和服务提供者之间有一个独立的LB,LB通常是专门的硬件设备如F5,或者基于软件如LVS,HAproxy等实现1.单点问题2.所有服务调用流量都经过LB,当服务数量和调用量大的时候,LB容易成为瓶颈3.LB在服务消费方和服务提供方之间增加了一跳(hop),有一定性能开销。负载均衡主机独立LB部署较复杂,环节多,出错调试排查问题不方便。负载均衡进程内LB进程内LB方案是一种分布式方案,LB和服务发现能力被分散到每一个服务消费者的进程内部,同时服务消费方和服务提供方之间是直接调用,没有额外开销,性能比较好服务网关服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。服务容错当企业微服务化以后,服务之间会有错综复杂的依赖关系,例如,一个前端请求一般会依赖于多个后端服务,技术上称为1-N扇出。服务之间相互依赖服务容错在实际生产环境中,服务往往不是百分百可靠,服务可能会出错或者产生延迟,如果一个应用不能对其依赖的故障进行容错和隔离,那么该应用本身就处在被拖垮的风险中。在一个高流量的网站中,某个单一后端一旦发生延迟,可能在数秒内导致所有应用资源(线程,队列等)被耗尽,造成所谓的雪崩效应(CascadingFailure),严重时可致整个网站瘫痪。单服务异常导致雪崩服务容错-最佳实践电路熔断器模式(CircuitBreakerPatten)该模式的原理类似于家里的电路熔断器,如果家里的电路发生短路,熔断器能够主动熔断电路,以避免灾难性损失。在分布式系统中应用电路熔断器模式后,当目标服务慢或者大量超时,调用方能够主动熔断,以防止服务被进一步拖垮;如果情况又好转了,电路又能自动恢复,这就是所谓的弹性容错,系统有自恢复能力。上图是一个典型的具备弹性恢复能力的电路保护器状态图,正常状态下,电路处于关闭状态(Closed),如果调用持续出错或者超时,电路被打开进入熔断状态(Open),后续一段时间内的所有调用都会被拒绝(FailFast),一段时间以后,保护器会尝试进入半熔断状态(Half-Open),允许少量请求进来尝试,如果调用仍然失败,则回到熔断状态,如果调用成功,则回到电路闭合状态。服务容错-最佳实践限流(RateLimiting/LoadShedder)该模式像舱壁一样对资源或失败单元进行隔离,如果一个船舱破了进水,只损失一个船舱,其它船舱可以不受影响。线程隔离(ThreadIsolation)就是舱壁隔离模式的一个例子,假定一个应用程序A调用了Svc1/Svc2/Svc3三个服务,且部署A的容器一共有120个工作线程,采用线程隔离机制,可以给对Svc1/Svc2/Svc3的调用各分配40个线程,当Svc2慢了,给Svc2分配的40个线程因慢而阻塞并最终耗尽,线程隔离可以保证给Svc1/Svc3分配的80个线程可以不受影响,如果没有这种隔离机制,当Svc2慢的时候,120个工作线程会很快全部被对Svc2的调用吃光,整个应用程序会全部慢下来。舱壁隔离模式(BulkheadIsolationPattern)服务总有容量限制,没有限流机制的服务很容易在突发流量(秒杀,双十一)时被冲垮。限流通常指对服务限定并发访问量,比如单位时间只允许100个并发调用,对超过这个限制的请求要拒绝并回退。回退(fallback)在熔断或者限流发生的时候,应用程序的后续处理逻辑是什么?回退是系统的弹性恢复能力,常见的处理策略有,直接抛出异常,也称快速失败(FailFast),也可以返回空值或缺省值,还可以返回备份数据,如果主服务熔断了,可以从备份服务获取数据。简化的微服务架构图上图展示整个微服务体系内的服务注册发现和路由机制,假定采用进程内LB服务发现和负载均衡机制。服务简化为两层,后端通用服务(也称中间层服务MiddleTierService)和前端服务(也称边缘服务EdgeService,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如PC,Pad或者Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似Proxy代理或者Façade门面模式,而服务注册表和服务自注册自发现类似IoC依赖注入模式,微服务可以理解为基于网关代理和注册表IoC构建的分布式系统。服务框架微服务化以后,为了让业务开发人员专注于业务逻辑实现,避免冗余和重复劳动,规范研发提升效率,必然要将一些公共关注点推到框架层面。服务框架主要封装公共关注点逻辑,让用户只要专注于业务逻辑;服务框架-封装公共关注点服务注册、发现、负载均衡和健康检查Netflix是一家成功实践微服务架构的互联网公司,几年前,Netflix就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括监控日志框架一方面要记录重要的框架层日志、metrics和调用链数据,还要将日志、metrics等接口暴露出来,让业务层能根据需要记录业务日志数据。在运行环境中,所有日志数据一般集中落地到企业后台日志系统,做进一步分析和处理。REST/RPC和序列化框架层要支持将业务逻辑以HTTP/REST或者RPC方式暴露出来,HTTP/REST是当前主流API暴露方式,在性能要求高的场合则可采用Binary/RPC方式。针对当前多样化的设备类型(浏览器、普通PC、无线设备等),框架层要支持可定制的序列化机制,例如,对浏览器,框架支持输出Ajax友好的JSON消息格式,而对无线设备上的NativeApp,框架支持输出性能高的Binary消息格式配置除了支持普通配置文件方式的配置,框架层还可集成动态运行时配置,能够在运行时针对不同环境动态调整服务的参数和配置限流和容错框架集成限流容错组件,能够在运行时自动限流和容错,保护服务,如果进一步和动态配置相结合,还可以实现动态限流和熔断服务框架-封装公共关注点管理接口框架集成管理接口,一方面可以在线查看框架和服务内部状态,同时还可以动态调整内部状态,对调试、监控和管理能提供快速反馈。SpringBoot微框架的Actuator模块就是一个强大的管理接口统一错误处理对于框架层和服务的内部异常,如果框架层能够统一处理并记录日志,对服务监控和快速问题定位有很大帮助安全安全和访问控制逻辑可以在框架层统一进行封装,可做成插件形式,具体业务服务根据需要加载相关安全插件文档自动生成文档的书写和同步一直是一个痛点,框架层如果能支持文档的自动生成和同步,会给使用API的开发和测试人员带来极大便利。Swagger是一种流行RestfulAPI的文档方案。开源框架Netflix的微服务框架Eureka:服务注册发现框架Zuul:服务网关Ribbon:客户端框架,提供客户端负载均衡Hystrix:服务容错组件Archaius:服务配置组件,配置文件工具类Servo:Metrics组件,java8及以上用SpectatorBlitz4j:日志组件Netflix是一家成功实践微服务架构的互联网公司,几年前,Netflix就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括开源框架SpringcloudSpringcloud为开发人员提供了工具,快速建立分布式系统中的一些常见的模式(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,领导选举,分布式会话,集群状态)。SpringCloudConfig提供集中式的配置管理服务,支持Git,Svn,文件系统等;SpringCloudNetflix提供与Netflix开源的各种服务组件(Eureka,Hystrix,Zuul,Archaius等)的整合SpringCloudBus分布式系统中的轻量级消息代理总线,用于在集群节点之间传播状态改变事件(配置改变等);目前只用AMQP协议的实现;SpringCloudSecurity用一个注解就可以实现OAuth2方式的权限认证、单点登录。可以通过Zuul代理传递单点登录信息到后端服务开源框架-springcloudSpringCloudSleuth追踪分布式系统的调用链及依赖信息,可以通过Zipkin等图形化展示,也可以存入ELK等日志追踪系统;SpringCloudDataFlow在结构化的数据平台上,开发人员可以创建和编排数据管道,例如数据采集,实时分析,数据导入/导出。SpringCloudStream在SpringCloud应用内通过简单的声明就可以发送接收消息,消息总线支持RabbitMq、Redis、Kafka;SpringCloudTaskSpringCloud项目簇是针对云平台的,然而对于大部分云平台,任何运行于之上的应用都是长实效的,如果退出,那么平台会自动重启它们已达到“恢复“的目的。但是有些需求并不是这样的,可能存在一个生命周期极短的应用,它是定时执行的,当结束之后我并希望平台自动重启它,可能的话也希望能够获得应用运行的细节,比如起始时间,退出值等等。这就是SpringCloudTask希望解决的问题。目前该项目只有一个注解@EnableTask,支持主流数据库,能够获得应用(或者任务)的相关信息,也提供了生命周期的管理和对应的代码执行切面方便自定义。SpringCloudZookeeper与Apachezookeeper的整合,用于服务发现及配置管理;可以使用RabbitMq,kafka,redis,Gemfire等查看服务之间的调用情况及依赖关系查看服务调用的容错情况Zuul、Ribbon、Feign等高效服务调用Thrift目前流行的服务调用方式有很多种,例如基于SOAP消息格式的WebService,基于JSON

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功