构建高可用的方式总结
高可用系统,追求多个9的可用性,对于分布式系统来说,我们通常都认为遵守CAP理论,根据业务场景,取平衡。
高可用,首先想到的是避免单点,防止单点故障。
1.负载均衡
硬均衡:F5设备 ,standBy从,主备切换。软均衡:类似,实现方式LVS之类。
具体均衡的策略:
A.集中策略:权重、随机、负载能力(静态与动态)、connection等B.分布策略:基于Gossip模型的方式。一般是内部的均衡策略
对于负载均衡,也要进行细分,比如请求流程和返回响应流程:
请求流程:1.分配策略;2.web请求会话处理方式
返回数据:1.经由负载均衡点;2.直接返回
中心负载均衡的缺陷:将请求分发到业务机器,业务机器对请求进行queue,如果其中某一个请求耗时,则导致该queue的请求任务被延时,很多任务会超时,类似于超时收银柜台某一个客户耗时,但是其它柜台却无法协同解决该问题(按照理想设计应当其它节点协同处理)。基于此,twinter提出了一个unicorn的解决方案,该方案是负载均衡机器对所有请求只发到一个队列,然后业务机器在该队列获取任务处理。某一个业务机器的耗时操作,并不影响后面的任务处理。
2.分布式环境下的事务
分布式环境下的强事务性,2段式提交、3段式提交这种分段时提交方式,如果任意一个节点执行出错,则进行rollback操作;
另外一种方法是基于paxos算法,类似于“民主集中制”,以多胜少。不在意个别master节点操作失败,如果大部分master节点操作成功,则操作被认为是成功的。
paxos算法,是在一篇paper中提及的,模拟的是议员议会审议的一种制度安排,basic paxos算法角色众多,不易实现,工业界又提出了multi paxos算法,简化了角色,但是核心思想是一致的。
这一块在阿里关于中间件的技术中有详细说明。
机房隔离和机房切换的问题比较复杂,网络的延时不可控。缓存失败的切换,导致流量激增,很可能也会导致新接入的机器快速奔溃。所以很多时候经常听到“平滑过渡”的方案。负载均衡方案中,也会考虑业务请求到业务机器,业务机器失败后流量是否导致后端集群不稳定?比如分布式缓存系统,某部分失败,信息的同步?
3.应用的高可用
1.Fail Fast
2.对接口与对象的保护
在网站的设计中,也要避免第三方依赖导致系统宕机,最好有一个option。比如在数据库缓慢的query,导致请求队列堆积,可以考虑优先使用缓存策略,分担压力。
对于一个系统,避免单点和应用的高可用是两个核心方面。如何保障系统面临的压力,就有了垂直伸缩和水平伸缩的选择。
4.构建可伸缩系统
垂直伸缩:通过增加单机的cpu、内存等方法扩充系统容量。
1.增加CPU后,若系统性能未能提升,可以考虑以下几个问题:A.是否存在锁竞争问题B.支撑并发请求的线程数量固定(建议使用Runtime.getRuntime().availableProcessor()来合理分配线程数)C.单线程处理方式改为多线程处理
水平伸缩:比较复杂,涉及面很广,一般采用系统的切分、分表分库、数据库的分离、分布式系统等,涉及到业务系统切分、文件系统的分布式、网络的弹性、计算的并行等,根据具体应用、具体的业务要求选择不同的方案,逐步“进化”。
数据库访问:异步访问,Jboss Netty的测试报告中,异步数据库的访问方式可以大大提高访问数据库的性能。
构建高可用的方式总结相关推荐
- 如何构建高可用和可伸缩的架构?
如何构建高可用和可伸缩的架构? 发表于2015-09-22 13:42| 4669次阅读| 来源CSDN| 5 条评论| 作者蒲婧 CTOCTO俱乐部CTO讲堂云存储七牛架构高可用 width=&qu ...
- 借助混沌工程工具 ChaosBlade 构建高可用的分布式系统
为什么80%的码农都做不了架构师?>>> 在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战.在可控范 ...
- 构建高可用ZooKeeper集群
构建高可用ZooKeeper集群 2017/01/23 | 分类: 技术架构 | 0 条评论 | 标签: ZOOKEEPER 分享到:9 原文出处: cyfonly ZooKeeper 是 Apach ...
- .net core下简单构建高可用服务集群
一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net ...
- 杜云飞java_Akka实战:快速构建高可用分布式应用 杜云飞著 PDF下载
资深Java技术专家在大量实践后的经验与教训的总结. 以实战为导向,从Akka架构.组件.工具包.分布式.集群.微服务等多个角度展开,为构建高可用.高性能.分布式应用提供了详尽指导. Akka是一款非 ...
- 高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群
高性能Linux服务器 第11章 构建高可用的LVS负载均衡集群 libnet软件包<-依赖-heartbeat(包含ldirectord插件(需要perl-MailTools的rpm包)) l ...
- 《构建高可用Linux服务器 第3版》—— 1.2 全面了解Linux服务器
本节书摘来自华章出版社<构建高可用Linux服务器 第3版>一 书中的第1章,第1.3节,作者:余洪春 ,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.3 ...
- 基于弹性计算平台——构建高可用、可扩展的应用
文 / 陈波 前不久,Facebook宣布投资10亿美元收购仅成立15个月的移动照片分享应用Instagram,消息传出时,人们不仅惊叹于这笔巨额的交易,更为这支13个人的小团队感到不可思议.Inst ...
- rsync+nfs构建高可用文件系统详细步骤
当系统要求高可靠.高性能时,一般采用分布式部署方案.应用服务器分布式部署比较成熟,应用中用到的文件(如文件.图片等上传下载)系统有如下几种方案: 1.存储在文件目录:传统处理方式. 2.存储到存储云上 ...
最新文章
- django-后台sms管理系统的css框架
- Android-如何开发一个功能强大的图片选择器
- Python面试基础题-2018-12-26
- 告别运营怪圈,不做“背锅侠+加班狗+低薪族”!
- 纯c语言实现动态分配多维数组的方法
- 淘宝端智能演进和思考
- eclipse 国内镜像高速下载
- ASP.NET MVC——Entity Framework连接mysql及问题
- 51 单片机 pcf8591 四路ADC 读取 数码管显示 LCD1602显示 程序
- 处理自己计算机某的端口被占问题
- wps ppt word 双屏幕同时浏览技巧
- php对接建行h5网页支付
- Codeforces Round #507 (Div. 2) B - Shashlik Cooking(模拟)
- javascript中一个字符占几个字节
- 最新的中国风歌曲——《颜如玉》
- 《H打飞机》技術支持網址
- 《深入理解计算机系统》学习笔记——处理器体系结构
- SpringBoot+redis实现用户或者ip恶意单位时间内访问
- Java多线程编程(四)——死锁问题
- Java项目不挂断运行,运行jar包