目的 :保证服务器硬件故障时依然可用,数据依然保持并能够访问
手段:数据和服务的冗余备份以及失效转移机制
有状态 :在服务端保留之前的请求信息,用以处理当前请求(例如:session)
无状态 :没有特殊状态的服务,各个请求对于服务器来说统一无差别处理,请求自身携带了所有服务器需要的所有参数(例如:http)
当服务器不保存请求的状态,那么所有的服务完全对等,当任意一条或多台服务器宕机,请求提交给集群中其它任意台可用机器,对终端用户而言,请求总是能够的,整个系统依然可用
session复制
应用服务器开启Web容器的Session复制功能,在集群中的几台服务器之前同步session对象
优点:方案简单,可以直接从本机读取Session信息,速度快速,但只能使用在集群规模比较小的情况
缺点:机器规模较大时,需要大量的通信进行服务器间的Session复制,占用服务器和网络的大量资源,同时每台服务器上都存储了大量备份,在用户访问量过大时,可能出现内存不足的情况
Session绑定
利用负载均衡的源地址Hash算法,总是将来源同一IP请求的分发到同一台服务器上
优点:同一来源请求总是落地同一台服务器上
缺点:一台某台服务器宕机,那么该机器上的Session就没了,用户切换到其它机器上因为没有Session无法完成业务处理
cookie记录Session
将Session记录在客户端,每次请求服务器的时候,将Session放在请求中发送给服务器
优点:简单易用,可用性高,支持应用服务器的线型伸缩
缺点:能记录的消息受限,每次请求都需要传输cookie,影响性能,如果用户关闭cookie,访问就会不正常、
session服务器
利用独立部署的session服务器(集群)统一管理,应用服务器每次读写Session时,都访问session服务器
服务分级,超时设置,异步调用,服务降级,幂等性设计
服务分级管理 将核心应用于非核心应用进行分离,核心应用和服务优先使用更好的硬件(服务部署上也进行必要的隔离,避免故障的连锁反应)
超时设计(针对通信)设置服务连接超时时间,一旦超时,应用程序根据服务调度策略,可选择重试或将请求转移到提供相同服务的其它服务器上
异步调用(消息队列)
服务降级(保证核心应用和功能的正常运行)
1 拒绝服务 拒绝低优先级应用的调用,减少服务调用并发数,确保核心应用正常使用,随机拒绝部分请求调用,解决资源,让另一部分请求得以成功
2 关闭服务 关闭部分不重要的服务,或者服务器内部关闭部分不重要的功能,解决系统开销,为重要服务和功能让出资源
幂等性设计(防止重复调用,造成数据的准确性失误)
主要手段 数据备份和失效转移机制
数据备份方法(主备模式)
1 冷备 定期复制,但不能保证数据最终的一致性
2 热备
2.1 异步热备 应用程序调用主存储,主存储写入成功后,立即返回,主存储异步发起将数据写入其它副本(不确定有没有写入成功)
2.2 同步热备 应用程序同时调用主,副服务器,将数据进行写入,此写入过程可通过并行提升写入效率
失效转移
1 失效确定 判断服务器宕机(心跳监测和应用程序访问失效报告)
2 访问转移 将请求发送到可以使用的服务器上
3 数据恢复
来自于 大型网站技术架构:核心原理与案例分析+李智慧 书籍
架构和框架是独立的,本文仅仅是提出一种架构思路,而且这个架构也在百度的某款用户量很大的复杂前端产品中得以应用。基于这一套弹性架构并结合Vue/React的现代化开发理念,可以很好的完成高复杂度的前端系统。
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。传统软件架构描述的对象是直接构成系统的抽象组件,侧重于系统的抽象、拆分、组织方式等
架构师的一个重要职责是,确保团队有共同的技术愿景,以帮助我们向客户交付他们想要的系统。在某些场景下,架构师只需要和一个团队一起工作,这时他们等同于技术引领者。在其他情况下,他们要对整个项目的技术愿景负责,通常需要协调多个团队之间,甚至是整个组织内的工作。
C/S 架构是一种典型的两层架构,其全程是Client/Server,即客户端服务器端架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据
动态应用,是相对于网站静态内容而言,是指以c/c++、php、Java、perl、.net等服务器端语言开发的网络应用软件,比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式存储系统等密不可分。
本来没想写这个题材的,为了某某童鞋能够更好的茁壮成长,临时写一篇负载均衡的。负载均衡,大家可能听过什么3层负载均衡、4层负载均衡、7层负载均衡什么的?那这是怎么分的呢,ok,是根据osi七层网络模型来分的,例如nginx是工作在应用层
Kubernetes(k8s)是一款开源的优秀的容器编排调度系统,其本身也是一款分布式应用程序。虽然本系列文章讨论的是互联网架构,但是k8s的一些设计理念非常值得深思和借鉴,本人并非运维专家,本文尝试从自己看到的一些k8s的架构理念结合自己的理解来分析 k8s在稳定性
一般来说,除了当前的系统功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。性能是网站的一个重要指标,任何软件架构设计档案都必须考虑可能会带来的性能问题。
本章介绍如何去构建高可用的服务,关键词:服务分级,超时设置,异步调用,服务降级,幂等性设计,一些架构设计中的常用方案,但是需要结合实际业务场景进行设计,没有一套方案能解决所有问题
一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!