• Istio技术与实践05:如何用istio实现流量管理
    Istio技术与实践05:如何用istio实现流量管理1      Istio是什么?Istio 1.0版本于8月1号凌晨准点发布,核心特性已支持上生产环境,各大微信公众号、博客纷纷发文转载。那么Istio到底是什么?能解决问题什么? 1、 Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等,它提供了完整的非侵入式的微服务治理解决方案,解决微服务的管理、网络连接以及安全管理等应用网络治理问题2、 它无需修改任何代码就能够实现微服务的负载均衡,服务与服务之间的认证授权以及流量监控和治理。从整个基础设施角度上看,可以将它理解为PaaS平台上的一个面向微服务管理平台的补充。 2      Istio与KubernetesKubernetes提供了部署、升级和有限的运行流量管理能力;利用service的机制来做服务注册和发现,转发,通过kubeproxy有一定的转发和负载均衡能力。但并不具备上层如熔断、限流降级、调用链治理等能力. Istio则很好的补齐了k8s在微服务治理上的这部分能力,同时是基于k8s构建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服务治理上的非常关键的一环。3      Istio流量管理能力介绍Istio,用于连接、保护、控制和观测服务。今天,我们就来谈谈Istio第一主打功能——连接服务。那么,便引出3个问题:Istio如何实现服务之间的连接?连接后具备哪些流量管理能力?如何告诉Istio发挥这些能力? 3.1         Istio如何实现服务的连接?如上图所示的Istio架构图,让我们关注控制面的Pilot,它是Istio实现流量管理的核心组件。而在数据面,每个Service,都会被注入1个Proxy。Istio通过Pilot下发配置信息给数据面每1个Service的Proxy,从而通过这些Proxy,间接地控制每1个Service之间以及和外部的连接。Proxy通常采用另一个知名的开源项目Envoy来实现。1个Pilot和(N+N)个(Service+Proxy)组合,便形成了Service Mesh,即服务网格。有了这一套服务网格系统,对服务之间的流量进行管理,便不在话下。3.2      连接后具备哪些流量管理能力?从服务间的流量管理角度而言,Istio可以实现这4项功能:请求路由、服务发现和负载均衡、故障处理和故障注入。 3.2.1        请求路由如上图所示,Istio引入了服务版本的概念,可以通过(Current Version,Canary Version)2个版本对服务进行进一步的细分。基于这种划分,通过Pilot,你可以下发配置到Service A的Proxy,使得其95%的流量路由至Service B的Current版本,5%的流量路由至Service B的Canary版本。当然你也可以选择雨露均沾,各分50%流量,或者霸道总裁,让Canary版本占有100%的流量。 如上图所示,除了按照百分比在不同版本之间分发流量,你还可以按照请求内容,将请求路由至不同的版本。例如,你可以发布一个Canary版本,只让用着Macbook笔记本,且安装了windows操作系统,还使用着360浏览器的用户能够访问到。 这一切改变,都只需要你改动一个叫VirtualService的配置文件(详见下章),眨个眼的功夫,Istio就已经通过Pilot帮你把新的配置下发下去了。 3.2.2        服务发现和负载均衡如上图所示,服务网格存在3个生命周期的动态循环:服务注册、服务发现、负载均衡。通常kubernetes,mesos等容器管理平台已经提供了服务注册表,以跟踪服务的负载实例,所以Pilot能轻而易举地获知服务网格内的所有服务注册信息,并将这些信息告知所有服务里的Proxy,Proxy根据这些信息执行服务发现,并相应地动态更新其负载均衡池。一个服务通常有多个负载实例,Service A请求Service B时,可以配置不同的负载均衡模式:轮询、随机和带权重的最少请求。假设此时Service B的某个负载实例出现故障,因为Service A中的Proxy会定期地执行服务发现,从而能及时将故障实例从其负载均衡池里排出。 3.2.3        故障处理Envoy 提供了一套开箱即用,可选的故障处理功能,对应用中的服务大有裨益。这些功能包括:1.         超时2.         具备超时预算,并进行有限重试,重试之间的时长可抖动3.         并发连接数和上游服务请求数限制4.         对负载均衡池中的每个成员进行主动(定期)运行健康检查5.         细粒度熔断器(被动健康检查)- 适用于负载均衡池中的每个实例以Service A请求调用Service B为例。对于功能1。若Service B明确地知道10s以后的超时,必定会带来失败,那将超时时长缩短,使得Service A可以更快得知结果并作出应对,不失为一个明智之举。对于功能2。对超载的Service B来说,重试之间的抖动极大的降低了重试造成的影响,而超时预算确保Service A在可预测的时间范围内获得响应(成功/失败)。对于功能3。限制Service A或其他服务对Service B的连接数和请求数,可以使得Service B免于遭遇DDOS攻击,或承受过重的流量负担而崩溃。对于功能4和5。主动和被动健康检查的组合最大限度地减少了在负载平衡池中访问不健康实例的机会。当与平台级健康检查(例如由 Kubernetes 或 Mesos 支持的检查)相结合时,应用程序可以确保将不健康的负载实例快速地从服务网格中去除,从而最小化请求失败和延迟产生影响。总之,这些功能使得服务网格能够耐受故障节点,并防止本地故障导致的其他节点的稳定性下降。 3.2.4        故障注入虽然Proxy为在Istio上运行的服务提供了上节所言的大量故障处理机制,但测试整个服务网格所组成应用的端到端的故障恢复能力依然是必须的。错误配置的故障恢复策略(例如,跨服务调用的不兼容/限制性超时)可能导致应用程序中的关键服务持续不可用,从而破坏用户体验。Istio 能在不杀死负载实例的情况下,将协议特定的故障注入到网络中,在 TCP 层制造数据包的延迟或损坏。我们的理由是,无论网络级别的故障如何,应用层观察到的故障都是一样的,并且可以在应用层注入更有意义的故障(例如,HTTP经典的4xx和5xx错误代码),以检验和改善应用的韧性。运维人员可以为符合特定条件的请求配置故障,还可以进一步限制遭受故障的请求的百分比。可以注入两种类型的故障:延迟和中断。延迟是计时故障,模拟网络延迟上升或上游服务超载的情况。中断是模拟上游服务的崩溃故障。中断通常以 HTTP 错误代码或 TCP 连接失败的形式表现。依旧以Service A请求调用Service B为例。若给Service B设定了10s的延时或503中断,则Service A将至少10s后才能得到请求的响应或请求的响应为503错误,通过多种场景覆盖测试,可以得到Service A面对这些场景时的综合表现情况,从而做出针对性的改良,增加其韧性。3.3         如何告诉Istio发挥这些能力?Istio有4个配置文件,帮我们全方位地定制以上所有流量管理需求: VirtualService, DestinationRule, ServiceEntry和 Gateway:1.         通过配置VirtualService,可以实现请求路由的功能;2.         通过配置DestinationRule,可以实现服务发现和负载均衡、故障处理和故障注入的功能;3.         通过配置ServiceEntry,让服务网格内的服务,可以看到外面的世界;4.         通过配置Gateway,让服务网格的服务,可以被全世界看到;有了以上4**宝,我们对服务网格进行流量管理的所有需求,都可以被满足了。限于篇幅,让我们举3个简单的栗子:假设我们的服务网格存在1个服务explorer,只有1个v1版本;存在另1个服务helloworld,有v1,v2两个版本。①若要使得explorer发起的所有请求,以75%的概率走向helloworld的v1版本,以25%走向v2版本,只要配置如下两个文件VirtualService和DestinationRule,便可实现:apiVersion: networking.Istio.io/v1alpha3kind: VirtualServicemetadata:  name: helloworldspec:  hosts:    - helloworld  http:  - route:    - destination:        host: helloworld        subset: v1      weight: 75    - destination:        host: helloworld        subset: v2      weight: 25---apiVersion: networking.Istio.io/v1alpha3kind: DestinationRulemetadata:  name: helloworldspec:  host: helloworld  subsets:  - name: v1    labels:      version: v1  - name: v2    labels:      version: v2  ②如果helloworld内部需要通过访问www.google.com来获取一些信息,才能告诉explorer这个世界是怎么样的,需要配置如下2个文件ServiceEntry和DestinationRule:apiVersion: networking.Istio.io/v1alpha3kind: ServiceEntrymetadata:  name: googleapisspec:  hosts:  - "*.google.com"  ports:  - number: 443    name: https    protocol: http--- apiVersion: networking.Istio.io/v1alpha3kind: DestinationRulemetadata:  name: googleapisspec:  host: "*.google.com" ③如果helloworld需要被服务网格外,而不仅仅是explorer服务访问到,则需要配置如下2个文件Gateway和VirtualService:apiVersion: networking.Istio.io/v1alpha3kind: Gatewaymetadata:  name: helloworld-gatewayspec:    selector:      Istio: ingressgateway  servers:  - port:      number: 80      name: http      protocol: HTTP    hosts:    - 'helloworld.com'---apiVersion: networking.Istio.io/v1alpha3kind: VirtualServicemetadata:  name: bookinfospec:  hosts:    - 'helloworld.com'  gateways:  - helloworld-gateway  http:  - route:    - destination:        host: helloworld        port:          number: 9080  至此,我们做一个简单的总结:Istio提供的Pilot和Proxy,将成百上千个服务组成了一个服务网格,基于此,我们可以实现请求路由、服务发现和负载均衡、故障处理以及故障注入等流量管理能力,这一切,我们只需要通过对VirtualService, DestinationRule, ServiceEntry和 Gateway这4个资源做简单的配置,即可实现。 时冯七夕,正所谓,金风玉露一相逢,便胜却人间无数。K8S和Istio的碰撞,又会在Cloud Native的世界里,勾出怎样的天雷和地火呢?拭目以待。 
  • [分享交流] 快速认识MoXing——华为云深度学习服务提供的网络模型开发API
    序言:MoXing是华为云深度学习服务提供的网络模型开发API。相对于TensorFlow和MXNet等原生API而言,MoXing API让模型的代码编写更加简单,而且能够自动获取高性能的分布式执行能力。1、初识华为云深度学习的王牌利器 — MoXing首先,“MoXing”是“模型”一词的汉语拼音。因为深度学习时代,中国的科研和工程团队逐步成为行业的引领者,使用源于中文的名称,彰显了深度学习服务(DLS)研发团队的自信,DLS研发团队将努力把MoXing API打造为模型开发领域的业界标杆。点击阅读2、基于TensorFlow运行参数教程这章主要介绍用户在定义运行参数时遇到的常见报错及解决办法。MoXing没有对运行参数定义特殊API,用户可根据自己的习惯定义运行参数。建议使用TensorFlow的flags组件来定义。点击阅读3、数据输入教程本文主要介绍MoXing将数据的输入定义在input_fn方法中,并在mox.run时注册该方法。点击阅读4、模型定义教程本文主要讲述MoXing将模型定义在model_fn方法中,并在mox.run时注册该方法。点击阅读5、优化器配置用户可以使用mox.get_optimizer_fn来获取MoXing内置的Optimizer,也可以使用TensorFlow定义或由用户自己实现的Optimizer。此外,MoXing还提供了OptimizerWrapper的用法。点击阅读6、运行与公共组件本文为MoXing系列文章第六篇,主要介绍MoXing运行及公共组件。点击阅读
  • [媒体转码] 媒体转码下API流控限制说明
    媒体转码服务设置了API流控限制,避免因短时间内重复调用API导致服务中断的情况出现。API流控限制说明如表1所示。表1 API流控限制
  • 详解如何实现在线聊天系统中的实时消息获取
    序言传统web浏览器应用采用客户端主动请求方式,只有在收到浏览器请求时服务端才返回消息,这种模式已经不能满足日益多样化的web应用需求,例如:在线聊天系统:需要实时获取聊天消息。实时监控系统:需要实时获取监控对象状态。如仪表读数、告警信息等。随着html技术演进,发展出了多种服务器推送技术,用于服务器向浏览器客户端推送消息。Ajax轮询采用ajax定时向服务端发送请求检查有无消息更新。网页定时向服务器发送请求,若服务器有消息推送,则返回消息,否则返回空消息,如下图所示:这种轮询方式需要发送大量无效请求,大大消耗了服务器资源,且推送消息的实时性较低。Ajax长轮询ajax长轮询对前面的ajax轮询方式做了改进,服务端收到请求后,不再立即返回,而是等待有消息推送时返回。网页收到服务端返回的消息后,立即发起一个新的请求,等待下一个推送消息。采用这种方式的服务端实现比前者复杂,需要维护一个客户端建立的连接列表,当产生对某个客户端的推送消息后找到对应的连接并发送。优势是减少了轮询消耗,发送事件的实时性得到增强。Server-Send EventServer-Send Event是html5标准新增的技术,它延用了Ajax长轮询的思路,并对其进行了一些规范。Server-Send Event让服务端可以向客户端流式发送文本消息,并在发送完一个消息后保持请求不结束,连接始终保持。如下图所示:网页调用EventSource接口向服务器发送请求var source = new EventSource('http://localhost:8080');source.addEventListener('message', function(e) { console.log(e.data); }, false);服务器返回的Content-Type头必须为text/event-stream,且返回完一个消息后不关闭请求,后续消息仍然使用同一个请求返回。浏览器会自动以换行符识别每个消息。响应头Content-Type: text/event-streamX-Accel-Buffering: no响应体event: userlogindata: {"username": "John123"}event: messagedata: 123如果服务端返回的消息通过nginx等代理服务器返回给客户端时,可能受到nginx缓存机制的影响。某些情况下,nginx会将服务端返回体缓存起来,等待所有返回接受完毕后再统一返回给客户端,在server-send event情况下将导致客户端无法及时接收到消息。需要在返回头中添加X-Accel-Buffering: no,以防止nginx做缓存。使用华为API gateway提供Server-Send Event类型的API服务建立后端服务登录华为云https://console.huaweicloud.com/,创建弹性云服务器    输入apt install nodejs安装nodejs,使用nodejs创建服务器,并输入下列示例代码。var http = require("http"); http.createServer(function (req, res) {    if (req.url === "/stream") {        res.writeHead(200, {            "Content-Type":"text/event-stream",            "X-Accel-Buffering":"no",        });        res.write("data: " + (new Date()) + "\n\n");        interval = setInterval(function () {            res.write("data: " + (new Date()) + "\n\n");        }, 1000);        req.connection.addListener("close", function () {            clearInterval(interval);        }, false);    }}).listen(8080);上面代码是服务器每秒向客户端发送时间的示例。将上面的代码保存为server.js,然后执行nodejs server.js &就启动了监听在8080端口的服务器。添加安全组将8080端口添加到安全组规则,使得外部可以访问云服务器的8080端口。   创建APIAPI网关提供从内网访问云服务器的能力,不需要申请公网弹性IP,就可以通过VPC通道开放API。登录华为云https://console.huaweicloud.com/apig/ ,首先创建VPC通道,端口为8080       将弹性云服务器添加到VPC通道:    创建API,认证类型选择APP“请求Path”填“/stream”,“开启跨域”选项选择开启“VPC通道”选择刚刚创建的VPC通道,“后端请求Path”填“/stream”创建API完成后,发布API到RELEASE环境。创建APP并绑定API在应用管理界面创建一个APP,并绑定刚刚创建的API。创建OPTIONS方法的APIOPTIONS方法的API是提供给浏览器发送跨域请求的预请求使用,同样选择开启跨域(CORS),并将后端配置为Mock。点完成创建API后,发布API到RELEASE环境。创建网页,访问API1.要访问APP认证方式的API,需要通过APP的key和secret生成签名,才能校验通过。生成签名使用下面链接下载的javascript SDKhttps://console.huaweicloud.com/apig/?agencyId=c65a0db86e514fe298cdc57c6273411a&region=cn-south-1&locale=zh-cn#/apig/manager/useapi/sdk2.由于IE浏览器不支持Server Sent Event,需要从https://github.com/Yaffle/EventSource/下载浏览器兼容的Server Sent Event实现。搜索并删除下面四行代码:if (url.slice(0, 5) !== "data:" &&    url.slice(0, 5) !== "blob:") {    requestURL = url + (url.indexOf("?", 0) === -1 ? "?" : "&") + "lastEventId=" + encodeURIComponent(lastEventId);}3.创建index.html,内容如下:<html><head>    <title>SSE APP test</title></head><body>SSE APP test<div id="a"></div><script src="js/eventsource.js"></script><script src="js/moment.min.js"></script><script src="js/moment-timezone-with-data.min.js"></script><script src="signer.js"></script><script>    var req = new signer.HttpRequest()    req.method = "GET"    req.host = "d3da6a917a844df3bd02896496b1b75b.apigw.cn-south-1.huaweicloud.com"    req.uri = "/stream"    var sig = new signer.Signer();    sig.AppKey = "<your app key>"    sig.AppSecret = "<your app secret>"    var opts = sig.Sign(req);    var source = new EventSourcePolyfill("http://d3da6a917a844df3bd02896496b1b75b.apigw.cn-south-1.huaweicloud.com" + req.uri, {        headers: opts.headers    });    source.onmessage = function (event) {        document.getElementById("a").innerHTML = event.data;    };</script></body></html>将刚刚创建的APP的AppKey和AppSecret填入上面指定位置。在本地用浏览器打开此页面,可以看到页面上显示的时间每秒刷新一次。欢迎扫码查看更多精彩:
  • 从一个小demo开始,体验“API经济”的大魅力
    写在前面“API经济”这个词是越来越火了,但是"API经济"具体指的是什么,相信很多人还没有个明确的认识。不过今天我可不打算长篇大论的去讲解一些概念,我们就以“电话号码归属地查询”的小demo为例,来看看到底什么是API商品,API为什么作为商品可以撑起一个经济的概念。 利益相关:体验该demo需要在华为云完成,因为业务部署在了华为云,而且使用了华为云提供的API网关服务。只需注册一个账号就好,每月有100万次的免费额度,所以也不担心会无缘无故的扣钱。点击此处免费体验demo 体验Demo让我们在一分钟之内完成“电话号码归属地查询”业务API的开放,有图有真相,见证奇迹的时刻到了~1、开始“体验Demo”,后台自动完成API的开放。 2、调试API,查看返回结果。 3、通过浏览器调用API,查询电话号码的归属地。 好了,非常简单,我们就体验完了一个简单的API服务,我们可以试想一下,如果我们作为一个开发者,有数千个这样的开放API服务供我们来调用,那么我们很多重复性的工作就不需要做了。同时,我们开发出的API也可以交给其他的开发者使用,这就完成了整个“API经济”的生态闭环。 整个API生态中最重要的就是API商品,所以我们也需要一个能够管理商品的平台,API网关就是其中一个非常好的选择。 除了提供API的注册、开放、编辑等生命周期管理功能之外,API网关还应该关注API的安全、流控、监控等一系列指标,下面也一起体验下。 通过以下界面查看体验demo创建的API分组详情、API调用情况、修改流控策略方法:查看体验demo创建的API分组详情: 查看体验demo创建的API调用情况(请求次数、调用延迟时间、调用错误次数): 修改体验demo创建的流控信息: 以上就是“API经济”的基本介绍,先要了解更多,欢迎关注微信公众号:中间件小哥(zhongjianjianxiaoge)
  • 【干货贴】浅谈API网关(API Gateway)如何承载API经济生态链
    序言API经济生态链已经在全球范围覆盖, 绝大多数企业都已经走在数字化转型的道路上,API成为企业连接业务的核心载体, 并产生巨大的盈利空间。快速增长的API规模以及调用量,使得企业IT在架构上、模式上面临着更多的挑战。关于如何承载现有快速发展的API生态链,本文接下来介绍API网关在其中扮演的角色。API是什么 应用编程接口(Application Programming Interface,简称:API),就是软件系统不同组成部分衔接的约定【维基百科】。简单的例子: 您每次登陆微信, 需要提供账号信息才能访问, 微信提供的这个认证载体就是一个API。 API已经无处不在,金融、IT、物联网等,发展趋势相当迅速, 无形之中贯穿着我们的生活。纵观这几年的发展,API在不断的技术迭代中形成了几股共同的趋势:1.API开放数量不断增加毋庸置疑, 随着企业的数据化进展,微服务改造,不同领域的API层出不穷, 早在2014年ProgrammableWeb便预测API矢量可达到100,000到200,000, 并会不断增长。API开发数量的增加给边缘系统带来机会, 也随即演变了API网关的出现。大规模的API管理系统成为核心的发展趋势。                         (图片来源:The API Economy Disruption and the Business of APIs,Nordic APIs)      2.API服务平台多样化最初的API主要针对不同单体应用的网络单元之间信息交互, 现已演变到服务间快速通讯。随着人工智能EI, IOT的不断演进, 依赖API的平台不断更新, 如Web, Mobile, 终端等,未来将会出现更多的服务体系。                              3.逐步替换原有企业的服务模式,API即商品卖计算, 卖软件, 卖能力, 最终的企业的销售模式会逐步转变,能力变现, 释放数据价值,依托不同的API管理平台创造新的盈利。 API网关为何诞生随着API的整体趋势发展, 每个历史时代都面临着不同的挑战, 架构也随之变化, 可以参考一下: (图片来源:API economy From systems to business services) 从最原始的“传输协议通讯” -> “简单的接口集成” -> “消息中间件” -> “标准REST”, 可以看到API的发展更趋向于简洁, 集成,规范化, 这也促使更多的系统边界组件不断涌现,在承载了万亿级的API经济的背景下, API网关应运而生。 Gartner 报告中提到: 如果没有合适的API管理工具, API经济不可能顺利开展。 同时提出了对于API管理系统的生命周期定义: planning(规划), design(设计), implementation(实施), publication(发布),operation(运维), consumption(消费), maintenance(维护) and retirement of APIs(下架)【来源:Magic Quadrant for Full Life Cycle API Management,Gartner发表于2016-10-27】。API网关贯穿整个流程,并提供丰富的管理特性。•             高性能,可横向扩展•             高可靠,业务不中断•             插件化的API安全控制•             灵活的数据编排•             精细化流控•             API版本管理•             API数据分析•             高效插件化路由算法•             安全认证,防攻击•             API访问控制•             Swagger导入导出•             …API网关的设计核心实践提供一个可参考的高性能API网关架构, 在设计API网关的时候把整体分为两个平面, API Consumer使用的称之为数据平面, API Provider使用的称之为管理平面, 可在一定程度上对业务请求跟管理请求进行有效隔离。 先谈一下数据平面 API网关最核心设计理念: 保证数据面的业务不中断。由于对接API网关的服务是多样的, 客户API跟应用的设计不可控, 你很难能要求每个接入的服务以及客户端都具备容错能力, 特别是一些比较传统的业务。 这就要求网关尽量保证能正常处理每个请求, 且满足较高的SLA(Service-Level Agreement),现在业界的API网关分为几种: 直接使用云服务, Nginx系列, Golang系列, Java系列等, 选择比较多,如果想要自构建, 推荐使用Nginx系,主要考虑如下:1.支持热重启 数据面的组件升级是一个高风险动作, 一旦出现异常就可能导致连接中断,系统异常, 除非你的前端LB(负载均衡)能具备快速排水的能力,当然即使如此,还是可能导致正在处理的请求被强制中断。所以数据面的热重启非常关键。2.支持订阅式动态路由 API路由变化相对频繁,及时性也要求比较高, 如果采用定期同步方案, 一次性同步几万条的数据会拖慢你的系统, 因此增加一个订阅式的路由服务中心非常关键, 我们可以快速订阅ETCD中的路由数据并实时生效。而且只拿增量数据性能压力不会太大。3.支持插件化管理Nginx在插件方面提供了丰富的生态。不同的API,不同的用户所需要的处理流程不完全一致, 如果每个请求过来都按照相同流程处理,必定带来相关的冗余操作。 插件化管理可以在一定程度上提升性能,还能保障在升级过程中能快速添加处理链。4.高性能的转发能力API网关一般工作在多后端API反向代理模式,很多自研的API网关在性能上容易出现瓶颈,因此nginx优异的性能和高效的流量吞吐是其核心竞争力。5.无状态可横向扩展API网关承载的是整个系统所有请求的集合,需要根据业务规模进行弹性伸缩,采用服务中心配合Nginx配置管理可以快速增删已有的集群,并同步到LVS,实现快速的横向扩展能力。再说一下管理面相对于数据面, 管理面的约束就没有那么明显了, 管理面考虑更多应该在于数据的存储跟展示能力。一开始就定义好API的规范至关重要, Swagger作为现在最为主流的API描述模式,拥有非常完整的生态,AWS的整个API网关模型就是参考Swagger来构建的。核心架构实践API网关的相关实现, 我们今天就流控和路由遍历进行说明,其他相关的核心设计后续的文章中会陆续提供。精细化秒级流控 分钟级以上的流控,相对来说都比较好处理, 但是提升到秒级流控,对于系统的性能跟处理能力就是一个很大的挑战。网上的流控方案很多, 同步的,异步的各有优势, 但是都会遇到共同的问题: 性能与准确度。以下是一种最为常见的流控方案(集群流控), 使用Redis共享存储记录所有的流控请求并实时访问, 该架构存在一个很明显的问题:当集群数量跟请求量很大的时候,Redis的集群性能会成为很大的瓶颈。 我们重新设计了一套API流控架构, 混合使用多种流控方案, 按照业务需求自动调整。这里我们拆分为本地流控和集群流控。 对于流量敏感的应用,会要求流控精度越精确,计算及时性高,时间维度低(秒级), 采用本地流控。对于时间周期长, 访问频率较低的API我们采用集群流控, 降低对共享存储的操作频率。注:上图展示具体流控架构,与API网关的集成请参考本章节开头的API网关架构全景。本地流控即单机流控,适用流量敏感型业务。 API按照API-Core集群节点计算Hash值,确保每个API都能负载到其中一个集群节点上。 假设有A, B,C三台API-Core, 如果某个API计算的一致性hash值为A节点, 当请求发送到A节点时直接从这台节点转发,并记录一个流控值, 当请求发送到B/C节点的时候都会转发到A节点计算一个流控值再往后转发。 这样同一个API的流控请求就会全部记录到一台API-Core上。可以借助API-Core的单机流控能力。单机流控的算法也是插件化的,可以采用计数,漏桶等。当然本地流控也会带来一定问题,当所有的API都负载到一个节点上,如果一个API的访问量特别大, 那就可能导致负载不太均匀。还有就是如果流控时间记录很长,比如12次/天, 计数时间周期太长了也不太适合本地流控。集群流控集群流控适用计数周期长, 流控精度要求不高的业务。跟本地流控相辅相成, 按照不同的业务选择不同的流控, 相关的流控处理流程跟上述的本地流控基本相同,但是会在本地会先缓存一段时间的流控数据再统一上报流控中心。基于树形结构的路由遍历算法API网关数据面的主要流程包含路由匹配算法, 路由的所有数据都会缓存在ETCD中,为提升数据面性能, 存储的结构至关重要。在存储过程中我们分为两部分: 域名树, URI树  从第一个树形结构中我们可以遍历到有以下几个域名: www.apig.com, test.com, *.apig.com, *.com。 域名存储从最后一个“.”开始遍历。 举例:  匹配: www.test.com , 先匹配com, 匹配成功继续遍历test, 匹配成功遍历www, 无www匹配失败。  匹配: test.apig.com, 先匹配com, 匹配成功继续遍历apig, 匹配成功遍历test, 无test, 遍历*号, 匹配目标: *.apig.com   URL的匹配为前序匹配跟域名的匹配模式相反,但是遍历算法一致。总结业界主流的开源API网关架构很多,但是开源软件都有一个共同的特点: 量级,安全,运维分析相对匮乏, 真正要满足生产环境需求,还需要投入较高的研发成本。术业有专攻,找一个完善的API管理解决方案对于企业能力变现非常重要。 华为云API网关服务提供完整的API生命周期管理解决方案, 支持多种使用场景, 提供便捷的管理服务。让API的上线,发布,管理到最后售卖的流程不再复杂,快速完成企业能力变现。 欢迎前往体验: 华为云-API 网关     欢迎扫码查看更多精彩:
  • [热门活动] 【广州微梦科技】入驻华为云市场,助力企业上云
    【摘要】广州微梦信息科技有限公司是一家专业的网络服务提供商,公司主营的业务有网站建站,SEO优化推广,小程序开发等业务。公司致力于帮助企业打造出让人眼前一亮的企业品牌形象。 【导语】2018年7月22日,广州微梦信息科技有限公司入驻华为云市场,网站建设,SEO优化推广,小程序开发是我们的主要业务。目前微梦使用的系统,很大程度地降低了企业使用网站难度,实现让企业主无需懂任何代码知识,即能轻松地应用和使用网站,后台操作方式是拖拽完成的。那目前产品应用主要有几个方面。 一、企业建站:在目前互联网、移动互联网高度发达的世界,建立一个企业网站,几乎是一个企业开启业务的标配,但是现在建站市场鱼龙混杂,很多企业几乎都遇到了以下的这些问题:1、   网站不易管理,更新维护需要专业人员。2、  不懂SEO,没流量,网站成僵尸摆设。3、  兼容性差,修改需要花钱改版微梦深知中小企业的痛点,推出了适合于企业应用的H5响应网站,网站采用SAAS部署,繁琐的服务器设置和维护交给我们。界面采用流行的可视化操作方式,让企业管理人员可以专注于企业发展,而无需在网站方面花费太多的时间。   而针对用户最头痛的问题,网站的流量问题,系统采用专业的算法,可以做到定时提醒你对网站做某一方面的操作来提高网站的排名,比如提醒您发布发文章,添加产品等。目前行内还没了解到其它家能做到如此。         二、小程序建设:小程序最近的应用非常火,很多的企业都想拥有自己的小程序,分享流量的红利,但是对于企业来说,如何用性价比最高的产品来实现自己的需求,就很重要了,微梦科技对于,专门开发了一套小程序的应用系统,让用户在以最低的成本,最快的速度和最快捷的方式实现小程序的上线。目前,我司开发出来的小程序被大量应用于企业展示、商城、商圈、酒店、美容、培训、餐饮等行业。      当然,除了上面的服务,微梦科技也提供seo优化,商城、分销商城,O2O等服务,更多详情可以进入云市场店铺查看。  三、结束语 好的产品,再配上华为云计算的地基,相信一定能给用户带来更加可靠稳定的服务,让我们一起期待见证。我们的联系方式:公司网址:www.wmcom.cn公司地址:广州市天河区潭村路348号马赛国际商务中心1711联系电话:18520224701
  • [公告] AOS支持编排API网关服务
        马上就是星期五 17:30,面对眼前满满两页A4纸的API列表,下周一就要上线,想想要手动把这些API一个个的注册到网关上,是否有几分无奈,您是否觉得这个周末的约会又要泡汤了?    不要怕,有问题AOS来帮忙解决。亲爱的华为云 AOS用户:    AOS最新版本已经实现华为云API网关服务基本资源对象的编排管理,包括:API、API分组、API流控。AOS提供快速编排API资源的能力,您可以通过在模板中复制已有的API对象,快速完成大量API资源对象的编写,并通过AOS的编排能力,迅速在API网关上进行批量注册和流控配置,提升API管理效率十倍以上。有关华为云AOS的更多信息,请访问我们的网站:产品页面 控制台  帮助文档 发布历史 支持的华为云资源 
  • Istio最佳实践:在Kubernetes上通过Istio服务网格进行灰度发布
    Istio是什么?Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司。它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管理、网络连接以及安全管理等关键能力,无需修改任何代码就能够实现微服务的负载均衡,服务与服务之间的认证授权以及监控。从整个基础设施角度上看,可以将它理解为PaaS平台上的一个面向微服务管理平台的补充。                                                               Istio架构示意图Istio与KubernetesKubernetes提供了部署、升级和有限的运行流量管理能力;利用service的机制来做服务注册和发现,转发,通过kubeproxy有一定的转发和负载均衡能力。但并不具备上层如熔断、限流降级、调用链治理等能力. Istio则很好的补齐了k8s在微服务治理上的这部分能力,同时是基于k8s构建的,但不是像SpringCloud Netflix等完全重新做一套。Istio是谷歌微服务治理上的非常关键的一环。  自建与公有云上使用Istio的对比目前业界大部分云平台上所提供的Istio能力均需要自己负载Istio包的下载、配置、安装等,还是比较费劲的。不过华为云CCE服务这里深度集成了Istio服务网格,个人感觉使用上还是方便很多的,简单对比了下:自建华为云CCEIstio包管理用户自行下载和管理用户不感知运行配置用户自行配置运行环境和依赖用户不感知Istio安装用户自行探索和安装用户不需要关注具体细节,创建集群时按需启用。Sidecar注入用户自行探索和开发、配置用户不感知Istio升级用户自行探索、开发不影响业务的升级方案提供完整解决方案,按需进行控制面和数据面的升级操作应用调用链用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供请求调用链跟踪查看能力应用拓扑用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供查看应用拓扑能力性能监控用户自行探索、开发和安装、配置对接华为云APM/AOM服务,提供请求响应时延的实时性能状态监控流量治理需要自行编写配置文件提供界面进行流量和发布的管理 云原生应用的部署、管理实践云原生应用、云平台与微服务架构云原生应用,是指原生为在云平台上部署运行而设计开发的应用。公平的说,大多数传统的应用,不做任何改动,都是可以在云平台运行起来的,只要云平台支持这个传统应用所运行的计算机架构和操作系统。只不过这种运行模式,仅仅是把虚拟机当物理机一样使用,不能够真正利用起来云平台的能力。云计算平台的核心能力就是提供按需分配资源和弹性计算的能力,而云原生应用的设计理念就是让部署到云平台的应用能够利用云平台的能力实现按需使用计算资源和弹性伸缩。微服务架构是实现企业分布式系统的一种架构模式,即将一个复杂的单体应用按照业务的限定上下文,分解成多个独立部署的组件。这些独立部署的组件,就称为微服务。而在谈论云原生应用与微服务架构关系的时候,根据上下文不同可以从两个角度去看。1) 宏观的云原生应用,即将整个分布式系统看作一个应用,这个角度下,微服务架构是实现云原生应用的一种架构模式;2) 微观的云原生应用,即每个微服务是一个应用,这种语境下,每个微服务要按照云原生应用的设计理念去设计(如我们所熟知的云原生12要素),才能真正实现微服务架构所要达到的目的,即让分布式系统具备按需使用计算资源和弹性伸缩的能力。在华为云CCE中,将宏观的云原生应用,称之为“应用”,而将微观层面的云原生应用,称之为“组件“,用这两个概念来对分布式应用进行管理:                                          图:应用、组件与工作负载的关系云原生应用管理的实践创建Kubernetes集群       在创建应用前,需要准备好一个Kubernetes集群(1.9及以上版本),并启用Istio服务网格治理。登录CCE控制台,在左侧导航栏中单击“资源管理 > 虚拟机集群”,在“虚拟机集群”界面,单击“创建Kubernetes集群”,按照向导式逐步配置: 图1:创建Kubernetes集群 图2:使能服务网格,一键式安装Istio并自动使能应用sidecar注入:其他集群创建步骤、配置不变.创建云原生应用这里我们以Istio开源社区的bookinfo样例应用为例,其包含ProductPage、Reviews、Details、Ratings这4个微服务,拓扑结构以及网络访问信息如下: 在左侧导航栏中选择“应用管理”,单击“创建应用”->“向导式创建”:1、 首先定义应用的基本信息:名称、选择所在集群和namespace,并按照上方的应用拓扑和网络设计添加组件 A、添加ratings微服务组件机器监听端口,容器内监听端口为9080,开放至service mesh内部访问端口也配置为9080:1)配置组件基本信息:2)选择负载镜像和版本后点击“添加”,可以看到我们为bookinfo添加了一个微服务组件进网格:B、     参考上述步骤,添加reviews、details和productpage微服务组件2、    配置应用对外开放的访问路由:A、点击“添加应用访问方式“B、选择开放至外部访问的组件,并配置开放端口:最后点击右下角“创建”,启动应用,应用及其微服务组件如下所示: 通过应用开放的入口访问productpage:使用Istio两步实现灰度发布在集群上启用Istio服务网格集群下应用如果需要做微服务治理,只需要在创建集群时点击启用服务网格即可,不需要自行进行Istio镜像下载、yaml配置、安装、升级等与应用业务无关的复杂基础设施构建工作。开发打包新版本下方我们以开发了一个新版本reviews微服务为例(初始容器镜像版本号为1.5.0),新版本镜像版本号为1.5.0-v2,并且已上传至华为云容器镜像服务(SWR),新版本在现在版本基础上增加对ratings微服务的调用,支持评分星星级别展示. 发布灰度版本并配置灰度策略在应用列表页面,展开bookinfo下的组件信息,选择reviews微服务组件的“添加灰度版本”: 启动灰度版本:配置灰度版本号v2,系统已自动选择最新镜像版本,点击“启动负载”即可启动灰度版本:观察灰度版本运行状态并配置灰度策略:按照20%比例分配灰度版本流量可以看到,review微服务已处于灰度发布状态: 对review服务进行灰度发布前后的流量对比:初始版本:reviews服务未调用ratings来获取星级评价能力灰度状态:review v2版本调用ratings服务获取星级评价,并将20%流量分流至本版本上访问productpage,可以看到部分请求可以显示星级评价,部分请求仍然是老版本的显示效果,部分访问结果为带有星级评价特性的页面: 持续观测灰度版本运转状态,并进行流量切换持续观测灰度版本的运行状态,在确认业务处理、性能满足要求后,我们可以选择逐步调大灰度版本的流量比例,而后进一步将流量全部导流至灰度版本上: Ø  观察健康与性能状态:点击左侧导航栏“运维中心”进入AOM服务,选择“指标”->“应用”菜单,持续观察review-v2的健康与性能状态:  下一步我们将逐步扩大流量比,最后将流量全部导至灰度版本,点击“接管所有流量”:现在所有访问reviews的流量都导向v2版本,访问productpage,所有的请求都会呈现星级评价特性: Istioctl命令行工具       Istio服务网格还提供了命令行工具,满足更多的流量规则配置诉求,如限流、熔断、连接池管理、会话保持等。进入”资源管理“->“虚拟机集群“,选择对应集群,可以看到Istio命令行的下载和使用指导:总结总的来说,华为云CCE + Istio + AOM/APM服务在组件部署、灰度版本管理、流量策略配置以及灰度过程中的监控还是能够满足基本诉求,操作上也比较简单,通过简单的两三步配置即可实现新版本的发布和流量切换,期待华为云CCE Istio服务网格这里能够有更多能力开放出来。
  • [介绍/入门] API网关体验demo新上线,快来Get新技能吧!
    体验demo链接:https://console.huaweicloud.com/apig/#/apig/expdemo以“电话号码归属地查询”为例,一键式体验demo,一分钟内完成API的开放,有图有真相。1、开始“体验Demo”,后台自动完成API的开放。2、调试API,查看返回结果。3、通过浏览器调用API,查询电话号码的归属地。  通过以下界面查看体验demo创建的API分组详情、API调用情况、修改流控策略方法:查看体验demo创建的API分组详情: 查看体验demo创建的API调用情况(请求次数、调用延迟时间、调用错误次数):修改体验demo创建的流控信息:如果想要了解更多功能,请参见《API网关 用户指南》。
  • [公告] Hadoop API被黑客攻击利用的风险通知
    一、概要 Hadoop YARN提供开放在8088和8090端口的REST API,允许用户直接通过这些API创建和提交任务(http://hadoop.apache.org/docs/r2 ... ISubmit_Application) 近期,有攻击者利用此REST API对未启用Kerbose认证的MRS集群进行攻击,攻击者可以在未授权的情况下远程执行脚本和代码,从而再进一步下载启动挖矿程序达到挖矿的目的。该漏洞也可导致ECS虚机被攻击者控制。 请涉及威胁的租户根据自身业务情况,采取防护措施。 二、威胁级别 威胁级别:【紧急】 (说明:威胁级别共四级:一般、重要、严重、紧急。) 三、影响范围 未启用Kerbose认证的MRS集群,MRS Master节点绑定弹性IP(EIP),绑定弹性IP的节点端口入方向的安全组规则开放Any或0.0.0.0。 四、排查和处置 排查方法: 1.检查MRS Master节点绑定弹性IP; 2.检查系绑定弹性IP的节点端口入方向的安全组规则开放Any或0.0.0.0; 3.检查YARN的Application列表是否存在未知任务; 4.检查操作系统是否存在/var/tmp/java的进程; 5.检查操作系统中是否存在文件/var/spool/cron/yarn_user; 6.检查crontab任务列表是否存在未知任务。 处置方案: 1.MRS Master节点解绑弹性IP或删除对端口入方向的安全组规则开放Any或0.0.0.0的安全组规则; 2.通过iptables或者安全组规则配置访问策略,限制端口入方向规则仅允许指定IP; 3.Kill掉YARN上的未知Application; 4.Kill掉所有/var/tmp/java进程,并删除/var/tmp/java文件; 5.删除/var/spool/cron/yarn_user文件; 6.删除未知的crontab任务。 五、安全建议 1.使用启用Kerbose认证的MRS集群; 2.如有实际需求使用未启用Kerbose认证的MRS集群,配置严格访问范围的安全组规则,禁止入方向允许Any或0.0.0.0的访问。
  • [热门活动] API测试体验官活动获奖名单公布
    API测试体验官活动已于4月30日结束,感谢大家的参与及提出的宝贵意见,现将获奖名单公布如下:优质建议奖:1. 获奖楼层:板凳;论坛用户名:ecstatic2. 获奖楼层:第五楼;论坛用户名:allenzhang奖品:肩颈**器一个幸运满满奖:1. 获奖楼层:沙发;论坛用户名:zekelove2. 获奖楼层:地板;论坛用户名:LL3. 获奖楼层:第六楼;论坛用户名:好友4. 获奖楼层:第八楼;论坛用户名:蓝书签5. 获奖楼层:第十楼;论坛用户名:小豆奖品:笔记本支架一个恭喜以上获奖用户,请在5个自然日内扫描下方二维码添加服务人员微信,验证信息输入“API”,请将华为云用户名、帖子所在楼层、姓名、手机号、收货地址发送给微信服务人员,奖品将尽快为您寄出。所有奖品均包邮,不额外收取任何费用。14756
  • [介绍/入门] 分布式消息服务之Kafka API快速入门编译示例源码
    本帖最后由 云彩飞扬 于 2018-3-20 10:42 编辑[*]下载并解压DmsKafkaDemo示例工程代码。 [*]打开Eclipse,通过“File -> Import…”,“Select an import source”选择“Exiting Projects Into Workspace”,选择DmsKafkaDemo解压目录,导入示例工程代码。 [*]选择“Project -> Build Project”,执行编译构建。 [*]鼠标右键单击DmsKafkaDemo项目,在弹出的上下文菜单中选择“Export…”,选择“Java -> JAR file”,填写待生成的JAR文件保存位置和名称,导出JAR文件。 [*]使用新生成的JAR文件替换弹性云服务器DmsKafkaDemo/dist/libs目录下的dms.kafka.demo.jar文件,按照“运行示例工程”执行验证。
  • [介绍/入门] 分布式消息服务之Kafka API快速入门运行示例工程!
    本帖最后由 云彩飞扬 于 2018-3-20 10:39 编辑[*]登录弹性云服务器。说明:用户可以直接在192网段的ECS虚拟机上运行。 [*]安装Java JDK或JRE,并配置JAVA_HOME与PATH环境变量,使用执行用户在用户家目录下修改.bash_profile,添加如下行。 export JAVA_HOME=/opt/java/jdk1.8.0_151export PATH=$JAVA_HOME/bin:$PATH执行source .bash_profile命令使修改生效。 说明:ECS虚拟机默认自带的JDK可能不符合要求,例如OpenJDK,需要配置为Oracle的JDK,可至Oracle官方下载页面下载Java Development Kit 1.8.111及以上版本。 [*]使用root用户编辑/etc/resolv.conf文件,配置DNS服务器地址。 在第一行增加如下:nameserver 100.125.1.250 [*]下载DmsKafkaDemo示例工程代码。 [*]解压DmsKafkaDemo.zip压缩包。 $ unzip DmsKafkaDemo.zip [*]进入DmsKafkaDemo/dist目录,该目录下包含预编译好的二进制文件和执行脚本。 $ cd DmsKafkaDemo/dist [*]编辑配置文件config/dms_kafka_client_jaas.conf,设置access_key、secret_key和project_id。 $ vim config/dms_kafka_client_jaas.conf设置内容如下(其中标红内容需要替换为实际值):KafkaClient { com.huawei.middleware.kafka.sasl.client.KafkaLoginModule required access_key=VAODAIIJGPUAYTJRRLOD secret_key=ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi project_id=bd67aaead60940d688b872c31bdc653b;}; [*]编辑配置文件config/producer.properties,设置topic和bootstrap.servers。 $ vim config/producer.properties设置内容如下(其中标红内容需要替换为实际值):topic=k-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299bootstrap.servers=dms-kafka.cn-north-1.myhuaweicloud.com:37000ssl.truststore.password=dms@kafkaacks=allretries=1batch.size=16384buffer.memory=33554432key.serializer=org.apache.kafka.common.serialization.StringSerializervalue.serializer=org.apache.kafka.common.serialization.StringSerializersecurity.protocol=SASL_SSLsasl.mechanism=DMS [*]编辑配置文件config/consumer.properties,设置topic、bootstrap.servers和group.id。 $ vim config/consumer.properties设置内容如下(其中标红内容需要替换为实际值):topic=k-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299bootstrap.servers=dms-kafka.cn-north-1.myhuaweicloud.com:37000group.id=g-7ec0caac-01fb-4f91-a4f2-0a9dd48f8af7ssl.truststore.password=dms@kafkasecurity.protocol=SASL_SSLsasl.mechanism=DMSkey.deserializer=org.apache.kafka.common.serialization.StringDeserializervalue.deserializer=org.apache.kafka.common.serialization.StringDeserializerauto.offset.reset=earliestenable.auto.commit=false [*]运行生产消息示例。 $ bash produce.sh [*]运行消费消息示例。 $ bash consume.sh
  • [介绍/入门] 分布式消息服务之Kafka API快速入门环境准备
    本帖最后由 云彩飞扬 于 2018-3-20 10:22 编辑 开发环境Eclipse:Eclipse 3.6.0及以上版本,可至Eclipse官方网站下载。JDK:Java Development Kit 1.8.111及以上版本,可至Oracle官方下载页面下载。Maven:Apache Maven 3.0.3及以上版本。创建Kafka队列通过浏览器登录华为云,在分布式消息服务控制台中创建队列,队列类型选择“Kafka队列”。请记录Kafka Topic ID,后续访问需要使用。如果已创建过Kafka队列,可以跳过此步骤。创建消费组通过浏览器登录华为云,在分布式消息服务控制台中选择上文创建的Kafka队列,为该队列创建一个消费组。请记录消费组ID,后续访问需要使用。如果已为该Kafka队列创建过消费组,可以跳过此步骤。创建访问密钥通过浏览器登录华为云,选择“我的凭证”菜单,单击“管理访问密钥”标签,新增一组访问密钥,保存credentials.csv文件到本地。从credentials.csv文件中可以提取“Access Key Id”和“Secret Access Key”。如果之前已创建过访问密钥,可以跳过此步骤。获取项目ID通过浏览器登录华为云,选择“我的凭证”菜单,单击“项目列表”标签,根据所属区域记录对应的项目ID。获取区域和EndpointRegion域名说明中国华北区1dms-kafka.cn-north-1.myhuaweicloud.com:37000在华为云(ECS)上运行Demo示例,使用该endpoint访问DMS服务。中国华东区2dms-kafka.cn-east-2.myhuaweicloud.com:37000中国华南区1dms-kafka.cn-south-1.myhuaweicloud.com:37000中国华北区1dms-kafka.cn-north-1.myhuaweicloud.com:37003在本地(公网)运行Demo示例,使用该endpoint访问DMS服务。申请弹性云服务器说明:在华为云(ECS)上运行DMS Demo示例,需要先申请弹性云服务器。 通过浏览器登录华为云,在弹性云服务器控制台中申请创建一台Linux弹性云服务器,并绑定弹性IP。请记录弹性IP地址、用户名和密码,后续访问需要使用。如果已申请过华为云弹性云服务器,可以跳过此步骤。说明:弹性IP用于登录弹性云服务器,以及上传文件等。 环境信息汇总表1 环境信息汇总类型项目收集的信息(以下为示例,请根据实际情况替换)弹性云服务器弹性IP114.115.141.228用户名huaweicloud密码password分布式消息服务队列名称my-kafka-queue队列ID4df89da6-ede4-4072-93e0-28dc6e866299队列类型Kafka队列Kafka Topick-bd67aaead60940d688b872c31bdc653b-4df89da6-ede4-4072-93e0-28dc6e866299消费组名称my-consumer-group消费组IDg-7ec0caac-01fb-4f91-a4f2-0a9dd48f8af7访问密钥AK (Access Key Id)VAODAIIJGPUAYTJRRLODSK (Secret Access Key)ZHN49c6bpwDiQvPqKJ5CxutJxqc04Glt9xSzxYWi项目ID所属区域中国华北区1项目cn-north-1项目IDbd67aaead60940d688b872c31bdc653b区域和Endpoint区域名称中国华北区1Endpointdms-kafka.cn-north-1.myhuaweicloud.comDNSDNS服务器IP华北:100.125.1.250华东:100.125.17.29华南:100.125.1.250