构建高可用系统的常用招数
互联网等系统对于可用性都非常的重视,构建一个高可用的系统,有些常用的招数,在这里简单的说下,其实多数都是靠各互联网公司在实战中摸爬滚打积累出来的“血泪”经验。 1. 监控和报警 没有监控和报警的在线系统,就像是开着一辆没有仪表盘的车一样,因此如
互联网等系统对于可用性都非常的重视,构建一个高可用的系统,有些常用的招数,在这里简单的说下,其实多数都是靠各互联网公司在实战中摸爬滚打积累出来的“血泪”经验。
1. 监控和报警
没有监控和报警的在线系统,就像是开着一辆没有仪表盘的车一样,因此如果没有监控和报警,其他一切都是浮云,这点说起来容易,做起来却是比较折腾的,例如监控点需要有哪些,怎么报警是合适的。
这个的评估比较容易,就是故障发生是不是都是监控和报警先发现的,故障发现率是衡量这件事做的咋样的一个不错的指标。
2. SPoF(Single Point of Failure)
这是高可用系统中最不允许的现象,应用如果只部署在一台机器上,就意味着只要这台机器出现问题,就不可用了,为了避免这个问题,通常会采用cluster、主备的方式,实在不好做的情况下才用主备,例如带状态的DB等,而对于不带状态的,最好还是用cluster的方式,因为主备方式实现较麻烦,另外不具备伸缩性。
单台机器这只是SPoF中的一个狭义的点,更放大看还会有单框机器(如果是刀框的话)、单个机柜、单个网络核心路由、单个机房、单个城市,可见一个真正的高可用系统要解决的技术问题是不少的,并且是要付出较高的成本的。
3. 解耦
业务逻辑在实现上总是会有很多关键的逻辑,还有一些附加的逻辑,例如在做完操作后要发个短信通知什么的,如果把这些逻辑也放到主逻辑过程中一起实现,可能会出现的问题就是这些边缘逻辑出问题,然后导致主逻辑挂了,因此在实现系统时需要做一定的解耦,关键的逻辑同步完成,而非关键逻辑则通过异步的消息系统来完成,这是在设计高可用系统时一个非常关键的点。
除了后端这种实现的解耦外,前端页面的构成其实也需要考虑好解耦,例如一个页面上,有些内容即使不显示也不会出什么问题的,对于这些内容应该通过ajax等方式来实现和主要内容解耦。
4. 隔离
一个业务系统,必然会涵盖多种多样的功能,而这些功能中必然会有重要的和不重要的,例如上面解耦后页面上有些不重要的内容会通过ajax来异步获取,而如果这个不重要的内容的生成和重要的内容生成是同一个系统的话,有可能会出现不重要的内容生成的代码处理慢,从而导致把共同的处理线程池的所有线程耗满。
为了解决这个问题,通常可以采用两种办法,一是拆分系统,直接把重要的和不重要的拆成两个应用,二是通过七层路由来分到不同的机器上,也可以是域名,这样系统仍然是同一个,七层路由对性能损害很大,慎用(除非是类似基于zk实现的软负载,然后在客户端执行的七层路由)。
除了重要功能和不重要功能外,还会出现耗资源和相对不怎么耗资源(包括很多种,例如DB连接..)、给重要用户和普通用户,对于这些情况,都需要采用上面的两种办法来做到隔离。
5. 容灾
一个在线运行的系统,不可避免的要面对各种灾难事件,而一个高可用的系统,必须做到在各种灾难事件面前坚挺的活着,为了做到这个,需要有N多的措施。
通常系统都会依赖到其他的一些系统,而这个时候首先要做的就是超时控制,看过N多的case,都是由于没有设置超时时间,从而在依赖的系统响应变慢的情况下,自己的系统的所有处理线程也被拖S的现象,因此所有的阻塞的wait的地方都一定要是带超时的,在线系统更能接受的是失败,响应慢绝对是在线系统的噩梦。
除了超时外,在代码的实现上需要做一些自动降级的策略,有些时候调用的这个后端系统可能不是那么关键的逻辑,那么在这种情况下,应支持自动的降级,当后端系统出现超时等问题的时候,直接忽略掉,例如很多应用都会有待读的消息数,当读不到的时候,其实不显示关系也不大,因此此时可以自动降级掉。
除了自动降级外,还需要有多种手动降级的策略,例如一个页面上的很多功能点都需要支持手工关闭的开关,这样可以在某些系统出现问题,或压力大时可以直接关闭掉,降低系统压力,一种典型的例子是例如高清晰的图片会消耗掉很多的带宽,如果带宽紧急的情况下,应该支持显示更低质量一点的图片,当然,这是有一定损害的降级,但相比系统全挂,显然是这个方式好。
自恢复能力也是系统设计时的重要考虑点,例如当依赖的系统出问题到恢复后,系统本身也要能自恢复,例如一个最简单的是依赖的一个系统挂了,不能说还得重启系统本身才能恢复。
自我保护能力是容灾中的重要点,例如需要处理的请求超过了处理能力,那这个时候应该拒绝,要做到这点,必须首先知道系统的处理能力到底是多少(小声的说一句:所有的模拟的压力测试都是无法反应系统的处理能力的,要拿到系统的处理能力必须是用真实的访问来测试,原因是数据、用户行为其实是无法模拟的或者说难度非常非常的高),除了处理能力的保护外,还应该做负载层面的保护,以避免某些情况下即使在处理能力范围内,负载出现飙高导致无法登陆机器处理故障的现象。
除了上面说的这些系统层面的策略外,容灾还需要考虑机房层面的容灾、地域的容灾。
从上面5点来说,要做到一个高可用的系统真心不容易,从编程技巧、系统设计以及基础设施(IDC)建设都需要作出巨大的努力,并且要付出巨大的成本,而对于一个高访问量的大规模系统而言,基本上所有认为不太可能发生的事其实都是会发生的,如果没有准备好的话,瞬间可用率就会大幅损失。
原文地址:构建高可用系统的常用招数, 感谢原作者分享。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









General Matrix Multiplication (GEMM) は、多くのアプリケーションやアルゴリズムの重要な部分であり、コンピューター ハードウェアのパフォーマンスを評価するための重要な指標の 1 つでもあります。 GEMM の実装に関する徹底的な調査と最適化は、ハイ パフォーマンス コンピューティングとソフトウェア システムとハードウェア システムの関係をより深く理解するのに役立ちます。コンピューター サイエンスでは、GEMM を効果的に最適化すると、計算速度が向上し、リソースが節約されます。これは、コンピューター システムの全体的なパフォーマンスを向上させるために非常に重要です。 GEMM の動作原理と最適化方法を深く理解することは、最新のコンピューティング ハードウェアの可能性をより有効に活用し、さまざまな複雑なコンピューティング タスクに対してより効率的なソリューションを提供するのに役立ちます。 GEMMのパフォーマンスを最適化することで

7月29日、AITO Wenjieの40万台目の新車のロールオフ式典に、ファーウェイの常務取締役、ターミナルBG会長、スマートカーソリューションBU会長のYu Chengdong氏が出席し、スピーチを行い、Wenjieシリーズモデルの発売を発表した。 8月にHuawei Qiankun ADS 3.0バージョンが発売され、8月から9月にかけて順次アップグレードが行われる予定です。 8月6日に発売されるXiangjie S9には、ファーウェイのADS3.0インテリジェント運転システムが初搭載される。 LiDARの支援により、Huawei Qiankun ADS3.0バージョンはインテリジェント運転機能を大幅に向上させ、エンドツーエンドの統合機能を備え、GOD(一般障害物識別)/PDP(予測)の新しいエンドツーエンドアーキテクチャを採用します。意思決定と制御)、駐車スペースから駐車スペースまでのスマート運転のNCA機能の提供、CAS3.0のアップグレード

Apple 16 システムの最適なバージョンは iOS16.1.4 です。iOS16 システムの最適なバージョンは人によって異なります。日常の使用体験における追加と改善も多くのユーザーから賞賛されています。 Apple 16 システムの最適なバージョンはどれですか? 回答: iOS16.1.4 iOS 16 システムの最適なバージョンは人によって異なる場合があります。公開情報によると、2022 年にリリースされた iOS16 は非常に安定していてパフォーマンスの高いバージョンであると考えられており、ユーザーはその全体的なエクスペリエンスに非常に満足しています。また、iOS16では新機能の追加や日常の使用感の向上も多くのユーザーからご好評をいただいております。特に最新のバッテリー寿命、信号性能、加熱制御に関して、ユーザーからのフィードバックは比較的好評です。ただし、iPhone14を考慮すると、

4月11日、ファーウェイはHarmonyOS 4.2 100台のアップグレード計画を初めて正式に発表し、今回は携帯電話、タブレット、時計、ヘッドフォン、スマートスクリーンなどのデバイスを含む180台以上のデバイスがアップグレードに参加する予定だ。先月、HarmonyOS4.2 100台アップグレード計画の着実な進捗に伴い、Huawei Pocket2、Huawei MateX5シリーズ、nova12シリーズ、Huawei Puraシリーズなどの多くの人気モデルもアップグレードと適応を開始しました。 HarmonyOS によってもたらされる共通の、そして多くの場合新しい体験を楽しむことができる Huawei モデルのユーザーが増えることになります。ユーザーのフィードバックから判断すると、HarmonyOS4.2にアップグレードした後、Huawei Mate60シリーズモデルのエクスペリエンスがあらゆる面で向上しました。特にファーウェイM

Linux と Windows は 2 つの一般的なオペレーティング システムで、それぞれオープン ソースの Linux システムと商用 Windows システムを表します。どちらのオペレーティング システムにも、ユーザーがオペレーティング システムと対話するためのコマンド ライン インターフェイスがあります。 Linux システムでは、ユーザーはシェル コマンド ラインを使用しますが、Windows システムでは、cmd コマンド ラインを使用します。 Linux システムのシェル コマンド ラインは、ほぼすべてのシステム管理タスクを完了できる非常に強力なツールです。

Oracle データベースでのシステム日付の変更方法の詳細説明 Oracle データベースでのシステム日付の変更方法は、主に NLS_DATE_FORMAT パラメータの変更と SYSDATE 関数の使用です。この記事では、読者が Oracle データベースのシステム日付を変更する操作をよりよく理解し、習得できるように、これら 2 つの方法とその具体的なコード例を詳しく紹介します。 1. NLS_DATE_FORMAT パラメータメソッドの変更 NLS_DATE_FORMAT は Oracle データです

システム フォントはどのフォルダーにありますか? 現代のコンピューター システムでは、フォントは重要な役割を果たし、読書体験やテキスト表現の美しさに影響を与えます。パーソナライズやカスタマイズに熱心な一部のユーザーにとって、システム フォントの保存場所を理解することが特に重要です。では、システムフォントはどのフォルダーに保存されているのでしょうか?この記事では、それらを皆さんに一つずつ明らかにしていきます。 Windows オペレーティング システムでは、システム フォントは「Fonts」というフォルダーに保存されます。このフォルダーは、デフォルトでは Win C ドライブにあります。

最近、ファーウェイは、Xuanjiセンシングシステムを搭載した新しいスマートウェアラブル製品を9月に発売すると発表しました。これはファーウェイの最新スマートウォッチとなる予定です。この新製品は、高度な感情的健康モニタリング機能を統合し、正確性、包括性、スピード、柔軟性、オープン性、拡張性という 6 つの特徴を備えた包括的な健康評価をユーザーに提供します。このシステムはスーパーセンシングモジュールを使用し、マルチチャンネル光路アーキテクチャ技術を最適化することで、心拍数、血中酸素、呼吸数などの基本的な指標の監視精度を大幅に向上させます。さらに、Xuanji センシング システムは、心拍数データに基づく感情状態の研究も拡張しており、生理学的指標に限定されず、ユーザーの感情状態やストレス レベルを評価することもでき、60 以上のスポーツのモニタリングをサポートしています。健康指標、心臓血管、呼吸器、神経、内分泌、
