热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设计思想_设计思想一:服务高可用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了设计思想一:服务高可用相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了设计思想一:服务高可用相关的知识,希望对你有一定的参考价值。




什么是高可用?



高可用是指系统所能提供无故障服务的一种能力,避免因服务器宕机或服务异常而造成不可用的情况。


日常生活中几乎所有的互联网服务都涉及这一设计思想,比如用来剁手的淘宝、聊天的微信、买票的12306等等,因为这些服务对稳定性和可用性的要求非常高。




我们知道没有绝对稳定的设备,在没有高可用的情况下,一旦机器出现故障,服务的瘫痪是必然的。


即使单台设备的年故障率小于百万分之一,但当我们的设备数量达到一定规模时,出现故障的几率就是必然的,大家将会面对每天都在崩溃的服务和打不开的页面。




做好高可用,减少了运营期间,研发人员的介入,提高了用户体验;同时提高了数据的安全性,把损失降到最低,就是鸡蛋不能都放一个篮子里面。


可以说没有高可用服务就没有今天的互联网世界。



如何衡量高可用



如果你的系统全年都是正常提供服务,那么你系统的可用性就是100%,当然这个值是理想状态下的。一般都是以几个9来表示系统的可用性,如99.99%,小数点后9越多就代表可用性越强,下面来看看这个几个9是如何计算出来的。


可用性=平均故障间隔/(平均故障间隔 + 故障恢复平均时间)



所有系统都按高可用设计?



很多小成本或者创新产品很少会考虑高可用,毕竟技术是为业务服务的,成本是一个非常重要的因素。


  • 小公司没有完善的基础建设,无法为一个不确定的产品考虑太多,影响开发进度、增加运营成本,而且大部分轻量级程序可能运行个几年也就偶然几次小故障。可以在业务量增大和预算多了之后,再进行扩展和升级。


  • 大公司基础设施完善,任何一个模块都有比较成熟稳定的高可用解决方案,早期的投入并不会很高,而且大部分都是资源共享的,这时可以提前将这部分考虑到系统架构设计中。







如何设计系统的高可用



  • 对软硬件的冗余,以消除单点故障。任何系统都会有一个或多个冗余系统,做standby。


  • 对故障的检测和恢复。检测故障以及用备份的结点接管故障点,这也就是failover。


  • 需要很可靠的交汇点(CrossOver),这是一些不容易冗余的结点,比如域名解析,负载均衡器等。




听起来很简单,但细节是魔鬼。冗余结点最大的难题就是对有状态结点的数据复制和一致性进行保证:


  • 如果系统的数据镜像到冗余结点是异步的,那么在failover的时候就会出现数据差异的情况。


  • 如果系统在数据镜像到冗余结点是同步的,那么就会导致冗余结点越多性能越慢。




所以,很多高可用系统都在做各种取舍,需要根据业务特点进行分析,比如银行账号的余额是一个状态型的数据,冗余时就必须做到强一致性;再比如,订单记录属于追加性的数据,只需在failover的时候到备机进行追加即可。


高可用设计思路总结



  • 要做到数据不丢,就必须要持久化。


  • 要做到服务高可用,无论是应用结点还是数据结点甚至是网络线路都必须要有备用(副本)。


  • 要做到复制,就会有数据一致性的问题。


  • 我们不可能做到100%的高可用,也就是说,我们能做到几个9个的SLA。


设计思想一:服务高可用



这个图基本上来说是目前高可用系统中能看得到的所有的解决方案的基础了。关于M/S、MM、2PC、Paxos等各种方式的具体分析比较内容也比较多,就不在这里做展开讨论,后面有机会再讲。




举个栗子



设计思想一:服务高可用


我们举个简单的例子来看看一个简单的应用架构是如何通过高可用设计一步步“成长”的。


首先假设我们有一个网关-应用-数据库的服务架构,如下图所示。




设计思想一:服务高可用


我们知道单个应用是不稳定的,所以我们对应用部分先进行了扩展,将应用复制一份在其他机器上进行部署。为了理解简单,这里我们只复制一份应用,下同。


设计思想一:服务高可用


同理,我们可以对网关和数据库进行扩展(可根据需求选择主-主模式和主-从模式)。同时,为了保证服务的联通和可用,我们需要对他们之间的连接进行冗余设计。


设计思想一:服务高可用


是不是一下子就复杂了起来。细心的同学可能还会发现,我们服务网关的解析和映射仍然会影响我们架构的稳定性。这时,我们一般在网关前加上虚拟IP或者负载均衡器对服务解析进行管理分发。此处我们以负载均衡器为例。(虚拟IP和负载均衡的稳定性由各自服务提供者保证,此处不做考虑。)




设计思想一:服务高可用


于是我们得到了这么一套架构。看起来很完美了,但又有同学说,要是整个机房断电咋办?一般来说,数据中心的机房在电力设计上就有冗余,即我们的UPS(不间断电源)设备。那么假设一个机房真的完全不可用的时候,我们有解决办法吗?答案是多数据中心,以两地三中心(同城双中心加异地灾备)为例,形成了以下架构。




一般到这里就差不多了,当然也会有一些国际化的企业需要提供全球的高可用服务,这时可以接入一些云厂商提供的基础设施和服务来实现。




整个高可用设计需要根据具体的业务和需求确定,这里只是介绍一下思想,希望大家都能有所收获。








推荐阅读
  • PartI:取经处: http:www.ramkitech.com201210tomcat-clustering ... [详细]
  • php网站设计实验报告,php网站开发实训报告
    本文目录一览:1、php动态网站设计的关键技术有哪些软件,及搭建步骤需要哪些页面,分别完成 ... [详细]
  • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 【Java编码规范】《阿里巴巴Java开发手册(正式版)》发布!
    2019独角兽企业重金招聘Python工程师标准2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Ja ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • Spring MVC 浅谈
    大学时写的的文章,当时文章水平略差,大家见谅。MVC这个词儿,最早的定义应该是作为一种软件架构设计模式出现在软工里面的,即使用model、view、controller来设计及定 ... [详细]
  • 内网知识整理
    内网 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 技术研发团队管理计划方案书
    目录第一部分序目标第二部分团队建议一小组划分第三部分小组计划一小组任务管理二小组工作氛围1组员能力成长3组员幸福感提升三小组工作协同四小组建设规划第四部分20 ... [详细]
author-avatar
秋知落叶冷
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有