服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
作者:王夕宁、 刘强、 华相
公司介绍
丽迅物流是百丽旗下专注于时尚产业、为企业提供专业物流及供应链解决方案的服务商。其产品服务主要包括城市落地配、仓配一体、干线运输及定制化解决方案。通过自研智能化物流管理平台,全面助力企业合作集约化发展。目前,丽迅物流已在全国拥有 70+ 全渠道实体云仓、6 大中心电商仓,总面积达 100 万+ 平方米,服务覆盖 300+ 城市、3000+ 商圈,为多家知名时尚品牌及其品牌门店提供全渠道配送服务。
为了降低业务各环节中的运维成本、提高物流服务效率,2021 年 8 月起,丽迅物流开始在阿里云上完成自身从 IDC 自建到全面云原生化的进程。其中使用了阿里云容器镜像仓库企业版 ACR EE 和阿里云容器服务 ACK 作为容器制品管理及调度平台,使用了阿里云服务网格 ASM 作为云原生应用服务的分布式管理平台,通过服务网格的服务治理和流量控制功能,实现了应用程序的高效部署和扩展。
通过本文,丽迅物流架构师刘强分享了关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
业务痛点
在技术架构转型及业务快速发展的背景下,丽迅物流需要和各供应链支撑平台、研发平台等多个业务单元和合作伙伴进行业务交互,其业务系统多元化并且具有开放性。在市场环境和消费者需求快速变化的现状下,我们更希望将精力专注于核心业务的研发。包括了以下需要解决的业务问题痛点:
-
应用版本迭代困难
面对快速变化的客户、业务要求,所依赖的应用功能越来越多。业务越复杂,代码的耦合度也越来越高,新特性上线周期逐步拉长,使得应用版本迭代愈发困难。 -
异构系统无法统一治理
企业级 IT 系统多语言、多协议、多框架的现状,为统一进行服务整合、服务治理设下困局。同时,由于 IT 系统部署基础设施复杂,支持跨平台、跨多个 Kubernetes 集群的技术难点亟需解决。 -
构建统一的云原生应用服务研发平台存在一定困难
以 Spring Cloud 为代表的开源微服务框架成为业界主流的微服务脚手架。这些框架已具备服务注册发现、健康检查等基础微服务能力,但面对企业级应用所涉及的服务访问安全控制、服务流控、路由控制、灰度发布等高阶服务治理问题,仍须应用自行整合大量的第三方开源框架。这使得云原生应用服务业务应用设计开发具有较高的技术门槛,对于企业构建统一的云原生应用服务研发平台带来一定困难。 -
复杂的运维体系
现有的运维体系存在一定的复杂性,相比于服务网格提供围绕流量管理、安全性、可观测性的一系列功能,目前对于大规模管理应用服务的运维体系存在挑战。
解决方案
作为业内首个全托管 Istio 兼容的服务网格产品 ASM,一开始从架构上就保持了业界领先性以及社区与业界发展的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立,保持高可用部署与稳定性。ASM 产品是基于社区开源的 Istio 定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了 Istio 组件与所管理的 K8s 集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。
阿里云服务网格 ASM 架构图
托管式服务网格 ASM 在成为多种类型计算服务统一管理的基础设施中,提供了统一的流量管理能力、统一的服务安全能力、统一的服务可观测性能力、以及基于 WebAssembly 实现统一的代理可扩展能力,以此构筑企业级能力。
除大数据的分析体系外,丽迅物流的当前系统已经全面接入服务网格体系,包括使用以下能力:
丽迅科技业务应用部署架构图
- 认证鉴权体系
客户端发起业务请求,后端需要验证用户请求的合法性。例如,判断用户请求是否有该资源访问权限。认证通过后,返回结果中还需要增加一些原始请求中没有的信息,例如用户认证通过后在 header 中添加业务版本号、用户 ID 等。
针对上述业务场景,ASM 提供了自定义授权服务。在 ASM 网关上加入鉴权流程,以确保只有得到授权的情况下,才能访问关键服务。
具体可以参见:https://help.aliyun.com/document_detail/446628.html?spm=a2c4g.476420.0.0.25005e37CV8ta8
此外,阿里云服务网格 ASM 产品为服务网格下的每一个工作负载提供了简单易用的身份定义,并根据特定场景提供定制机制用于扩展身份构建体系,同时兼容社区 SPIFFE 标准;并提供了基于策略的信任引擎作为构建零信任的关键核心。
- 从微服务框架到服务网格的结合与迁移
在原系统 2.0 体系下,应用微服务之间调用时通过服务注册中心 Eureka 获取实例的 IP 和端口,也就是说 Eureka 通过将服务实例注册到注册表中,并通过 Eureka 客户端进行负载均衡,使得服务可以根据需要动态地选择可用的服务实例进行连接。
在切换到 Kubernetes 和服务网格体系上之后,替换其中微服务应用程序中的 Spring Cloud 模块功能,包括服务注册和发现切换到 Kubernetes 体系,基于 K8s service+Core DNS 实现,也就是说,既然 Kubernetes 已经在 Pod 调度的同时维护了服务和 Endpoint 间的数据,那么就没有必要再单独搞一套名字服务的机制进行服务注册,统一收敛到 Kubernetes 的服务注册与发现是最佳实践。
经过以上的简单改造,各种不同语言、各种不同开发框架开发的服务,只要业务协议相通,彼此可以互相访问,访问协议可以被网格管理,就都可以通过 ASM 进行统一的管理。
控制面上可以配置统一的服务管理规则。数据面上,统一使用 Sidecar 代理进行服务发现、负载均衡和其他流量、安全、可观察性等相关能力。当然在迁移过程中间,也可以阶段性地保留原有微服务框架的注册中心,使 ASM 和其他的服务发现结合使用的中间状态,让网格中的服务可以访问到微服务注册中心的服务。
具体可以参见:https://help.aliyun.com/document_detail/2527072.html
- 全链路灰度
在生产环境正常运行的同时,开始针对部分应用服务进行灰度升级,譬如图中的 B 和 D 应用进行灰度,在不需要修改应用逻辑的情况下,利用 Service Mesh 技术就可以实现根据请求来源或者请求的头信息,动态地路由到不同版本的服务上。譬如,当请求头中包含 tag1 时,应用A就会调用灰度版本 B,而 C 并没有灰度版本,系统就会自动 fallback 回退到原有的版本。
全链路灰度示意图当您需要在多个服务间实现全链路的灰度发布时,可以通过配置 TrafficLabel 来识别流量特征,将网关入口流量分为正常流量和灰度流量。灰度流量特征会在请求调用链经过的各个服务间进行传递,从而实现全链路灰度发布。
具体可以参见:https://help.aliyun.com/document_detail/377563.html?spm=a2c4g.2362128.0.0.50945dfcNA9kUg
- 统一的可观测性体系和联动分析
阿里云服务网格 ASM 提供了网格可观测中心来统一进行可观测性体系和联动分析,分为 3 个维度。
一是日志分析, 通过对数据平面的 AccessLog 采集分析,特别是对入口网关日志的分析,可以分析出服务请求的流量情况、状态码比例等,从而可以进一步优化这些服务间的调用。
第二个可观测性能力是分布式追踪能力。 为分布式应用的开发者提供了完整的调用链路还原、调用请求量统计、链路拓扑、应用依赖分析等工具,可以帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率。
第三个可观测性能力是监控能力。 根据监视的四个维度(延迟,流量,错误和饱和度)生成一组服务指标,来了解、监视网格中服务的行为。
此外,还提供了网格拓扑,用于提供对服务网格行为的即时洞察。除了强大的网格流量拓扑可视化之外,还提供了回放功能,可以选定过去时间段的流量。
- Envoy Filter 扩展能力
ASM 提供了开箱即用的 EnvoyFilter 插件市场来维护扩展插件的全生命周期管理。
基于内置的模板,用户只需要根据对应的参数要求,进行简单配置,就可以部署出对应的 EnvoyFilter 插件。通过这样的机制,使得数据平面成为更易可扩展的插件集合能力。
产品优势
服务网格作为一种用来管理应用服务通信的基础核心技术,为应用服务间的调用带来了安全、可靠、快速、应用无感知的流量路由、安全、可观测能力。
可以看到,阿里云服务网格 ASM 为云原生应用管理带来了重要的优势,总结为以下六个方面。
优势之一:异构服务统一治理
- 多语言多框架的互通与治理、与传统微服务体系融合的双模架构
- 精细化的多协议流量控制、东西向与南北向流量的统一管理
- 统一的异构计算基础设施的自动服务发现
优势之二:端到端的可观测
- 日志、监控与跟踪融合的一体化智能运维
- 直观易用的可视化网格拓扑、基于颜色标识的健康识别体系
- 内置最佳实践、自助式网格诊断
优势之三:零信任安全
- 全局唯一的工作负载身份(Identity)、端到端 mTLS 加密、基于属性的访问控制 (ABAC)
- 一站式配置 JWT 鉴权、接入自定义外部授权系统、及外部 OIDC 认证鉴权身份管理系统
- OPA 声明式策略引擎、及基于仪表板的完整审计历史记录及洞察分析
优势之四:软硬结合性能优化
- 首个基于 Intel Multi-Buffer 技术提升 TLS 加解密的服务网格平台
- NFD 自动探测硬件特征,自适应支持诸如 AVX 指令集、QAT 加速等特性
- 首批通过可信云服务网格平台以及性能评测先进级认证
优势之五:SLO 驱动的应用弹性
- 服务级别目标 (SLO) 策略
- 基于可观测性数据的应用服务的自动弹性伸缩
- 多集群流量突发下的自动切换与故障容灾
优势之六:开箱即用扩展&生态兼容
- 开箱即用的 EnvoyFilter 插件市场、WebAssembly 插件全生命周期管理
- 与 Proxyless 模式的统一融合,支持 SDK、内核 eBPF 方式
- 兼容 Istio 生态系统,支持 Serverless/Knative,AI Serving/KServe
建设成果
应用阿里云服务网格 ASM 之后,高效解决了多语言技术栈情况下应用链路调用复杂的运维难题,并解决了与云上其他产品搭配使用时的易用性问题,从而使运维效率提升了 40%。 同时,借助 ASM 提供的丰富的企业级能力和完备的可观测能力,构建服务网格的实施周期缩短了 50%。
参考:
[1] 运维成本降低 50%,丽迅物流是如何应对大规模容器镜像管理挑战的
[2] 如何构建 Sidecarless 模式的高性能服务网格
相关文章:

服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
作者:王夕宁、 刘强、 华相 公司介绍 丽迅物流是百丽旗下专注于时尚产业、为企业提供专业物流及供应链解决方案的服务商。其产品服务主要包括城市落地配、仓配一体、干线运输及定制化解决方案。通过自研智能化物流管理平台,全面助力企业合作集约化发展…...

bpmnjs Properties-panel拓展(属性设置篇)
最近有思考工作流相关的事情,绘制bpmn图的工具认可度比较高的就是bpmn.js了,是一个基于node.js的流程图绘制框架。初始的框架只实现了基本的可视化,想在xml进行客制化操作的话需要拓展,简单记录下几个需求的实现过程。 修改基础 …...

Debian系统上通过NFS挂载远程服务器硬盘
步骤 1:配置远程服务器 在拥有硬盘内容的远程服务器上,进行以下配置: 安装NFS服务器软件: sudo apt-get update sudo apt-get install nfs-kernel-server编辑NFS服务器配置文件 /etc/exports,添加需要共享的目录及其权…...

【Linux】以太网协议以及MTU
以太网协议 数据链路层的功能以太网的数据格式MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对TCP协议的影响 数据链路层的功能 数据链路层的主要功能是:控制链路。包括数据链路的建立、链路的维护和释放。MAC寻址也是它的功能,寻址是指计算机网卡的MAC地…...

UE5打完包后,启动程序不能全屏
最近看到ue5的打包程序后不能默认自动全屏,效果如下,发现并不是全屏的,而且就算点击放大也不是全屏 解决办法:设置如下之后在打包就可以了 但是会一直打印错误的日志,不过这个不影响使用...

财务部发布《企业数据资源相关会计处理暂行规定》
导读 财务部为规范企业数据资源相关会计处理,强化相关会计信息披露,根据《中华人民共和国会计法》和相关企业会计准则,制定了《企业数据资源相关会计处理暂行规定》。 加gzh“大数据食铁兽”,回复“20230828”获取材料完整版 来…...

引用(个人学习笔记黑马学习)
1、引用的基本语法 #include <iostream> using namespace std;int main() {int a 10;//创建引用int& b a;cout << "a " << a << endl;cout << "b " << b << endl;b 100;cout << "a "…...

卷积神经网络实现运动鞋识别 - P5
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:Pytorch实战 | 第P5周:运动鞋识别🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 目录…...

C#安装“Windows 窗体应用(.NET Framework)”
目录 背景: 第一步: 第二步: 第三步: 总结: 背景: 如下图所示:在Visual Studio Installer创建新项目的时候,想要添加windows窗体应用程序,发现里面并没有找到Windows窗体应用(.NET Framework)模板,快捷搜索也没有发现&#…...

SQL高阶语句
目录 1、概念 1.1、概述 1.2、常见的MySQL高阶语句的概念: 1.3、 SQL高阶语句的作用 2、常用查询 2.1、按关键字排序 2.1.1、概述和作用 2.1.2、 (1)语法 2.1.3、模板表:ky30 编辑2.1.4、分数按降序排列 2.1.5、ORDER…...

【交换机】如何通过Web方式登陆交换机
一、华为交换机web登陆配置 Web网管是一种对交换机的管理方式,它利用交换机内置的Web服务器,为用户提供图形化的操作界面。用户可以从终端通过HTTPS登录到Web网管,对交换机进行管理和维护,同时也非常方便。 一、配置思路ÿ…...

Flink CDC学习笔记
第一章 CDC简介 1.1 什么是CDC CDC (Change Data Capture 变更数据获取)的简称。核心思想就是,检测并获取数据库的变动(增删查改),将这些变更按发生的顺序记录下来,写入到消息中间件以供其它服务进行订…...

NEOVIM学习笔记
GitHub - blogercn/nvim-config: A pretty epic NeoVim setup 一直使用vim,每次到了新公司都要配置半天,而且常常配置失败,很多插件过期不好用。偶然看到别人的NEO VIM,就试着用了一下,感觉还不错。 用来开发和阅读C代…...

Docker三剑客之docker-compose
docker-compose 是 Docker 生态系统中的一个重要成员,它允许开发人员使用一个简单的配置文件来定义和运行多个 Docker 容器。通过 docker-compose,你可以定义应用程序的各个组件、容器之间的依赖关系以及网络配置,从而实现在一个命令中启动、…...

单调队列
目录 一,单调队列 二,模板实现 三,OJ实战 剑指 Offer 59 - I. 滑动窗口的最大值 一,单调队列 单调队列是双端队列的拓展,支持尾部插入,双端删除,其中的数据始终维持单调性,从而…...

effective c++ 笔记
TODO:还没看太懂的篇章 item25 item35 模板相关内容 文章目录 基础视C为一个语言联邦以const, enum, inline替换#define尽可能使用constconst成员函数 确定对象使用前已被初始化 构造、析构和赋值内含引用或常量成员的类的赋值操作需要自己重写不想使用自动生成的函…...

【送书活动】深入浅出SSD:固态存储核心技术、原理与实战
前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄ÿ…...

GaussDB数据库SQL系列-行列转换
一、前言 二、简述 1、行转列概念 2、列转行概念 三、GaussDB数据库的行列转行实验示例 1、行转列示例 1)创建实验表(行存表) 2)静态行转列 3)行转列(结果值:拼接式) 4&…...

美国陆军网络司令部利用人工智能增强网络攻防和作战决策能力
源自: 奇安网情局 声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨,并不意味着支持其观点或证实其内容的真实性。版权归原作者所有,如转载稿涉及版权等问题,请立即联系我们删除。 “人工智能技术与咨询…...

Notion团队协作魔法:如何玩转数字工作空间?
Notion简介 Notion已经成为现代团队协作的首选工具之一。它不仅仅是一个笔记应用,更是一个强大的团队协作平台,能够满足多种工作场景的需求。 Notion的核心功能 Notion提供了丰富的功能,如文档、数据库、看板、日历等,满足团队的…...

视频云存储/安防监控/AI视频智能分析平台新功能:人员倒地检测详解
人工智能技术已经越来越多地融入到视频监控领域中,近期我们也发布了基于AI智能视频云存储/安防监控视频智能分析平台的众多新功能,该平台内置多种AI算法,可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍,支持口罩佩戴检测…...

解决RabbitMQ报错Stats in management UI are disabled on this node
文章目录 问题描述:解决步骤:进入容器后,cd到以下路径修改 management_agent.disable_metrics_collector false退出容器重启rabbitmq容器 问题描述: linux 部署 rabbitmq后,打开rabbitmq管理界面。点击channels&#…...

【重点】【NAND】聊聊固态硬盘SSD的寿命及其影响因素
固态硬盘是由主控芯片、存储颗粒芯片组成的闪存设备,固体硬盘的英文简称是SSD,如果是移动用的固态硬盘,则其英文简称为PSSD。 固态硬盘SSD分工业级和消费级等,目前,工业级固态硬盘SSD通常采用MLC闪存,而消…...

数据库约束
文章目录 1. 简介2. 代码演示3. 外键约束4. 外键删除和更新行为 1. 简介 概念:约束时作用于表中子段上的规则,用于限制存储在表中的shuju目的:保证数据库中数据的正确、有效性和完整性分类: 约束描述关键字非空约束限制该字段不…...

Unity实现MQTT服务器
首先下载MqttNet:MqttNet下载地址 解压好后使用vs打开,并生成.dll文件(我这里下载的是4.1.2.350版本) 然后再/Source/MQTTnet/bin/Debug/net452 文件夹中找到生成的文件 新建unity工程,创建Plugins文件夹࿰…...

Linux(centos) 下 Mysql 环境安装
linux 下进行环境安装相对比较简单,可还是会遇到各种奇奇怪怪的问题,我们来梳理一波 安装 mysql 我们会用到下地址: Mysql 官方文档的地址,可以参考,不要全部使用 https://dev.mysql.com/doc/refman/8.0/en/linux-i…...
决策树(Decision Tree)
决策树的定义: 分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型: 内部结点(internal node)和叶结点(leaf node࿰…...

解决 PaddleClas 下载预训练模型报错 ModuleNotFoundError No module named ‘ppcls‘ 的问题
当我们在使用 PaddleClas 进行预训练模型下载时,可能会遇到一个报错,报错信息为 ModuleNotFoundError: No module named ppcls。这个错误通常是因为 Python 解释器无法找到名为 ppcls 的模块,而我们的代码中正尝试导入它。让我们一起来解决这…...

视觉化洞察:为什么我们需要数据可视化?
为什么我们需要数据可视化?这个问题在信息时代变得愈发重要。数据,如今已成为生活的一部分,我们每天都在产生大量的数据,从社交媒体到购物记录,从健康数据到工作表现,数据无处不在。然而,数据本…...

C语言函数概述——拜佛代码
函数是一种可重用的代码块,用于执行特定任务或完成特定功能函数作用:对具备相同逻辑的代码进行封装,提高代码的编写效率,实现对代码的重用函数作用演示代码: #include <stdio.h>// 定义函数 void func() {print…...