Spring Cloud微服务平台搭建之技术选型思考

2020-10-04  本文已影响0人  蜀山_竹君子

一、前言

随着IT技术发展和推进,传统的单体应用程序模式已不满足大多数企业IT平台构建,尤其是大型互联网网站或企业级应用。单体应用随着项目持续集成,代码库越来越大,在系统复杂度、测试、代码冲突解决、可扩展性、多环境支持、需求变更容易造成系统整体影响等方面面临各种严峻挑战。此时微服务架构应运而生。
微服务从2014的1.0技术元年开始,随着微服务社区的推进,微服务技术体系生态产生极大变化,微服务进入2.0时代。微服务架构体系经过多年的大规模生产验证,已成为构建互联网网站、大型企业级应用的首选分布式技术架构。
2020年随着容器化、K8S技术的发展状态,将微服务架构推向了更高的地位,甚至许多大厂都在喊着一些都是服务化的口号。现在后端工程师除了搞算法、嵌入式的外,简历上不写着会微服务,大概也不好找工作了吧...

相对于单体应用,微服务更具有优势:

当然微服务架构作为分布式架构,同样面临网络延迟、多服务运维、分布式复杂性等问题的挑战。因此合理合适的技术选型是微服务项目的构建的重中之中。

选型准则

生产级
我们使用微服务架构是要解决实际业务场景和生产抗流量的,而不是做简单的demo,如果选择不慎可能出现生产级事故。因此,生产级(Production Ready)、可运维(Ops Ready)、可治理、技术成熟的微服务技术才是我们的首选。
使用已经在多个一线互联网或大型企业落地并经过生产挑战的
我们应该尽量选择使用已经在多个一线互联网或大型企业落地并经过生产挑战并且开源的,且在社区有良好口碑的技术栈。
开源社区活跃
社区活跃、stars数量越多、代码和文档更新频率高的技术栈是优选选择的,开源社区活跃可以直接反应技术的生命力。同时闭源或者停止更新的技术框架应该慎重选择。
结合项目实际情况
不是所有项目都适用于微服务架构体系,应该结合项目实际情况选择合适的技术架构。

二、微服务基础架构关键

架构基础
微服务总统架构

微服务框架选型

微服务框架经过多年发展是一个比较成熟的领域,有比较多选择,以下为市场主流微服务架构对比:

微服务框架 Spring Boot/Cloud Dubbo/DubboXg gRpc Thirft Motan
功能点位 完整微服务框架方案 服务框架 RPC RPC RPC
是否支持REST 是,基于Ribbon支持多种可插拔的序列化选择
是否支持RPC
是否支持多语言
典型案例 Netflix、阿里 阿里、当当 谷歌 Facebook Sina
社区活跃 一般 一般
文档丰富度 一般 一般 一般

运行时服务支撑服务选型

服务注册与发现

服务治理实现微服务架构体系下各个微服务实例的自动化注册和发现。大部分分布式项目在构建之初,由于微服务实例较少,基本是采用传统静态配置的方式管理服务实例清单,在项目扩展或变更时需要手工维护静态配置。随着业务发展,系统功能越来越复杂、微服务实例数量也极具增加,手工方式维护静态配置需要花费大量人力,同时还极易发生错误。服务治理组件就是为了解决微服务架构实例维护问题。
CAP原则
谈到服务注册就必须先说CAP原则,指的是分布式系统中的一致性(Consistency)、可用性(Availability)、分区容错性(Patitiontolerence),三者不可全得。

特点/注册服务组件 Eureka Zookeeper Nacos Cousul
服务健康检查 可配支持 (弱)长连接,keepalive 服务状态、内存、硬盘等 连接心跳
多数据中心 支持 - 支持 支持
kv存储服务 - 支持 - 支持
一致性算法 - paxos Raft(CP)Distro(AP) raft
数据一致性 AP CP AP、CP CA
多语言支持 http(Sidecar模式) 客户端 http(Sidecar模式) 支持http和DNS
Watch支持 支持long polling/大部分增量 支持 支持long polling/大部分增量 全量/支持long polling
自身监控 metrics - metrics metrics
安全 - acl - acl/https
Spring Cloud集成 已支持 已支持 已支持 已支持
数据模型 实例级别 服务-集群-实例 实例级别

Eureka:是SpringCloud生态核心,通过对Netfiix Eureka的二次封装提供服务注册和发现功能。Eureka 与SpringCloud生态深度结合,获得大量用户。Eureka集群数据是AP,集群每个节点具有相同地位,最大程度保证集群节点故障,注册中心的可用性。
Zookeeper:是应用于分布式应用程序的高性能分布式协调服务,它暴露了一组简单的公共服务(提供java和C接口),如命名、配置管理、集群服务、分布式锁等,分布式应用程序可以基于此实现更高级别的服务进行同步、组合命名。是RPC框架首选注册中心。
Nacos:致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

对于Spring Cloud微服务,目前只要还是在Eureka和Nacos上进行选择:

API网关

为什么需要使用API网关

传统单体应用,客户端访问服务器采用访问ip+端口+服务接口前缀,客户端程序需要维护服务实例列表,如果后续系统扩展,对于客户端开发来说是一个灾难。又如目前有些分布式架构采用F5+Nginx等设施的路由和负载,然后转发到各个不同的服务实例,此模式下需要专业运维人员进行服务实例列表清单和路由规则进行维护,当有服务实例增减和IP地址变更,运维人员需要手工更新路由规则和实例清单信息以保证实例信息和中间配置的一致性。如果系统规模不大的情况,手工维护Nginx路由规则和实例清单不算复杂,如果系统规模达到一定程度,有几十、上百、上千的服务实例需要维护,那么对于运维人员来说也是极大的挑战,同时也容易提高配置错误的概率。


单体服务
基于Nginx进行路由配置管理

服务网关是微服务系统唯一入口,采用类似外观模式封装了系统内部架构,为客户端提供定制化API服务,同时提供登录鉴权、监控、负载均衡、请求分片与管理、静态响应处理、多协议支持、限流、熔断等高级功能。服务网关能够通过框架集成实现自动发现和管理实例,并且提供如验签、登录校验、监控等通过功能,使得微服务开发更加专注业务逻辑的实现。


服务网关模式
目前Spring Cloud 生态,可供我们选择的网关主要还是Spring Cloud Zuul和Spring Cloud Gateway。
  • 目前Spring Cloud dependencies 最新版本Hoxton.SR8 仍使用的是Zuul 1.3.1
  • Zuul 2.x 高性能Reactor版本本身与18年5月开源,目前最新版本2.1.9
    Spring Cloud Gateway集成
上一篇下一篇

猜你喜欢

热点阅读