高可用的应用

应用层的显著特点是无状态性,所谓无状态的应用是指应用服务器不保存业务的上下文信息,而仅根据每次请求提交的数据进行相应的业务逻辑处理,多个服务实例之间完全对等,请求提交到任意服务器,处理结果都是完全一样的。

通过负载均衡进行无状态服务的失效转移

应用服务器集群的Session管理

业务总是有状态的,在交易类的电子商务网站,需要有购物车记录用户的购买信息,用户买次购买请求都是向购物车中添加商品等。Web应用中将这些多次请求修改使用的上下文对象称为会话Session,单机情况下,Session可由部署在服务器上的Web容器(如JBoss)管理。在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群任何一台应用服务器上,所以保证每次请求依然能获得正确的Session比单机时要复杂很多。集群环境下,Session管理主要的手段:Session复制、Session绑定、l利用Cookie记录Session、Session服务器

Session复制

Session复制是早期企业应用系统使用较多的一种服务器集群Session管理机制。应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致Session数据的丢失,而服务器使用Session时,也只需在本机获取。这种方案虽然简单,从本机读取Session信息也很快速,但只能使用在集群规模比较小的情况下。当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源,系统不堪负担。而且由于所有用户的Sessioin信息在每台服务器上都要备份,在大量用户访问的情况下,甚至会出现服务器内存不够Session使用的情况。

Session绑定

Session绑定可以利用负载均衡的源地址Hash算法实现,负载均衡服务器总是将来源于同一IP的请求分发到同一台服务器上(也可以根据Cookie信息将同一用户的请求总是分发到同一台服务器上,当然这时负载均衡服务器必须工作在HTTP协议层上)。这样在整个会话期间,用户所有的请求都在同一台服务器上处理,即Session绑定在某台特定的服务器上,保证Session总能在这台服务器上获取。这种方法又称为会话粘滞。但是Session绑定的的方案显然不符合系统高可用的需求,因为一旦某个服务器宕机,那么该机器上的Session也就不复存在了,用户请求切换到其他机器后因为没有Session而无法完成业务处理。

利用Cookie记录Session

早期企业应用系统使用C/S架构,一种管理Session的方式是将Session记录在客户端,每次请求服务器的时候,将Sessoin放在请求中发送给服务器,服务器处理完请求后再将修改过的Session响应给客户端。网站没有客户端,但可以用浏览器支持的Cookie记录Session。利用Cookie记录Session也有一些缺点,比如受Cookie大小限制,能记录的信息有限;每次请求响应都需要传输Cookie,影响性能;如果用户关闭Cookie,访问就会不正常。事实上,许多网站都或多或少地使用Cookie记录Session。

Session服务器

利用独立部署的Sesion集群同意管理Session,应用服务器每次读写Session时,都访问Session服务器。对于有状态的Session服务器,一种简单的方法是利用分布式缓存、数据库等,在这些产品的基础上进行包装,使其符合Session的存储和访问要求。如果业务场景对Session管理有比较高的要求,比如利用Session服务集成单点登录(SSO)、用户服务等功能,则需要开发专门的Session服务管理平台

高可用的服务

可复用的服务也是无状态服务,有以下几点高可用服务策略:分级管理、超时设置、异步调用、服务降级、幂等性设计。
运维上将服务器进行分级管理,核心应用和服务优先使用更好的硬件,在运维响应速度上更加迅速。低优先级的服务通过启动不同的线程或者部署在不同的虚拟机上进行隔离,高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。在应用程序中设置服务调用的超时时间,一旦超过,通信框架就抛出异常,应用程序根据服务调度策略,可以选择继续重试或将请求转移到提供相同服务的其他服务器上。应用对服务的调用通过消息队列等异步方式完成,避免一个服务失败导致整个应用请求失败的情况。服务层保证服务重复调用和调用一次产生的结果相同(幂等性)。

高可用的数据

CAP原理

一个提供数据服务的存储系统无法同时满足数据一致性Consistency、数据可用性Availibity、分区耐受性Partition Tolerance(系统具有网络分区的伸缩性)。

数据备份

数据冷备:定期将数据复制到某种存储介质上并物理存档保管
数据热备:异步热备和同步热备。异步方式是指多份数据副本的写入操作异步完成,应用程序收到数据服务系统的写操作成功响应时,只写成功了一份,存储系统将会异步地写其他副本。同步方式是指多份数据副本的写入操作同步完成,即应用程序收到数据服务系统的写成功响应时,多份数据都以写操作成功。

失效转移

失效转移操作分为三个部分:失效确认、访问转移、数据恢复。系统确认一台服务器是否宕机的手段有两种:心跳检测和应用程序访问失败报告。对于应用程序的访问失败报告,控制中心还需要再次发送心跳检测进行确认,以免错误判断服务器宕机,因为一旦进行数据访问的失效转移,就意味着数据存储多份副本不一致,需要进行后续一系列复杂的操作。

确认某台数据存储服务器宕机后,就需要将数据读写访问重新路由到其他服务器上。对于完全对等存储的服务器,当其中一台宕机后,应用程序根据配置直接切换到对等服务器上。如果存储不是对等的,那么就需要重计算路由,选择存储服务器。因为某台服务器宕机,所以数据存储的副本数目会减少,必须将副本的数目恢复到系统设定的值,否则,再有服务器宕机,就可能出现无法访问转移(所有副本的服务器都宕机),数据永久丢失的情况。

大型网站技术架构:核心原理与案例分析——高可用相关推荐

  1. 读书笔记:大型网站技术架构-核心原理与案例分析

    李智慧<大型网站技术架构-核心原理与案例分析> 性能 可用性 伸缩性 扩展性 安全性 总结 这本书组织的很不错,语言精练,篇幅也不长,对网站架构的要点讲的狠清楚透彻,思路清晰.主要围绕架构 ...

  2. 读书笔记之 大型网站技术架构(核心原理与案例分析)

    前言 坚持看了十几天的书,终于完成了毕业后第一次静下心来,利用业务时间看书并做笔记的成就了.废话不多说,这回看的是一直很膜拜的李智慧大神写的大型网站技术架构-核心原理与案例分析. 简短的读后感 极其推 ...

  3. 大型网站技术架构:核心原理与案例分析 mobi_阿里面试官:你会高并发技术吗?...

    前言 据有关数据统计,无论是游戏行业还是互联网行业,无论是软件开发公司还是大型网站,都对高并发技术人才有着巨大的需求.因此,无论为了是面试还是为了工作,学习高并发技术刻不容缓. 当然,高并发相关岗位的 ...

  4. 大型网站架构模式【大型网站技术架构.核心原理与案例分析】(阅读分享)

    这本书分几个章节,其中有一个值得和大家分享的技术知识. 大型网站架构模式中引入了模式概念:每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心.这样,你就能一次又一次地使用该方案而不 ...

  5. 读《大型网站技术架构 核心原理与案例分析+李智慧-高清》有感

    其实作为一个刚入职场的小白(今年才毕业),对于java的领域一开始我是特别喜欢.从一开始的学习ssm框架培训,到现在真正的去公司参加项目.目前为止我进公司快一个月了,先从写测试类开始,用的是testn ...

  6. 【撸码师读书笔记】 大型网站技术架构——核心原理与案例分析

    2019独角兽企业重金招聘Python工程师标准>>> 合理的预估系统的瓶颈及制定有效伸缩性架构预案: 架构设计应从性能,可用性,伸缩性,扩展性及安全这五个要素方面出发: 与传统企业 ...

  7. 大型网站技术架构:核心原理与案例分析 mobi_大数据技术经典学习路线

    如果你看完有信心能坚持学习的话,那就当下开始行动吧! 点击链接加入群聊[大数据学习交流群]:想要在大数据这个领域汲取养分,让自己壮大成长.分享方向,行动以前先分享下一个大数据交流分享资源,欢迎想学习, ...

  8. 把书读薄:大型网站技术架构-核心原理与案例分析(第四篇 架构师)

    14 架构师领导艺术 职能:架构设计,软件开发,管理职能(规划产品,估算人力资源,估算时间资源,安排人员职责分工,确定计划里程碑,指导工程师工作,过程风险评估与控制). 是工程师的榜样,要做好表率. ...

  9. 大型网站技术架构·核心原理与案例分析 第八章·固若金汤:网站的安全架构思维导图

    固若金汤:网站的安全架构思维导图

  10. 大型网站技术架构核心原理与案例分析学习笔记(理论篇)

    大型网站软件系统的特点 高并发.大流量 高可用 海量数据 用户分布广泛,网络情况复杂 安全环境恶劣 需求快速变更,发布频繁 渐进式发展 大型网站架构演化发展历程 所有资源在一台服务器上,使用免费开源的 ...

最新文章

  1. nginx 实现反向代理
  2. ExpressionFuncT,TResult和FuncT,TResult
  3. 用Visual C#开发简单的复合控件
  4. linux+++乘法口诀_Shell的九九乘法口诀
  5. C++ array初始化需要双层大括号
  6. linux 建oracle分区表,Oracle 10g 11g分区表创建举例
  7. c# datetime._C#| DateTime.Year属性与示例
  8. LeetCode【1051. 高度检查器】
  9. access 数据库目录权限只读引起asp的访问错误
  10. Html表格lt;tablegt;还是须要加入一些标签进行优化,能够加入标题lt;captiongt;和摘要lt;table summarygt;...
  11. jdk和tomcat
  12. linux下添加vnc
  13. oracle sqlcode 多条,oracle sqlerrm和sqlcode函数
  14. excel2016打开需要配置解决方法
  15. 计算机安全权限不足或配置文件损坏,Windows XP用户配置文件丢失或损坏后的恢复方法...
  16. openwrt1907使用mt7621+mt715 5G wifi吞吐量低问题解决方法
  17. 还有一周就解放了,无心撸码,着急回家
  18. 万恶淫为首,此言不虚。举要言之,邪淫者有如下十大不如意果报:
  19. IOS nonatomic 与 atomic 的区别
  20. [资讯]同济DI出品 | 绝对是史上最萌的机器人教具!!!

热门文章

  1. 使用Redis实现购物车、计数器、好/差评等功能测试【一看就懂】
  2. 今日关注-网络创业和工作环境
  3. MySQL 8.0 新特性之横向(LATERAL)派生表
  4. C 语言经典100例(91-100)
  5. C++类模板中的模板函数
  6. 【番杰的问答笔记】输入英文句子,统计其中的单词个数
  7. OC学习第十二节 XML解析
  8. 关于使用Sortable来实现表格的拖拽遇到的问题
  9. 阿兰 · 图灵,孤僻天才的传奇人生
  10. 计算机的起源和历史英语作文,英语作文,电脑的起源和发展 80词左右