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

用jsp做的可运行的网站郑州网站建设知识分享

用jsp做的可运行的网站,郑州网站建设知识分享,金湖网站推广,有什么检索标准的网站简介#xff1a;保障云上业务的永远在线#xff0c;是 MSE 一直在追求的目标#xff0c;本文通过面向失败设计的服务发现高可用能力的分享#xff0c;以及 MSE 的服务治理能力快速构建起服务发现高可用能力的演示#xff0c;模拟了线上不可预期的服务发现相关异常发生时的…简介保障云上业务的永远在线是 MSE 一直在追求的目标本文通过面向失败设计的服务发现高可用能力的分享以及 MSE 的服务治理能力快速构建起服务发现高可用能力的演示模拟了线上不可预期的服务发现相关异常发生时的影响以及我们如何预防的手段展示了一个简单的开源微服务应用应该如何构建起服务发现高可用能力。 作者十眠 背景 注册中心作为承担服务注册发现的核心组件是微服务架构中必不可少的一环。在 CAP 的模型中注册中心可以牺牲一点点数据一致性C即同一时刻每一个节点拿到的服务地址允许短暂的不一致但必须要保证可用性A。因为一旦由于某些问题导致注册中心不可用或者服务连不上注册中心那么想要连接他的节点可能会因为无法获取服务地址而对整个系统出现灾难性的打击。 一个真实的案例 全篇从一个真实的案例说起某客户在阿里云上使用 Kubernetes 集群部署了许多自己的微服务由于某台 ECS 的网卡发生了异常虽然网卡异常很快恢复了但是却出现了大面积持续的服务不可用业务受损。 我们来看一下这个问题链是如何形成的 ECS 故障节点上运行着 Kubernetes 集群的核心基础组件 CoreDNS 的所有 Pod且低版本 Kubernetes 集群缺少 NodeLocal DNSCache 的特性导致集群 DNS 解析出现问题。  该客户的服务发现使用了有缺陷的客户端版本Nacos-client 的 1.4.1 版本这个版本的缺陷就是跟 DNS 有关——心跳请求在域名解析失败后会导致进程后续不会再续约心跳只有重启才能恢复。这个缺陷版本实际上是已知问题阿里云在 5 月份推送了 Nacos-client 1.4.1 存在严重 bug 的公告但客户研发未收到通知进而在生产环境中使用了这个版本。风险环环相扣缺一不可。 最终导致故障的原因是服务无法调用下游可用性降低业务受损。下图示意的是客户端缺陷导致问题的根因 Provider 客户端在心跳续约时发生 DNS 异常心跳线程未能正确地处理这个 DNS 异常导致线程意外退出了注册中心的正常机制是心跳不续约30 秒后自动下线。由于 CoreDNS 影响的是整个 Kubernetes 集群的 DNS 解析所以 Provider 的所有实例都遇到相同的问题整个服务所有实例都被下线在 Consumer 这一侧收到推送的空列表后无法找到下游那么调用它的上游比如网关就会发生异常。 回顾整个案例每一环每个风险看起来发生概率都很小但是一旦发生就会造成恶劣的影响。服务发现高可用是微服务体系中很重要的一环当然也是我们时常忽略的点。在阿里内部的故障演练中这一直是必不可少的一个环节。 面向失败的设计 由于网络环境的抖动比如 CoreDns 的异常或者是由于某些因素导致我们的注册中心不可用等情况经常会出现服务批量闪断的情况但这种情况其实不是业务服务的不可用如果我们的微服务可以识别到这是一种异常情况批量闪断或地址变空时应该采取一种保守的策略以免误推从而导致全部服务出现no provider的问题会导致所有的微服务不可用的故障并且持续较长时间难以恢复。 站在微服务角度上考虑我们如何可以切段以上的问题链呢以上的案例看起来是 Nacos-client 低版本造成的问题但是如果我们用的是 zookeeper、eureka 等注册中心呢我们能拍着胸脯说不会发生以上的问题吗面向失败的设计原则告诉我们如果注册中心挂掉了或者我们的服务连不上注册中心了我们需要有一个方式保证我们的服务正常调用线上的业务持续不断。 本文介绍的是服务发现过程中的高可用的机制从服务框架层面思考如何彻底解决以上的问题。 服务发现过程中的高可用原理解析 服务发现高可用-推空保护 面向失败的设计告诉我们服务并不能完全相信注册中心的通知的地址当注册中心的推送地址为空时候服务调用肯定会出 no provider 错误那么我们就忽略此次推送的地址变更。 微服务治理中心提供推空保护能力 默认无侵入支持市面上近五年来的 Spring Cloud 与 Dubbo 框架无关注册中心实现无需升级 client 版本 服务发现高可用-离群实例摘除 心跳续约是注册中心感知实例可用性的基本途径。但是在特定情况下心跳存续并不能完全等同于服务可用。 因为仍然存在心跳正常但服务不可用的情况例如 Request 处理的线程池满依赖的 RDS 连接异常导致出现大量慢 SQL某几台机器由于磁盘满或者是宿主机资源争抢导致 load 很高此时服务并不能完全相信注册中心的通知的地址推送的地址中可能存在一些服务质量低下的服务提供者因此客户端需要自己根据调用的结果来判断服务地址的可用性与提供服务质量的好坏来定向忽略某些地址。 微服务治理中心提供离群实例摘除 默认无侵入支持市面上近五年来的 Spring Cloud 与 Dubbo 框架无关注册中心实现无需升级 client 版本基于异常检测的摘除策略包含网络异常和网络异常 业务异常HTTP 5xx设置异常阈值、QPS 下限、摘除比例下限摘除事件通知、钉钉群告警 离群实例摘除的能力是一个补充根据特定接口的调用异常特征来衡量服务的可用性。 动手实践 前提条件 已创建 Kubernetes 集群请参见创建 Kubernetes 托管版集群[1]。已开通 MSE 微服务治理专业版请参见开通 MSE 微服务治理[2]。 准备工作 开启 MSE 微服务治理 1、开通微服务治理专业版 单击开通 MSE 微服务治理[3]。微服务治理版本选择专业版选中服务协议然后单击立即开通。关于微服务治理的计费详情请参见价格说明[4]。 2、安装 MSE 微服务治理组件 在容器服务控制台[5]左侧导航栏中选择市场 应用目录。在应用目录页面搜索框中输入 ack-mse-pilot单击搜索图标然后单击组件。在详情页面选择开通该组件的集群然后单击创建。安装完成后在命名空间 mse-pilotmse-pilot-ack-mse-pilot 应用表示安装成功。 3、为应用开启微服务治理 登录 MSE 治理中心控制台[6]。在左侧导航栏选择微服务治理中心 Kubernetes 集群列表。在 Kubernetes 集群列表页面搜索目标集群单击搜索图标然后单击目标集群操作列下方的管理。在集群详情页面命名空间列表区域单击目标命名空间操作列下方的开启微服务治理。在开启微服务治理对话框中单击确认。 部署 Demo 应用程序 在容器服务控制台[5]左侧导航栏中单击集群。在集群列表页面中单击目标集群名称或者目标集群右侧操作列下的详情。在集群管理页左侧导航栏中选择工作负载 无状态。在无状态页面选择命名空间然后单击使用 YAML 创建资源。对模板进行相关配置完成配置后单击创建。本文示例中部署 sc-consumer、sc-consumer-empty、sc-provider使用的是开源的 Nacos。 部署示例应用springcloud YAML # 开启推空保护的 sc-consumer apiVersion: apps/v1 kind: Deployment metadata:name: sc-consumer spec:replicas: 1selector:matchLabels:app: sc-consumertemplate:metadata:annotations:msePilotCreateAppName: sc-consumerlabels:app: sc-consumerspec:containers:- env:- name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jre- name: spring.cloud.nacos.discovery.server-addrvalue: nacos-server:8848- name: profiler.micro.service.registry.empty.push.reject.enablevalue: trueimage: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-consumer-0.1imagePullPolicy: Alwaysname: sc-consumerports:- containerPort: 18091livenessProbe:tcpSocket:port: 18091initialDelaySeconds: 10periodSeconds: 30 # 无推空保护的sc-consumer-empty --- apiVersion: apps/v1 kind: Deployment metadata:name: sc-consumer-empty spec:replicas: 1selector:matchLabels:app: sc-consumer-emptytemplate:metadata:annotations:msePilotCreateAppName: sc-consumer-emptylabels:app: sc-consumer-emptyspec:containers:- env:- name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jre- name: spring.cloud.nacos.discovery.server-addrvalue: nacos-server:8848image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-consumer-0.1imagePullPolicy: Alwaysname: sc-consumer-emptyports:- containerPort: 18091livenessProbe:tcpSocket:port: 18091initialDelaySeconds: 10periodSeconds: 30 # sc-provider --- apiVersion: apps/v1 kind: Deployment metadata:name: sc-provider spec:replicas: 1selector:matchLabels:app: sc-providerstrategy:template:metadata:annotations:msePilotCreateAppName: sc-providerlabels:app: sc-providerspec:containers:- env:- name: JAVA_HOMEvalue: /usr/lib/jvm/java-1.8-openjdk/jre- name: spring.cloud.nacos.discovery.server-addrvalue: nacos-server:8848image: registry.cn-hangzhou.aliyuncs.com/mse-demo-hz/demo:sc-provider-0.3imagePullPolicy: Alwaysname: sc-providerports:- containerPort: 18084livenessProbe:tcpSocket:port: 18084initialDelaySeconds: 10periodSeconds: 30 # Nacos Server --- apiVersion: apps/v1 kind: Deployment metadata:name: nacos-server spec:replicas: 1selector:matchLabels:app: nacos-servertemplate:metadata:labels:app: nacos-serverspec:containers:- env:- name: MODEvalue: standaloneimage: nacos/nacos-server:latestimagePullPolicy: Alwaysname: nacos-serverdnsPolicy: ClusterFirstrestartPolicy: Always# Nacos Server Service 配置 --- apiVersion: v1 kind: Service metadata:name: nacos-server spec:ports:- port: 8848protocol: TCPtargetPort: 8848selector:app: nacos-servertype: ClusterIP 我们只需在 Consumer 增加一个环境变量 profiler.micro.service.registry.empty.push.reject.enabletrue开启注册中心的推空保护无需升级注册中心的客户端版本无关注册中心的实现支持 MSE 的 Nacos、eureka、zookeeper 以及自建的 Nacos、eureka、console、zookeeper 等 分别给 Consumer 应用增加 SLB 用于公网访问 以下分别使用 {sc-consumer-empty} 代表 sc-consumer-empty 应用的 slb 的公网地址{sc-consumer} 代表 sc-consumer 应用的 slb 的公网地址。 应用场景 下面通过上述准备的 Demo 来分别实践以下场景 编写测试脚本 vi curl.sh while : doresultcurl $1 -sif [[ $result *500* ]]; thenecho date %F-%T $resultelseecho date %F-%T $resultfisleep 0.1 done测试分别开两个命令行执行如下脚本显示如下 % sh curl.sh {sc-consumer-empty}:18091/user/rest2022-01-19-11:58:12 Hello from [18084]10.116.0.142!2022-01-19-11:58:12 Hello from [18084]10.116.0.142!2022-01-19-11:58:12 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142! % sh curl.sh {sc-consumer}:18091/user/rest2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:13 Hello from [18084]10.116.0.142!2022-01-19-11:58:14 Hello from [18084]10.116.0.142!2022-01-19-11:58:14 Hello from [18084]10.116.0.142!2022-01-19-11:58:14 Hello from [18084]10.116.0.142! 并保持脚本一直在调用观察 MSE 控制台分别看到如下情况 将 coredns 组件缩容至数量 0模拟 DNS 网络解析异常场景。发现实例与 Nacos 的连接断开且服务列表为空。 模拟 DNS 服务恢复将其扩容回数量 2。结果验证 在以上过程中保持持续的业务流量我们发现 sc-consumer-empty 服务出现大量且持续的报错 2022-01-19-12:02:37 {timestamp:2022-01-19T04:02:37.5970000,status:500,error:Internal Server Error,message:com.netflix.client.ClientException: Load balancer does not have available server for client: mse-service-provider,path:/user/feign}2022-01-19-12:02:37 {timestamp:2022-01-19T04:02:37.7990000,status:500,error:Internal Server Error,message:com.netflix.client.ClientException: Load balancer does not have available server for client: mse-service-provider,path:/user/feign}2022-01-19-12:02:37 {timestamp:2022-01-19T04:02:37.9930000,status:500,error:Internal Server Error,message:com.netflix.client.ClientException: Load balancer does not have available server for client: mse-service-provider,path:/user/feign} 相比之下sc-consumer 应用全流程没有任何报错 只有重启了 Providersc-consumer-empty 才恢复正常相比之下sc-consumer 应用全流程没有任何报错 后续 我们当发生推空保护后我们会上报事件、告警至钉钉群同时建议配合离群实例摘除使用推空保护可能会导致 Consumer 持有过多的 Provider 地址当 Provider 地址为无效地址时离群实例摘除可以对其进行逻辑隔离保证业务的高可用。 尾 保障云上业务的永远在线是 MSE 一直在追求的目标本文通过面向失败设计的服务发现高可用能力的分享以及 MSE 的服务治理能力快速构建起服务发现高可用能力的演示模拟了线上不可预期的服务发现相关异常发生时的影响以及我们如何预防的手段展示了一个简单的开源微服务应用应该如何构建起服务发现高可用能力。 相关链接 [1] 创建 Kubernetes 托管版集群 如何创建Kubernetes托管版集群_容器服务 ACK-阿里云 [2] 开通 MSE 微服务治理 开通MSE微服务治理 - 微服务引擎MSE - 阿里云 [3] 开通 MSE 微服务治理 阿里云通用售卖 [4] 价格说明 价格说明 - 微服务引擎MSE - 阿里云 [5] 容器服务控制台 https://cs.console.aliyun.com [6] MSE 治理中心控制台 https://mse.console.aliyun.com 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.huolong8.cn/news/355876/

相关文章:

  • 商丘专业做网站公司asp.net网站开发实例教程 下载
  • 佛山网站设计建设id注册网站
  • 做本地旅游网站网站app下载平台怎么做的
  • 朝阳建设工程外贸网站建设和seo
  • 网站建设seo方案做网站好还是做程序员好
  • 可以做外贸私单的网站免费wordpress云服务器
  • 保定模板建站哪家好wordpress图片上传后无法显示
  • 网站开发创新点教做月嫂的网站有吗
  • 环保行业网站怎么做织梦网站建设培训班
  • 电脑装机网站网站怎么用PS做
  • 深圳网站建设的公司wordpress如何加链接
  • 调查网站怎么做网站域名怎么转
  • 做网站需要哪些技术知乎怎样申请自己企业的网站
  • 企业网站搭建及优化备案中心查网站
  • 有域名了如何建设网站十个app制作网站
  • 网络推广seo怎么做seo范畴有哪些
  • 给别人建设网站的注意事项科技公司logo设计图片
  • 博星卓越营销网站设计辽宁建设工程信息网登录不上去
  • 长沙网站拓谋网络信阳做网站
  • 网站建设中最重要的环节是沈阳建设工程信息网 费用中项网
  • 我想建设一个网站淄博网站备案
  • 旅游网站页面设计模板哪家公司做企业网站稳定优惠
  • 河北网站备案注销wordpress中文版好还是英文版好
  • 互动平台有效学时是什么意思长沙债务优化公司
  • 淄博网站建设团队个人网站有哪些站
  • 为什么教育网站做的都很烂湘潭企业网站建设 p磐石网络
  • 个人域名备案 网站名称速度啊网站
  • 网站的会员认证怎么做重庆业务网站建设
  • 承接app网站开发的广告惠州网络公司网站建设
  • 网站店铺vr场景可以做吗怎么制作网页推广