- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
亿级流量架构之资源隔离思路与方法
常见的资源,例如磁盘、网络、CPU等等,都会存在竞争的问题,在构建分布式架构时,可以将本来连接在一起的组件、模块、资源拆分开来,以便达到最大的利用效率或功能。资源隔离之后,当某一部分组件消灭毛病时,可以隔离毛病,便利定位的同时,阻挠传播,避开消灭滚雪球以及雪崩效应。
常见的隔离方式有:
线程隔离
进程隔离
集群隔离
机房隔离
读写隔离
动静隔离
爬虫隔离
等等
线程隔离
网络上很多帖子,大多是从框架开头聊的,这儿说人话其实就是对线程进行管理,把核心业务线程与非核心业务线程隔开,不同的业务需要的线程数量不同,可以设置不同的线程池,来举一些框架中应用的例子,例如Netty中的主从多线程、Tomcat恳求隔离、Dubbo线程模型。
Netty主从程模型
主线程担任认证,连接,成功之后交由从线程担任连接的读写操作,大致如下代码:
EventLoopGroup bossGroup = new NioEventLoopGroup(1);EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup);
主线程是一个单线程,从线程是一个默认为cpu*2个数的线程池,可以在我们的业务handler中做一个简约测试:
public void channelRead(ChannelHandlerContext ctx, Object msg) { System.out.println(thread name= + Thread.currentThread().getName() + server receive msg= + msg); }
服务端在读取数据的时候打印一下当前的线程:
thread name=nioEventLoopGroup-3-1 server receive msg=...
可以发觉这里使用的线程其实和处理io线程是同一个;
Dubbo线程隔离模型
Dubbo的底层通信框架其实使用的就是Netty,但是Dubbo并没有直接使用Netty的io线程来处理业务,可以简约在生产者端输出当前线程名称:
thread name=DubboServerHandler-15:20880-thread-2,...
可以发觉业务规律使用并不是nioEventLoopGroup线程,这是由于Dubbo有本人的线程模型,可以看看官网供应的模型图:
由图可以晓得,Dubbo服务端接收到恳求后,通过调度器(Dispatcher)分发到不同的线程池,也简约做一些关于调度器(Dispatcher)总结:
Dispatcher调度器可以配置消息的处理线程:
all?全部消息都派发到线程池,包括恳求,响应,连接大事,断开大事,心跳等。
direct?全部消息都不派发到线程池,全部在 IO 线程上直接执行。
message?只要恳求响应消息派发到线程池,其它连接断开大事,心跳等消息,直接在 IO 线程上执行。
execution?只要恳求消息派发到线程池,不含响应,响应和其它连接断开大事,心跳等消息,直接在 IO 线程上执行。
connection?在 IO 线程上,将连接断开大事放入队列,有序逐一执行,其它消息派发到线程池。
通过看源码可以晓得,Dubbo默认使用的线程池是FixedThreadPool,线程数默认为200;
Tomcat恳求线程隔离
Tomcat是Servelet的具体实现,在Tomcat恳求支持四种恳求处理方式分别为:BIO、AIO、NIO、APR
BIO模式:堵塞式I/O操作,表示Tomcat使用的是传统Java。I/O操作(即Java.io包及其子包)。Tomcat7以下版本默认情况下是以bio模式运转的,由于每个恳求都要创建一个线程来处理,线程开销较大,不能处理高并发的场景,在几种模式中功能也最低。
NIO模式:同步非堵塞I/O操作,是一个基于缓冲区、并能供应非堵塞I/O操作的API,它拥有比传统I/O操作具有更好的并发功能。关于NIO,可以参考我这篇博客:NIO非堵塞网络编程原理
在Tomcat7版本之后,Tomcat把连接介入和业务处理拆分成两个线程池来处理,即:
可以使用独立的线程池来维护servlet的创建。连接器connector能介入的恳求确定比业务简单的servlet处理的个数要多,在两头,Tomcat加入了队列,来等待servlet线程池空闲。这两步是Tomcat内核完成的,在一阶段无法区分具体业务或资源,所以只能在连接介入,servlet初始化完成后我们
您可能关注的文档
- Sentinel 实现限流,竟是如此的简单!.docx
- Sentinel流量控制和熔断降级执行流程与源码分析.docx
- Spark性能优化实战手册.pdf.docx
- Spring Boot 无侵入式 实现API接口统一JSON格式返回.docx
- Spring Boot 最流行的 条实践解读,值得收藏!.docx
- SpringBoot 源码解析——SpringBoot 中的日志基础服务.docx
- SpringBoot 源码解析——源码模块功能分析.docx
- SpringBoot中的全局异常处理.docx
- SpringBoot源码解析——BeanDefinitionLoader 源码分析.docx
- “” 是如何支撑百万 QPS 的?.docx
最近下载
- 发育生物学教学课件08-1 原肠作用.ppt VIP
- 【中考真题】2025年安徽省中考数学试题(含解析).docx VIP
- 2025年职业资格大学辅导员笔试-笔试参考题库含答案解析(5套试卷).docx VIP
- 一种电池模组手动入箱定位及导向机构.pdf VIP
- 边立新:《路德维希·费尔巴哈和德国古典哲学的终结》导读.ppt VIP
- 纳米氢氧化镁晶须的制备及其分散性研究.docx VIP
- 肥厚型心肌病护理查房.pptx VIP
- 2025年内河码头行业现状分析报告及未来五至十年发展前景预测报告.docx
- 领导德性量表的编制.docx VIP
- 石化受限空间作业标准化管理方案-图文并茂版.pptx VIP
文档评论(0)