微服务架构下该如何技术选型呢?( 三 )


微服务架构下该如何技术选型呢?

文章插图
3. 对比、总结
微服务架构下该如何技术选型呢?

文章插图
通过上表对比,很容易发现 Spring Cloud 拥有很多的项目模块,包含了微服务系统的方方面面 。Dubbo 是一个非常优秀的服务治理和服务调用框架,但缺少很多功能模块,例如网关、链路追踪等 。在项目模块上,Spring Cloud 占据着更大的优势 。对比并不是否定谁,推崇谁,只是说明在不同场景下,有利优劣,需客观来看 。
如果仅关注于服务治理的这个层面,Dubbo 其实还优于 Spring Cloud 很多:
支持多种序列化协议,如 Hessian、HTTP、WebService 。
Dobbo Admin 后台管理功能强大,提供了路由规则、动态配置、访问控制、权重调节、均衡负载等功能 。
在国内影响力比较大,中文社区文档较为全面 。
阿里最近重启维护,成为 Apache 孵化项目 。
Dubbo 使用 RPC 协议效率更高,在极端压力测试下,Dubbo 的效率会高于 Spring Cloud 效率一倍多 。
如果对效率有极高的要求建议使用 Dubbo,相对比 RPC 的效率会比 Restful 高很多,如果选择微服务架构去重构整个技术体系,那么 Spring Cloud 是当仁不让之选,它可以说是目前最好的微服务框架没有之一,并且可以断言,将来 Dubbo 可以很好的整合到 Spring Cloud 中 。
五、API 网关
API 网关作为微服务中所有服务的唯一入口,免得业界各类成熟的技术框架组件,在进行技术选型时,需要特别考虑是否拥有以下特性:
高可用:网关是对外的唯一关口,必须保证 7 * 24 小时可用,持续提供稳定可靠的服务 。
高性能:所有的请求都会经过网关,它承受的压力是巨大的,所以必须保证它具备良好的性能,以应对高并发请求 。
安全性:网关必须能够防止外部的恶意访问,确保内部各个微服务的安全 。
扩展性:网关是一个处理非业务功能的绝佳场所,必须能够提供流量管控、协议转发、日志监控等服务,同时能够为以后对非业务功能的扩展提供良好的兼容性 。
1.Zuul
Zuul 作为 Spring Cloud 中的核心组件之一,充当 API 网关的重要角色,所有请求都可以通过 Zuul 达到后端的应用程序、服务 。Zuul 提供了动态路由、监控、弹性负载和安全等特性,其核心是一系列的 Filter,其作用类似于 Servlet 框架中的 Filter,或者 AOP 。
Zuul 底层利用各种 Filter 实现了如下功能:
动态路由:根据需要将请求动态路由到后端集群 。
身份认证和安全性:识别每个需要认证的资源,拒绝不符合要求的请求,如:鉴权 。
统计监测:在服务边界追踪并统计数据,提供精确的统计监测视图 。
压力测试:逐渐增加对集群的流量以了解其性能 。
负载卸载:预先为每种类型的请求分配容量,当请求超过容量时自动丢弃 。
静态资源处理:直接在边界返回某些响应 。
基于上述这些功能特性,使得 Zuul 作为 API 网关的不二之选 。
Zuul 的逻辑架构如下图所示:
微服务架构下该如何技术选型呢?

文章插图
Zuul 的过滤器之间是不直接通信的,而是通过一个 RequestContext 的类来进行数据传统,RequestContext 继承 ConcurrentHashMap,使用 ThreadLocal 变量来记录每个 Request 需要传递的数据 。
Zuul 的过滤器是由 Groovy 来实现的,这些过滤器文件被存放在 Zuul Server 的特定目录下,Zuul 会定期轮询这些目录,修改过的过滤器会动态加载到 Zuul Server 中,以便过滤请求使用 。
Zuul 的大部分功能都是通过过滤器来实现的,其中定义了 4 种标准的过滤器类型 (pre、route、post、error),以满足应用于请求的不同阶段 。
(如果想更清晰深入的了解 Zuul,可以参考上图的 Zuul 逻辑架构图,并结合 Zuul 源码深入研究下 。)
2.traefik
在了解 traefik 之前,不妨先看看它的整体架构图,如下所示:
微服务架构下该如何技术选型呢?

文章插图
从上图不难看出,traefik 充当了 HTTP 反向代理的角色,使得发布的服务变得轻松有趣 。在微服务中,实质上是一个为了让部署微服务变得更加便捷而诞生的 HTTP 反向代理、负载均衡工具 。,它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置 。
除了众多功能之外,traefik 的与众不同之处还在于它会自动发现适合您服务的配置 。无需维护和同步单独的配置文件, 一切都会自动,实时地进行(无需重新启动,不会中断连接) 。使用 traefik 后,你可以将更多的精力、时间花费在开发和部署上面,而不是在配置和维护其工作状态上 。


推荐阅读