前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >火热的微服务,低门槛、易上手的落地方法 | Q推荐

火热的微服务,低门槛、易上手的落地方法 | Q推荐

作者头像
深度学习与Python
发布2022-04-19 10:07:31
3420
发布2022-04-19 10:07:31
举报
文章被收录于专栏:深度学习与python

作者 | 王莹、万佳

近十年来,微服务架构不断演进,成为当下最火热的后端架构之一。相比传统的单体架构,微服务架构具有灵活、可扩展、独立部署的特性,更有利于开发者管理和维护代码,快速提高研发交付效率。为构建更加灵活敏捷的系统和促进业务发展,许多企业纷纷将业务迁移到微服务架构。

火热的微服务

2022 年 O'Reilly 技术趋势报告显示:微服务是 2021 年使用量最大的三个技术之一,去年同比增长 13%。同时,报告也发现,企业正大力转型微服务架构,构建云原生应用,充分利用微服务和 Kubernetes 的技术优势。

图片来源:2022 年 O'Reilly 技术趋势报告 https://www.oreilly.com/radar/technology-trends-for-2022/

众所周知,相比单体应用,微服务的优势在于敏捷,快速迭代。可独立部署的小型服务,加上敏捷开发模式的加持,可以实现产品功能快速迭代。同时,微服务可以大幅降低协作成本,这不仅降低了团队内外的沟通协作成本,而且大大提升沟通效率。

此外,微服务扩展灵活,由于每个服务单独部署,所以每个服务可以单独复制和扩展,这样既提高了资源利用率,也更节省成本。

微服务落地过程

如何落地微服务,笔者从微服务的生命周期,总结出一个路线图,帮助开发者更加清晰的了解微服务的落地过程。

前期调研

首先,需要调研微服务架构是否适合当前的业务。不要人云亦云,盲目跟风。从单体架构到微服务的过渡需要一个过程,基础设施的变更需要付出时间、人力和金钱成本,工作量需要团队和各方资源的支持。

其次,建立微服务团队。每个微服务本身都是一个独立的应用程序,因此团队也应该这样做。组建单独的团队来处理不同的业务。这也要求这些团队拥有必要的技能和工具来自行开发、部署和管理微服务,团队间要保持高效的沟通和协作。

设计阶段

在这个阶段,开发者需要重点关注微服务如何拆分的问题。将微服务与业务功能区分开来,避免构建太大或太小的微服务。如果发生前者,您将看不到使用微服务架构的任何好处。后者将导致运营成本呈指数增长,超过预期收益。

将服务设计为松耦合、高内聚、并覆盖单个有界上下文。松耦合的服务对其他服务的依赖程度最低。高内聚要求服务的设计遵循单一职责原则,即只执行一个主要功能。最后,设计服务在某个特定的业务层,同时包含业务的内部细节逻辑。这可确保微服务覆盖单一边界上下文,从而实现领域驱动设计 (DDD)。

使用 API 和事件在服务之间进行通信。服务不应直接相互调用,相反,设计一个 API 网关来处理身份验证、请求和响应以及对服务限制。有了 API 网关,用户可以在服务发生更改时,轻松地将流量从 API 网关重定向到更新的版本中。

技术选型

当用户从单体应用重构微服务架构时,会面临多个微服务技术框架 / 组件的选型。目前,Spring Cloud 等框架、服务网格是微服务领域两类重要的技术选型,两类方案各有各的优缺点和适用场景,用户可根据自己的业务需求选择适合框架即可。

微服务框架

Spring Cloud、Dubbo 等微服务框架在中小型项目中的应用,用户不需要太多改造和适配,即可实现微服务的基本功能,其优点在于:去中心化,服务间的通信及容错机制模块化,将非功能性能力下沉,集成了各个微服务组件,提供完整的微服务能力。相比于服务网格,性能损耗小,非常适用于性能要求较高的应用。缺点在于:框架的使用语言有限,目前 Java 框架比较成熟,近期 Go 语言框架蓬勃发展。整体对业务存在一定的侵入性,框架的维护升级成本高。

服务网格

服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。其优点在于:屏蔽分布式系统通信的复杂性 (负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑;适用于多种语言,利于异构多语言应用构建统一、标准化的服务治理体系;对应用透明,Service Mesh 组件可以单独升级;其缺点在于:由于服务间通信加了一层代理,一定程度上存在性能损耗,引入 Service Mesh 服务实例的运维和管理困难等问题。

支撑端组件

在微服务架构中,支撑端组件的选型也非常重要。其中,注册中心是最核心的基础服务之一,注册中心可以看做是微服务架构里的通信中心,当一个服务去请求另一个服务时,通过注册中心可以获取该服务的状态、地址等核心信息,因此,注册中心的数据一致性和高可用的能力非常重要,下面是业内主流注册中心的对比:

Apollo、Nacos 为目前国内主流的配置中心产品,功能完善、社区活跃度高,由于 Apollo 只包含配置中心能力,Nacos 既包含配置中心又包含注册中心能力,所以仅对比配置中心,Apollo 整体产品能力强于 Nacos,但整体复杂度略高于 Nacos。Zookeeper/Consul 只包含核心的推送数据能力,需要针对配置中心场景二次封装,例如较早开源的产品 disconf(已停止维护)。所以不建议裸用 Zookeeper/Consul 作为配置中心。Spring Cloud Config 是 Spring Cloud 中动态配置解决方案,仅适用于 Java 生态,且由于使用成本高,在国内使用度低。

开发态

在开发阶段,用户聚焦业务开发,可以通过脚手架、低代码等工具快速的构建业务代码,提升研发交付效率。做好各个服务的版本管理,每个服务都应该有自己的存储库,以便访问配置。同时保持清晰的版本更新日志,以便后期查看。

运维态

运维态重点需要关注应用的发布和部署,用户可以通过持续集成和持续交付 (CI/CD) 来自动化 DevOps 工作流,实现一键部署,提高发布和部署效率。而微服务架构中,服务的数量在服务拆分后变得繁多杂乱,发布部署管理起来相对麻烦,需要加强灰度发布、蓝绿发布、滚动发布、快速回滚的能力建设,避免新版本发布时服务需要中断、新版本升级失败无法快速回滚带来更长时间服务不可以等问题。

运行态

在运行态,主要包括服务的可观测性、异常处理、优雅上下线、服务治理等方面的内容。服务在运行过程中,需要关注其运行的健康状态。高流量的服务请求,服务治理、服务的注册与发现、服务限流、服务熔断等能力是服务健康运行的保障。在可观测性上,需要建设可视化的数据监控能力,帮助用户快速高效的排查定位问题,建设异常处理机制,方便快速响应异常处理请求。

如何高效构建微服务

在了解过微服务的落地路径后,我们再来看看如何高效、快速地落地微服务。基于分层设计的思想,可以将微服务生命周期中的几个阶段统一划分为两层:业务层和支撑端层,将业务逻辑与技术相互隔离,各层分别高效构建,相互协作。

在业务层,用户只需专注业务本身,包括服务的开发、敏捷部署、服务可观测性、异常处理、优雅上下线、服务治理等;在支撑端层,提供微服务生命周期用到的支撑组件,聚焦为业务层提供高可用、高性能的技术支撑。作为国内三大云厂商之一,腾讯云也针对这两层布局了完整的产品矩阵:弹性微服务 TEM(Tencent Cloud Elastic Microservice,TEM)和微服务引擎 TSE(Tencent Cloud Service Engine,TSE)

弹性微服务 TEM 主要解决业务层应用场景,是新一代面向微服务应用的 Serverless 平台,实现 Serverless 与微服务的完美结合,提供应用的全生命周期托管,并联动上下游产品为用户服务注册发现、微服务治理、多维度监控等能力。

微服务引擎 TSE 主要解决支撑端层的应用场景,一套灵活、轻量级、可插拔的组件化微服务解决方案,为用户提供高可用、免运维、开源增强的注册配置中心、服务治理、云原生网关组件服务,让用户只需关注上层业务开发,帮助用户在云原生时代轻量上云,快速构建微服务体系,提高研发交付效率和运维效率,同时为用户降低人力资源成本。

微服务引擎,加速落地微服务

微服务引擎 TSE 在功能上主要提供注册配置中心、服务治理中心、云原生网关三大能力。其中,注册配置中心,微服务引擎 TSE 提供高可用、免运维、开源增强的 ZooKeeper、Nacos 、Apollo 、Eureka 组件,用户可以灵活使用,即开即用,零代码改造。而服务治理中心,微服务引擎 TSE 基于腾讯的开源项目北极星 PolarisMesh,提供强大的服务治理能力,为用户解决服务寻址、流量调度、故障容错、访问控制和可观测性等问题,并针对虚拟机和容器环境两个体系的服务,提供一体化的服务发现和治理方案。

在落地上,主要有四大应用场景:

  • 微服务注册发现:它提供 ZooKeeper、Nacos、Eureka 注册配置中心。并提供多指标的监控管理,帮助用户实现高效、稳定和高可用的服务注册发现能力。
  • 微服务治理:在服务治理场景中,提供服务调用中的注册发现、流量控制、熔断限流等能力,支持多语言客户端、集成多种主流服务框架,帮助用户实现高效、稳定、高可用、免运维的服务治理能力。
  • 分布式配置:分布式配置是将分布式应用配置的集中管理,它提供配置热生效、记录配置变更操作的分布式应用配置集中管理能力,原生数据无缝迁移,支持主流的 Apollo、Nacos 配置中心,帮助用户高效解决分布式环境下的配置管理问题。
  • 云原生网关:云原生网关是基于开源网关 Kong 构建的的高可用、易扩展的 API 网关,云原生网关作为承载所有请求的流量入口,除提供高性能低延迟的转发能力外,还基于插件体系提供认证鉴权、流量控制、灰度发布、熔断降级等高级流量治理能力,是微服务体系中不可或缺的一部分。

据悉,腾讯云微服务引擎 TSE 有六大特点:

  • 一键部署:微服务引擎提供一键式开箱即用的微服务注册、配置中心托管能力,用户无需关注资源部署;
  • 免运维:微服务引擎可以保证托管引擎后端的健康运行,用户无需投入人力运维相关组件,只需专注自身业务实现;
  • 高可用容灾:微服务引擎提供多可用区部署、健康探测、自动恢复等能力,实现高可用容灾;
  • 无缝迁移:微服务引擎托管引擎使用方式与开源框架完全一致,用户可零代码改造,实现无缝迁移;
  • 灵活扩容:微服务引擎提供一键扩容的能力,用户可根据业务增长情况,轻易完成扩容与升级;
  • 低成本:微服务引擎优化了托管服务的部署方式,让用户在免运维使用微服务引擎时,获得更低的单位时间使用成本。

值得一提的是,微服务引擎 TSE 的服务治理中心,基于腾讯去年正式开源的微服务解决方案“北极星”(PolarisMesh),通过北极星对这些组件进行抽象和整合,打造公司标准化的服务发现和治理方案,帮助业界提升研发效率和运维效率。截至 2021 年 9 月,北极星在线节点超过 5000000 个,每日服务调用量超过 30 万亿,接口的调用成功率超过 99.999%,覆盖腾讯内部 90% 以上的业务部门。

此外,北极星的服务治理方案也被越来越多的公司所采用,比如好未来。据悉,好未来 AI 中台服务发现已采用北极星。此前,其 AI 中台具有上万服务节点,基于 Eureka 实现服务发现。但由于架构的局限,Eureka 无法实现平行扩展,在上万服务节点注册和上报心跳的情况下,经常出现高负载,导致服务节点状态异常。为此,好未来将服务注册中心升级成北极星。由于北极星服务端采用计算存储分离的架构,计算层可随接入节点的增加平行扩展,轻松支持百万节点。同时,北极星兼容 Eureka 服务端接口,支持无缝切换。

文章参考文献:

https://mp.weixin.qq.com/s__biz=MjM5MDE0Mjc4MA==&mid=2651087824&idx=2&sn=bd9ab0f76e8d1aa82a7b6a2fcd7dc686

https://www.oreilly.com/radar/technology-trends-for-2022/

https://www.bmc.com/blogs/microservices-best-practices/

https://blog.csdn.net/fly910905/article/details/100023415

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 InfoQ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
弹性微服务
TSE 弹性微服务是面向微服务应用的 Serverless PaaS 平台,实现资源 Serverless 化与微服务架构的完美结合,为用户提供一整套开箱即用的微服务解决方案。弹性微服务面向云原生,支持 Spring Cloud、Dubbo、多语言应用零改造上云,提供应用托管、微服务治理、秒级弹性、多维度监控等能力,帮助企业创建和管理云资源,助力企业充分聚焦核心业务本身。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档