干货!一文搞懂无状态服务

来源 | 机智的程序员小熊

责编 | 寇雪芹

头图 | 下载于视觉中国

事故的发生是量的积累的结果,任何事情都没有表面看起来那么简单,在软件运行的过程中,随着用户量的增加,不考虑高可用,迟早有一天会发生故障,不得事先考虑高可用设计,而高可用是一门庞大的学问。

在设计一个高可用系统要考虑哪些内容?

  • 考虑方案选型会带来哪些坑,最差的情况下需要考虑故障发生的紧急解决方案

  • 需要监控系统,在故障发生时、发生时有所感知

  • 需要自动化恢复方案,自动化提前处理预警方案

  • 在代码层面需要考虑处理速度、代码性能、报错处理

  • 还要考虑把故障降低到最小:服务降级、限流、熔断

  • 其他

这篇文章主要介绍无状态服务在架构层面,如何保证可高用。

无状态服务的高可用旨在任何情况下数据都不丢失,服务都不发生故障,在某些服务发生故障时保证影响最小,并可以快速恢复。

可以从这几个方面考虑:

  • 冗余部署:至少多部署一个节点,避免单点问题

  • 垂直扩展:增加单机性能

  • 水平扩展:流量激增可快速扩容

  冗余部署

在单点架构中,随着数据数据量增加,单点负载压力过大,容易产生服务崩溃不可用的情形,对于无状态服务,可以考虑部署多个节点的服务来分散压力。

对于如何调度来临的请求,可以参考负载均衡的方式,尽可能的保证充分的利用服务器的资源。

  • 无状态服务:不需要存储数据的服务,即使节点挂掉再重启,不会发生数据丢失

  • 负载均衡:把大量请求分散到不同节点上的一种算法

  无状态服务的负载均衡

可以使用负载均衡中提供的几种算法:

  • 随机均衡算法:已知后端服务器列表,随机请求,数据量越大越趋近于均衡

  • 轮询算法:轮流请求后端服务器

前两种算法存在的问题是后端服务器在负载压力不同或服务器配置不同时,不能保证压力小的多分配,压力大的小分配,于是引入。

  • 加权轮循算法:按照后端服务器的抗压能力,负载情况分配更高的权重,更容易命中,减少宕机风险,按权重顺序的分配到后端服务器上

  • 加权随机法:和加权轮训算法一样,不同的是分配是按权重随机的,比如有多台权重一致的情况,随机访问,那就和随机算法有同样的问题,数据量大时才趋近于均衡,数据量小时有可能重复访问同一台权重一致的机器

  • [加权]最小连接数算法:这是最智能的一种算法,根据服务器当前的连接数来选取,更容易命中处理速度快的服务器

上面的算法使用于无状态应用,假如要保存通信状态,需要使用

  • 源地址哈希算法:对源地址做hash,可以保证相同的请求最终都是落在同一台机器上,不需要重复建立连接

  负载均衡算法如何选择?

首先抛弃随机算法,最简单的配置可以使用基本的轮训算法,它适用于服务器配置一致,比如使用虚拟机,可以动态调整服务器配置的场景,同时要保证专用虚拟机,上面不会部署其他应用的情况。

但是服务器上往往会安装多个应用,那就要考虑在加权轮训最小连接数中做选择。

加权轮训适用于短连接场景,比如HTTP服务,在k8s中因为每个pod都是独立的,默认service策略是非加权轮训。

  • 最小连接数适用于长连接,比如FTP等

如果系统架构中考虑到无cookie功能的场景,可以用源地址hash算法,把源IP一直映射到同一台rs上,在k8s中叫会话保持模式,每次转发到同一个pod上。

建议:

  • 如果上了容器直接交给k8s来做调度,使用cookie做会话保持,算法使用默认轮训,具体调度未来k8s文章里会做详细介绍

  • 使用长连接的应用(FTP、socket,或者用于下载连接),选择加权最小连接数

  • 短连接应用(静态网站、微服务组件等),选择加权轮训,用cookie来做会话保持,减少session的设计,不仅会提高代码复杂度,也会增加服务端负载情况,不利于分布式应用

  高并发应用的识别

主要指标QPS每秒处理响应数,比如每天有10w的pv

公式 (100000 * 80%) / (86400*20%) = 4.62 QPS(峰值QPS)

公式原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。

比如我做的系统托管了最高5w台机器,每台机器每次分钟有一次PV,时间比较均匀那就是:

((60*24)*50000)/(86400)=833 QPS

一般上百的量级就可以叫高并发了,网上查到的资料微博每天1亿多pv的系统一般也就1500QPS,5000QPS峰值。

除了QPS还有服务响应时间、并发用户数指标可以参考。在服务器负载高的时候,表现在处理速度变慢、网络断连、服务处理失败、异常报错等问题,具体问题要具体分析,不可一概而论。

可以通过监控,来获得服务器性能状态,动态调整、重试,达到服务可用性的保证,减少维护成本,通常单纯服务器压力大的时候可以考虑垂直扩展。

  垂直扩展

垂直扩展是增加服务器单机的处理能力,主要有三种方式

  • 服务器升配:集中在CPU、内存、swap、磁盘容量或者网卡等

  • 硬件性能:磁盘SSD、调整系统参数等

  • 架构调整:软件层面使用异步、缓存、无锁结构等

增强单机性能的方式是最快最容易的方式,但是单机性能之中是存在极限,同时单机部署时如果产生故障,对应用来说打击是致命的,我们应该保证应用时刻处于可用的状态,也就是俗话说的保证5个9的可靠性。

  水平自动伸缩

知道了单机的局限以后,考虑使用水平伸缩的方式。

水平伸缩就是压力增加的时候,增加新的节点来分担压力,但仅仅多点部署还是不够的,对于持续增长的业务,始终有一天会突破服务的压力上限,如果遇到流量激增的场景,人工应对肯定会措手不及,所以需要一种自动伸缩的手段。

  • 对于私有云部署来说可以手动实现调度器,检测系统状态,连通iaas层实现伸缩

  • 也可以直接使用云服务器提供的弹性伸缩服务

  • 对于容器而言,可以在iaas层弹性伸缩的情况下或者有充足node节点的情况下,配置自动伸缩和调度的策略,预防单机故障

注意:弹性伸缩针对的业务场景是无状态服务

另外无状态机器不足以承载请求流量,需要进行水平扩展的阈值一般QPS是千级,同时在这里对数据库也会有压力,所以建议水平伸缩的服务器不要部署有状态服务。

对于有状态服务压力分散在后续的文章会有所介绍。

  CDN和OSS

对于一个网站来说,用户交互页面,是一个特殊的服务,包含很多静态资源,比如图片、视频、页面(html/css/js),这些资源在用户请求的时候需要现场下载,下载速度决定了加载速度,在web服务故障的时候,同样应该对用户做出响应。

在这一层面可以考虑使用CDN内容分发网络的方式,详见[xxx],把前端静态数据缓存到边缘服务器上。(边缘服务器(边缘节点),可以理解为和用户交互的服务器,也可理解为靠近用户的服务器节点,因为靠近用户,减少了网络传输使用的时间)

使用了CDN的web服务,可以把https证书绑定到cdn上,在回源策略可以配置回源超时、回源跟随301/302状态码等配置,还可以智能压缩网页、自定义错误页面,非常方便。

oss是一种特殊的存储方案,以对象的形式进行存储,理论上可以存储无限的文件。考虑使用oss对象存储并结合cdn,把媒体资源存储在对象存储上面,也可以把冷数据压缩归档到oss上。常见的视频网站大多会用到oss,微博n年以前的数据应该就是归档到对象存储中了。

  总结

本文介绍的无状态服务常见的高可用架构设计,他们是

  • 冗余部署

  • 负载均衡的6种算法与算法选择

  • 垂直扩展的好处与弊端

  • 水平扩展与水平自动伸缩

  • 哪些服务可以使用CDN和OSS

要注意无状态应用不应该存储session,也不存储数据。

本文对负载均衡的6种算法做了介绍,但是没有介绍每个算法具体的实现方式,这个留给你下来研究,这些方案在实际使用的时候会有一定难度,服务不可用的故障原因任何一门都是博大精深的学问,程序员不仅是写代码。

这里也仅仅写了无状态服务的部分高可用方案,不管是什么服务还是从代码层级的设计,你还知道哪些呢?有时候比较苛刻的情况下,没有更多的服务器资源,如何在有限服务器的情况下提高更多的代码性能呢?欢迎来评论区讨论~

60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!

直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

更多精彩推荐
☞5G、射频、奥特曼,这仨有联系吗?☞再见 Nacos,我要玩 Service Mesh 了!☞用根因定位法,让运维效率再高一点!
点分享点收藏点点赞点在看

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

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

相关文章

后疫情时代,这家在线教育机构如何乘“云”而上

简介: 阿里云依托于云计算的基础设施特性,能够帮助教育机构避免业务侧重复投入、提高资源利用率、降低开发和运维成本,使洋葱学院激发出更大的活力,在后疫情时代得到更多用户的青睐 新冠疫情让现代人类和国际社会经历了大规模的隔…

2021全球权威AI性能竞赛MLPerf最新榜单: 浪潮获18项冠军几近半壁江山

4月22日,全球权威AI基准评测MLPerf公布2021年最新榜单,在全部有效41个项目中,浪潮获得18项性能第一,斩获几近半数冠军。 MLPerf™由图灵奖得主大卫•帕特森 (David Patterson)联合谷歌、斯坦福、哈佛大学…

NFS文件锁一致性设计原理解析

简介: 在存储系统中, NFS(Network File System,即网络文件系统)是一个重要的概念,已成为兼容POSIX语义的分布式文件系统的基础。它允许在多个主机之间共享公共文件系统,并提供数据共享的优势&am…

作为工程师,你真的了解无服务器?

译者 | 王欢来源 | 分布式实验室头图 | 下载于ICphoto最近,我在YouTube上看了一个非常出色的开发人员的视频。它的标题是“无服务器毫无意义”。虽然我非常喜欢该视频,但也不敢确定作者关于无服务器的观点是否完全正确,因此我想在本文中进行讨…

recaf反编译 java jar包

文章目录1. 获取方式2. 软件运行3. 导入jar4. 模式切换5. 字符串混淆解析1. 获取方式 添加QQ群获取197453088 2. 软件运行 java -jar recaf-2.21.13.jar3. 导入jar 4. 模式切换 5. 字符串混淆解析 如何解密Allatori 混淆的字符串 Java ALLATORIxDEMO

分布式锁在存储系统中的技术实践

简介: 阿里云存储提供了完整的分布式锁解决方案,经过了阿里云众多云产品宝贵的业务场景中长期锤炼,稳定高可靠,且提供了多种语言的SDK选择,甚至是RESTful集成方案。 1 背景 针对共享资源的互斥访问历来是很多业务系统…

Spring Cloud 应用在 Kubernetes 上的最佳实践 — 高可用(混沌工程)

简介: 从上篇开始,我们进入到了高可用的章节,上篇提到的熔断能力,是历年保障大促当天晚上整个系统不被洪峰流量打垮的法宝,本篇介绍的措施与熔断有不一样的地方? 前言 从上篇开始,我们进入到了…

闲鱼对Flutter-Native混合工程解耦的探索

简介: 分手快乐,祝你快乐~ 作者:祈晴 1. 闲鱼Flutter现状 闲鱼是第一个使用Flutter混合开发的大型应用,但闲鱼客户端开发最深入体会的痛点就是编译时长影响开发体验。在FlutterNative这种开发模式下,Nat…

学 Python 最大的 1 个误区,看看你中招了吗?

提起 Python,大家总觉得很简单。但是,能把 Python 用好的人,好像并没多少。随着 Python 火了之后,像“ 3 天带你学会 Python ”、“快速入门到全栈”这样的教程层出不穷。很多讲了一点基础语法后,还没讲 http 协议和异…

Unable to make public jdk.internal.loader.Resource jdk.internal.loader.URLClassPath.getResource(jav

文章目录1. 现象2. 异常截图2. 解决方案3. 执行命令4. 启动日志5. 浏览器效果图1. 现象 执行命令 xjar.exe java -jar unified-access-center-passwd.jar运行 sprinbgboot 打包的jar包报错 具体信息如下: C:\Users\gblfy\Desktop\xJarDir>xjar.exe java -jar…

win10安装go开发环境

文章目录1. 下载软件2. 安装3. 验证1. 下载软件 golang官网:https://golang.google.cn/dl/ 2. 安装 双击go1.19.1.windows-amd64.msi一路下一步 3. 验证 go version

3 张图带你走近蚂蚁mPaaS音视频通话组件

简介: 远程问诊、线上开户、车载语音通话……蚂蚁 mPaaS 正在“拥抱新技术,探索新未来”。 音视频技术的进步,让线上办公不再是一时权宜之计,也使得线上业务的“无接触”开展成为可能。近日,蚂蚁集团推出的移动开发平台…

立即生效!帕特·基辛格卸任 VMware 所有职务

整理 | 苏宓出品 | CSDN(ID:CSDNnews)心无二用,在帕特基辛格(Pat Gelsinger)成为英特尔新任 CEO 两个月后,他宣布辞去此前的 VMware 首席执行官的职务,全身心地帮助英特尔重建往日的…

云原生应用实现规范 - 初识 Operator

简介: 本文我们将首先了解到 Operator 是什么,之后逐步了解到 Operator 的生态建设,Operator 的关键组件及其基本的工作原理,下面让我们来一探究竟吧。 作者 | 匡大虎、阚俊宝 基于 Kubernetes 平台,我们可以轻松的…

如何基于 K8s 构建下一代 DevOps 平台?

简介: 当前云原生 DevOps 体系现状如何?面临哪些挑战?如何通过 OAM 解决云原生 DevOps 场景下的诸多问题?云原生开发应用模型 OAM(Open Application Model) 社区核心成员孙健波将为大家一一解答,并分享如何基于 OAM 和…

中国电子云发布专属云CECSTACK 以全栈信创赋能千行百业

2021年4月26日,第四届数字中国建设峰会召开之际,中国电子云在福州举办“云可信 创未来——中国电子云全系产品发布暨战略伙伴签约仪式”,重磅发布中国电子云“信创”实践和全栈自主专属云CECSTACK。中国电子副总经理、党组成员陈锡明&#xf…

idea 双击打不开了咋办

文章目录1. 文件内容还原2. 删除以前旧文件3. 删除以前缓存文件1. 文件内容还原 首先检查一下idea64.exe.vmoptions是否有改动 有的话可以把-javaagent的这一行删除,删除后保存再尝试看看能不能打开。 2. 删除以前旧文件 如果还是不行的话我们可以找打开 C:\Us…

使用日志审计查看MaxCompute执行过哪些操作

简介: MaxCompute完整地记录用户的各项操作行为,会自动将操作日志实时投递到ActionTrail中,ActionTrail针对作业(Instance)、表(Table)、函数(Function)、资源&#xff0…

谈“云”色变?近80%企业曾遭受数据泄露

出品 | 《大咖来了》 一边是企业上云这一毋庸置疑的发展趋势,但另一边,云数据泄露事件的频繁,却让不少企业谈“云”色变。 2020年2月,万豪酒店520万客人信息被泄露,英国信息专员办公室(ICO)对其进行了1840万英镑(约1.…

云网络十年:探路者阿里云的理想和坚持

简介: 转载自CSDN:专访阿里云网络产品线负责人,阿里云智能研究员祝顺民(花名江鹤)和阿里云资深产品专家吴天议。 近日,阿里巴巴发布强劲财季业绩后,高盛、摩根大通等多家机构上调阿里云估值至千…