广告
返回顶部
首页 > 资讯 > 数据库 >jeesz分布式架构-分布式高可用
  • 984
分享到

jeesz分布式架构-分布式高可用

2024-04-02 19:04:59 984人浏览 泡泡鱼
摘要

版权声明:本文为博主原创文章,未经博主允许不得转载。什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务

什么是高可用 

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 

假设系统一直能够提供服务,我们说系统的可用性是100%。 
如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。 
很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。 

如何保障系统的高可用 

我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。 
保证系统高可用,架构设计的核心准则是:冗余。 

有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。 
接下来我们看下典型互联网架构中,如何通过冗余+自动故障转移来保证系统的高可用特性。 

常见的互联网分层架构 

常见互联网分布式架构如上,分为: 

(1)客户端层:典型调用方是浏览器browser或者手机应用APP 
(2)反向代理层:系统入口,反向代理 
(3)站点应用层:实现核心应用逻辑,返回html或者JSON 
(4)服务层:如果实现了服务化,就有这一层 
(5)数据-缓存层:缓存加速访问存储 
(6)数据-数据库层:数据库固化数据存储 

整个系统的高可用,又是通过每一层的冗余+自动故障转移来综合实现的。 


分层高可用架构实践 

【客户端层->反向代理层】的高可用 

客户端层到反向代理层的高可用,是通过反向代理层的冗余来实现的。以Nginx为例:有两台nginx,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。 


自动故障转移:当nginx挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-nginx,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。 

【反向代理层->站点层】的高可用 

反向代理层到站点层的高可用,是通过站点层的冗余来实现的。假设反向代理层是nginx,nginx.conf里能够配置多个WEB后端,并且nginx能够探测到多个后端的存活性。 


自动故障转移:当web-server挂了的时候,nginx能够探测到,会自动的进行故障转移,将流量自动迁移到其他的web-server,整个过程由nginx自动完成,对调用方是透明的。 


【站点层->服务层】的高可用 

站点层到服务层的高可用,是通过服务层的冗余来实现的。“服务连接池”会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。 


自动故障转移:当service挂了的时候,service-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的service,整个过程由连接池自动完成,对调用方是透明的(所以说rpc-client中的服务连接池是很重要的基础组件)。 

【服务层>缓存层】的高可用 

服务层到缓存层的高可用,是通过缓存数据的冗余来实现的。 
缓存层的数据冗余又有几种方式:第一种是利用客户端的封装,service对cache进行双读或者双写。 


缓存层也可以通过支持主从同步的缓存集群来解决缓存层的高可用问题。 
Redis为例,redis天然支持主从同步,redis官方也有sentinel哨兵机制,来做redis的存活性检测。 


自动故障转移:当redis主挂了的时候,sentinel能够探测到,会通知调用方访问新的redis,整个过程由sentinel和redis集群配合完成,对调用方是透明的。 

说完缓存的高可用,这里要多说一句,业务对缓存并不一定有“高可用”要求,更多的对缓存的使用场景,是用来“加速数据访问”:把一部分数据放到缓存里,如果缓存挂了或者缓存没有命中,是可以去后端的数据库中再取数据的。 
这类允许“cache miss”的业务场景,缓存架构的建议是: 

将kv缓存封装成服务集群,上游设置一个代理(代理可以用集群冗余的方式保证高可用),代理的后端根据缓存访问的key水平切分成若干个实例,每个实例的访问并不做高可用。 


缓存实例挂了屏蔽:当有水平切分的实例挂掉时,代理层直接返回cache miss,此时缓存挂掉对调用方也是透明的。key水平切分实例减少,不建议做re-hash,这样容易引发缓存数据的不一致。 

【服务层>数据库层】的高可用 

大部分互联网技术,数据库层都用了“主从同步,读写分离”架构,所以数据库层的高可用,又分为“读库高可用”与“写库高可用”两类。 

【服务层>数据库层“读”】的高可用 

服务层到数据库读的高可用,是通过读库的冗余来实现的。 
既然冗余了读库,一般来说就至少有2个从库,“数据库连接池”会建立与读库多个连接,每次请求会路由到这些读库。 


自动故障转移:当读库挂了的时候,db-connection-pool能够探测到,会自动的进行故障转移,将流量自动迁移到其他的读库,整个过程由连接池自动完成,对调用方是透明的(所以说DAO中的数据库连接池是很重要的基础组件)。 

【服务层>数据库层“写”】的高可用 

服务层到数据库写的高可用,是通过写库的冗余来实现的。 
Mysql为例,可以设置两个mysql双主同步,一台对线上提供服务,另一台冗余以保证高可用,常见的实践是keepalived存活探测,相同virtual IP提供服务。 


自动故障转移:当写库挂了的时候,keepalived能够探测到,会自动的进行故障转移,将流量自动迁移到shadow-db-master,由于使用的是相同的virtual IP,这个切换过程对调用方是透明的。 

总结 

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。 

方法论上,高可用是通过冗余+自动故障转移来实现的。 

整个互联网分层系统架构的高可用,又是通过每一层的冗余+自动故障转移来综合实现的,具体的: 
(1)【客户端层】到【反向代理层】的高可用,是通过反向代理层的冗余实现的,常见实践是keepalived + virtual IP自动故障转移 
(2)【反向代理层】到【站点层】的高可用,是通过站点层的冗余实现的,常见实践是nginx与web-server之间的存活性探测与自动故障转移 
(3)【站点层】到【服务层】的高可用,是通过服务层的冗余实现的,常见实践是通过service-connection-pool来保证自动故障转移 
(4)【服务层】到【缓存层】的高可用,是通过缓存数据的冗余实现的,常见实践是缓存客户端双读双写,或者利用缓存集群的主从数据同步与sentinel保活与自动故障转移;更多的业务场景,对缓存没有高可用要求,可以使用缓存服务化来对调用方屏蔽底层复杂性 
(5)【服务层】到【数据库“读”】的高可用,是通过读库的冗余实现的,常见实践是通过db-connection-pool来保证自动故障转移 
(6)【服务层】到【数据库“写”】的高可用,是通过写库的冗余实现的,常见实践是keepalived + virtual IP自动故障转移 

开源:×××/technology   扣扣 2042849237

您可能感兴趣的文档:

--结束END--

本文标题: jeesz分布式架构-分布式高可用

本文链接: https://www.lsjlt.com/news/43452.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • jeesz分布式架构-分布式高可用
    版权声明:本文为博主原创文章,未经博主允许不得转载。什么是高可用 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务...
    99+
    2022-10-18
  • springmvc+mybatis +Jeesz 分布式架构
    spring mvcSpring框架(框架即:编程注解+xml配置的方式)MVC是Spring框架的一大特征,Spring框架有三大特征(IOC(依赖注入),AOP(面向切面),MVC(建模M-视图V-控制器C)。框架一般用于团队...
    99+
    2023-06-03
  • 怎样分析JEESZ分布式架构平台
    这期内容当中小编将会给大家带来有关怎样分析JEESZ分布式架构平台,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.   项目核心代码结构截图<!-- jeesz 工具jar -...
    99+
    2023-06-03
  • springmvc+mybatis+dubbo+zookeeper分布式架构、JEESZ简介
    平台简介        Jeesz是一个分布式的框架,提供项目模块化、服务化、热插拔的思想,高度封装安全性的Java EE快速开发平台。   ...
    99+
    2023-06-03
  • j2ee分布式架构 dubbo + springmvc + mybatis + ehcache + redis 分布式架构
    介绍<modules>        <!-- jeesz 工具jar -->   &nbs...
    99+
    2022-10-18
  • JEESZ分布式框架--技术介绍文档
     摘要: 1.Eclipse IDE:采用Maven项目管理,模块化。     2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(...
    99+
    2022-10-18
  • 搭建JEESZ分布式架构7--Zookeeper注册中心安装
    ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization).命名服务(Naming Service).集群维护(Group M...
    99+
    2023-06-03
  • 搭建JEESZ分布式架构9--消息中间件简介
    消息中间件简介1.      消息中间件在JEESZ分布式架构中的作用1)     消息中间件在分布式系统中完成消息的发送和接收。2) &n...
    99+
    2023-06-03
  • JEESZ架构和分布式服务的知识点有哪些
    这篇文章主要介绍“JEESZ架构和分布式服务的知识点有哪些”,在日常操作中,相信很多人在JEESZ架构和分布式服务的知识点有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JEESZ架构和分布式服务的知识点...
    99+
    2023-06-03
  • 搭建JEESZ分布式架构5--Dubbo管控台的安装
    Dubbo管控台的安装1.     Dubbo管理控制台的主要作用:对Dubbo服务管控注意:Dubbo 管控台可以对注册到 zookeeper 注册中心的服务...
    99+
    2023-06-03
  • JEESZ分布式架构3--CentOs下安装MySQL(环境准备)
    声明:因为运行环境是基于Linux系统的,在做此框架之前需要做一些前期的环境准备工作CentOs下安装MySQL网上很多实例,因为博客后期作为框架的原生教程,故这边做详细的安装记录,我这边已经下载好了MyS...
    99+
    2022-10-18
  • 基于MFS高可用的分布式存储架构
    MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源;分布式文件系统就是把一些分散在多台计算机上的共享文件夹,集合到一个共享文件夹内,用户要访问这些文件夹的时候,只要打开一个文件夹...
    99+
    2023-06-03
  • SpringCloud分布式微服务云架构 第七篇: 高可用的分布式配置中心(Config)
    上一篇文章讲述了一个服务如何从配置中心读取文件,配置中心如何从远程git读取配置文件,当服务实例很多时,都从配置中心读取文件,这时可以考虑将配置中心做成一个微服务,将其集群化,从而达到高可用,架构图如下:一、准备工作继续使用上一篇文章的工程...
    99+
    2023-06-05
  • JEESZ分布式框架简介---技术介绍文档
     摘要: Jeesz主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件、数据权限组件、数据字典组件、核心工具 组件、视图操作组件、工作流组件、代码生成...
    99+
    2022-10-18
  • JEESZ分布式框架--单点登录集成方案
      JEESZ分布式框架单点登录集成方案第一节:单点登录简介第一步:了解单点登录SSO主要特点是: SSO应用之间使用Web协议(如HTTPS) ,并且只有一个登录入口.SSO的体系中有下面三种角...
    99+
    2022-10-18
  • 如何部署JEESZ分布式框架开发环境
    小编给大家分享一下如何部署JEESZ分布式框架开发环境,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.   环境准备       ...
    99+
    2023-06-04
  • 搭建JEESZ分布式架构2--CentOs下安装Tomcat7(环境准备)
    声明:因为运行环境是基于Linux系统的,在做此框架之前需要做一些前期的环境准备工作CentOs下安装Tomcat7网上很多实例,因为博客后期作为框架的原生教程,故这边做详细的安装记录,我这边已经下载好了Tomcat7,通过ssh已经上传到...
    99+
    2023-06-03
  • 如何利用Java容器实现高可用的分布式架构?
    分布式架构已经成为了当今软件开发的主流架构之一。在分布式架构中,容器化技术是非常重要的一环。Java容器是开发人员在构建高可用分布式架构时的一个重要工具。本文将介绍如何利用Java容器实现高可用分布式架构,并穿插一些演示代码,帮助读者更好地...
    99+
    2023-09-10
    容器 load 分布式
  • Mycat分表分库分布式数据库项目实施与维护_MySQL高可用复制与分布式集群架构10
    Mycat分表分库分布式数据库项目实施与维护_MySQL高可用复制与分布式集群架构10视频教程学习地址    http://edu.51cto.com/course/14498...
    99+
    2022-10-18
  • 分布式数据库原理和PostgreSQL 分布式架构是怎样的
    分布式数据库原理和PostgreSQL 分布式架构是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、 什么是分布式数据库分...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作