【网站架构】如何长久运行升级?高可用部署只是基础,巡检、监控、应用数据备份、日志、灰度发布

news2025/8/12 3:56:33

大家好,欢迎来到停止重构的频道。

本期讨论大型网站的可用性

高可用指的是当一部分服务器宕机时,网站系统仍可正常运行。

一些常用的软件服务的高可用部署方案 ,如Tomcat、Nginx、Redis、MySQL等,在往期性能调优时已经有详细的介绍,这里不做讨论。

这里讨论一个问题,是否全部软件服务都做了高可用部署,就能保证网站系统的可用性呢?

当然不是,这只是保证网站系统可用性的其中一项,除了软件服务都采用高可用部署方案,还需要考虑以下几点

1、  服务器定期维护巡检 

2、  服务器监控 

3、  应用、数据备份 

4、  完善的日志机制 

5、  环境分离与灰度发布

服务器定期维护巡检

首先是服务器定期维护巡检,长时间运行的网站系统出现问题不一定在开发的软件上,也可能在服务器的硬件、操作系统上。

定期对服务器进行维护巡检能防止一些由于长时间运行产生的奇怪问题,如内存错误、内存泄漏、磁盘读写错误等。

维护巡检一般是服务器重启、漏洞修复、基础软件升级、日志清理、磁盘容量健康检查等

维护巡检的周期一般是3个月,但也要视操作系统、网站系统实际压力而定。

 

服务器定期维护巡检一般是被忽略的,但这却是十分重要的。

定期维护巡检就好像是定期身体检查,很多问题可以预先解决,而非问题发生时再病急乱投医。

服务器监控

接下来是服务器监控,一般监控的是服务器的CPU、内存、带宽使用率、磁盘容量、某个程序是否意外退出等。

当出现问题时,可以自动通知运维人员及时处理。如果使用公有云或私有云的话,服务器监控、异常通知一般都是完备的。

如果是使用物理机搭建的环境,可以安装实时监控系统,一般称为APM 如SkyWalking等。

 

服务器监控除了能让运维人员及时处理问题,还有一个好处。

就是可以通过监控记录,知道网站系统的峰值压力时段,这数据无论对运营还是对系统维护都是有帮助的。

应用、数据备份

接下来是应用、数据备份,人不能保证一生无病无痛,那服务器也是有可能坏掉的。

所以,应用、数据都需要定期做备份,如定期做系统快照、磁盘备份等。

一旦服务器出现问题,可以通过系统快照、数据备份快速恢复

 

一些系统会考虑灾备,灾备本质上还是应用、数据备份,只不过是异地备份。

防止当原来服务器所在地区发生不可抗力后,异地备份的系统能立马接替工作。

完善的日志机制

软件是很难做到毫无BUG的,有些问题很玄学地只能在生产环境出现,有些问题发生概率很低,很难复现。

如果有日志的话,则能快速定位问题,而不是花大量时间复现问题,然后在程序中打断点排查。

当然,完善的日志不一定是件麻烦的事情,其实网站系统的日志不需要关注所有部分,只需要重点关注后端部分的日志即可,其他软件服务的日志一般正常记录即可。

对于后端日志详细的介绍可以参考往期《后端规整化》。

当然,这样记录的日志量是比较大的,很多人会担心性能问题,不过日志记录的库一般都支持异步写入磁盘,所以在实际项目中其实并不会造成多大的性能问题

另外,不要一开始就着眼于ELK等日志收集方案,应该先定好日志规则,不然收集再多的日志也没有用

顺便一提,在性能测试时,不要关闭日志,虽然这样有可能会提升性能测试的结果,但这样做其实并没有什么实际意义。

另外,日志除了能快速定位问题,还有一个好处

就是在运营过程中,会有一些咨询或投诉 ,比如充值了金币没到账,则日志可以作为断定是系统BUG还是用户人品问题的依据

环境分离与灰度发布

网站系统的发布更新成本是相对较低的,所以更新频率是相对较高的。

系统更新频率高是系统不稳定的一大因素,系统不稳定的话会让用户有一种山寨感。

最好的做法是有明确的版本迭代计划,先发布到测试环境经过完整测试后,再发布到生产环境,且在版本测试过程期间不随便追加功能

当然,这样也很难保证新功能不会对旧功能产生影响,所以一些网站系统会考虑灰度发布

灰度发布的实际做法根据具体业务场景、系统规模会有十分大的区别,但目的都是一样的,就是新功能只让部分地区或特定用户使用,当功能稳定后,再逐步扩展到全部用户群体。

 

当然,这些发布流程都会加大发布的成本,所以我们一般只推荐对比较大的版本进行完整的测试流程和实施灰度发布

总结​

以上提到的点,都是一些运维、流程上的问题,技术上的要求相对会少一些。但是这些正是系统可用性高、稳定的关键 而且对实际项目而言,这些比各种集群、高可用部署方案都重要。

这其实也说明一个道理 :一个软件系统最终的长久运行,长年维护升级,并不是因为其技术有多高深或不可思议,而是完善的规则和过程造就的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

H5组件Canvas画电子印章

效果图 代码 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>HTML5 Canvas印章</title> <script type"text/javascript" src"https://code.jquery.com/jquery-2.2.4.js"></scri…

电科大离散数学-4-二元关系

目录 4.1 序偶和笛卡尔积 4.1.1 有序组的定义 4.1.2 笛卡儿积 4.1.3 笛卡儿积的性质 4.1.4 推广 4.2 关系的定义 4.2.1 二元关系的定义 4.2.2 二元关系的数学符号 4.2.3 枚举二元关系 4.2.4 几种重要关系 4.2.5 定义域和值域 4.2.6 n元关系 4.3 关系的表示 4.3.1…

[附源码]SSM计算机毕业设计中小型艺术培训机构管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

List<Map<String, Object>>,Map<String,List<Map<String, Object>>>多方式循环遍历

多方式循环遍历1. List<Map<String, Object>>多方式循环测试结果2. Map&#xff1c;String,List&#xff1c;Map&#xff1c;String, Object&#xff1e;&#xff1e;&#xff1e;测试结果☀️相关笔记章节&#xff1a; &#x1f339;java 1.8 stream使用总结&…

MySQL8.0优化 - 优化MySQL服务器、优化MySQL的参数、优化数据类型

文章目录学习资料优化MySQL服务器优化服务器硬件配置较大的内存配置高速磁盘系统合理分布磁盘I/O配置多处理器优化MySQL的参数innodb_buffer_pool_sizekey_buffer_sizetable_cachequery_cache_sizequery_cache_typesort_buffer_sizejoin_buffer_sizeread_buffer_sizeinnodb_flu…

RabbitMQ初步到精通-第四章-RabbitMQ工作模式-SIMPLE

RabbitMQ工作模式-SIMPLE模式 1.模式介绍 这是最简单的一个模式了&#xff0c;一般在实际的生产环境中&#xff0c;大家应该都不会使用一个消费者。只做入门的介绍。 一个生产者&#xff0c;一个默认的交换机【图中没体现】&#xff0c;一个队列&#xff0c;一个消费者。 生产…

【Java技术专题】「Java8技术盲区」函数接口字典-看看还有哪些你所不知道函数接口

函数接口的定义 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法&#xff0c;但是可以有多个非抽象方法的接口。 函数接口的特点 函数式接口可以被隐式转换为lambda表达式。 Lambda表达式和方法引用&#xff08;实际上也可认为是Lambda表达式&#xff09;上。 …

子序列宽度之和

目录题目1. 子序列2. 子序列找最大最小值3. 代码题目 一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums &#xff0c;返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大&#xff0c;请返回对 109 7 取余 后的结果。 子序列 定义…

[附源码]java毕业设计农业种植管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

IDEA中给源码添加自己注释——private-notes插件安装使用

一、前言 我们在空闲之余喜欢研究一些经典框架的源码&#xff0c;发现没办法把自己的注释添加上。 会给出提示&#xff1a;File is read-only 很烦&#xff0c;但是为了安全考虑也是没有办法的&#xff01; 这是一个大佬就写了一个IDEA插件&#xff0c;让我们摆脱了这个烦恼&a…

U2-Net 使用嵌套 U 结构进行更深入的显着目标检测

在给定图像中分割不同的对象一直是计算机视觉领域的一项众所周知的任务。多年来,我们已经看到自编码器到疯狂的深度学习模型(如 Deeplab)被用于语义分割。在所有模型的深海中,仍然有一个名字排在最前面,它就是U-Net。U-Net 于 2018 年发布,此后获得了巨大的普及,并以某种…

Android入门第30天-Android里的Toast的使用

介绍 本篇带来的是&#xff1a; Android用于提示信息的一个控件——Toast(吐司)&#xff01;Toast是一种很方便的消息提示框,会在 屏幕中显示一个消息提示框,没任何按钮,也不会获得焦点一段时间过后自动消失&#xff01; 非常常用&#xff01;我们通过一个例子把Toast的使用讲…

【重识云原生】第六章容器基础6.4.9.6节——Service 与 Pod 的DNS

1 Service 与 Pod 的 DNS Kubernetes 为 Service 和 Pod 创建 DNS 记录。 你可以使用一致的 DNS 名称而非 IP 地址访问 Service。 Kubernetes DNS 除了在集群上调度 DNS Pod 和 Service&#xff0c; 还配置 kubelet 以告知各个容器使用 DNS Service 的 IP 来解析 DNS 名称。 集…

bcn_timout,ap_probe_send_start

ESP32 使用 beacon 超时机制检测 AP 是否活跃。如果 station 在 inactive 时间内未收到所连接 AP 的 beacon&#xff0c;将发生 beacon 超时。inactive 时间通过调用函数 esp_wifi_set_inactive_time() 设置。 beacon 超时发生后&#xff0c;station 将向 AP 发送 5 个 probe …

智芯传感MEMS压力传感器促进无人机跨入极其广阔的应用市场

2022年11月8日至13日&#xff0c;第十四届中国国际航空航天博览会在广东珠海国际航展中心举办。伴随着人工智能技术的进步&#xff0c;全球无人化装备的发展如火如荼。各式各样的无人机在无人化装备中可谓是一枝独秀&#xff0c;广受外界的高度关注。 据美国《Aviation Week&am…

【元宇宙欧米说】从GameFi的视角讨论Web2到Web3的利弊

什么将会是Web3生态赛道发展的未来&#xff1f;争议很大的GameFi如何建立高价值的商业生态&#xff1f; 11月23日下午三点&#xff0c;IDV合作经理Chillax将以“从GameFi视角讨论Web2到Web3的利弊”为题&#xff0c;与大家共同探讨Web3时代的到来如何影响GameFi的发展。 Bloc…

web自动化测试入门篇03——selenium使用教程

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…

C++ Reference: Standard C++ Library reference: Containers: deque: deque: insert

C官网参考链接&#xff1a;https://cplusplus.com/reference/deque/deque/insert/ 公有成员函数 <deque> std::deque::insert C98 单个元素 (1) iterator insert (iterator position, const value_type& val); 填充 (2) void insert (iterator position, s…

华为OD机试真题(JavaScript)

更新中....... 创作不易&#xff0c;如果你觉得有帮助&#xff0c;就三连支持吧 本目录中所有算法题均使用JavaScript语言实现&#xff0c;并且基于node环境运行。 因此&#xff0c;我们需要在本地安装node环境&#xff0c;安装完node环境后&#xff0c;可以使用node命令直接运…

Golang学习之路6-goroutine并发

文章目录前言一、goroutine用法二、goroutine循环三、goroutine提前退出四、goroutine双向管道五、goroutine单向管道六、监听管道如下图&#xff0c;可以看到当我们监听到有写入数据时会得到对应的类型数据&#xff0c;当没有写入时 default 一直在负责监听&#xff01; ![在这…