微服务框架-基础框架

转自:http://www.open-open.com/lib/view/open1479194438544.html

对于微服务基础框架可以看作是微服务治理架构的核心内容,包括了对微服务模块的全生命周期管理能力,这个能力包括了微服务网关APP,DevOps,Docker和云集成,安全,负载均衡,服务注册和发现等诸多能力。微服务基础框架确实不是简单的微服务网关,而是对整个微服务基础环境的支撑和管控。

对于微服务基础框架,建议参考InfoQ的一篇文章如下:

对于这篇文章的一些重点做如下一些说明:

第一种方案为集中式LB方案,对刚开始实施微服务架构时候仍然建议采用该方案,特别是有负载均衡硬件设备如F5,Array等,在加上硬件本身的HA,不会在LB上出现任何性能问题和可靠性问题。

对于第二种进程内LB方案是趋势,当前微服务框架的主流方案,Netflix和Dubbo等均采用该方案,那这种时候服务注册库相当存粹,只是实时准确提供可用服务注册列表和地址信息即可,但是这种方案我们可看到一般不会对调用的日志流进行审计和跟踪。

第三种方案实际上是一种折中的方案,即在每个微服务节点都需要部署相对比较重的独立进程外LB模块,这种方案最大的问题仍然是在于整体基础架构体系偏重同时后续维护工作量大。

2. 服务前端路由-微服务网关

此处核心能力即使微服务网关,不仅仅是实现服务代理和前端路由,还需要实现安全,限流,监控等扩展能力。可以看到对整个微服务环境的治理管控,微服务网关会起到重要作用,具体摘录原文描述如下:

  • 服务反向路由 ,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。
  • 安全认证和防爬虫 ,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。
  • 限流和容错 ,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。
  • 监控 ,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。
  • 其它能力 :实现线上引流,线上压测,线上调试(Surgical debugging),金丝雀测试(Canary Testing),数据中心双活(Active-Active HA)等高级功能。

要注意到在微服务架构里面的集群和负载功能其实有两层,第一层是在微服务网关上面的分布式集群部署,可以减轻单个API GateWay节点的并发访问压力;另外一个是在微服务模块上层的负载均衡部署,重点是实现在同一个微服务模块集群部署后能够进行负载均衡。

在讲第一点服务注册和发现的时候可以看到,对于LB是可以下沉到服务消费端的,那么在LB下移后对于微服务网关层的能力是否也可以完全下沉到微服务模块节点(不管是进程内部署还是进程外部署),以实现完全意义上的去中心化分布式架构?

3. 服务容错

该部分 主要还是讲服务的限流和流量控制机制,而对于熔断只是在发现问题和异常后所采用的操作 。对于服务容错功能本身功能的重要性就在于,在复杂的微服务架构环境下,服务关联和依赖相当多,当发生大量的服务异常调用的时候,极其容易引起雪崩效应,导致整个微服务环境完全崩溃。

对于服务的容错,在考虑限流机制前,还可以考虑对服务进行分域,将不同域的服务单独部署到不同的JVM容器中,这样至少可以保证在A域的JVM完全崩溃的时候,不会影响到B,C等其它服务部署域。这个有点类似文章最佳实践谈到的 舱壁隔离模式(Bulkhead Isolation Pattern) 。

要实现服务的容错管理i,首先要有实时的采集和统计服务运行数据,包括服务运行时间,次数等,这些是服务容错,限流或容错策略计算的基础。

对于服务容错需要分几个层面来谈:

首先来说是服务限流,即当出现超出预设的大并发服务调用的时候,直接在网关处控制服务的流入速度,即让消费方调用在外面等待和排队,然后慢慢的放进来,当然如果调用再大则会引起服务调用超时。注意这是服务消费方调用超时,而不是原始服务提供方,这种超时网关是不清楚的。

其次即开始不限流,服务全部放进来,但是服务提供方可能处理不过来大并发,这种情况下会出现服务超时调用,服务响应时间超过预设值,那么在这种情况下就启动服务限流,控制流入速度。注意在服务限流后可能仍然无法解决服务超时或响应慢的问题。那么这个时候就必须进行服务熔断处理,即禁止对该服务所有访问。对于文中也谈到了熔断的弹性恢复机制,这也是一个相当关键的内容。

对于服务流量控制本身也有多个层级,可以针对所有服务,一个域的所有服务,单个服务都可以。即对服务调用总量或单个服务并发量都能够进行灵活的限流规则定义,以确保整个微服务架构基础环境的稳定性。

Netflix将上述容错模式和最佳实践集成到一个称为Hystrix的开源组件中,凡是需要容错的依赖点(服务,缓存,数据库访问等),开发人员只需要将调用封装在Hystrix Command里头,则相关调用就自动置于Hystrix的弹性容错保护之下。Hystrix组件已经在Netflix经过多年运维验证,是Netflix微服务平台稳定性和弹性的基石,正逐渐被社区接受为标准容错组件。

4.Netflix的微服务框架

在原来谈SOA和ESB的时候,我们一般会谈两个内容,即ESB服务总线和基于ESB总线的SOA管控和治理平台。而对应到微服务框架也一样的道理:

其一是:微服务网关(服务注册发现,代理路由,安全,限流,日志,监控)

注意在这里我还是将服务注册发现,日志等能力统一划归到一个完整的微服务网关应该具备的能力,虽然在实现中可能会分为多个子系统或组件,但是本身是属于GateWay应该具备的能力。

Netflix是一家成功实践微服务架构的互联网公司,几年前,Netflix就把它的几乎整个微服务框架栈开源贡献给了社区,这些框架和组件包括:

  • Eureka: 服务注册发现框架
  • Zuul: 服务网关
  • Karyon: 服务端框架
  • Ribbon: 客户端框架
  • Hystrix: 服务容错组件
  • Archaius: 服务配置组件
  • Servo: Metrics组件
  • Blitz4j: 日志组件

下图Fig 11展示了基于这些组件构建的一个微服务框架体系,来自recipes-rss。

Netflix的开源框架组件已经在Netflix的大规模分布式微服务环境中经过多年的生产实战验证,正逐步被社区接受为构造微服务框架的标准组件。Pivotal去年推出的Spring Cloud开源产品,主要是基于对Netflix开源组件的进一步封装,方便Spring开发人员构建微服务基础框架。

对于一些打算构建微服务框架体系的公司来说,充分利用或参考借鉴Netflix的开源微服务组件(或Spring Cloud),在此基础上进行必要的企业定制,无疑是通向微服务架构的捷径。

微服务框架-基础框架相关推荐

  1. .metadata是什么项目文件_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?

    前言 本章我们主要从以下几个方面夯实我们的基础: 微框架 Spring Boot 的基本认识 实战学习 Spring Boot 的基本使用 多种方式获取 Spring Boot 配置 如何自定义一个 ...

  2. hget如何获取多个value_《深入微服务》之 如何给老婆解释什么是微服务的基础框架SpringBoot?...

    前言 本章我们主要从以下几个方面夯实我们的基础: 微框架 Spring Boot 的基本认识 实战学习 Spring Boot 的基本使用 多种方式获取 Spring Boot 配置 如何自定义一个 ...

  3. 从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (中)

    本文承接上文<从0到1 手把手搭建spring cloud alibaba 微服务大型应用框架(三) (mini-cloud) 搭建认证服务(认证/资源分离版) oauth2.0 (上)> ...

  4. JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台,基于Spring Boot 2.7

    SpringBlade微服务开发平台 完整代码下载地址:JAVA SpringBlade 微服务开发平台框架,企业级的SaaS多租户微服务平台 采用前后端分离的模式,前端开源两个框架:Sword (基 ...

  5. 微服务pact测试框架_消费者驱动的Pact和Spring Boot测试

    微服务pact测试框架 最近,我的一位同事偶然发现了Pact.io ,我们目前的应用程序已扩展到 50多种服务,并且我们开始出现一些集成测试失败和脆弱的开发/验收测试环境. 因此,我们决定研究尝试与此 ...

  6. 容器化技术与微服务结合---SpringCloud框架与阿里云serverless k8s的结合(六)

    目录 系列 写在前面 Serverless K8S 概念 创建集群 微服务搭建 项目地址 环境区分以及dockerFile注意 阿里云日志接入 创建阿里云日志project 配置 测试 Kuberne ...

  7. 微服务研究 - Swoole框架-Swoft初探

    微服务研究 - Swoole框架-Swoft初探.没有swoole之前,php一直被"誉"为世界上最好的语言.swoole横空出世后,php就成了宇宙最好的语言了... swoft ...

  8. 从0到1手把手搭建spring cloud alibaba 微服务大型应用框架(十五) swagger篇 : gateway 集成swagger 与 knife4j实现在线api文档并嵌入到自己项目内

    背景 我们日常开发中基本都是协同开发的,当然极个别的项目整体前后端都是一个人开发的,当多人协作时,尤其是前后端人员协同开发时 必然会面临着前端需要了解后端api接口的情况,两个选择,提前设计好文档,然 ...

  9. 基于 Koa 的微服务 Node.js 框架设计思路与简单实现

    大家好,我是前端点线面,毕业于华中科技大学,非科班出身的一枚新时代农民工,现在是百度前端研发工程师,著有<前端百题斩>.数十篇学习思维导图(go.React.Redux.Vue.Vuex. ...

最新文章

  1. Vue入门三、过滤器filter
  2. QTableView表格视图的列宽设置
  3. CodeBlocks: 生成的exe文件自定义一个图标
  4. 为什么微信内无法分享转发网址,详谈微信网址防屏蔽的办法
  5. html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
  6. java中关于重写的说法_Java中有关“重载”和“重写”的说法正确的是()
  7. Pwn2Own 2021温哥华黑客大赛落幕 3个团队并列 Master of Pwn
  8. caffe运行问题(持续更新),sublime设置
  9. python+selenium自动创建随笔
  10. 二元置信椭圆r语言_医学统计与R语言:Logistic Distribution
  11. 基于android的影院订票app,基于Android技术的影院订票系统的设计与实现
  12. BASIC语言、FreeBasic语言
  13. CTF-实验吧-安全杂项-社交网络
  14. WORD里表格(图表、框图、形状)复制到另一WORD里表格会变形的解决办法
  15. python的Bio下的Entrez使用
  16. 概念理解:财新服务业PMI
  17. 开课吧 dubbo+zookeeper
  18. 计算机二级考试用的什么Word,计算机二级考试内容大纲_计算机二级office考什么...
  19. 用网络命令关闭计算机,如何在win7用cmd命令关闭无线网络
  20. Lumen实例讲解:第二部分

热门文章

  1. 用秦九昭公式计算多项式
  2. android手环通信协议,BLE通信协议
  3. 2021_WWW_Self-Supervised Multi-Channel Hypergraph Convolutional Network for Social Recommendation
  4. 看看开发者服务在过去的这8个月谁又圈钱了
  5. 单片机读取obd_OBD_CAN读取代码(stm32f103)
  6. 投弃式海洋仪器设备(XBT/XCTD)
  7. VSCode的撤回与取消撤回
  8. 笔记本自带键盘的关闭和开启
  9. [转]机器学习中距离和相似性度量分类体系
  10. 夏季湿盛是什么意思,湿盛有哪些表现?