当前位置: 首页 > news >正文

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者:谢吉宝

本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式,降低微服务复杂度的最佳实践》的分享

图片

2023 云栖大会现场

当面临复杂的挑战时,"分而治之"的方法往往能取得显著的效果。微服务架构在这方面的贡献尤为突出,它不仅为"分"与"治"这两个环节提供了深思熟虑的理论指导,还进一步展示了如何将这些理念转化为最优的实践经验。

图片

微服务首次提出至今,有无数的企业在尝试用微服务架构去解决企业所遇到的架构问题,从我们服务外部客户的过程中发现,这些企业在落地微服务架构的过程中,普遍遇到四大挑战。

  • 上手门槛高
  • 稳定保障难
  • 安全防控难
  • 运营成本高

阿里也是在微服务技术领域积极探索的企业之一,至今已经有了 17 年的探索历程。我们把这 17 年的经验沉淀成了两款云上的微服务产品,分别是微服务引擎 MSE 和企业级应用分布式服务 EDAS。

图片

微服务引擎 MSE 集成了注册配置中心、微服务治理和云原生网关三个子产品,通过这三款产品,就能够搭建起一套完整的微服务架构,并且内置了安全和高可用的能力。

企业级应用分布式服务 EDAS 是以应用为中心的一套微服务最佳实践平台,提供应用全生命周期管理、业务流量管理和后台任务调度,打通资源管理、CI/CD、可观测服务。再结合应用实时监控服务 ARMS 和容器服务 ACK,就构建出了阿里云的整套微服务产品及解决方案。接下来,我将和大家一起探索 MSE 和 EDAS 在是如何思考和解决微服务落地难题的。

如何应对上手门槛高

针对上手门槛高,MSE 提供了新手引导功能,用户可以做到一键部署 demo 应用,3 分钟激活,30 分钟掌握产品的核心基础能力。

EDAS 则提供了更加云原生化的应用管理模型 CloudApp。通过 CloudApp,可以像原生使用 K8s 一样来操作 EDAS,并且能够和 EDAS 在线可视化的界面相互同步。习惯使用 K8s 的人员,可以完全使用 K8s 的方式,将应用托管到 EDAS 中,进行应用的治理和运维等动作。

除此以外,我们还通过通义千问训练了云原生专属大模型,并基于此打造了云原生产品智能助手。基于此,用户将在 MSE 和 EDAS 上拥有全新的产品体验。云原生产品智能助手完全基于对话式完成实例的创建、应用的部署以及产品核心能力的体验。同时,在应用上线以后,基于云原生产品智能助手的思维链模式,结合 ARMS 的 insight 智能洞察功能,用户还可以完成整个微服务请求的诊断分析能力。

图片

最后,针对云产品价格“上手门槛高”这一痛点,我们发布产品试用体验计划。

  • MSE: 全系列产品 30 天全功能免费体验,提供专家级的培训课程及技术支持。
  • EDAS: 提供 60 天、不限节点数的免费体验,提供 15 门免费的远程视频培训课程。

图片

如何应对稳定保障难

高可用是企业生产业务的核心挑战。高可用问题分成三大类,容量问题、容错问题和容灾问题。这三类问题时刻遍布在开发态、变更态和运行态,可以说,高可用的问题是无处不在的,并且,根据经验统计,70% 的线上故障都是由变更引起的。

MSE 集成高可用能力。首先,它自身就是基于多 AZ 进行部署的,确保了产品本身的高可用性。其次,针对 70% 风险都来自变更态问题的事实,MSE 提供了无损上下线以及各种粒度的灰度服务,通过灰度和无损上下线,可以有效解决变更带来的爆炸半径问题,进而缩小了故障产生的影响面,甚至从根源上杜绝故障的发生。 针对运行态,面对不确定性的流量调用、不稳定的基础设施和应用自身的故障,MSE 集成了全链路的 TLS 服务、微服务身份鉴权以及黑产刷单等防护,同时提供了限流降级等服务治理功能,可以有效的保护这些不确定性给业务带来的高可用风险。

图片

EDAS 则可以让客户轻松构建自己的高可用架构,一键把业务直接也发布到多个可用区。 同时,针对每一个可用区自身的服务调用,能够确保优先调用本可用区的服务。一方面,减少跨可用区域之间调用给业务带来的不必要延迟,另一方面,也确保了在本可用区内服务调用闭环,进而增强了应用本身的高可用性。

图片

如何应对安全防控难

微服务架构的安全问题,也是企业不可避免的巨大挑战。随着服数量的增多,架构复杂性逐步提升,安全漏洞的修复速度挑战加剧。万一没有及时修复好,安全攻击的爆炸半径会随着微服务架构的复杂度的增加而增大,还有诸如微服务之间的认证鉴权、安全通信、配置存取加密等一系列的问题,都给企业带来了非常大的风险。

MSE 默认集成了安全能力。首先在架构侧,我们建议企业把微服务架构的入口统一收敛到云原生网关。云原生网关默认集成了证书管理、登录认证、WAF3.0 等一系列安全能力。同时,还支持向 Sentinel 限流降级、服务鉴权以及 WAF 插件增强能力,把微服务架构的安全统一收敛至网关侧,用来确保安全漏洞可以集中在网关侧,给网关后端的微服务漏洞修复,争取了修复的时间窗口,保障了整个架构的安全,同时,又能收敛住整个安全钩机的爆炸半径。微服间的调用,MSE 则默认集成了通信间的安全、配置加密以及全链路的 MTLS,确保了微服架构调用之间的安全。也基于此,MSE 荣获中国信通院最高安全成熟度评级。

图片

如何应对运营成本高

微服务架构的最后一个挑战就是运营成本高。首先,微服务架构都将面临流量的不确定性,导致入口流量难以评估。如果想通过全链路压测来做流量的评估,改造成本和复杂度都非常高。

其次,基于开源自建微服务相关组件依赖复杂,组件之间的兼容性问题频发。如果盲目的去做组件升级,评估不到位的话,很容易造成服务中断。

第三,应用的平均负载不高。按照行业报告显示,企业的平均 CPU 利用率不超过 20%,存在着极大的资源浪费。为了解决这些问题,MSE重磅发布升级,向 Serverlees 化演进。

图片

通过自适应弹性,来解决流量的不确定性。根据流量自动弹性伸缩,无需做复杂的流量规划,就能够保证潮汐式业务的稳定性,并且能够极大限度的节约成本。通过开箱即用免运维方案,解决微服务各组件依赖复杂的兼容问题,支持将相应的组件自动进行兼容性风险扫描,并自动升级,减轻用户的运维负担,所有的关键事件也能统一到一个视图里。

MSE Serverless 版支持按需付费。其中,云原生网关按照请求量计费,注册配置中心按照客户的连接数计费。对于中小型企业而言,MSE 的使用成本将大幅下降。

  • 注册配置中心开发板,47 元/月起,比开源自建成本下降 50%。
  • 注册配置中心 Serverlees 实例,生产集群 115元/月起,比开源自建下降成本62%。
  • 云原生网关 Serverless 实例,生产集群 97 元/月起,比开源自建更是下降成本75%。

图片

此外,EDAS  提供了更加全面的方式,帮助客户的业务来实现极致的资源弹性。例如将客户应用上的各类指标进行统一暴露,客户可以根据自身业务的特点,选择更贴合自己业务特性的指标,综合判断来进行资源弹性,提升弹性的准确度,进一步降低使用成本。同时,我们还将根据客户业务的特点,通过 AI 算法来预测未来某一段时间内的指标数据,根据指标回放,直接使用 N 天前的指标,提升资源弹性。通过资源弹性的分时复用策略,将最大限度的降低云产品的使用成本。

图片

此外,在应用开发过程中,我们发现客户的程序实际使用的堆内存和申请的最大堆内存存在不一致的情况,甚至前者是远远小于后者的,导致客户的内存出现大量的闲置,引发了高昂的资源使用成本。对于此,EDAS 和阿里云 Dragonwell 团队合作,联合推出了 JVM 弹性堆能力,只在运行时为程序自动适应理想的对大小,从而将闲置内存返还给操作系统,为客户节省内存资源。

图片

在 EDAS 上开启弹性堆之后,Dragonwell JDK 会自动为 Java 程序匹配合理的自适应堆大小,对内存占用预计节省 10% 以上。 基于原生的 JVM GC 触发内存弹性,对应用影响极小或者几乎没有影响。配置上,只需要增加少量 JVM 参数即可,对客户的业务完全没有侵入,替代了传统人工发现、人工调整、观察改进多轮内存优化的策略。EDAS 帮助客户基于托管的应用历史数据做出可行性评估,并且给出开启建议,提供稳定长期技术支持。

以上就是今天的全部分享, 希望通过阿里云的微服务产品矩阵和解决方案,能够帮助在企业在微服务落,降低复杂度,打造极简微服务模式。

相关文章:

如何降低微服务复杂度丨云栖大会微服务主题分享实录

作者:谢吉宝 本文整理自阿里云资深技术专家、中间件负责人谢吉宝在2023云栖大会《极简微服务模式,降低微服务复杂度的最佳实践》的分享 2023 云栖大会现场 当面临复杂的挑战时,"分而治之"的方法往往能取得显著的效果。微服务架构…...

openresty 安装, nginx与 openresty

openresty VS nginx Nginx 是一款高性能的 Web 服务器和反向代理服务器,具备基础的功能如HTTP服务、负载均衡、反向代理以及动静分离等。它是许多互联网应用的核心组件,因其模块化和可扩展的设计而受到欢迎。1 OpenResty 是基于 Nginx 的 Web 平台&…...

puppeteer实现截图

Window服务器说明 1.在本地安装 puppeteer 先创建一个本地文件夹puppeteer,我的地址D:\common_workspace\puppeteer 然后使用cmd打开这个文件夹所在位置,再执行如下两条命令即可。 npm install -g cnpm --registryhttps://registry.npm.taobao.orgcnpm …...

【2024Java面试突击】并发编程、线程池面试实战

前言 最近在更新面试突击专栏,我把每一篇将字数都尽量控制在 2000 字以内,可能在文章里边写的没有那么细致,主要是提供一些 问题 以及 回答的思路 ,以及 面试中可能忽略的漏洞 ,所以在看完文章之后,如果自…...

ASUS华硕无畏Pro15笔记本电脑(M6500QB,M6500QH)工厂模式原厂OEM预装Windows11.22H2系统 含Recovery恢复

原装出厂Windows11系统适用于华硕无畏15笔记本电脑型号:M6500QB和M6500QH 链接:https://pan.baidu.com/s/1AVGLN6-ILIRogOMj48Mk1w?pwdmi7d 提取码:mi7d 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题专用壁纸、系统属性联机支持…...

代码随想录算法训练营第三十天|51. N皇后

|51. N皇后 public List<List<String>> solveNQueens(int n) {List<List<String>> res new ArrayList<>();return null;}void backtracking1(int n, int row, int[] columns) {// 是否在所有n行里都摆放好了皇后?if (row n) {count;// 找到了…...

Kubernetes(K8S)各种攻击方法

1. 准备工作 1.1. metarget使用 项目地址(教程):https://github.com/Metarget/metarget/blob/master/README-zh.md 注意:推荐在Ubuntu 18.04(推荐)安装。 1.1.1. 安装metarget git clone https://github.com/Metarget/metarget.git cd metarget/ sudo apt install pyt…...

【MySQL】内外连接

内外连接 一、内连接二、外连接1、左外连接2、右外连接 表的连接分为内连和外连。 一、内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选。只不过为了让sql的可读性更好&#xff0c;我们使用其他的关键字进行内连接。 语法&#xff1a; SELECT ... FRO…...

selenium执行出现异常,SessionNotCreatedException ChromeDriver only supports

问题现状&#xff1a; 运行程序报错&#xff1a; selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 121.0.6167.85 with binary path /App…...

Flink:快速掌握批处理数据源的创建方法

Flink 社区最近 “基于FLIP-27” 设计了新的 Source 框架 。一些连接器&#xff08;API&#xff09;已迁移到这个新框架。本文介绍了如何使用这个新框架创建批处理源。 它是在为Cassandra实现Flink 批处理源时构建的。如果您有兴趣贡献或迁移连接器&#xff0c;这篇文章非常适合…...

基于cubeMX的正点原子miniSTM32对W25Q64的存储使用

一、实现目标 使用cubeMX建立项目工程&#xff0c;结合正点原子提供的hal库对W25Q64闪存调用的例程&#xff0c;实现W25Q64的读写。 二、实现过程 1、首先建立cubeMX工程&#xff0c;其他项设置不再叙述&#xff0c;只看连接W25Q64的SPI设置&#xff0c;这里使用SPI1&#xf…...

C++笔记(三)

封装意义: 在设计类的时候&#xff0c;属性和行为写在一起&#xff0c;表现事物 类在设计时&#xff0c;可以把属性和行为放在不同的权限下&#xff0c;加以控制。 访问权限有三种&#xff1a; public 公共 类内 类外都可以访问&#xff0c; protected保护 类内可以访问…...

c语言不定参数

时间记录&#xff1a;2024/1/22 一、不定参数的函数定义和使用到的c函数 &#xff08;1&#xff09;定义 void fun1(参数类型 argName,...); 示例&#xff1a; void fun1(int count,...);&#xff08;2&#xff09;获取不定参数的值 #include <stdarg.h> //包含头文件…...

云手机与实体手机的对比

在数字化时代&#xff0c;云手机作为一种虚拟手机在云端服务器上运行&#xff0c;与传统的实体手机相比存在诸多差异。让我们深入探讨云手机与实体手机之间的区别&#xff0c;以便更好地了解它们的特点和优势。 外观上的差异 实体手机具有实际的外观和重量&#xff0c;占据一定…...

diffusion 和 gan 的优缺点对比

sample速度GAN更快&#xff0c;Diffusion需要迭代更多次。 训练难度GAN 的训练可能是不稳定的&#xff0c;容易出现模式崩溃和训练振荡等问题。Diffusion 训练loss收敛性好&#xff0c;比较平稳。 模拟分布连续性Diffusion相较于GAN可以模拟更加复杂&#xff0c;更加非线性的分…...

VC++中使用OpenCV进行人脸检测

VC中使用OpenCV进行人脸检测 对于上面的图像&#xff0c;如何使用OpenCV进行人脸检测呢&#xff1f; 使用OpenCV进行人脸检测十分简单&#xff0c;OpenCV官网给了一个Python人脸检测的示例程序&#xff0c; objectDetection.py代码如下&#xff1a; from __future__ import p…...

11Docker数据持久化

Docker数据持久化 容器中数据持久化主要有两种方式&#xff1a; 数据卷&#xff08;Data Volumes&#xff09;数据卷容器&#xff08;Data Volumes Dontainers&#xff09; 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录&#xff0c;可以绕过UFS&#xff08;Unix F…...

RK3588平台开发系列讲解(视频篇)RKMedia框架

文章目录 一、 RKMedia框架介绍二、 RKMedia框架API三、 视频处理流程四、venc 测试案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢RKMedia是RK提供的一种多媒体处理方案,可实现音视频捕获、音视频输出、音视频编解码等功能。 一、 RKMedia框架介绍 功能: VI(输…...

Vue3 Teleport 将组件传送到外层DOM位置

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…...

【学网攻】 第(5)节 -- Cisco VTP的使用

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了世界各地的人们&#xff0c;让信息和资…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...