我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么做web高可用的架构设计

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么做web高可用的架构设计

本篇内容介绍了“怎么做web高可用的架构设计”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

定义目标

既然我们的目标是做到高可用,那么我们就有必要先明确清楚高可用的含义,并通过拆解目标,让目标可以被量化。按照我的理解,可以将目标按照以下三条进行拆解:

保持业务高稳定性

系统稳定性是高可用的根本目的,通俗的说,系统能持续可用,不会无故宕机,在高压下仍然能正常工作。

支持快速定位故障

从实际工程的角度看,不出故障的服务是不存在的,所以出了故障要能够快速发现和定位,在外部用户发现前,通过报警机制,能准确定位故障原因,帮助工程师尽快处理问题,防止进一步影响业务。

支持快速恢复业务

这一点需要多说两句,有关“恢复业务”和“解决问题”之间的区别,这两个词也正好说明了线上出现故障后,我们解决问题的两种不同思路。简单的说,“恢复业务”的意思是线上故障是什么原因可以先暂时放在一边,我们先找到快速的临时方案,让业务跑起来。很多同学在处理生产故障的时候有一个思维惯性:先努力找到问题的起因,然后改代码解决问题,测试,发布上线,最后业务功能才能正常工作。实际上,一个流程走下来,时间成本是很高的,业务因为本次故障受到较大的影响。比如说某台机器上的服务响应很慢,导致请求超时,可能的原因有:网络带宽出现问题、机器磁盘有问题、机器的CPU或者Memory不够用了、应用程序有死循环、jvm垃圾回收时间变长......要在短短几分钟内排查这么多可能的原因是很难的,但我们不知道真正的原因也可以恢复业务,比如说最简单的方法就是直接把这台机器立刻下线,让流量分配到其它的机器或者新添加的机器上。

现在我们有了这三条分拆后的目标,那么接下来的架构方案就会围绕着这三个目标来执行。

服务分级 + 服务降级

服务分级:根据业务的需求,将服务进行分类,划分核心服务和普通服务,核心服务与普通服务不会相互影响,服务背后的资源,缓存,数据库,MQ相互分离。服务分级,对应于我们的子目标1。

这里有两个关键点:

抽取核心服务,例如我们互金业务中,用户,订单,支付这三个服务是核心业务,消息推送、营销券积分等是普通服务,核心服务的稳定与否也关乎业务的KPI。核心服务是客户必须要使用的,核心服务一旦有问题,客户就不能购买产品了;而普通服务即使有问题,暂时也不会对交易产生影响。从另外一个角度看,普通服务的代码在我们日常的工作中反而变动频繁。因此,优先保证核心服务正常使用,是我们首要目标。

不同级别的服务资源分离,包括服务器, 缓存,MQ, DB等建议都分离出来,因为只要不同服务共享资源,就有可能因为普通服务影响核心服务。举个最简单的例子,如果服务间共用一套redis,那么如果大量的消息请求占用了redis的连接数,那么核心服务的质量就会因此受到很大的影响。

服务降级:当出现故障的时候,可以将普通服务直接降级,保护核心服务不受影响。服务降级,对应于我们的子目标3。

拆分为核心服务和普通服务后,在很多业务场景下,服务间是相互调用的,这就存在服务之间可能是相互影响的。例如,我们在推送消息(普通服务)之前,需要查询用户的信息(核心服务),大量消息下发,就会给核心业务系统产生较大的压力。这种情况下我们可以通过将非核心服务停掉,以保证核心服务不受影响。

另外,在做服务降级的时候,最佳的方式,是通过修改动态配置来执行。而不是靠手工到线上修改静态配置或者发布新版本的方式来完成,因为容易出错,而且效率还不高。所以,这里我比较推荐类似阿里diamond的服务, 接入diamond后,通过diamond后台,修改配置后,groovy脚本直接就将最新的配置同步到服务中,甚至都不要重启服务就完成了降级操作。

建立分层监控

建立监控分层的目的对应于我们的子目标2,就是将故障分析和定位时涉及的所有的相关信息都要监控起来,共分为5层,具体各层和含义如下:

网络层

分析网络出入的情况,比方说有大量的外部请求,导致外网网卡的带宽被占满,需要立刻分析是否是正常流量,如果是活动带来高频访问,那么需要做带宽升级,如果是外部攻击,那么需要考虑做流量清洗等防护操作。

接口层

收集对外暴露的接口的访问情况,包括接口执行时间、返回状态码、调用次数等,我们需要时刻关注我们访问次数最多的API接口,根据接口的访问情况,决定了是否需要服务扩容,并判断是否有外部的不正常访问,机刷等。如果存在某些接口有大量的错误码返回,我们需要第一时间查明这些接口访问失败的原因。

业务层

收集和分析核心业务和普通服务的运行情况和相互调用情况,比方说,如果某个服务产生了大量的Exceptions或者dubbo服务调用超时。

中间件层

中间件层指服务依赖的各类中间件,例如容器、缓存、消息队列。不同的中间件关注不一样的信息,例如数据库Redis监控指标包括连接数、请求数, rdb&aof的执行情况, IO的频率等,缓存命中率等。

系统层

系统层指操作系统状态、收集的信息包括cpu使用率、内存使用率、网卡流量、连接数等。

“怎么做web高可用的架构设计”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么做web高可用的架构设计

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么做web高可用的架构设计

本篇内容介绍了“怎么做web高可用的架构设计”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!定义目标既然我们的目标是做到高可用,那么我们就有必
2023-06-05

MySQL高可用架构设计

MySQL高可用架构设计旨在确保数据库在遭遇故障或维护时仍能保持服务的连续性和数据的完整性。以下是一些常见的高可用架构设计及其特点:MySQL Replication异步复制:主服务器在写入数据后即认为操作完成,而不等待从服务器确认。半
MySQL高可用架构设计
2024-10-20

PHP Session 跨域的高可用性架构设计

概述在处理分布式系统中,跨域的会话管理是一个非常具有挑战性的问题。当服务被设计为水平扩展和高可用性时,会话的状态需要共享和同步,以保持一致性。本文将介绍一种使用 PHP 会话管理解决方案,实现跨域的高可用性架构设计,并提供具体的代码示例。背
2023-10-21

Spark在Ubuntu上的高可用性架构设计

在Ubuntu上设计Spark的高可用性架构需要考虑多个方面,包括集群管理、数据存储、故障恢复等。以下是一个基本的Spark高可用性架构设计方案:集群管理:使用高可用性集群管理器,如Apache Zookeeper或etcd,来协调和管理S
Spark在Ubuntu上的高可用性架构设计
2024-10-20

PHP底层的高性能Web应用架构设计与实现

PHP底层的高性能Web应用架构设计与实现在当今互联网时代,PHP已经成为最流行的Web开发语言之一,它简单易学、开发快速、运行稳定且拥有强大的社区支持。不过在处理高并发的Web应用场景下,PHP的性能问题成为开发者不得不面对的挑战,因此进
PHP底层的高性能Web应用架构设计与实现
2023-11-08

PHP底层的高可扩展性架构设计与实现

PHP底层的高可扩展性架构设计与实现随着互联网技术的迅速发展,PHP作为一种广泛应用的后台开发语言,其底层的架构设计和实现变得尤为重要。高可扩展性是一个优秀的框架或语言必须具备的核心特性之一。本文将探讨PHP底层的高可扩展性架构设计与实现,
PHP底层的高可扩展性架构设计与实现
2023-11-08

如何通过SSH实现高可靠性的Linux SysOps架构设计

要通过SSH实现高可靠性的Linux SysOps架构设计,可以采取以下几个步骤:1. 多节点部署:使用多个节点来实现高可靠性架构。可以使用主从模式、集群或者分布式架构等方式进行部署。这样即使某个节点出现故障,其他节点也可以继续提供服务。2
2023-10-09

Docker Compose、Nginx和MariaDB的最佳实践:高可用PHP应用程序架构设计

引言:在当今的互联网时代,构建高可用的应用程序变得越来越重要。随着互联网用户数量的增加,应用程序的性能、可靠性和可扩展性成为了关键的考虑因素。本文将介绍如何使用Docker Compose、Nginx和MariaDB来设计一种高可用的PHP
2023-10-21

Golang RabbitMQ: 实现高可用的消息队列系统的架构设计和实现

实现高可用的消息队列系统的架构设计和实现可以通过使用RabbitMQ来完成。RabbitMQ是一个开源的消息中间件,它基于AMQP协议,提供了可靠的消息传递和可扩展的架构。下面是一个基于Golang和RabbitMQ的高可用消息队列系统的架
2023-10-08

C++ Web应用程序的架构和设计模式有哪些?

c++++ web 应用程序架构涉及单体和微服务等架构,设计模式包括 mvc、restful api 和依赖注入。一个实用案例展示了使用 drogon、react、boost.di 构建的应用程序,其中后端使用 drogon 构建 rest
C++ Web应用程序的架构和设计模式有哪些?
2024-05-11

零基础可以考系统架构设计师吗?怎么复习

系统架构设计师是软考中的一个高级别认证,考察的是考生在系统设计方面的理论知识和实践经验。对于零基础的考生来说,考取系统架构设计师确实是一项挑战,但并非不可能实现。具体请见下文。
零基础可以考系统架构设计师吗?怎么复习
2024-09-21

Vue实例的架构设计:打造可扩展和可维护的应用程序

Vue实例的架构设计对于创建可扩展和可维护的应用程序至关重要。本文将探讨最佳实践,展示如何组织组件、数据和状态管理,以确保代码的清晰度和可重用性。
Vue实例的架构设计:打造可扩展和可维护的应用程序
2024-02-18

怎么搭建Keepalived+Nginx+Tomcat高可用负载均衡架构

这篇文章将为大家详细讲解有关怎么搭建Keepalived+Nginx+Tomcat高可用负载均衡架构,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Nginx的高可用负载均衡架构如下图:为典型的Tomcat
2023-06-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录