云漫圈 | 谈谈怎么做【服务隔离】

戳蓝字“CSDN云计算”关注我们哦!


640?wx_fmt=jpeg


转自:  孤独烟


引言

OK,如下图所示

640?wx_fmt=jpeg

640?wx_fmt=jpeg


那显而易见,做服务隔离的目的就是避免服务之间相互影响。毕竟谁也不能说自己的微服务百分百可用,如果不做隔离,一旦一个服务出现了问题,整个系统的稳定性都会受到影响!
因此,做服务隔离是很有必要的。那么怎么隔离呢?

  • 种类隔离

  • 用户隔离

OK,接下来开始细说这两种方式!

正文

种类隔离

其实按照服务种类隔离要从两个纬度来说:即服务提供方服务调用方
假设我们一个系统有三个服务:订单服务,库存服务,支付服务!有如下调用关系:

640?wx_fmt=png

OK,我们先明确一点,上面有几个服务扮演服务提供方的角色?
一共是三个:支付服务(给用户提供服务)、库存服务(给支付服务提供服务)、订单服务(给支付服务提供服务)

有几个服务扮演服务调用方的角色?
一共是一个:支付服务(调用订单服务和库存服务)

针对服务提供方这个角度而言,怎么做隔离呢?
很简单,每一个服务乃至其对应的数据库,给一个服务器部署就行!这样某个服务出现了故障,就不会相互影响,达到一种物理层面上的隔离!

什么,你们公司服务器不够?了解一下《微服务为什么一定要用docker》

针对服务调用方这个角度而言,怎么做隔离呢?
OK,先明白一点,服务调用方不做隔离会出现什么情况?如图所示

640?wx_fmt=png

一个请求过来,占用支付服务中的Tomcat的一个线程。然后,该线程去顺序调用订单服务和库存服务!那么,一旦库存服务出问题了,这个Tomcat的线程就一直卡在那,无法返回!与此同时,页面上源源不断的有请求过来,会把Tomcat里头的线程池资源全部消耗完毕!对于后面的请求,Tomcat就无法响应!
因此,如果不针对被调服务做服务隔离,一个被调服务出问题,就将导致调用方服务不可用!

那怎么隔离呢?
这里介绍一种线程池隔离方式,给每个微服务都初始化出一个线程池,如下图所示,给订单服务和库存服务都初始化出一个线程池,不使用Tomcat线程池中的线程直接调用,而是用相应线程池中的线程去调用!

640?wx_fmt=png

OK,如果此时库存服务不可用了呢?
库存服务线程池会被迅速塞满,此时后面进来的新请求发现库存服务线程池满啦,于是乎就不去调库存服务,直接返回!如下图所示

640?wx_fmt=png

ps:目前业内有信号量隔离和线程池隔离两种隔离方式,这里举的是线程池隔离!

怎么实现呢?
可以了解一下Hytrix、Sentinel、以及Resilience4j如何和你的项目结合起来使用!Resilience4j只提供信号量隔离!

用户隔离

640?wx_fmt=jpeg

640?wx_fmt=jpeg


OK,我们先明白一点这里的租户和用户不是一个概念!

  • 用户: 一个环境/系统的一个使用者即该环境/系统的一个用户。

  • 租户:用户从某种粒度上被分到若干内,每组成为一个租户。

这里的可以这么理解:用户根据一定的特征去做分组,比如是VIP的一组,不是VIP的一组。又或者北方的用户一组,南方的用户一组。按照自己的业务场景来分组。

那么所谓的用户隔离,就是按照不同的分组形成不同的服务实例。这样某个服务实例挂了,只影响对应分组的用户,而不是全部用户!

有如下三种方式!

  • 方式一:每个租户有独立的服务和独立的数据库

  • 方式二:每个租户有共享的服务和独立的数据库

  • 方式三:每个租户有共享的服务和共享的数据库

下面开始逐个说明

方式一

每个租户有独立的服务和独立的数据库!
这个在生产上一般是这么做,如下所示

640?wx_fmt=png

如图所示,用户在请求的时候会经过网关!网关根据tenant_id识别出对应的服务实例,进行转发。至于用什么当网关,我们用的是Zuul。

方式二

每个租户有共享的服务和独立的数据库!
这个在生产上一般是这么做,如下所示

640?wx_fmt=png

如图所示,用户在请求的时候会经过网关,网关将数据转发给用户服务!用户服务根据tenant_id确定该操作哪一个数据库!
OK,这个时候大家应该有一个疑问,

在项目代码中,怎么确定该操作的数据库?

好,这个就是ORM框架,动态选择数据源的问题!我以国内流行的hibernatemybatis来进行说明!
(1)
hibernate方式
在4.0版本
hibenate开始支持多租户架构,即对不同租户使用独立数据库!大家可以搜索一个配置,叫hibernate.multiTenancy。该值有一个value值为

DATABASE:一个租户一个database。 

将这项的value值设为DATABASE后,还需要给hibernate.tenant_identifier_resolver配置项赋值,即告诉hibernate,如何解析出tenant_id。以及给hibernate.multi_tenant_connection_provider配置项赋值,即告诉hibernate如何以租户特有的方式获取数据连接!

ps:看不懂的童鞋略过,懂hibernate的童鞋自然懂这个配置!
(2)
mybatis方式
mybatis没提供这种多租户架构的支持!我们必须要扩展AbstractRoutingDataSource抽象类,实现多数据源切换!
嫌麻烦?
OK,介绍你一个插件叫
mybatis plus可以实现这种动态数据源切换!
API地址都给你贴出来了:
https://mp.baomidou.com/guide/dynamic-datasource.html

ps:我只能给你点一下思路,自己去查。因为具体如何配置,都可以写一篇文章!我很不爱写这种贴配置的文章,觉得含金量不高,所以大家根据我的思路去实现即可!

方式三

每个租户有共享的服务和共享的数据库!
这个在生产上一般是这么做,如下所示

640?wx_fmt=png

如图所示,用户在请求的时候会经过网关,网关将数据转发给用户服务!用户服务根据tenant_id确定操作数据库中的哪一行记录!
老规矩,和你们说一下在ORM中难点在哪!以mybatis为例,所有的sql上都要加一句

AND t.tenant_id = ?

是不是觉得很麻烦?怎么解决呢?
(1)
hibernate方式
利用
hibernate filter配置, OR-Mapping配置文件使用Filter,可以在进行数据查询时自动过滤数据!
如下所示

<class name="User" table="user_tb">
    //省略
    <filter name="tenantFilter" condition="tenant_id = :tenantFilterParam" />
</class>

ps:看不懂的童鞋略过,懂hibernate的童鞋自然懂这个配置!
(2)
mybatis方式
mybatis中有一个东西叫做自定义Interceptor,可以拦截出你要执行的sql,然后动态拼上你的租户条件即可!
嫌麻烦?
OK,介绍你一个插件叫
mybatis plus可以实现这种多租户的更改,可以动态的解析出sql,增加上条件!
API地址都给你贴出来了:
https://mp.baomidou.com/guide/tenant.html

总结

本文介绍了服务隔离的分类,以及在生产上具体是怎么做的,希望大家有所收获!

640?wx_fmt=png


福利

扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg

2、公众号后台回复:工具,获取开源云监控工具详细资料!


推荐阅读:

  • 女神节 | 那些奋斗在IT领域的“女神”们

  • 云漫圈 | 如何给女朋友解释什么是HTTP

  • 趣挨踢 | 跳槽季,让我们一起攻克算法吧!

  • 互联网没有春天

  • 学 Python 没找对路到底有多惨?| 码书

  • 这份“插件英雄榜Top20”才是Chrome的正确打开方式!

  • 剧情反转! 创始人去世事件再爆新料, 1.8亿美元难道去了天堂?


640?wx_fmt=png喜欢就点击“好看”吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux搭建SonarQube_Oracle

文章目录一、安装声明二、下载软件2.1. sonarqube2.2. sonar-scanner-cli三、SonarQube实战3.1. 解压3.2. 配置3.3. 环境变量3.4. 启动Sonarqube3.5. 访问Sonarqube四、SonarQube 整合Oracle4.1. 创建命名空间4.2. 创建用户和赋予权限4.3. 添加数据库配置4.4. 添加Oracle数据库…

IOS – OpenGL ES 图像色调分离噪点效果 GPUImagePosterizeFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

数据解读京东上最受欢迎的面包

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a; 黄超 就职顶新集团智能科技公司 数据从业者前言什么样的面包品牌最好卖&#xff1f;什么样的口感最受欢迎&#xff1f;相信每一位喜欢面包的朋友都会关心这些问题。本文通过爬取京东面包类数据&#xff0c;一方面回…

linux 下载mysql5.7.22

一、软件下载方式 第一种方式&#xff1a; 下载到本地&#xff0c;再从本地上传服务器上 第二种方式(推荐使用)&#xff1a; 使用wget软件链接直接下载到传服务器上 二、软件下载流程 官网地址 https://dev.mysql.com/downloads/mysql/ 第一种方式&#xff1a;点击即可…

IOS – OpenGL ES 图像CGA色彩滤镜 GPUImageCGAColorspaceFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

大数据背后的无奈与焦虑:“128元连衣裙”划分矮穷挫与白富美?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a; 刘丹我们通过卖东西收集数据&#xff0c;数据是阿里最值钱的财富。——马云春天万物复苏&#xff0c;沉睡了一个冬季的爱美之心呼之欲出&#xff0c;连衣裙在姑娘的心里发了芽&#xff0c;不过这次有些意外&#x…

Linux安装SonarQube和sonar-scanner详细安装及配置

文章目录技术选型一、快速入门1.1 上传、解压、创建用户、启动1.2 创建用户(elasticsearch不能以root用户启动)&#xff0c;并赋予权限1.3 切换用户&#xff0c;启动SonarQube1.4. 浏览器验证二、配置数据库信息&#xff1a;2.1 编辑sonar.properties文件2.2 添加数据库信息&am…

IOS – OpenGL ES 图像柏林噪点/花边噪点 GPUImagePerlinNoiseFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

win10 下安装、配置、启动mysql5.7

文章目录1. 下载MYSQL2. 解压文件3. 文件移动4. 新建my.ini5. 配置环境变量6. MYSQL安装7. my.ini配置1. 下载MYSQL 前期准备&#xff1a;安装链接&#xff1a; https://blog.csdn.net/qq_28569585/article/details/79072805 https://dev.mysql.com/downloads/mysql/5.7.html#d…

要闻君说:华为与故宫携手共建智慧紫禁城;央视315曝光瞄准大数据黑市;华为官宣称自己也有操作系统了;美国夸口启动6G研发?...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 大家好&#xff01;偶是要闻君。据说刚刚过去不久的315大曝光还真是“惊掉下巴”的节奏&#xff0c;这不要闻君也精选了一条&#xff0c;随着看看&#xff1f;文/要闻君近日&#x…

IOS – OpenGL ES 图像浮雕3d效果 GPUImageEmbossFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

Spring精华问答 | Spring框架有哪些主要模块?

Spring框架是一个开源的Java平台,它提供了非常容易,非常迅速地开发健壮的Java应用程序的全面的基础设施支持。今天就让我们一起来看看关于Spring的精华问答吧。1Q&#xff1a;什么是Spring框架&#xff1f;Spring框架有哪些主要模块&#xff1f;A&#xff1a;Spring框架是一个为…

IOS – OpenGL ES 图像加亮边缘 GPUImage3x3ConvolutionFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

IDEA 注释模板

文章目录一、 java 注释1. 类注释一、 java 注释 1. 类注释 类注释模板 创建类时会自动给添加注释 /***Deacription TODO*Author ${USER}*Date ${DATE} ${TIME}*Version 1.0**/路径 【File】-->【settings】-->【Editor】-->【File and Code Templates】-->【Fi…

云有约 | 蚂蚁金服bPaaS究竟是什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;孙浩峰去年9月&#xff0c;蚂蚁金服在杭州云栖ATEC发布了分布式金融核心套件bPaaS&#xff08; Business Platform As a Service &#xff09;&#xff0c;对外开放自身沉淀的“产品合约”、“资产交换”、“资产核…

IOS – OpenGL ES 图像马赛克圆点 GPUImagePolkaDotFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

SpringCloud企业实战专栏

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具&#xff08;例如配置管理&#xff0c;服务发现&#xff0c;断路器&#xff0c;智能路由&#xff0c;微代理&#xff0c;控制总线&#xff09;。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员…

都道业务提升坑大事儿多,但英特尔云方案却说“简单”

戳蓝字“CSDN云计算”关注我们哦&#xff01;设想一下&#xff0c;当市场闪现新的业务机遇时&#xff0c;企业能够做到不担心繁杂的技术问题而做出快速响应&#xff1b;当企业无论何时都可以不用考虑工作负载怎样&#xff0c;创新想法立马可以快速转化为原型甚至产品&#xff0…

rsync 一条命令实现远程文件传输

rsync简介&#xff1a; rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或者与其他SSH、rsync主机同步。 它的特性如特点&#xff1a; 1、可以镜像保存整个目录树和文件系统。2、可以很容易做到保…