磁盘,网络,CPU等公共资源将存在竞争问题。当构建分布式体系结构时,可以连接到最初连接在一起的组件,模块和资源可以连接以实现最大的利用效率或效率或效率或效率或表现。,这很方便定位,并防止雪球和雪崩效果的传播。
隔离的常见方式是:
互联网上的许多帖子主要从框架中谈论。在这里讲话实际上是管理线程,将核心业务线程与非核心业务线程分开。可以设置不同业务所需的不同数量的线程。PONDS,让我们提起框架中的一些应用示例,例如Mainstay Multi -Thread,Tomcat请求隔离,Netty中的Dubbo线程模型。
主线程负责认证和连接。成功后,将其移交给线程的读写操作。以下代码大致如下:
主线程是一个线程。线程是一个线程池,默认为CPU*2数字,可以在我们的业务处理程序中进行简单的测试:
读取数据时打印当前线程:
可以发现这里使用的线程实际上与处理IO线程相同。
Dubbo的基本通信框架实际上使用了Netty,但Dubbo并未使用Netty IO线程来处理业务。它可以简单地在生产者端输出当前线程名称:
可以发现,业务逻辑使用不是NioEventloopGroup线程。这是因为Dubbo有自己的线程模型。您可以看到官方网站提供的型号图:
从图中可以知道,在Dubbo服务器收到请求后,它将通过调度程序(调度程序)分配给不同的线程池。
调度程序调度程序可以配置消息处理线程:
可以通过查看源代码来知道Dubbo的默认线程池是固定的ThreadReadPool,并且线程默认值为200;
tomcat是服务器的特定实现。Tomcat请求中的四种请求处理方法:BIO,AIO,NIO,APR
生物模式:阻止I/O操作,表明Tomcat使用传统的Java.i/O操作(即Java.io Bag及其子袋).TOMCAT7默认情况下由Bio Mode运行。因为每个请求必须创建一个线程以处理的线程,所以线程开销很大,因此无法处理高串联的场景,并且在多种模式下的性能也是最低的。
NIO模式:同步非块I/O操作是基于缓冲区的API,并且可以提供非块I/O操作。与传统的I/O操作相比,它具有更好的并发性能。
在Tomcat7版本之后,Tomcat将连接干预和业务处理分为两个线程池进行处理,也就是说:
您可以使用独立的线程池来维护servlet的创建。连接器的介入请求必须超过复杂的servlet处理数量。在中间,Tomcat添加了队列等待Servlet线程池到空闲。这些步骤由Tomcat内核完成。在第一阶段,不可能区分特定的业务或资源,因此我们只能进行联系。在servlet初始化之后,我们可以根据我们的业务线对独立的连接池进行划分。
这样,如果它崩溃了独立的业务或资源,它将不会影响其他业务线程,从而实现资源隔离和服务降级的效果。
使用Servlet3后,系统线程隔离变得更加灵活。可以分配核心业务队列和非核心业务队列:
这并不熟悉此过程隔离。在Linux操作系统中,文件管理系统使用文件管理系统来映射每个过程和实际物理内存的虚拟内存。在公式系统中,线程隔离不能完全隔离故障以避免雪崩。例如,线程组耗尽了内存并导致OOM,然后将不可避免地会影响其他线程组。不同的虚拟机是隔离的。
具体的操作是将业务逻辑分为多个子系统(可以参考分裂原理:REDIS群集拆分原理的AKF)以实现物理隔离。当某个子系统发生时,它不会影响其他子系统。
如果系统中的业务模块在购买时包含,高架,高存储I/O密度,高网络I/O高以及高计算I/O高,则由于此功能,因此很容易归功于高分子,因为该功能的所有资源都用尽了,从而导致响应编码甚至节点不可用。
在上面的图拆分之后,如果购物人数突然增加,则可能会影响E-商业交易功能模块,并且在损坏后不能使用其他e -Commerce模块的浏览查询。因此,在末端,要继续分开模块并服务功能微框。
您可以使用Hystrix在微服务中隔离分布式服务。他可以通过线程和信号量隔离。
这与上述线程相同,我不会详细介绍。让我简要描述Hystrix的两种隔离方法之间的区别:
可以直接返回线程池隔离支持以支撑。当线程池到达MaxSize时,请求将触发熔融每个服务的后备接口。每种服务都可以不同步或同步。通话方法很大。大量线程的上下文开关很容易导致机器负载高信号量隔离。如果被阻止,只能通过调用协议(例如套接字超时)来支持它。该请求将通过信号量计数器同步触发后备。它不支持异步小。只是说许多线程过来,获取信号量并让其继续执行。Fallback回调是一个反击。
最重要的是,呼叫号码已同步,也就是说,每个呼叫必须阻止呼叫聚会的线程,直到结果返回为止。这导致无法访问的超时。
官方网站对信号隔离的描述
了解两个点:
隔离计算机室有两个主要目的。一方面,不同区域中的用户数据被隔离为不同的区域,例如湖北服务器中的湖北部数据,Zhejiang的服务器等。密集计算和高I/O(网络)的问题相当于流量等于流量。在各个领域。
另一方面,计算机室的隔离也是为了确保安全性。所有数据都放在一个地方。如果发生自然灾害或爆炸,数据将丢失。因此,多机器人房间或冷备份中的机器房间是微服务数据异质性的放大版本。
如果计算机室级别存在问题,则可以通过智能DNS,HTTPDNS和负载平衡等技术技术快速切换它,以便区域用户应尽量不接受影响。
通过主要和从属模式,将分开的数据存储服务(例如MySQL,REDIS和其他数据)分开读写。当数据不可用时,数据也可以通过重试机制暂时读取其他节点。
当多节点除外,除了替代方案之外,您还可以进行数据中心。所有数据均同时同步到本地计算机室CRUD中的数据中心。数据中心将将数据分发给其他计算机房间。当您使用它时,您可以尝试连接到其他本地机房或数据中心。
主要想法是在Edge服务器中分发一些静态资源,因为每日访问中有许多资源不会更改,因此每次都无需从主服务器中获得。您可以将这些数据保存在边缘服务器上以减少主服务器的压力。
有一个非常详细的说明参考:全球负载平衡和CDN内容分布
建立适当的规则并将爬虫转移到其他群集。
目前,我们已经开发了API接口,其中大多数是打开的API接口。换句话说,只要有人获得此接口,任何人都可以通过此API接口获取数据。如果这是对网络爬网的快速请求和获得更多数据,它不仅会影响服务器。我们的API接口以开发同一网站。打开平台的API接口调用需要限制其频率以节省服务器资源并避免恶意频繁调用。在大型互联网项目中,Web服务和网络爬网的访问流量可以到达可以到达Web服务和网络爬网访问流量的访问流量。5:1,甚至更高,由于爬行动物流量高,有时有时会耗尽资源,服务不可用。解决方案策略大约是两个方面:
首先是当前限制的频率,限制访问权限;
第二个是将爬行动物的请求转发到固定位置。
如果要区分访问是否是爬网,则可以简单地使用NGINX分析UA处理
用户代理称为UA,即用户代理。通常,我们使用浏览器访问网站。在日志的日志中,我们的浏览器是UA。
禁止访问特定的UA。例如,最近的网站A复制了公司B主站B的内容。除了不同的域名,内容,图片等完全是我们主站的内容。有两种可能性:
一个是:它使用爬网捕获公司B的内容,并将其放在自己的服务器上显示;
另一个是:通过访问公司的主站B,域名A是被盗的,交通被欺骗了。
无论如何,禁止这种行为。有两种解决方法:
1)禁止IP
2)禁止UA
从NGINX日志中,访问者的代理IP经常更改,但访问UA是固定的,因此可以禁止使用UA。
Nginx不仅可以处理UA分离流量,而且还可以通过更强大的开放式来完成更复杂的逻辑,以实现交通网关和软防火墙。