博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
系统架构高可用系统设计原则01
阅读量:6160 次
发布时间:2019-06-21

本文共 1558 字,大约阅读时间需要 5 分钟。

一、也谈谈高可用

“高可用性”(High Availability)简称HA,通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。通俗来讲就是通过专业的设计保障系统相关服务能够不间断的稳定运行。
度量方式:
%availability=(Total Elapsed Time-Sum of Inoperative Times)/ Total Elapsed Time

可用性和系统组件的失败率相关。衡量系统设备失败率的一个指标是“失败间隔平均时间”MTBF(mean time between failures)。通常这个指标衡量系统的组件,如磁盘:        MTBF=Total Operating Time / Total No. of Failures

二、高可用设计方案目标定义:

  1. 保持业务高稳定性

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

  1. 支持故障的快速定位(建立分层监控)

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

  1. 支持业务的快速恢复

业务可以通过以上三个方面建立

三、架构设计的原则:

(1)无状态设计
系统架构高可用系统设计原则01
① 无状态服务(stateless service)对单次请求的处理,不依赖其他请求,也就是说,处理一次请求所需的全部信息,要么都包含在这个请求里,要么可以从外部获取到(比如说数据库),服务器本身不存储任何信息。如果还有其他信息需要存储,可以将信息放在一个单独可共享的地方,独立于server存在,比如,同样还是采取session的方式,在服务端保存数据,减少每次client请求传输的数据量(节省流量);但是将session集中存放,比如放在单独的session层里。
这种情况下,server同样是无状态的,可以做水平扩展。如果server是无状态的,那么对于客户端来说,就可以将请求发送到任意一台server上,然后就可以通过负载均衡等手段,实现水平扩展。
② 如果server是有状态的,那么就无法很容易地实现了,因为客户端需要始终把请求发到同一台server才行,所谓“session迁移”等方案,也就是为了解决这个问题。
③将有状态服务转换成无状态服务,无状态服务是相对隔离和平等的,当某台服务器出错,通过负载均衡策略会将流量划走到其他无状态服务器上。
同样还是采取session的方式,在服务端保存数据,减少每次client请求传输的数据量(节省流量);但是将session集中存放,比如放在单独的session层里。这种情况下,server同样是无状态的,可以做水平扩展,如下图:
系统架构高可用系统设计原则01

(2)冗余设计

无状态服务故障转移过程中,需要服务做成冗余设计才能实现。

几个概念:    ①SOA(Service-Oriented Architecture),SOA解决多服务凌乱问题,SOA架构解决数据服务的复杂程度,同时SOA又有一个名字,叫做服务治理。    ②微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。    ③SLA:服务等级协议(简称:SLA,全称:service level agreement)。是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。

转载于:https://blog.51cto.com/13238147/2362332

你可能感兴趣的文章
SQL Server大负载的生产环境下的性能优化:初识元数据优化
查看>>
我的友情链接
查看>>
MySql,Sql Server分区技术浅析
查看>>
hibernate之缓存
查看>>
KVM虚拟化笔记(七)------kvm虚拟机VNC的配置
查看>>
我的友情链接
查看>>
修改freebsd的主机名
查看>>
Form表单基础知识和常用兼容方法笔记(二)
查看>>
asp.net mvc+httpclient+asp.net mvc api入门篇
查看>>
不错的东西: AutoMapper
查看>>
亲测能用的mysqli类,挺好用的
查看>>
一文读懂RPA与BPM的区别和联系
查看>>
LeetCode----67. Add Binary(java)
查看>>
一次加载多个包
查看>>
中信国健临床通讯 2011年3月期 目 录
查看>>
人生如戏
查看>>
Sicily 1346. 金明的预算方案
查看>>
SpringMVC (六)注解式开发
查看>>
使用VirtualEnvWrapper隔离python项目的库依赖
查看>>
Qt学习三 - 菜单栏、工具栏、状态栏
查看>>