barriers / 阅读 / 详情

06.Nacos Feign 负载均衡

2023-08-01 20:42:01
共1条回复
皮皮

Feign 是一个声明式的伪 HTTP 客户端,它使得写 HTTP 客户端变得更简单。使用 Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用 Feign 注解和 JAX-RS 注解。Feign 支持可插拔的编码器和解码器。Feign 默认集成了 Ribbon,Nacos 也很好的兼容了 Feign,默认实现了负载均衡的效果

在 hello-spring-cloud-alibaba-consumer 项目中增加 org.springframework.cloud:spring-cloud-starter-openfeign 依赖

通过 @EnableFeignClients 注解开启 Feign 功能

创建业务结构,通过 @FeignClient("服务名") 注解来指定调用哪个服务

通过浏览器访问 http://localhost:8080/feign/echo/hi

负载主机可以提供很多种负载均衡方法,也就是我们常说的调度方法或算法

Round Robin: 这种方法会将收到的请求循环分配到服务器集群中的每台机器,即有效服务器。如果使用这种方式,所有的标记进入虚拟服务的服务器应该有相近的资源容量 以及负载形同的应用程序。如果所有的服务器有相同或者相近的性能那么选择这种方式会使服务器负载形同。基于这个前提,轮循调度是一个简单而有效的分配请求 的方式。然而对于服务器不同的情况,选择这种方式就意味着能力比较弱的服务器也会在下一轮循环中接受轮循,即使这个服务器已经不能再处理当前这个请求了。 这可能导致能力较弱的服务器超载。

Weighted Round Robin: 这种算法解决了简单轮循调度算法的缺点:传入的请求按顺序被分配到集群中服务器,但是会考虑提前为每台服务器分配的权重。管理员只是简单的通过服务 器的处理能力来定义各台服务器的权重。例如,能力最强的服务器 A 给的权重是 100,同时能力最低的服务器给的权重是 50。这意味着在服务器 B 接收到第一个 请求之前前,服务器 A 会连续的接受到 2 个请求,以此类推。

Least Connection: 以上两种方法都没有考虑的是系统不能识别在给定的时间里保持了多少连接。因此可能发生,服务器 B 服务器收到的连接比服务器 A 少但是它已经超载,因为 服务器 B 上的用户打开连接持续的时间更长。这就是说连接数即服务器的负载是累加的。这种潜在的问题可以通过 “最少连接数” 算法来避免:传入的请求是根据每 台服务器当前所打开的连接数来分配的。即活跃连接数最少的服务器会自动接收下一个传入的请求。接本上和简单轮询的原则相同:所有拥有虚拟服务的服务器资源 容量应该相近。值得注意的是,在流量率低的配置环境中,各服务器的流量并不是相同的,会优先考虑第一台服务器。这是因为,如果所有的服务器是相同的,那么 第一个服务器优先,直到第一台服务器有连续的活跃流量,否则总是会优先选择第一台服务器。

Source IP Hash: 这种方式通过生成请求源 IP 的哈希值,并通过这个哈希值来找到正确的真实服务器。这意味着对于同一主机来说他对应的服务器总是相同。使用这种方式,你不需要保存任何源 IP。但是需要注意,这种方式可能导致服务器负载不平衡。

Least Connection Slow Start Time: 对最少连接数和带权重的最小连接数调度方法来说,当一个服务器刚加入线上环境是,可以为其配置一个时间段,在这段时间内连接数是有限制的而且是缓慢 增加的。这为服务器提供了一个‘过渡时间"以保证这个服务器不会因为刚启动后因为分配的连接数过多而超载。这个值在 L7 配置界面设置。

Weighted Least Connection: 如果服务器的资源容量各不相同,那么 “加权最少连接” 方法更合适:由管理员根据服务器情况定制的权重所决定的活跃连接数一般提供了一种对服务器非常 平衡的利用,因为他它借鉴了最少连接和权重两者的优势。通常,这是一个非常公平的分配方式,因为它使用了连接数和服务器权重比例;集群中比例最低的服务器 自动接收下一个请求。但是请注意,在低流量情况中使用这种方法时,请参考 “最小连接数” 方法中的注意事项。

Agent Based Adaptive Balancing: 除了上述方法之外,负载主机包含一个自适用逻辑用来定时监测服务器状态和该服务器的权重。对于非常强大的 “基于代理的自适应负载均衡” 方法来说,负 载主机以这种方式来定时检测所有服务器负载情况:每台服务器都必须提供一个包含文件,这个文件包含一个 0~99 的数字用来标明改服务器的实际负载情况 (0 = 空前,99 = 超载,101 = 失败,102 = 管理员禁用),而服务器同构 http get 方法来获取这个文件;同时对集群中服务器来说,以二进制文件形式提供自身负载情况也是该服务器工作之一,然而,并没有限制服务器如何计算自身的负载 情况。根据服务器整体负载情况,有两种策略可以选择:在常规的操作中,调度算法通过收集的服务器负载值和分配给该服务器的连接数的比例计算出一个权重比 例。因此,如果一个服务器负载过大,权重会通过系统透明的作重新调整。和加权轮循调度方法一样,不正确的分配可以被记录下来使得可以有效的为不同服务器分 配不同的权重。然而,在流量非常低的环境下,服务器报上来的负载值将不能建立一个有代表性的样本;那么基于这些值来分配负载的话将导致失控以及指令震荡。 因此,在这种情况下更合理的做法是基于静态的权重比来计算负载分配。当所有服务器的负载低于管理员定义的下限时,负载主机就会自动切换为加权轮循方式来分 配请求;如果负载大于管理员定义的下限,那么负载主机又会切换回自适应方式。

Fixed Weighted: 最高权重只有在其他服务器的权重值都很低时才使用。然而,如果最高权重的服务器下降,则下一个最高优先级的服务器将为客户端服务。这种方式中每个真实服务器的权重需要基于服务器优先级来配置。

Weighted Response: 流量的调度是通过加权轮循方式。加权轮循中所使用的权重是根据服务器有效性检测的响应时间来计算。每个有效性检测都会被计时,用来标记它响应成功花 了多长时间。但是需要注意的是,这种方式假定服务器心跳检测是基于机器的快慢,但是这种假设也许不总是能够成立。所有服务器在虚拟服务上的响应时间的总和 加在一起,通过这个值来计算单个服务物理服务器的权重;这个权重值大约每 15 秒计算一次。

相关推荐

负载均衡的详细信息

算法提供多个WAN ports可作多种负载平衡算法则,企业可依需求自行设定负载平衡规则,而网络存取可参照所设定的规则,执行网络流量负载平衡导引。算法则有:◎ 依序Round Robin◎ 比重Weighted Round Robin◎ 流量比例Traffic◎ 使用者端User◎ 应用类别Application◎ 联机数量Session◎ 服务类别Service◎ 自动分配Auto ModeInbound Load Balancing内建Inbound Load Balance 功能,可让企业透过多条ISP线路,提供给浏览者更实时、快速与稳定不断线的因特网在线服务;Inbound负载平衡算法包括:Round Robin/ Weighted Round Robin/Auto Back Up;功能内建DNS服务器,可维护多个网域(domain),每个网域又可以新增多笔纪(A/CNAME/MX),达到Inbound Load Sharing的功能。■Server Load BalancingAboCom服务器负载均衡提供了服务级(端口)负载均衡及备援机制。主要用于合理分配企业对外服务器的访问请求,使得各服务器之间相互进行负载和备援。AboCom服务器负载与服务器群集差异:一旦有服务器故障,群集技术只对服务器的硬件是否正常工作进行检查;AboCom服务器负载则对应用服务端口进行检查,一旦服务器的该应用服务端口异常则自动将访问请求转移到正常的服务器进行响应。■VPN Trunk 负载均衡支持同时在多条线路上建立VPN连接,并对其多条VPN线路进行负载。不仅提高了企业总部与分支机构的VPN访问速度,也解决了因某条ISP线路断线造成无法访问的问题。进行VPN负载均衡时VPN访问数据将同时在多条VPN线路上进传输。当一条VPN线路故障时,所有流量将自动切换到正常的VPN线路上进行传输。QoS(带宽管理)个人带宽管理:可实现每个人的网络带宽分配、管理,可以设置保证带宽用以保障个人应用不受整体环境影响。每日带宽配额:可以针对个人、群组或部门等分别设置带宽配额,这样可以合理利用带宽资源,杜绝资源的浪费,也杜绝员工干与工作无关的事,如看在线电影,下载大容量文件资料等等。内容过滤网络信息过滤:采用关键字进行内容过滤,可保护内网不受色情、暴力、反动、迷信等信息的入侵和干扰。聊天软件、P2P软件控制:可针对QQ、MSN、YAHOO、SKYPE、GOOGLE TALK等聊天通讯软件进行管控和限制,还可限制或禁止如BT、电驴、迅雷等P2P软件的使用。SSL VPN提供最佳远程安全存取解决方案,企业仅需透过最熟悉的网络浏览器接口(Web Browser),即可轻松连接到企业内部网络;即使未携带企业管控的笔记型计算机,利用家用计算机、公用计算机、PDA等,甚至是通过无线局域网络,都不影响安全联机的建立。其他功能实时图形化统计分析:记录所有网络封包的进出流量信息,可用做网络使用监控及统计记录;提供事件警报 (Event Alert)及日志记录管理功能;支持3A认证:Authentication、Authorization、Accounting,即认证、授权、审计;交换机联合防御:利用指定交换机进行联合防护,提升整个网络的安全系数和安全强度;HA双机热备:支持双机备援,防止设备故障造成网络瘫痪,提升整个网络的可靠性;远程唤醒(Wake on Lan):远程启动计算机。 软/硬件软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。软件解决方案缺点也较多,因为每台服务器上安装额外的软件运行会消耗系统不定量的资源,越是功能强大的模块,消耗得越多,所以当连接请求特别大的时候,软件本身会成为服务器工作成败的一个关键;软件可扩展性并不是很好,受到操作系统的限制;由于操作系统本身的Bug,往往会引起安全问题。硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。负载均衡器有多种多样的形式,除了作为独立意义上的负载均衡器外,有些负载均衡器集成在交换设备中,置于服务器与Internet链接之间,有些则以两块网络适配器将这一功能集成到PC中,一块连接到Internet上,一块连接到后端服务器群的内部网络上。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵。本地/全局负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡),本地负载均衡是指对本地的服务器群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。本地负载均衡能有效地解决数据流量过大、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免服务器单点故障造成数据流量的损失。其有灵活多样的均衡策略把数据流量合理地分配给服务器群内的服务器共同负担。即使是再给现有服务器扩充升级,也只是简单地增加一个新的服务器到服务群中,而不需改变现有网络结构、停止现有的服务。全局负载均衡主要用于在一个多区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度,也可用于子公司分散站点分布广的大公司通过Intranet(企业内部互联网)来达到资源统一合理分配的目的。全局负载均衡有以下的特点:实现地理位置无关性,能够远距离为用户提供完全的透明服务。除了能避免服务器、数据中心等的单点失效,也能避免由于ISP专线故障引起的单点失效。解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量。 负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。路由模式(推荐)路由模式的部署方式如上图。服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。桥接模式桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。参见下图:由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。服务直接返回模式如上图,这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。 基础网络配置:AX1000(config)#clock timezone Asia/Shanghai//设置时区AX1000(config)#vlan 10//创建VLAN10AX1000(config-vlan:10)# untagged ethernet 1 to 2//划分接口到VLAN10中AX1000(config-vlan:10)# router-interface ve 10 //设置路由接口为Ve10,后面会给Ve10 配置地址的,这点和传统的二、三层交换不一样。AX1000(config-vlan:10)# name “Web-Server-Outside”//也可以设置的备注AX1000(config-vlan:10)#end//完成VLAN10的内容,和Cisco的命令一样。AX1000(config)#vlan 20AX1000(config-vlan:20)# untagged ethernet 3 to 4AX1000(config-vlan:20)# router-interface ve 20AX1000(config-vlan:20)# name “Web-Server-Inside”AX1000(config-vlan:10)#endAX1000(config)#interface ethernet 1//进入eth1口AX1000(config-if:ethernet1)# enable //激活该接口AX1000(config-if:ethernet1)# interface ethernet 2AX1000(config-if:ethernet2)# enableAX1000(config-if:ethernet2)#interface ethernet 3AX1000(config-if:ethernet3)# enableAX1000(config-if:ethernet3)#interface ethernet 4AX1000(config-if:ethernet4)# enableAX1000(config-if:ethernet4)#endAX1000(config)#interface ve 10//进入Ve10接口并为其配置地址AX1000(config-if:ve10)# ip address 116.255.188.2 255.255.255.0AX1000(config-if:ve10)# ip nat outside//这和传统的路由交换设置一直,是需要做NAT处理的。AX1000(config-if:ve10)#endAX1000(config)#interface ve 20AX1000(config-if:ve20)# ip address 192.168.1.1 255.255.255.0AX1000(config-if:ve20)# ip nat insideAX1000(config-if:ve20)#end首先添加服务器:AX1000(config)#slbserver Web1192.168.1.11//添加服务器Web1,其IP地址为192.168.1.11AX1000(config-real server)#port 80tcp//指定服务器开放的端口及端口类型AX1000(config-real server-node port)#exitAX1000(config-real server)#exitAX1000(config)#slb server Web2192.168.1.12AX1000(config-real server)#port 80tcpAX1000(config-real server-node port)#end检查添加的服务器状态是否正常:AX1000#showslbserver //查看SLB信息Total Number of Services configured: 2Current = Current Connections, Total = Total ConnectionsFwd-pkt = Forward packets, Rev-pkt = Reverse packetsService Current Total Fwd-pkt Rev-pkt Peak-conn State—————————————————————————————Web1:80/tcp 0 0 0 0 0 UpWeb1: Total 0 0 0 0 0 UpWeb2:80/tcp 0 0 0 0 0 UpWeb2: Total 0 0 0 0 0 Up发现全Up以后,则表示服务器的健康检查通过。默认的健康检查方式是Ping检查服务器的存活状态。只有服务器状态为Up时,负载均衡器才会把会话分发给该服务器处理,从而最大可能性的保障用户的请求得到服务器的正常应答,这也是负载均衡器的基本功能之一。在很多时候服务器作了安全策略,比如说防止Icmp的报文等等,就需要调整服务器的健康检查方式,具体内容后期提供。创建服务组AX1000(config)#slb service-group WebtcpAX1000(config-slbsvc group)#member Web1:80AX1000(config-slbsvc group)#member Web2:80AX1000(config-slbsvc group)#end验证服务组工作正常AX1000#show slb service-groupTotal Number of Service Groups configured: 2Current = Current Connections, Total = Total ConnectionsFwd-p = Forward packets, Rev-p = Reverse packetsPeak-c = Peak connectionsService Group NameService Current Total Fwd-p Rev-p Peak-c——————————————————————————-*Web State:All UpWeb1:80 0 0 0 0 0Web2:80 0 0 0 0 0创建虚拟服务器:其地址为:116.255.188.235,即对外公布的真实的服务地址AX1000(config)#slbvirtual-server VIP-WEB 116.255.188.235//创建VIPAX1000(config-slbvserver)#port 80http//指定VIP对公共用户开放的端口及端口类型,Web页面选择httpAX1000(config-slbvserver-vport)#service-group Web//该端口对应的服务组为WebAX1000(config-slbvserver-vport)#end查看虚拟服务器状态AX1000#showslbvirtual-serverTotal Number of Virtual Services configured: 1Virtual Server Name IP Current Total Request Response PeakService-Group Service connection connection packets packets connection—————————————————————————————-*VIP-WEB(A) 116.255.188.235 Upport 80 http 0 0 0 0 0Web 80/http 0 0 0 0 0Total received conn attempts on this port: 0域名的解析记录已设置为116.255.188.235,所以只要直接访问即可看到效果。验证:AX1000#show session | in 116.255.188.235//查看当前设备上访问116.255.188.235的详细会话Traffic Type Total——————————————–TCP Established 17TCP Half Open 8UDP 0Non TCP/UDP IP sessions 0Other 681295Reverse NAT TCP 0Reverse NAT UDP 0Free Buff Count 0Curr Free Conn 2031387Conn Count 6926940Conn Freed 6926870TCP SYN Half Open 0Conn SMP Alloc 103137Conn SMP Free 102986Conn SMP Aged 0Conn Type 0 Available 6225920Conn Type 1 Available 3112960Conn Type 2 Available 2015155Conn Type 3 Available 778240Conn SMP Type 0 Available 6225920Conn SMP Type 1 Available 3112960Conn SMP Type 2 Available 1572712Conn SMP Type 3 Available 778240Prot Forward Source Forward Dest Reverse Source Reverse Dest Age Hash Flags—————————————————————————————————————-Tcp 110.152.232.139:1927 116.255.188.235:80 192.168.1.11:80 110.152.232.139:80 0 1 OSTcp 110.152.232.139:1927 116.255.188.235:80 192.168.1.12:80 110.152.232.139:80 0 1 OS类型 源地址 目的地址服务器地址 服务器回报地址
2023-08-01 19:19:361

C++在函数定义的时候在后面加上=delete是什么意思例如:RoundRobin(const RoundRobin& rhs) = delete;

即将该函数定义成已删除的函数,任何试图调用它的行为将产生编译期错误。是C++11标准的内容。
2023-08-01 19:20:181

Kafka数据消费

消费者负责从订阅的主题上拉取消息,消费组是逻辑概念。一个消费者只属于一个消费组,一个消费组包一个或多个消费者。当消息发布到主题后,会被投递到每个消费组,但每个消费组中只有一个消费者能消费给消息。 消费者如何知道该消费哪个分区?当消费组内消费者个数发生变化时,分区分配是如何变化的呢? 按照消费者总数和分区总数进行整除运算来获得一个跨度,然后将分区按照跨度进行平均分配, 以保证分区尽可能均匀地分配给所有的消费者。对于 每一个主题 该策略会将消费组内所有的消费者按照名称的字典序排序然后为每个消费者划分固定的分区范围,如果不够平均分配,那么字典序靠前的消费者会被多分配一个分区。 假设n=分区数/消费者数量,m=分区数%消费者数量,那么前m个消费者每个分配n+1分区,后面的每个消费者分配n个分区。 如图所示主题中共有7个分区,此时消费组内只有一个消费者C0,C0订阅7个分区。 随着消费组内消费者不断加入,分区逐渐从C0分配到C1~C6,当最后一个消费者C7加入后,此时总共有8个消费者但是只有7个分区,因此C7由于分配不到分区而无法消费任何消息。 消费者并非越多越好,消费者数量应小于等于分区数量,否则会造成资源的浪费 缺点: 当一个消费组订阅两个分别包含四个分区的主题时,分区分配结果如下,比较均匀。 但当两个主题各有3个分区时,则会出现如下分区不均的问题。类似情况扩大的话,可能出现消费者过载问题。 将消费组内所有消费者及消费者订阅的所有主题的分区按照字典序排序,然后通过轮询方式将分区依次分配给每个消费者。如果消费组内消费者的订阅信息都是相同的,那么分区分配会比较均匀。如一个消费组两个消费者,分别订阅两个都有3的分区的主题,如图。 但是当消费组内消费者的订阅信息不同时,则会出现分配不均问题。如图,假设消费组内有三个消费者,主题1/2/3分别有1/2/3个分区,C0订阅主题1,C1订阅主题1和2,C2订阅主题1/2/3,分区结果将会如下图所示。 后来引入的策略,主要目的: 假设三个消费者,订阅了4个主题,每个主题有两个分区,那么初始分区分配结果如下: 乍一看,跟RoundRobin分配策略结果相同,但此时如果C1下线,那么消费组会执行再均衡操作,重新分配消息分区。如果是RoundRobin策略,分配结果如下: 而如果是Sticky分配策略,则结果如下: StickyAssignor保留了上一次对C0和C2的分配结果,将C1的分区分配给C0和C2使其均衡。 如果发生分区重分配,那么对于同一个分区而 ,有可能之前的消费者和新指派的消费者不是同一个,之前消费者进行到一半的处理还要在新指派的消费者中再次复现一遍,造成重复消费。StickyAssignor分配策略如同其名称中的"sticky"一 样,让分配策略具备的“黏性”,尽可能地让前后两次分配相同,进而减少系统资源的损耗及其他异常情况的发生。 再来看下,消费者订阅信息不相同的情况,拿RoundRobinAssignor中的实例来说。 假设消费组内有三个消费者,主题1/2/3分别有1/2/3个分区,C0订阅主题1,C1订阅主题1和2,C2订阅主题1/2/3,RoundRobinAssignor分区结果将会如下图所示。 而采用StickyAssignor时,分区分配结果如下: 若此时C0下线,RoundRobinAssignor重分配的结果如下: 而StickyAssignor重分配结果如下: 综上: StickyAssignor分配策略的优点就是可以使分区重分配具备 “黏性”,减少不必要的分区移动(一个分区剥离之前的消费者 ,转而分配给另一个新的消费者)。 Kafka中的消息消费是基于拉模式。 Kafka每次拉取一组消息,每条消息的格式如下: 在每次拉取方法时,它返回的是还没有被消费过的消息集。要实现这个功能,就需要知道上次消费时的消费位移,消费者在消费完消息后要进行消费位移提交动作,且消费位移要进行持久化,消费位移保存在__consumer_offsets主题中。 当前拉取消息的最大offset为x,消费者消费完成提交位移的是offset其实为x+1,表示下次拉取消息的起始位置。 自动提交 默认采用自动提交,默认每隔5s会将拉取到的每个分区的最大的消息位移进行提交。真正的提交动作是在拉取消息的逻辑完成,每次拉取消息前会判断是否可以进行位移提交,如果可以则提交上一次的位移。这里会有两个问题,如下图所示。 重复消费:当前拉取消息【x+2,x+7】,当前消费到X+5,在提交消费位移前,消费者宕机;新的消费者还是会从X+2开始拉取消息, 因此导致重复消费。 消息丢失:当前拉取消息【x+2,x+7】,当前消费X+5,到下次拉取的时候,消费位移已经提交为X+8,若此时消费者宕机,新的消费者会从X+8处开始消费,导致X+5 ~ X+7的消息没有被消费,导致消息的丢失。 手动提交 同步提交和异步提交。 同步提交默认提交本次拉取分区消息的最大偏移量,如本次拉取【X+2,X+7】的消息,同步提交默认提交X+8的位置;当时同步提交也可指定提交的偏移量,比如消费一条提交1次,因为提交本身为同步操作,所以会耗费一定的性能。 同步提交也会导致重复消费的问题,如消费完成后,提交前消费者宕机。 异步提交消费者线程不会被阻塞,使性能得到增强,但异步提交失败重试可能会导致提交位移被覆盖的问题,如本次异步提交offset=X失败,下次异步提交offset=X+y成功;此时前一次提交重试再次提交offset=x,如果业务上没有重试校验,会导致offset被覆盖,最终导致重复消费。 当新的消费组建立、消费者订阅新的主题或之前提交的位移信息因为过期被删除等,此时查不到纪录的消费位移。Kafka可配置从最新或从最早处开始消费。 Kafka还支持从特定位移处开始消费,可以实现回溯消费,Kafka内部提供了Seek()方法,来重置消费位移。 当需要回溯指定时间后的消息时,可先用offsetsForTimes方法查到指定时间后第一条消息的位移,然后再用seek重置位移。 分区的所属权从一个消费者转移到另一消费者的行为,它为消费组具备高可用性和伸缩性提供保障,使我们可以既方便又安全地删除或添加消费者。 Kfaka提供了组协调器(GroupCoordinator)和消费者协调器(ConsumerCoordinator),前者负责管理消费组,后者负责与前者交互,两者最重要的职责就是负责再均衡的操作。 举例说明,当消费者加入消费组时,消费者、消费组和组协调器之间一般会经历以下几个阶段。 第一阶段(FIND COORDINATOR) 消费者需要确定它所属的消费组对应的GroupCoordinator所在的broker并创建与该broker 相互通信的网络连接。 消费者会向集群中的某个节点发送FindCoordinatorRequest请求来查找对应的组协调器。 Kafka根据请求中的coordinator_key(也就是groupld )的哈希值计算__consumer_offsets中的分区编号,如下图所示。找到对应的分区之后,在寻找此分区leader副本所在的broker节点,该节点即为当前消费组所在的组协调器节点。 消费组最终的分区分配方案及组内消费者所提交的消费位移信息都会发送给该broker节点。该broker节点既扮演GroupCoordinato的角色又扮演保存分区分配方案和组内消费者位移的角色,这样可以省去很多不必要的中间轮转所带来的开销。 第二阶段(JOIN GROUP) 在成功找到消费组所对应的GroupCoordinator之后就进入加入消费组的阶段,在此阶段的 消费者会向GroupCoordinator发送JoinGroupRequest请求,并处理响应。 组协调器内部主要做了以下几件事: 选举消费组的****leader 如果当前组内没有leader,那么第一个加入消费组的则为leader。如果leader挂掉,组协调器会从内部维护的HashMap(消费者信息,key为member_id)中选择第一个key作为新的leader。 选举分区分配策略 前面说的每个消费者可能会上报多个分区分配策略,选举过程如下: 第三阶段(SYNC GROUP) leader消费者根据在第二阶段中得到的分区分配策略来实施分区分配,然后将分配结果同步到组协调器。各个消费者会向组协调器发送SyncGroupRequest请求来同步分配方案。 请求结构如图,leader发送的请求才会有group_assignment。 其中包含了各个消费者对应的具体分配方案,member_id表示消费者的唯一标识,而 member_assignment是与消费者对应的分配方案,如图 消费者收到具体的分区分配方案后,会开启心跳任务,定期向组协调器发送心跳请求确定彼此在线。 第四阶段(HEARTBEAT) 在正式消费之前,消费者还需要确定拉取消息的起始位置。假设之前已经将最后的消费位移提交成功,那么消费者会请求获取上次提交的消费位移并从此处继续消费。 心跳线程是一个独立的线程,可以在轮询消息的空档发送。如果消费者停发送心跳的时间足够长,组协调器会认为这个消费者已经死亡,则触发一次再均衡行为。
2023-08-01 19:20:261

spring boot loadbalancer 加载过程

open feign3.0开始就不支持Ribbon了 所以只能用loadbalancer spring-cloud-loadbalancer 官网文档 首先说明一下 spring cloud loadbalancer 是可以单独使用的 但通常我们会和consul等注册中心一起使用 这样我们就不用写死配置了(配置集群里面有哪些服务) 还有这个版本与OpenFeign 和 consul配合使用是不需要做任何配置的 并且spring-cloud-loadbalancer 是 spring-cloud-commons的一个子项目 spring.factories 功能: 首先在spring-cloud-commons包下也有个叫LoadBalancerAutoConfiguration的配置类,这个配置类会在它前面执行 功能: 请先读一下这篇文章: spring boot open feign 客户端调用过程 会知道OpenFeign发起请求前会调用BlockingLoadBalancerClient.choose选择一个服务端 上面也提到了BlockingLoadBalancerClient 它的加载过程。 接下来看看它的 实现 从 loadBalancerClientFactory 里取得服务列表 但我们提到了,我们并没有主动的创建服务器列表。 而是通过consul取得的,那么是什么时候取得的呢? 读一下: spring boot consul 客户端加载过程 我们能知道 consul是在web服务器启动完成后,才向注册中心发起注册的 也就是在这之前LoadBalancerClientFactory 一直是空的 所以是调用choose方法的时候才去拉取consul 上的服务器列表 所以我们看下:ReactiveLoadBalancer.choose 它是一个接口,看一下它有哪些实现 共两个实现: 1,RoundRobinLoadBalancer 2,RandomLoadBalancer 这里的ReactiveLoadBalancer实际上是RoundRobinLoadBalancer(默认的) 但我们在 spring-cloud-loadbalancer的spring.factories 并没有发现RoundRobinLoadBalancer的初始化 不过我们发现它是从 loadBalancerClientFactory里取出来的 继承自:NamedContextFactory:真正创建ReactiveLoadBalancer对象 实现了:ReactiveLoadBalancer.Factory。看名字就知道,它就是用来创建ReactiveLoadBalancer 的,但它是委托给了NamedContextFactory 来做的 看一下NamedContextFactory是怎么做的 可以看到 先getContext(name) 没有的化就createContext 然后就是这句 defaultConfigType是LoadBalancerClientConfiguration context将LoadBalancerClientConfiguration注册到上下文环境中 然后context.refresh(); LoadBalancerClientConfiguration的对象就创建出来了(spring.fatories里是没有它的) 可以看到 这里创建了 RoundRobinLoadBalancer 为什么要用NamedContextFactory这样创建 因为,道理很简单,spring-cloud-balancer要为每一个rpc客户端创建一个自己的上下文环境包含自己的配置 用服务名去取,这个serviceId在OpenFeign, Loadbalancer,Consul里是一致的 然后这里还创建了ServiceInstanceListSupplier 看这句,创建这个类的时候用到了DiscoveryClient,还把它们缓存了起来 这里context:ConfigurableApplicationContext包含ConsuDiscoveryClient 这里用到了BiFunciton,大家可以自己去查一下怎么用 DiscoveryClientServiceInstanceListSupplier 这里还用到了 Flux 大家可以自己去看 主要是这句 这里的delegate就是ConsulDiscoveryClient 然后就回到RoundRobinLoadBalancer 这个类其实很简单,就是取到服务器列表,然后一个简单的轮询
2023-08-01 19:20:561

SpringCloud组件之Ribbon深入

在上一节 SpringCloud组件之Ribbon 中,实现了一个Ribbon的Helloword,使用的是Spring Eureka 和Spring Ribbon结合使用,并且使用Ribbon的默认轮询注册清单的负载均衡策略。 Ribbon参数配置通常有两种方式:全局配置和知道客户端配置 通用格式:ribbon.<key>=<value> key:表示参数名称 value:表示参数值 例如:全局配置Ribbon创建连接的超时时间 针对指定的服务进行配置 通用格式 <client>.ribbon.<key>=<value> key:表示参数名称 value:表示参数值 client:表示客户端服务的名称 例如:我们调用的Rest请求时是 http://hello-service/hello/hello ,现在我们来为服务hello-service服务指定他的实例清单(和注册中心中的服务清单一样) 下面将单独使用Spring Ribbon组件来介绍几种Ribbon负载均衡策略,单独使用Ribbon组件,不结合Eureka组件的不同之处在于,不能根据服务名称自动从Eureka的注册中心获取一个服务的实例清单,必须手动在配置文件中添加服务实例清单。 RandomRule策略:该策略实现了从服务实例清单中 随机选择 一个服务实例,作为请求服务对象。 首先创建一个SpringBoot的服务。 pom.xml application.yaml LoadBalanceController类 LoadBalanceMain类 启动main,在浏览器中输入 http://localhost:8015/loadbalance/hello ,多次请求,可以看到页面呈现不同的请求路径。而且这些请求都是随机出现,查看后台打印 RoundRobinRule:该策略实现了按照 线性轮询 的方式一次轮询服务清单上的每个服务实例。 结合上面的例子,修改两个部分,一个是application.yaml中 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule 一个是LoadBalanceMain 中 修改ribbonRule()的返回值 RetryRule:该策略具备重试机制的实例选择功能,在给定时间内能够得到选择到具体的服务实例就返回,当超过时间还有没选到就返回null,参数maxRetryMillis控制这个超时时间。 WeightedResponseTimeRule:该策略是对RoundRobinRule的扩展,增加了根据实例的响应时间来计算权重,并从权重中选择对应的实例。该策略实现主要有三个核心内容 定时任务 WeightedResponseTimeRule策略在初始化的时候会启动一个定时任务,默认每隔30秒计算一次每个服务实例的权重 权重计算 累计所有实例的响应时间,得到总的totalResponseTime,然后为实例清单中的每个实例逐个计算权重,计算公式为 weightSoFar = weightSoFar + totalResponseTime - 该实例的平均响应时间 weightSoFar 起始为零 例子 有A,B,C,D四个实例,他们的平均响应时间是10,40,80,100, 计算总的响应时间10+40+80+100 =230 计算各个实例的权重 A: 230-10=220 B:220+(230-40)=410 C:410+(230-80)=560 D:560+(230-100)=690; 计算各个实例的权重区间 A:[0,220] B:(220,410] C:(410,560] D:(560,690) 实例选择 WeightedResponseTimeRule策略会在[0,最大权重值)之间随机选取一个数,然后在看这个数落在哪个实例的权重区间内,接着WeightedResponseTimeRule就会去选择该实例。 ClientConfigEnableRoundRobinRule:该策略一般不直接使用,有些高级的策略会继承该类,完成一些高级的策略,ClientConfigEnableRoundRobinRule策略默认使用 RoundRibinRule的线性轮询机制 BestAvailableRule策略继承ClientConfigEnableRoundRobinRule,通过遍历负载均衡中维护的所有服务实例,会过滤掉故障实例,并找出并发数请求数最小的实例,所以该策略的特性就是选出最空闲的实例 PredicateBasedRule策略继承ClientConfigEnableRoundRobinRule,该策略主要特性是“先过滤,在轮询”,也就是先过滤掉一些实例,得到过滤后的实例清单,然后轮询该实例清单,PredicateBasedRule中“过滤”功能没有实现,需要继承它的类完成,也就是说不同继承PredicateBasedRule的类有不同的“过滤特性” AvailabilityFilteringRule策略继承PredicateBasedRule策略的“先过滤,在轮询”特性, AvailabilityFilteringRule策略的过滤特性是 1:是否故障,即断路器是否生效已断开 2:实例的并发请求数大于阈值,默认2的32次方减一,该阈值可以通过 <clientName>.<nameSpace>.ActiveConnectionsLimit来设置,只要满足其中一个那么就会过滤掉
2023-08-01 19:21:041

F5的负载均衡

负载均衡是一种技术,指通过某种算法实现负载分担的方法。通俗的讲就是统一分配请求的设备,负载均衡会统一接收全部请求,然后按照设定好的算法将这些请求分配给这个负载均衡组中的所有成员,以此来实现请求(负载)的均衡分配。F5 BIG-IP LTM(本地流量管理器)是一台对流量和内容进行管理分配的设备。它提供12种灵活的算法将数据流有效地转发到它所连接的服务器群。而面对用户,只是一台虚拟服务器。用户此时只需访问定义于BIG-IP LTM上的一台服务器,即虚拟服务器(Virtual Server)。但他们的数据流却被BIG-IP灵活地均衡到所有的物理服务器。BIG-IP LTM可以通过多种负载均衡算法对流量进行分配,这些算法包括:轮询(RoundRobin)比率(Ratio)优先权(Priority)最少的连接方式(LeastConnection)最快模式(Fastest)观察模式(Observed)预测模式(Predictive)动态性能分配(DynamicRatio-APM)动态服务器补充(DynamicServerAct)服务质量(QoS)服务类型(ToS)规则模式 型号 吞吐量 配置 带机量 主要功能 F5Networks BIG-IP 1600 1Gbps 处理器:双CPU内存:4GB硬盘驱动器:160GB 4 降低服务器负载方面内容转换OneConnect高速缓存SSL加速和卸载应用优化方面智能应用交换智能压缩灵活的第7层速率整形TCPExpressiSessionsWAN优化模块(插件模块)安全的应用方面资源隐藏和内容安全定制的应用攻击过滤基础防火墙功能—数据包过滤隔离协议攻击网络攻击防护有选择的加密Cookie加密高级SSL加密标准先进的客户端验证模块(插件模块)垃圾邮件过滤模块(插件模块)协议安全模块(插件模块) F5Networks BIG-IP 3600 2Gbps 处理器:双CPU内存:4GB硬盘驱动器:160GB 8 F5Networks BIG-IP 3900 4Gbps 处理器:四核CPU内存:8GB硬盘驱动器:300GB 8 F5Networks BIG-IP 6900 6Gbps 处理器:双CPU,双核(4个处理器)内存:8GB硬盘驱动器:320GB *2 16 F5Networks BIG-IP 8900 12Gbps 处理器:双CPU,四核(8个处理器)内存:16GB硬盘驱动器:320GB *2 16
2023-08-01 19:21:151

行程安排 英文

1.scheduleforconferences(3days)1stday:arrangefreeactivitiesandsomesight-seeingtours2ndday:whole-dayconference(tomandlisa)3rdday:half-dayconference(jerry)returntoshanghai2.weagreethatwe"llconsiderthefollowing3placestobeourconferencesitexxxxxxxx3.accordingtoourbudget,weagreethatthechargesofthisconferencewillbearrangedasfollows:transportationfees:2800-3000residencecharges:diningcharges
2023-08-01 19:21:325

魔兽全部快捷键

看个人喜欢吧,我的是QEFRTGZXV,当然这些键原来的功能就没了,自己设定下就好了
2023-08-01 19:22:026

操作系统的时间片轮转法具体的算法

四、算法实现 1)系统初始化时给每一个进程赋以一个needtime,并将所有进程按needtime从小到大的次序排成一个队列。2) 取队头进程,并投入运行。 3) 采用相对固定时间片(Time_piece),进程每执行一次,进程占用的CPU时间加Time_piece。 4) 若进程没有运行完,进程needtime减Time,并排到就绪队列的尾部。 5) 如果尚有进程在队列中,那么转入2)PCB结构:N 进程个数 name 进程名 Time_piece 进程优先数/进程轮转时间片 Cpu_time 进程占用的CPU时间 Need_time 进程到完成还要的时间 Count 计数器 State 进程状态(P,W,F) Arrive_time到达时间 next 链指针 run 当前运行进程指针 start 就绪队列头指针 end 就绪队列尾指针 finish 完成队列头指针 void insert(PCB *p) //时间片插入函数void create() //时间片算法创建进程函数void roundrobin() //时间片算法函数void firstin() //运行就绪队列的第一个进程你可以到这个地址下载文章看一下。"http://wenku.baidu.com/view/f3bca1d333d4b14e85246830.html"
2023-08-01 19:22:201

dubbo泛化调用 2.7.3版本升到2.7.6版本 泛化调用报null指针

报错如下; org.apache.dubbo.rpc.RpcException: Failfast invoke providers dubbo://10.170.112.91:20772/com.fosun.health.open.api.PaymentChannelConfigService?anyhost=true&application=xxl-job-provider&check=false&cluster=failfast&deprecated=false&dubbo=2.0.2&dynamic=true&generic=true&group=cashier&interface=com.fosun.health.open.api.PaymentChannelConfigService&lazy=false&loadbalance=roundrobin&methods=getPayTypesByChannelId&pid=18420&qos.enable=false&register.ip=10.170.112.91&release=2.7.6&remote.application=cashier-center-core&retries=0&revision=1.0.0&side=consumer&sticky=false&timestamp=1609236320490&version=1.0.0 RoundRobinLoadBalance select from all providers [org.apache.dubbo.registry.integration.RegistryDirectory$InvokerDelegate@6ad43d32] for service org.apache.dubbo.rpc.service.GenericService method $invoke on consumer 10.170.112.91 use dubbo version 2.7.3, but no luck to perform the invocation. Last error is: Failed to invoke remote method: $invoke, provider: dubbo://10.170.112.91:20772/com.fosun.health.open.api.PaymentChannelConfigService?anyhost=true&application=xxl-job-provider&check=false&cluster=failfast&deprecated=false&dubbo=2.0.2&dynamic=true&generic=true&group=cashier&interface=com.fosun.health.open.api.PaymentChannelConfigService&lazy=false&loadbalance=roundrobin&methods=getPayTypesByChannelId&pid=18420&qos.enable=false&register.ip=10.170.112.91&release=2.7.6&remote.application=cashier-center-core&retries=0&revision=1.0.0&side=consumer&sticky=false&timestamp=1609236320490&version=1.0.0, cause: org.apache.dubbo.remoting.RemotingException: java.lang.NullPointerException java.lang.NullPointerException at org.apache.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:74) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:41) at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:81) at org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:145) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:100) at org.apache.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:175) at org.apache.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:51) at org.apache.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:57) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) at org.apache.dubbo.rpc.cluster.support.FailfastClusterInvoker.doInvoke(FailfastClusterInvoker.java:59) at org.apache.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:248) at org.apache.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:78) at org.apache.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:55) at org.apache.dubbo.common.bytecode.proxy138.$invoke(proxy138.java) at com.xxl.job.core.handler.impl.DubboJobHandler.execute(DubboJobHandler.java:73) at com.xxl.job.core.thread.JobThread.run(JobThread.java:163) 根据报错提示找到该出源码:是因为dubbo2.7.6版本 没有判断无参方法传null校验导致报空指针错误
2023-08-01 19:22:281

时间片轮转调度算法用C实现

#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct node{ char name[10]; /*进程标识符*/ int prio; /*进程优先数*/ int round; /*进程时间轮转时间片*/ int cputime; /*进程占用CPU时间*/ int needtime; /*进程到完成还要的时间*/ int count; /*计数器*/ char state; /*进程的状态*/ struct node *next; /*链指针*/}PCB;PCB *finish,*ready,*tail,*run; /*队列指针*/int N; /*进程数*//*将就绪队列中的第一个进程投入运行*/firstin(){ run=ready; /*就绪队列头指针赋值给运行头指针*/ run->state="R"; /*进程状态变为运行态*/ ready=ready->next; /*就绪对列头指针后移到下一进程*/}/*标题输出函数*/void prt1(char a){ if(toupper(a)=="P") /*优先数法*/ printf(" name cputime needtime priority state "); else printf(" name cputime needtime count round state ");}/*进程PCB输出*/void prt2(char a,PCB *q){ if(toupper(a)=="P") /*优先数法的输出*/ printf(" %-10s%-10d%-10d%-10d %c ",q->name, q->cputime,q->needtime,q->prio,q->state); else/*轮转法的输出*/ printf(" %-10s%-10d%-10d%-10d%-10d %-c ",q->name, q->cputime,q->needtime,q->count,q->round,q->state);}/*输出函数*/void prt(char algo){ PCB *p; prt1(algo); /*输出标题*/ if(run!=NULL) /*如果运行指针不空*/ prt2(algo,run); /*输出当前正在运行的PCB*/ p=ready; /*输出就绪队列PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } p=finish; /*输出完成队列的PCB*/ while(p!=NULL) { prt2(algo,p); p=p->next; } getch(); /*压任意键继续*/}/*优先数的插入算法*/insert1(PCB *q){ PCB *p1,*s,*r; int b; s=q; /*待插入的PCB指针*/ p1=ready; /*就绪队列头指针*/ r=p1; /*r做p1的前驱指针*/ b=1; while((p1!=NULL)&&b) /*根据优先数确定插入位置*/ if(p1->prio>=s->prio) { r=p1; p1=p1->next; } else b=0; if(r!=p1) /*如果条件成立说明插入在r与p1之间*/ { r->next=s; s->next=p1; } else { s->next=p1; /*否则插入在就绪队列的头*/ ready=s; }}/*轮转法插入函数*/insert2(PCB *p2){ tail->next=p2; /*将新的PCB插入在当前就绪队列的尾*/ tail=p2; p2->next=NULL;}/*优先数创建初始PCB信息*/void create1(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; /*就绪队列头指针*/ finish=NULL; /*完成队列头指针*/ run=NULL; /*运行队列指针*/ printf("Enter name and time of process "); /*输入进程标识和所需时间创建PCB*/ for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->state="w"; p->prio=50-time; if(ready!=NULL) /*就绪队列不空调用插入函数插入*/ insert1(p); else { p->next=ready; /*创建就绪队列的第一个PCB*/ ready=p; } } clrscr(); printf(" output of priority: "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*轮转法创建进程PCB*/void create2(char alg){ PCB *p; int i,time; char na[10]; ready=NULL; finish=NULL; run=NULL; printf("Enter name and time of round process "); for(i=1;i<=N;i++) { p=malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->cputime=0; p->needtime=time; p->count=0; /*计数器*/ p->state="w"; p->round=2; /*时间片*/ if(ready!=NULL) insert2(p); else { p->next=ready; ready=p; tail=p; } } clrscr(); printf(" output of round "); printf("************************************************ "); prt(alg); /*输出进程PCB信息*/ run=ready; /*将就绪队列的第一个进程投入运行*/ ready=ready->next; run->state="R";}/*优先数调度算法*/priority(char alg){ while(run!=NULL) /*当运行队列不空时,有进程正在运行*/ { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->prio=run->prio-3; /*每运行一次优先数降低3个单位*/ if(run->needtime==0) /*如所需时间为0将其插入完成队列*/ { run->next=finish; finish=run; run->state="F"; /*置状态为完成态*/ run=NULL; /*运行队列头指针为空*/ if(ready!=NULL) /*如就绪队列不空*/ firstin(); /*将就绪对列的第一个进程投入运行*/ } else /*没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列*/ if((ready!=NULL)&&(run->prio<ready->prio)) { run->state="W"; insert1(run); firstin(); /*将就绪队列的第一个进程投入运行*/ } prt(alg); /*输出进程PCB信息*/ }}/*时间片轮转法*/roundrun(char alg){ while(run!=NULL) { run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1; if(run->needtime==0)/*运行完将其变为完成态,插入完成队列*/ { run->next=finish; finish=run; run->state="F"; run=NULL; if(ready!=NULL) firstin(); /*就绪对列不空,将第一个进程投入运行*/ } else if(run->count==run->round) /*如果时间片到*/ { run->count=0; /*计数器置0*/ if(ready!=NULL) /*如就绪队列不空*/ { run->state="W"; /*将进程插入到就绪队列中等待轮转*/ insert2(run); firstin(); /*将就绪对列的第一个进程投入运行*/ } } prt(alg); /*输出进程信息*/ }}/*主函数*/main(){ char algo; /*算法标记*/ clrscr(); printf("type the algorithm:P/R(priority/roundrobin) "); scanf("%c",&algo); /*输入字符确定算法*/ printf("Enter process number "); scanf("%d",&N); /*输入进程数*/ if(algo=="P"||algo=="p") { create1(algo); /*优先数法*/ priority(algo); } else if(algo=="R"||algo=="r") { create2(algo); /*轮转法*/ roundrun(algo); }}
2023-08-01 19:23:511

Spring Integration Channel

channel首先起到作用就是作为一个传输Message的管道。 在Spring Integration 中,实现了各种各样的channel,各自给管道赋予了不同的特性,满足不同的使用需求。(1) MessageChannel MessageChannel 是Spring Integration消息通道的顶级接口: 在该接口中,没有提供从channel中接收消息的方法,这个是因为spring integration的channel有两个不同的机制来处理接收消息,polling 、subscription,分别有两个子接口来表示。 (2) PollableChannel PollableChannel 具备轮询获得消息的能力,这种channel要求消息消费者或者框架去周期性的检查是否有可用的消息到达(3) SubscribableChannel SubscribableChannel 发送消息给订阅了MessageHanlder的订阅者在Spring integration中,默认的channel是SubscribanleChannels,默认的传输方式是同步的 (1)DirectChannel,Spring Integration默认的消息通道,它允许将消息发送给为一个订阅者,然后阻碍发送直到消息被接收 默认的Channel,传输方式都是同步的方式,下例中的三个service-activator都是同步调用的,都是由一个线程来运行的(2)QueueChannel,允许消息接收者轮询获得消息,用一个队列(queue)接收消息,队列的容量大小可配置在默认的channel中,三个动作同步的方式顺序执行,需要等待一起完成。有时候为了更快的返回结果,可以将部分动作另起线程处理。如上例中emailConfirme的动作可以延后异步执行,此时可以用QueueChannel来实现。 (3)PublishSubscribeChannel,允许广播消息给所有订阅者 在上例中,如果需要将“订购”的消息通知多个处理单元,不光发给“结账”模块。这时候我们就需要一个PublishSubscribeChannel,但由于PublishSubscribeChannel不支持缓存(queue),我们创建一个PublishSubscribeChannel来实现发布功能,再使用一个bridge连接原来的queueChannel,将消息发布出去(4)PriorityChannel,可按照优先级将数据存储到队列。在业务场景中,有时候需要按照优先级来将通道中的数据进行排序,这个时候我们需要PriorityChannel基本上是从以下几点考虑的 sharing context,是否共享上下文 Atomic boundaries,原子性 Buffering messages,是否缓存消息 Blocking and nonblocking operations,当大数据量的时候,选择什么策略处理消息 Consumption mode,消息的消费模式,点对点还是发布-订阅模式? 当一个channel被多个消费者订阅,而一个消息过来时,消费者如何分配这个消息,此时就涉及消息如何分发的策略了。Spring Integration提供了两个dispatcher的实现: UnicastingDispatcher:消息只发送给其中一个消费者 BoradcastingDispatcher:消息广播给全部的消费者 UnicastingDispatcher将消息分发给一个消费者,这里涉及了一个分发策略,这里引入了一个LoadBlancingStartegy,来确定消费者目前这个接口的唯一实现是RoundRobinLoadBalancingStrategy,顺次循环获取消费者 Spring Integration提供了一个便利:当消息发送到channel或者从channel获取的时间点,我们可以获得一个切入点,来对当前的发送或者获取动作执行操作举个书中的例子我们定义了一个bean (auditInterceptor),该bean的实现类实现了preSend方法,在channel的配置中使用<interceptors>引入使用该bean。当消息要发送到chargedBookings时,这个bean就可以先获得这个消息做一些操作。 另一个例子,spring Integration自己实现的,应对监控场景wire-tap节点引入一个interceptor,它也实现了presend方法,会将发送过来的消息也给发送到momitoringChannel中 再一个例子这个例子实现了只有“ChargedBooking”类型的Message才被接收。定义了一个拦截器,这个拦截器需要实现presend方法,在方法中判断消息的类型是否是“ChargedBooking”,这个连接器使用内定义的MessageSelectingInterceptor来实现,由于需要判断类型是否正确,在初始化这个MessageSelectingInterceptor时,给他设置了一个selector(PayloadTypeSelector)来实现目的。 MessageSelectingInterceptor-》PayloadTypeSelector-》具体类型,
2023-08-01 19:24:101

魔兽世界 求几个 战士宏

一楼...
2023-08-01 19:24:194

如何在ubuntu14.0下为WordPress应用服务器搭建四层负载均衡

在本教程中,我们将教你如何使用HAProxy为你的WordPress服务器搭建第四层负载均衡--特别是web应用层。负载均衡web服务器要在设置中增加冗余,这会在碰到服务器失败、网络问题时增加服务的可靠性;同时将负载分摊在多个服务器上可以提交读操作的性能。我们假设你所配置中包括一个WordPress应用服务器去连接一台单独的MySQL数据库服务器(假设你已经知道如何架设)。如果你只是运行了一个单独的web服务器应用程序,那么第四层负载均衡就比较适用。如果你的环境更复杂(例如你想通过一个单一的入口在不同的服务器上运行WordPress和一个静态web服务器),那么就可能就需要关注应用层(第七层)负载均衡。本文是以WordPress为例子,但是它的一般概念可以用于负载平衡,无状态的web应用。预备知识在继续本教程之前,你需要首先要完成架设一个拥有单独数据库服务器的WordPress站点的教程(或者使用类似的步骤):如何使用MYSQL建立一个远程数据库来优化站点性能。当你跟着教程在单独Web应用和数据库服务器下搭建完WordPress后,你应该有两个VPS。因为我们要处理几个VPS,为了参考,我们就成这两个VPS为:wordpress-1:你的WrodPress web应用服务器mysql-1:你的Mysql服务器现在你的环境的抽象视角看起来像下图这个样子:除了你当前的环境外,我们在本教程中还需要有两个额外的VPS。我们称他们为:wordpress-2:第二个WordPress web应用服务器haproxy-www:HAProxy服务器,做负载均衡用如果你对负载均衡的基本概念或者数据还不熟悉,比如四层负载均衡或者后端或者ACL,这里有篇文章解释这些基本概念:HAProxy及负载均衡概念介绍(译注:大家可百度查找)。我们的目标最终,我们想拥有以下一个环境:也就是说,你的用户将通过HAProxy服务器到达WordPress站点,其中HAProxy服务器会议轮循的方式将用户请求负载均衡至WrodPress应用服务器。你的两个WordPress应用服务器(或者更过,如果你愿意)将都会请求MYSQL数据库。当前环境快照可选:在继续本教程之前,你可能想为你当前环境创建快照。本教程中快照有两个目的:如果发生错误可以回滚到可工作环境对原始服务器做一次性复制,而不需要再次安装和配置PHP以及Nginx注意:为环境创建快照需要短暂的关闭VPS为wordpress-1和mysql-1两个VPS做一个快照。现在有了快照以后,我们就可以准备好继续搭建环境中其他部分了。创建第二台web应用服务器现在我们需要创建第二个VPS来分担原始应用服务器的负载。有两种选择:从之前的快照wordpress-1中创建一个新的VPS从头开始重新创建一个VPS并且设置该VPS和wordpress-1有相同的软件和配置不论那种方法,如果网络可用,一定要确保勾选个人网络。个人网络是本教程中所有VPS都需要的。如果没有个人网络选项,用你的VPS的公开IP来替代内网IP。需要注意的是,当使用公网IP在应用服务器和数据库服务器之间传输敏感数据比如非加密的数据库密码,并不是一个很好的选择,因为这些信息需要在互联网上传输。方式一:使用快照创建新的VPS创建一个新的VPS,叫做wordpress-2,使用你为wordpress-1做的快照来做。如果你选择的这种方式,可以跳过“方式二”直接去看“同步web应用文件”小节。方式二:从头创建一个新的VPS这种方式和“方式一”可二选一。如果你想从头设置wordpress-2服务器,而不是使用wordpress-1的快照,那么你要确保安装的软件相同。如果你忘了如何安装和设置原始wordpress服务器,可以参考预备知识章节中如何设置web服务器小节。快速参考,这里是一个相关软件和配置文件的列表,需要你来安装或复制:软件方面:Mysql客户端NginxPHP安装完这些软件后,在你的wordpress-2服务器上运行一下命令:sudo apt-get updatesudo apt-get install mysql-clientsudo apt-get install nginx php5-fpm php5-mysql原始应用服务器上需要创建或编辑的配置文件:/etc/php5/fpm/php.ini /etc/php5/fpm/pool.d/www.conf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com当你修改完配置文件后,不要忘了冲洗PHP和Nginx,可以使用一下命令:sudo service php5-fpm restartsudo service nginx restart在新服务器的安装和配置完成以后,我们需要同步wordpress应用文件。同步Web应用文件在应用程序可以进行负载均衡之前,我们需要确保新应用服务器的应用程序文件和原始wordpress服务器的文件是同步的。这些文件的位置也就是你安装wordpress的位置,以及其他的一些文件。除了wordpress运行所需要的配置文件之外,上传的文件和通过wordpress接口安装的插件的安装文件和这些插件上传的文件都需要去同步。在预备知识文章中,我们将wordpress安装在/var/www/example.com路径下--我们将在所有的例子中都会使用这个路径,但是你需要将这个路径替换为你wordpress的实际安装路径。有很多方法在服务器之间同步文件--NFS或者glusterFS都是不错的选择。我们将使用glusterFS来满足我们所有的同步需求,因为它允许每个应用服务器来存储应用程序文件的副本,同时也会保持文件系统的一致性。下图是我们共享存储方案的概念图:如果你对本小节中使用的glusterFS完全不熟悉,请参考这个GlusterFS教程(https://www.digitalocean.com/community/tutorials/how-to-create-a-redundant-storage-pool-using-glusterfs-on-ubuntu-servers),这是本小节的基础。注意:下面的内容将经常在wordpress-1和wordpress-2服务器之间跳转,请确保在正确服务器上运行响应命令,否则你将遇到麻烦。编辑hosts文件如果你有一个内部DNS,而且这个DNS记录了你VPS的内部IP地址,那么你可以跳过这一步直接配置并执行glusterFS相关命令。否则,需要在wordpress-1和wordpress-2上编辑/etc/hosts文件:sudo vi /etc/hosts增加以下两行,将红色字替换为你应用服务器的各自ip:wordpress_1_private_IP wordpress-1wordpress_2_private_IP wordpress-2保存并退出。安装GlusterFS并配置一个冗余盘在wordpress-1和wordpress-2上使用apt-get命令安装glusterFS服务端软件:sudo apt-get install glusterfs-server在wordpress-1上,运行以下命令来和wordpress-2保持对等:sudo gluster peer probe wordpress-2在wordpress-2上,运行以下命令来和wordpress-1保持对等:sudo gluster peer probe wordpress-1在wordpress-1和wordpress-2上,创建路径用来存储glusterFS所管理的文件,运行:sudo mkdir /gluster-storage在wordpress-1上,创建glusterFS副本,我们称作volume1,glusterFS 会将它存放在/gluster-storage中的数据保存在你所有的应用服务器上,运行:sudo gluster volume create volume1 replica 2 transport tcp wordpress-1:/gluster-storage wordpress-2:/gluster-storage force预期输出以下结果:volume create: volume1: success: please start the volume to access data再次在wordpress-1上,运行一下命令来启动刚刚创建的glusterFS卷,在volume1上运行:sudo gluster volume start volume1预期输出以下结果:volume start: volume1: success在wordpress-1上,如果你想查看刚创建和启动的glusterFS卷的信息,运行:sudo gluster volume info你需要明白的是目前有两个glusterFS“同盟”,每个对应一个wordpress服务器。现在我们已经运行了一个glusterFS盘,为了能够使用它来同步文件,我们需要将该盘挂载。挂载共享存储首先挂载wordpress-1上的文件系统。在wordpress-1上,修改fstab文件来使共享文件系统可以随机启动:sudo vi /etc/fstab添加以下行到fstab来将/storage-pool目录作为挂载点:wordpress-1:/volume1/storage-pool glusterfs defaults,_netdev 0 0保存并退出。在wordpress-1上,现在将glusterFS盘挂载至/storage_pool文件系统:sudo mkdir /storage-poolsudo mount /storage-pool在wordpress-1上挂载共享盘/storage-pool后,你可以运行df -h命令来列出当前已挂载的文件。接下来,我们将使用类似的流程来挂载wordpress-2上的共享文件系统。在wordpress-2上,编辑fstab来使共享系统随机启动:sudo vi /etc/fstab添加以下行到fstab来将/storage-pool目录作为挂载点:wordpress-2:/volume1 /storage-pool glusterfs defaults,_netdev 0 0在wordpress-2上,现在将glusterFS盘挂载至/storage_pool文件系统:sudo mkdir /storage-poolsudo mount /storage-pool现在,所有在/storage-pool文件系统中创建、修改或删除的文件都会在两个wordpress服务器之间同步,即使当其中一个服务器暂时故障时也会同步。将wordpress文件移至共享存储下一步是将wordpress-1的wordpress文件移动到共享存储中。请将红色字体替换为你自己的值。/var/www/example.com表示wordpress文件的位置(nginx也会在这里查找文件),example.com本身只是根目录。在wordpress-1上,运行以下命令来移动wordpress文件至共享文件系统/storage-pool:sudo mv /var/www/example.com /storage-pool/sudo chown www-data:www-data /storage-pool/example.com接下来,你可能想创建一个符号链接来指向wordpress在共享文件中位置:sudo ln -s /storage-pool/example.com /var/www/example.com目前wordpress文件放在共享文件系统/storage-pool中,这些文件接受Nginx访问他们的原始路径/var/www/example.com。将新的应用服务器指向共享存储区下一步是我们在新web应用程序服务器上创建一个符号链接指向WordPress文件共享文件系统。如果你选择使用快照创建wordpress-2,在wordpress-2上运行以下命令:sudo rm /var/www/example.comsudo ln -s /storage-pool/example.com /var/www/example.com如果你从头创建wordpress-2服务器,在wordpress-2上运行以下命令:sudo mkdir -p /var/wwwsudo ln -s /storage-pool/example.com /var/www/example.com这就是wordpress应用的文件同步。接下来是使新服务器wordpress-2连接数据库。创建一个新的数据库用户由于Mysql使用用户名和源主机来区别用户,我们需要创建一个新的wordpress用户来连接新的服务器wordpress-2。在数据库服务器(mysql-1)上连接至MYSQL控制台:mysql -u root -p在一下mysql语句中,将红色字体替换为你真实环境的参数:wordpress用户:Mysql中wordpress用户。确保和已经存在的用户名保持一致。wordpress2private_IP:wordpress-2服务器的内部ip。密码:wordpress用户的Mysql数据库密码。去报和已经存在的用户名密码保持一致。在wordpress-2上mysql控制台中运行以下命令:CREATE USER "wordpressuser"@"wordpress_2_private_IP" IDENTIFIED BY "password";GRANT SELECT,DELETE,INSERT,UPDATE ONwordpress.* TO "wordpressuser"@"wordpress_2_private_IP";FLUSH PRIVILEGES;现在第二台服务器wordpress-2就可以登录mysql服务器mysql-1了。还没负载均衡 注意,有两个应用服务器在运行但是他们并没有被负载均衡,因为每个服务器必须通过他们的外网IP来访问。而我们希望能够通过相同的URL访问该应用程序,如http://example.com/,以及在两台服务器之间做流量分配。安装HAProxy在内网中创建一个新的VPS,在本教程中,我们叫做haproxy-www。在haproxy-www服务器上使用apt-get命令来安装HAProxy:sudo apt-get updatesudo apt-get install haproxy我们需要使用HAProxy初始化脚本来启动和停止HAProxy:sudo vi /etc/default/haproxy将ENABLED值改为1来开启初始化脚本:ENABLED=1保存并退出。现在HAProxy可以在服务器上被启动和停止。当然,你现在可以使用命令来控制HAProxy了。让我们来检查下它是否运行:/etc/init.d$ sudo service haproxy status输出结果:haproxy not runningHAProxy没有运行。这是对的,因为它首先需要配置。接下来,让我们来配置HAProxy。HAProxy配置HAProxy的配置文件主要分为以下两部分:Global:设置进程级参数Proxies:包括默认、监听、前端、后端参数Global配置所有的HAProxy配置都需要在HAProxy服务器haproxy-www上进行。首先,复制一份默认的haproxy.cfg文件:cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig现在,使用文本编辑器打开haproxy.cfg文件:sudo vi /etc/haproxy/haproxy.cfg你将看到有两部分已经被定义:global和defaults。首先,我们将对一些默认参数做一些修改。在默认情况下,找到一下两行:mode httpoption httplog将其中http替换为tcp,结果如下:mode tcpoption tcplog选择tcp作为HAProxy执行第4层负载平衡模式配置。在我们的例子中,这意味着一个特定的IP地址和端口中所有传入的流量将被转发到同一后端。如果你不熟悉这一概念,请阅读在HAProxy介绍中的负载均衡小节。先不要关闭配置文件,我们将加上proxy配置。代理配置(Proxyies)我们首先要做的事情是增加前端。对一个基本的4层负载均衡设置,前端监听一个特定的IP地址和端口的流量,并将传入流量转发到一个指定的后端。在配置文件的末尾,让我们添加上我们的前端:www。请将haproxy_www_public_IP替换为你自己的haproxy-www服务器IP地址:frontend wwwbind haproxy_www_public_IP:80default_backend wordpress-backend以下是对上面的前端配置代码片段中的每一行是什么意思做出解释:frontend www:指定了一个名为“www”的前端,我们将用它来处理传入www的流量bind haproxywwwpublic_IP:80:将haproxywwwpublic_IP替换为你haproxy-www服务器的外网ip。这是告诉haproxy这个前端将处理这个ip和端口上的流量。default_backend wordpress-backend:这指定所有这些前端的流量将会转发到wordpress-backend,这在下一步我们将定义配置完前端后,继续将以下后端配置加入文件末尾:backend wordpress-backendbalance roundrobinmode tcpserver wordpress-1 wordpress_1_private_IP:80 checkserver wordpress-2 wordpress_2_private_IP:80 check以下是对上面每行配置的解释:backend wordpress-backend:指定了一个名为“wordpress-backend”的后端balance roundrobin:指定该后端将使用“轮循”的负载均衡算法server wordpress-1 ...:指定了一个名为“wordpress-1”的后端服务器,内外nagIP(你必须替换为你自己服务器ip)和端口监听,在这个例子中为80端口。“check”选项表示使负载均衡器对这个服务器定期进行健康检查server wordpress-2 ...:指定了一个名为“wordpress-2”的后端保存并退出。现在HAProxy可以启动了,但是让我们先开启日志功能。开始HAProxy日志功能启用HAproxy日志功能非常简单,首先编辑rsyslog.conf文件:sudo vi /etc/rsyslog.conf接着找到一下两行,取消这两行注释来开启UDP日志功能:$ModLoad imudp$UDPServerRun 514$UDPServerAddress 127.0.0.1现在重启rsyslog来使新配置生效:sudo service rsyslog restartHAProxy日志功能现在已经开启了!日志文件将在HAProxy启动后被放在/var/log/haproxy.log。启动HAProxy和PHP/Nginx在haproxy-www服务器上,启动HAProxy来使配置生效:sudo service haproxy restart取决于你如何设置您的新应用程序服务器,您可能需要重新启动你的WordPress应用程序通过重启PHP和Nginx。在wordpress-2服务器上,重启PHP和Nginx:sudo service php5-fpm restartsudo service nginx restart现在WordPress应该运行在两个应用程序服务器,它们是负载均衡的。但仍有最后一个配置需要更改。更新WordPress配置现在你的WordPress应用程序的URL已经改变,我们必须在WordPress更新几个设置。在wordpress服务器,编辑你的wp-config.php文件。它位于WordPress的安装位置(在本教程中,它是安装在/var/www/example.com但你安装可能会有所不同):cd /var/www/example.com; sudo vi wp-config.php找到"DB_NAME"所在行;增加以下配置在该行之上,并且替换红色的值:define("WP_SITEURL", "http://haproxy_www_public_IP");define("WP_HOME", "http://haproxy_www_public_IP");保存并退出。现在WordPress url配置为指向您的负载平衡器,而不是只有最初的WordPress服务器,而且在当你试着访问wp-admin控制台时发挥作用。负载均衡完成您的web应用程序服务器现在是负载均衡的。你的负载平衡WordPress现在可以访问您的用户通过负载均衡器haproxy-www的外网IP地址或域名访问!总结现在您的用户将在两个wordpress服务器之间负载。另外,如果其中一个wordpress挂了,那么您的站点仍然是可用的,因为另一个wordpress服务器仍然在处理流量。使用此设置,记住你的HAProxy负载均衡服务器haproxy-www以及数据库服务器mysql-1,需要为你的网站运行正常而工作。1.本文由程序员学架构摘译2. 本文译自https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04
2023-08-01 19:24:281

汉译英段落翻译

试试金山词霸或者百度和google的翻译呀。
2023-08-01 19:24:534

如何使用Linux自带多路径DM

一、多路径解释多路径,顾名思义就是有多种选择的路径。在SAN或IPSAN环境,主机和存储之间外加了光纤交换机,这就导致主机和存储之间交换速度和效率增强,一条路径肯定是不行的,也是不安全不稳定的。多路径就是要来解决从主机到磁盘之间最快,最高效的问题。主要实现如下几个功能故障的切换和恢复IO流量的负载均衡磁盘的虚拟化多路径之前一直是存储厂商负责解决,竟来被拆分出来单独卖钱了。构架基本是这样的:存储,多路径软件,光纤交换机,主机,主机系统。 二、LINUX下的multipath1、查看是否自带安装?123456 [root@web2 multipath]# rpm -qa|grep devicedevice-mapper-1.02.39-1.el5device-mapper-1.02.39-1.el5device-mapper-multipath-0.4.7-34.el5device-mapper-event-1.02.39-1.el5[root@web2 multipath]#2、安装123456 rpm -ivh device-mapper-1.02.39-1.el5.rpm #安装映射包rpm -ivh device-mapper-multipath-0.4.7-34.el5.rpm #安装多路径包 外加加入开机启动chkconfig –level 2345 multipathd on #设置成开机自启动multipathdlsmod |grep dm_multipath #来检查安装是否正常3、配置1234567891011121314 # on the default devices.blacklist {devnode "^(ram|raw|loop|fd|md|dm-|sr|sr|scd|st)[0-9]*"devnode "^hd[a-z]"}devices {device {vendor "HP"path_grouping_policy multibusfeatures "1 queue_if_no_path"path_checker readsector()failback immediate}}<br><br>完整的配置如下:blacklist { devnode "^sda" } defaults { user_friendly_names no } multipaths { multipath { wwid 14945540000000000a67854c6270b4359c66c272e2f356321 alias iscsi-dm0 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 14945540000000000dcca2eda91d70b81edbcfce2357f99ee alias iscsi-dm1 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 1494554000000000020f763489c165561101813333957ed96 alias iscsi-dm2 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } multipath { wwid 14945540000000000919ca813020a195422ba3663e1f03cc3 alias iscsi-dm3 path_grouping_policy multibus path_checker tur path_selector "round-robin 0" } } devices { device { vendor "iSCSI-Enterprise" product "Virtual disk" path_grouping_policy multibus getuid_callout "/sbin/scsi_id -g -u -s /block/%n" path_checker readsector0 path_selector "round-robin 0" } }4、命令123456789101112131415161718192021222324252627282930 [root@web2 ~]# multipath -hmultipath-tools v0.4.7 (03/12, 2006)Usage: multipath [-v level] [-d] [-h|-l|-ll|-f|-F|-r] [-p failover|multibus|group_by_serial|group_by_prio] [device] -v level verbosity level 0 no output 1 print created devmap names only 2 default verbosity 3 print debug information -h print this usage text -b file bindings file location -d dry run, do not create or update devmaps -l show multipath topology (sysfs and DM info) -ll show multipath topology (maximum info) -f flush a multipath device map -F flush all multipath device maps -r force devmap reload -p policy force all maps to specified policy : failover 1 path per priority group multibus all paths in 1 priority group group_by_serial 1 priority group per serial group_by_prio 1 priority group per priority lvl group_by_node_name 1 priority group per target node device limit scope to the device"s multipath (udev-style $DEVNAME reference, eg /dev/sdb or major:minor or a device map name)[root@web2 ~]#5、启动关闭1234 # /etc/init.d/multipathd start #开启mulitipath服务service multipath startservice multipath restartservice multipath shutdown6、如何获取wwid1234567891011121314151617181920212223242526 1、[root@vxfs01 ~]# cat /var/lib/multipath/bindings# Multipath bindings, Version : 1.0# NOTE: this file is automatically maintained by the multipath program.# You should not need to edit this file in normal circumstances.## Format:# alias wwid#mpath0 36006016051d50e0035744871c912de11mpath1 36006016051d50e0034744871c912de11mpath2 36006016051d50e0032744871c912de11mpath3 36006016051d50e0039744871c912de11mpath4 36006016051d50e003a744871c912de11 2、[root@vxfs01 ~]# multipath -v3 |grep 3600sdb: uid = 36006016051d50e003a744871c912de11 (callout)sdc: uid = 36006016051d50e003a744871c912de11 (callout)sdd: uid = 36006016051d50e003a744871c912de11 (callout)sde: uid = 36006016051d50e003a744871c912de11 (callout)36006016051d50e003a744871c912de11 1:0:0:0 sdb 8:16 0 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 1:0:1:0 sdc 8:32 1 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 2:0:0:0 sdd 8:48 1 [undef][ready] DGC,RAI36006016051d50e003a744871c912de11 2:0:1:0 sde 8:64 0 [undef][ready] DGC,RAIFound matching wwid [36006016051d50e003a744871c912de11] in bindings file.比较详细的文字:http://zhumeng8337797.blog.163.com/blog/static/1007689142013416111534352/http://blog.csdn.net/wuweilong/article/details/14184097RHEL官网资料:http://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-5-DM_Multipath-en-US.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-5-DM_Multipath-zh-CN.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-6-DM_Multipath-en-US.pdfhttp://www.prudentwoo.com/wp-content/uploads/downloads/2013/11/Red_Hat_Enterprise_Linux-6-DM_Multipath-zh-CN.pdf
2023-08-01 19:25:021

思科路由中IGRP和EIGRP协议有什么不同?

EIGRP支持VLSM和不连续子网支持手动汇总EIGRP相比于IGRP有闪速更新,更快的收敛时间得特点EIGRP只对发生变化的条目更新,占用的网络资源更少希望可以帮到你
2023-08-01 19:25:103

centos 双网卡绑定 mode哪种好些

Linux双网卡绑定实现就是使用两块网卡虚拟成为一块网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗点讲就是两块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。首先要看linux是否支持bonding,RHEL4已经默认支持了。[root@localhost ~]# modinfo bondingfilename: /lib/modules/2.6.18-238.9.1.el5/kernel/drivers/net/bonding/bonding.koauthor: Thomas Davis, tadavis@lbl.gov and many othersdescription: Ethernet Channel Bonding Driver, v3.4.0-1version: 3.4.0-1license: GPLsrcversion: 358EAAF5610876F44387AEFdepends: ipv6vermagic: 2.6.18-238.9.1.el5 SMP mod_unload gcc-4.1………………………………如果有类似上面的信息输出,说明已经支持了。绑定步骤:1.修改/etc/sysconfig/network-scripts/ifcfg-eth0 配置文档修改后的内容如下:  DEVICE=eth0  ONBOOT=yes #系统启动时自动启用该设备  BOOTPROTO=none    #启动时不使用任何协议2.修改/etc/sysconfig/network-scripts/ifcfg-eth1 配置文档修改后的内容如下:  DEVICE=eth1  ONBOOT=yes #系统启动时自动启用该设备  BOOTPROTO=none    #启动时不使用任何协议3.创建一个绑定网络口的配置文档/etc/sysconfig/network-scripts/ifcfg-bond0内容如下:  DEVICE=bond0 #虚拟网卡名称  BOOTPROTO=static  IPADDR=192.168.0.2 #IP地址  NETMASK=255.255.255.0 #子网掩码  GATEWAY=192.168.0.1 #网关  BORADCAST=192.168.0.255 #广播地址  ONBOOT=yes  TYPE=Ethernet也可这样配置:(1)编辑虚拟网络接口配置文件(bond0),并指定网卡IPvi /etc/sysconfig/network-scripts/ifcfg-bond0DEVICE=bond0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.0.254BROADCAST=192.168.0.255NETMASK=255.255.255.0NETWORK=192.168.0.0GATEWAY=192.168.0.1USERCTL=noTYPE=Ethernet注意:建议不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址vi /etc/sysconfig/network-scripts/ifcfg-eth1DEVICE=eth1BOOTPROTO=noneONBOOT=yesUSERCTL=noMASTER=bond0SLAVE=yes注意:建议不要指定MAC地址这样配置完就不需要第5步了。4.修改/etc/modprobe.conf,配置绑定模型加入以下内容:  alias bond0 bonding  options bond0 millmon=100 mode=0 说明: miimon=100 miimon是指多久时间要检查网路一次,单位是ms(毫秒) 这边的100,是100ms,即是0.1秒 意思是假设其中有一条网路断线,会在0.1秒内自动备援 mode共有七种(0~6) mode=0:平衡负载模式,有自动备援,但需要"Switch"支援及设定。 mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。 mode=6:平衡负载模式,有自动备援,不必"Switch"支援及设定。需要说明的是如果想做成mode 0的负载均衡,仅仅设置这里options bond0 miimon=100 mode=0是不够的,与网卡相连的交换机必须做特殊配置(这两个端口应该采取聚合方式),因为做bonding的这两块网卡是使用同一个MAC地址.从原理分析一下(bond运行在mode 0下):mode 0下bond所绑定的网卡的IP都被修改成相同的mac地址,如果这些网卡都被接在同一个交换机,那么交换机的arp表里这个mac地址对应的端口就有多 个,那么交换机接受到发往这个mac地址的包应该往哪个端口转发呢?正常情况下mac地址是全球唯一的,一个mac地址对应多个端口肯定使交换机迷惑了。所以mode0下的bond如果连接到交换机,交换机这几个端口应该采取聚合方式(cisco称为 ethernetchannel,foundry称为portgroup),因为交换机做了聚合后,聚合下的几个端口也被捆绑成一个mac地址.我们的解 决办法是,两个网卡接入不同的交换机即可。mode6模式下无需配置交换机,因为做bonding的这两块网卡是使用不同的MAC地址。PS:RHEL4 (centos4)及以下的版本options加在/etc/modprobe.conf中;RHEL5 (centos5)可以在ifcfg-bond0中加BONDING_OPTS="mode=1 arp_interval=100 arp_ip_target=192.168.0.1"5.修改/etc/rc.local,负责在系统启动时将虚拟网卡和两张物理网卡相绑定增加以下内容:  ifenslave bond0 eth0 eth1这样配置完成,重启机器,就可以看到有一张bond0的新网卡。可以查看bond0来得知当前状态:[root@localhost ~]# cat /proc/net/bonding/bond0Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)Bonding Mode: load balancing (round-robin)MII Status: upMII Polling Interval (ms): 100Up Delay (ms): 0Down Delay (ms): 0Slave Interface: eth0MII Status: upSpeed: 100 MbpsDuplex: fullLink Failure Count: 0Permanent HW addr: 00:24:XXXXXXXXSlave Interface: eth1MII Status: upSpeed: 100 MbpsDuplex: fullLink Failure Count: 1Permanent HW addr: 00:24:XXXXXXXX[ubuntu 10.04配置]apt-get install ifenslave-2.6vi /etc/network/interfacesauto bond0 iface bond0 inet static address 192.168.xx.xx gateway 192.168.x.x netmask 255.255.255.0 slaves eth1 eth2##slaves eth0 eth1 eth2 eth3 eth4 bond-mode 0 bond-miimon 100如果要绑定全部网卡, 用slaves all七种bond模式说明:第一种模式:mod=0 ,即:(balance-rr) Round-robin policy(平衡抡循环策略)特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1....一直循环下去,直到最后一个传输完毕), 此模式提供负载平衡和容错能力;但是我们知道如果一个连接或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降第二种模式:mod=1,即: (active-backup) Active-backup policy(主-备份策略)特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N第三种模式:mod=2,即:(balance-xor) XOR policy(平衡策略)特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力第四种模式:mod=3,即:broadcast(广播策略)特点:在每个slave接口上传输每个数据包,此模式提供了容错能力第五种模式:mod=4,即:(802.3ad) IEEE 802.3ad Dynamic link aggregation(IEEE 802.3ad 动态链接聚合)特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的是,并不是所有的传输策略都是802.3ad适应的,尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应性。必要条件:条件1:ethtool支持获取每个slave的速率和双工设定条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式第六种模式:mod=5,即:(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡)特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。该模式的必要条件:ethtool支持获取每个slave的速率第七种模式:mod=6,即:(balance-alb) Adaptive load balancing(适配器适应性负载均衡)特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新(ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。当新的slave加入到bond中时,或者某个未激活的slave重新激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答不会被switch(交换机)阻截。必要条件:条件1:ethtool支持获取每个slave的速率;条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,....ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。
2023-08-01 19:25:302

与其他防火墙相比天融信的下一代防火墙有什么不同?

下一代防火墙作为当前网络安全领域讨论最热的产品,天融信下一代防火墙为什么好呢: NGFW○R系列产品基于天融信公司10年高品质安全产品开发经验结晶的NGTOS系统架构,采用了多项突破性技术。基于分层的设计思想,天融信公司通过长期的安全产品研发经验,分析多种安全硬件平台技术的差异,创造性地提出在硬件和操作系统内核层之间引入硬件抽象层。基于硬件抽象技术,使得NGTOS能适应各种硬件体系平台,并充分利用多种计算技术的优点。通过完善的系统结构设计,使NGTOS对比业界通常使用的其它系统具有如下特性:高效、可靠的基础系统NGTOS高效转发系统提供的多任务机制中对任务的控制采用了优先级抢占(Preemptive Priority Scheduling)和轮转调度(Round-Robin Scheduling)机制,充分保证了可靠的实时性,使同样的硬件配置能满足更强的实时性要求,为应用的开发留下更大的余地。同时,采用专为报文转发设计实现的系统,与通用操作系统相比,内容更精简,稳定性、可靠性更高。应用安全精细识别与控制NGTOS能够精确的识别12大类,超过400种当今互联网中常见和流行的网络协议,而这些协议的识别,并不是像传统防火墙中依赖端口号来简单的区分应用。天融信组建了一支专业的协议分析团队,密切的跟踪互联网应用协议的变化动态,及时的更新设备内置的应用协议特征库。在业界通用的单包特征匹配方法(DPI)之外,天融信还独创行为识别方法(DFI),通过的报文地址、端口、长度、数量,以及多个会话间的关联关系,来识别很多种特征并不明显或特征经常发生变化的协议,例如一些P2P应用和加密协议。内容安全策略完美整合由于传统防火墙基于五元组的访问控制机制无法应对各种复杂的网络应用,因此,NGTOS中的安全策略整合了用户身份、应用识别与控制、IPS、AV、URL过滤、垃圾邮件过滤、流量控制等等多种安全特性,从而构建了全方位立体化的安全防御体系。而这些安全已经实现单一引擎处理和联动,例如入侵防御功能侦测到的威胁可以自动加载到防火墙规则内,在网络层就能提前阻断。它们之间已经不仅仅再是互动关系,而是一个整体。高性能平台据测算,到2015年通过网络处理的数据量将比目前增长4倍,这对网络设备的性能提出了更高要求。天融信NGTOS基于先进的SmartAMP并行处理架构,内置处理器动态负载均衡专利技术,结合独创的SecDFA核心加速算法,保证了在NGFW○R产品中开启全特征和全部流量的情况下,整机的转发性能并不受明显的影响。与此同时,天融信通过此次与Intel的合作,利用Intel数据层高速处理技术将数据包处理解决方案快速迁移到最新的英特尔架构平台上,以获得最优性能。Intel数据层高速处理技术是一套用于高速网络的数据平面库,与Intel多核平台合而为一,可获得更高的数据包处理能力。通过将天融信NGTOS与Intel数据层高速处理技术进行有效整合,使天融信NGFW○R系列产品单安全引擎板网络吞吐性能达到40Gbps,而在天融信并行多级的硬件架构下通过部署多安全引擎将使NGFW○R旗舰机型整机吞吐达到320Gbps
2023-08-01 19:25:391

nginx 104 Connection reset by peer while reading upstream错误处理

1.看日志发现正常日志和错误日志比例几乎1:1 2.错误日志全部是104: Connection reset by peer) while reading upstream 3.看访问日志也没有其他http错误状态码 1.连续责任人咨询业务场景发现客户端请求基本上都是POST请求,开始以为是上传大文件连接超时了,后来开发确认为了安全使用POST请求,所以并没有大文件上传 2.由于upstream重置连接了,就是说后端主动断开了连接,然后发现连接里有很多TIME-WAIT,应该是qps比较大的情况下,连接处理比较快还在断开连接中就显得比较多了 3.nginx作为反向代理既然是客户端又是服务端,当和后端服务建立连接时并没有默认开启长连接,开启长连接后性能应该会提升很多 4.默认开启长连接不需要keeplive参数,如下是nginx官网查寻的keepalive参数,看的不是很明白,不过有个链接讲的很清楚,他可以激活连接缓存,应该属于长连接性能优化类 5.keepalive参数值应该与qps有关,默认不需要设置太大,如果访问日志里面有5XX错误还得根据实际情况调整,以达到最优效果 下面是官网keeplaive参数解释 Syntax: keepalive connections; Default: — Context: upstream This directive appeared in version 1.1.4. Activates the cache for connections to upstream servers. The connections parameter sets the maximum number of idle keepalive connections to upstream servers that are preserved in the cache of each worker process. When this number is exceeded, the least recently used connections are closed. It should be particularly noted that the keepalive directive does not limit the total number of connections to upstream servers that an nginx worker process can open. The connections parameter should be set to a number small enough to let upstream servers process new incoming connections as well. When using load balancing methods other than the default round-robin method, it is necessary to activate them before the keepalive directive. 1.修改nginx配置开启长连接及结合连接缓存 2.重启nginx服务 主要配置如下 1.查看错误日志 错误日志清空后没有增长过 2.查看连接数状态 长连接前TIME-WAIT比较多 长连接后TSTAB比较多 http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive https://www.cnblogs.com/sunsky303/p/10648861.html http://blog.51yip.com/apachenginx/2203.html
2023-08-01 19:25:471

一个处理器上可以有多个进程吗

晕。。当然可以! 现在的cpu可强着呢。 64位的最厉害。(目前) 当然,还得看你的进程占用资源率。。
2023-08-01 19:25:554

2013年全球大火的英文歌曲 不要你们认为好听的发给我 要全球大火的

《Blurred Lines》--Robin Thicke,火到爆,你可以去看看MV就知道了
2023-08-01 19:26:054

鱼大,FastDFS是如何确定文件在哪个storage server的?拜托各位了 3Q

服务器时间要保持一致。请检查一下 查看原帖>>
2023-08-01 19:26:271

调度算法详细资料大全

作业系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源。这就是调度。目的是控制资源使用者的数量,选取资源使用者许可占用资源或占用资源。 基本介绍 中文名 :调度算法 所属领域 :作业系统 调度算法,评价因素,吞吐量,CPU利用率,周转时间,确定进程调度原则,调度算法分类,先来先服务(FCFS),轮转法(Round Robin),多级反馈伫列算法,linux进程调度算法, 调度算法 在作业系统中调度是指一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。对于不同的的系统和系统目标,通常采用不同的调度算法,例如,在批处理系统中,为了照顾为数众多的段作业,应采用短作业优先的调度算法;又如在分时系统中,为了保证系统具有合理的回响时间,应当采用轮转法进行调度。目前存在的多种调度算法中,有的算法适用于作业调度,有的算法适用于进程调度;但也有些调度算法既可以用于作业调度,也可以用于进程调度。 通常将作业或进程归入各种就绪或阻塞伫列。 调度算法要求:高资源利用率、高吞吐量、用户满意等原则。 进程调度所采用的算法是与整个系统的设计目标相一致的: 1.批处理系统:增加系统吞吐量和提高系统资源的利用率; 2.分时系统:保证每个分时用户能容忍的回响时间。 3.实时系统:保证对随机发生的外部事件做出实时回响。 评价因素 吞吐量 单位时间内CPU完成作业的数量。 CPU利用率 从0%~100%。 周转时间 评价批处理系统的性能指标。 Ti = 作业完成时刻 - 作业提交时刻 确定进程调度原则 在系统角度来说,公平性:每个进程(不论优先权)都有机会被运行;较大的吞吐量。 用户角度:及时性:回响速度要快;较短的周转时间:不应当让用户等待时间过长。 调度算法分类 先来先服务(FCFS) 先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。 1. FCFS算法 按照作业提交或进程变为就绪状态的先后次序,分派CPU; 当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。 在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。最简单的算法。 2. FCFS的特点 比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。 轮转法(Round Robin) 轮转法(Round Robin)是让每个进程在就绪伫列中的等待时间与享受服务的时间成正比例。 1. 轮转法 将系统中所有的就绪进程按照FCFS原则,排成一个伫列。 每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。 在一个时间片结束时,发生时钟中断。 调度程式据此暂停当前进程的执行,将其送到就绪伫列的末尾,并通过上下文切换执行当前的队首进程。? 进程可以未使用完一个时间片,就出让CPU(如阻塞)。 2. 时间片长度的确定 时间片长度变化的影响2 过长->退化为FCFS算法,进程在一个时间片内都执行完,回响时间长。2 过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,回响时间长。 对回响时间的要求:T(回响时间)=N(进程数目)*q(时间片) 就绪进程的数目:数目越多,时间片越小 系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使回响时间,平均周转时间和平均带权周转时间延长。 多级反馈伫列算法 多级反馈伫列算法时间片轮转算法和优先权算法的综合和发展。优点:2 为提高系统吞吐量和缩短平均周转时间而照顾短进程。2 为获得较好的I/O设备利用率和缩短回响时间而照顾I/O型进程。2 不必估计进程的执行时间,动态调节。 1. 多级反馈伫列算法2 设定多个就绪伫列,分别赋予不同的优先权,如逐级降低,伫列1的优先权最高。每个伫列执行时间片的长度也不同,规定优先权越低则时间片越长,如逐级加倍。2 新进程进入记忆体后,先投入伫列1的末尾,按FCFS算法调度;若按伫列1一个时间片未能执行完,则降低投入到伫列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的伫列,则按“时间片轮转”算法调度直到完成。2 仅当较高优先权的伫列为空,才调度较低优先权的伫列中的进程执行。如果进程执行时有新进程进入较高优先权的伫列,则抢先执行新进程,并把被抢先的进程投入原伫列的末尾。 2. 几点说明 I/O型进程:让其进入最高优先权伫列,以及时回响I/O互动。通常执行一个小时间片,要求可处理完一次I/O请求的数据,然后转入到阻塞伫列。 计算型进程:每次都执行完时间片,进入更低级伫列。最终采用最大时间片来执行,减少调度次数。 I/O次数不多,而主要是CPU处理的进程。在I/O完成后,放回优先I/O请求时离开的伫列,以免每次都回到最高优先权伫列后再逐次下降。2为适应一个进程在不同时间段的运行特点,I/O完成时,提高优先权;时间片用完时,降低优先权。 3.shortest job next 系统计算程式调用的时间,时间最短的先执行。 linux进程调度算法 linux核心的三种调度方法: 1. SCHED_OTHER 分时调度策略, 2. SCHED_FIFO实时调度策略,先到先服务 3. SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先权决定调度权值,分时进程则通过nice和counter值决 定权值,nice越小,counter越大,被调度的机率越大,也就是曾经使用了cpu最少的进程将会得到优先调 度。 SHCED_RR和SCHED_FIFO的不同: 当采用SHCED_RR策略的进程的时间片用完,系统将重新分配时间片,并置于就绪伫列尾。放在伫列 尾保证了所有具有相同优先权的RR任务的调度公平。 SCHED_FIFO一旦占用cpu则一直运行。一直运行直到有更高优先权任务到达或自己放弃。 如果有相同优先权的实时进程(根据优先权计算的调度权值是一样的)已经准备好,FIFO时必须等待该 进程主动放弃后才可以运行这个优先权相同的任务。而RR可以让每个任务都执行一段时间。 SHCED_RR和SCHED_FIFO的相同点: SHCED_RR和SHCED_FIFO都只用于实时任务。 创建时优先权大于0(1-99)。 按照可抢占优先权调度算法进行。 就绪态的实时任务立即抢占非实时任务。 所有任务都采用linux分时调度策略时。 1. 创建任务指定采用分时调度策略,并指定优先权nice值(-20~19)。 2. 将根据每个任务的nice值确定在cpu上的执行时间(counter)。 3. 如果没有等待资源,则将该任务加入到就绪伫列中。 4. 调度程式遍历就绪伫列中的任务,通过对每个任务动态优先权的计算(counter+20-nice)结果,选择 计算结果最大的一个去运行,当这 个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在 就绪伫列末尾(时间片用完)或等待伫列(因等待资源而放弃cpu)中。 5. 此时调度程式重复上面计算过程,转到第4步。 6. 当调度程式发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。 所有任务都采用FIFO时: 1. 创建进程时指定采用FIFO,并设定实时优先权rt_priority(1-99)。 2. 如果没有等待资源,则将该任务加入到就绪伫列中。 3. 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu,该FIFO任务将一直占有cpu直到有优先权更高的任务就绪(即使优先权相同也不行)或者主动放弃(等 待资源)。 4. 调度程式发现有优先权更高的任务到达(高优先权任务可能被中断或定时器任务唤醒,再或被当前运行 的任务唤醒,等等),则调度程式立即在当前任务 堆叠中保存当前cpu暂存器的所有数据,重新从高优先权 任务的堆叠中载入暂存器数据到cpu,此时高优先权的任务开始运行。重复第3步。 5. 如果当前任务因等待资源而主动放弃cpu使用权,则该任务将从就绪伫列中删除,加入等待伫列,此时 重复第3步。 所有任务都采用RR调度策略时 1. 创建任务时指定调度参数为RR,并设定任务的实时优先权和nice值(nice值将会转换为该任务的时间片 的长度)。 2. 如果没有等待资源,则将该任务加入到就绪伫列中。 3. 调度程式遍历就绪伫列,根据实时优先权计算调度权值(1000+rt_priority),选择权值最高的任务使用 cpu。 4. 如果就绪伫列中的RR任务时间片为0,则会根据nice值设定该任务的时间片,同时将该任务放入就绪队 列的末尾。重复步骤3。 5. 当前任务由于等待资源而主动退出cpu,则其加入等待伫列中。重复步骤3。 系统中既有分时调度,又有时间片轮转调度和先进先出调度 1. RR调度和FIFO调度的进程属于实时进程,以分时调度的进程是非实时进程。 2. 当实时进程准备就绪后,如果当前cpu正在运行非实时进程,则实时进程立即抢占非实时进程。 3. RR进程和FIFO进程都采用实时优先权做为调度的权值标准,RR是FIFO的一个延伸。FIFO时,如果两 个进程的优先权一样,则这两个优先 级一样的进程具体执行哪一个是由其在伫列中的未知决定的,这样导 致一些不公正性(优先权是一样的,为什么要让你一直运行?),如果将两个优先权一样的任务 的调度策略都 设为RR,则保证了这两个任务可以循环执行,保证了公平。
2023-08-01 19:26:361

Kubernetes——Service(SVC)服务

SVC主要有以下两个作用:一、服务发现现在工作当中都将微服务项目部署到K8S上,因为每个项目都是很多个服务的集合,每个服务一般又都是由很多个pod组成的,那么当请求想要访问这个服务的时候如何将请求能够很好地找到这些POD并将请求分发给他们呢?即使是同一组服务他们的pod是在集群的不同位置的,Ip也就各不相同,SVC就可以有效地将同一组服务绑定在一起,也就是提供了一个统一的服务访问的入口,无论他们分发到哪个节点,也无论他们被分发了多少个不同的IP,SVC都可以做到将请求转发到这组服务的其中一个POD中进行处理,k8s在创建SVC时候,会根据标签选择器selector(Lable selector)来查找pod,据此创建与SVC同名的endpoint对象,当pod地址发生变化时,endpoint也会随之发生变化,SVC接收到前端client请求的时候,就会通过endpoint,找到要转发到哪个Pod进行访问网站的地址。二、负载均衡因为每个SVC都是通过Label绑定微服务当中其中一个服务的一组POD,当外部或者集群其他服务发来请求时,SVC会通过负载均衡,将请求分发到这一组POD当中的其中一个。
2023-08-01 19:27:052

教网球的英语短语

tennis racket 网球拍 tennis 网球
2023-08-01 19:27:153

求musiq soulchild的《Lullaby》的英文歌词几中文歌词

《Lullabye》Tynisha Keli***********BY:sandenling**********This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-Lulla-bye 这是你的摇篮曲 You"re my baby 你是我的宝贝 And I sing this just to show your mine 我唱的这首歌是只属于你的(?) I"m a hold you til you Sleepin in the middle of the night 我会一直拥抱你,直到你熟睡到深夜 This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye 这是你的摇篮曲Closer than you think you are 比你想象的还要接近你(?) Always there inside my heart 你一直在我的心中 Miss you when you are far away 当你远走的时候想念你 LIke the stars in outerspace 就像太空中的繁星(?)And no one could become between us 没有人会在你我之间 If you"re the sun then baby i"m your venus 如果你是太阳 那么宝贝 我就是你的维纳斯 Wanna be the one you always dreamed of 愿意成为你一直梦到的那个人This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-Lulla-bye 这是你的摇篮曲 You"re my baby 你是我的宝贝 And I sing this just to show your mine 我唱这首歌是只属于你的(?) I"m a hold you til you Sleepin in the middle of the night 我会一直拥抱着你,直到你熟睡到深夜 This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye 这是你的摇篮曲When you"re here inside my arms 当你在我的臂弯中 I feel safe from any harm 我感觉到安全,远离任何伤害 You"re like my comfort zone 你就像我的安乐窝 When you"re here i"m so at home 当你在这里,我就像在家里一样And no one would become between us 没有人会在你我之间 And you"re the one I always wanna be with 你是惟一一个我想要一直在一起的 Wanna be the love you always dreamed of 想成为你一直梦到的那个所爱的人This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-Lulla-bye 这是你的摇篮曲 You"re my baby 你是我的宝贝 And I sing this just to show your mine 我唱这首歌是只属于你的(?) I"m a hold you til you Sleepin in the middle of the night 我会一直拥抱着你,直到你熟睡到深夜 This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye 这是你的摇篮曲This is a song to show you a kiss 这是一首歌,去给你一个吻 To let you know i"ll always be there 让你知道我会永远在这里 This melody I give it to you Every word is true baby 宝贝 我给你的每一个音符,每一个词语都是真切的 This is your lulllabye 这是你的摇篮曲This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-Lulla-bye 这是你的摇篮曲 You"re my baby 你是我的宝贝 And I sing this just to show your mine 我唱这首歌是只属于你的(?) I"m a hold you til you Sleepin in the middle of the night 我会一直拥抱着你,直到你熟睡到深夜 This is your Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye 这是你的摇篮曲Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-byeGood night Sleep time 晚安,该睡觉了 This is your lullabye 这是你的摇篮曲 Good night Sleep time 晚安,该睡觉了 This is your lullabye 这是你的摇篮曲 Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye Lul-Lul-Lul-Lul-Lul-Lul-Lul-la-bye 摇篮曲 Bye...... 晚安......
2023-08-01 19:20:091

香港人说的接受是哪个单词

it is "buy". formal is "accept"
2023-08-01 19:20:103

大林寺桃花的诗意是什么 大林寺桃花的原文和译文

1、诗意:《大林寺桃花》此诗是说初夏四月作者来到大林寺,此时山下芳菲已尽,而不期在山寺中遇上了一片刚刚盛开的桃花。诗中写出了作者触目所见的感受,突出地展示了发现的惊讶与意外的欣喜。 2、《大林寺桃花》是唐代诗人白居易所作。原文为: 人间四月芳菲尽,山寺桃花始盛开。 长恨春归无觅处,不知转入此中来。 3、译文:在人间四月里百花凋零已尽,高山古寺中的桃花才刚刚盛开。我常为春光逝去无处寻觅而怅恨,却不知它已经转到这里来。
2023-08-01 19:20:121

tot开关插座比公牛怎样

都不错。1、tot开关拨动的手感轻巧而不紧,插座的插孔需装有保护门,它采用的是目前国际技术先进的点击复位技术。2、公牛的开关质量非常不错,是国内领先的高档开关插座、转换器的专业供应商。
2023-08-01 19:20:131

同是喜剧《邪不压正》首日票房超1亿,却赶不上《无名之辈》吗?

《无名之辈》更加接地气,让人有代入感。《无名之辈》里面的角色都是小人物,更贴合平民大众,更能引起观影者的共鸣,而《邪不压正》连台词都很难懂。
2023-08-01 19:20:144

接收和发送的英文

接收和发送的英文分别是:Receiving and Sending。接收,接收是“收到,看到,听到”的意思。接收有被动接受的意思,而相近的接纳一词,则有主观同意并接受的意思。对接收方法研究时,需要纵贯研究能够更加严格地验证研究变量之间的因果关系,在能够进行多次重复调查的情况下,确定科学的接收方法。基于知识接收方视角,在分析社会资本对知识转移作用的基础上,运用多层线性回归分析方法实证研究知识接收方社会资本、知识接收方与知识源间的对偶关系对于知识转移的影响,检验知识接收方社会资本在对偶关系与知识转移间的调节作用。知识接收方社会资本3个维度中信任水平显著促进知识转移,公司任期对知识转移存在负向影响,而网络中心性对知识转移的作用不显著;对偶关系方面,知识源专业知识感知和关系强度对知识转移都存在显著正向影响,知识接收方网络中心性在对偶关系与知识转移之间起调节作用。知识作为重要的无形资产已成为企业维持和增强竞争优势的关键资源,因此企业能否成功往往取决于能否有效创造和利用知识。员工间知识转移行为对促进企业充分利用和发展其内部知识具有重要影响,然而知识转移过程中却存在诸多认知和机制方面的障碍。学习英语的重要性:1、学习英语可以提高自己的语言技能,增加一项语言能力。2、学习英语有利于和外国人交朋友,聊天或者一起工作。3、学习英语有利于了解其他国家的习俗文化等。4、学习英语有利于找工作,例如很多外企,英语都是必修需要。5、学习英语有利于出国学习或者旅游,不会迷路或者手足无措。6、学习英语有利于看外国的原著小说或者电视电影等。
2023-08-01 19:20:171

bmi是什么

bmi是身体质量指数。体重是反映和衡量一个人健康状况的重要标志之一,过胖和过瘦都不利于健康,身高体重不协调也不会给人以美感。体重的变化,会直接反映身体长期的热量平衡状态。可以参考BMI指数,看自己的体重是否超标,因为每个人的骨骼大小存在差异,单纯的标准体重不一定适合自己,要找到适合自己最佳体重。身体质量指数,是BMI(Body Mass Index)指数,简称体质指数,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。计算公式为:BMI=体重÷身高2。(体重单位:千克;身高单位:米。)BMI由19世纪中期的比利时通才凯特勒最先提出。身体质量指数是国际上衡量人体胖瘦程度以及是否健康的一个常用指标,BMI正常值在20至25之间,超过25为超重,30以上则属肥胖。2021年9月,在一篇发表在PLOS Genetics上的论文中,研究人员基于39万位英国人的基因组序列数,分析了基因和吸烟这两种因素如何影响个体的BMI值。他们发现,基因能解释个体之间50%的BMI值差异,自我报告的吸烟情况可以解释2%的BMI值差异。由于吸烟会导致DNA甲基化(一种生物标志物),他们发现和吸烟有关的62个甲基化位点,可以解释22%的BMI值差异,远大于依据自我报告获得的结果。这一研究显示生物标志物或能帮助更准确地衡量生活方式等因素对健康的影响。
2023-08-01 19:20:181

星火英语真的很垃圾

星火英语的难度相对还是比较大的,主要原因包括以下几点,第一,星火英语整体的词汇量比较大,阅读的覆盖面包含哲学、政治、科学、生活和文化等等,对于考生的词汇积累有一定的要求。第二,星火英语的句子比较复杂,需要学生掌握牢固的语法基础知识,只有这样才可以不断去推理和分析。星火英语是属于比较大众化的简易教材,它涵盖的知识点很广但是深度相比于另外两者略浅,适合非专业人士学习,可以快速掌握英语要点。从总体上来看,在一般情况下,星火英语还是比较适合基础低的。在星火英语这套学习资料中,有着大量的词汇知识和语法知识,在进行知识讲解的过程中,大部分都是从比较基础的部分讲起,注重学生对英语基础知识的学习和把握,对于基础低的人来说还是够用的。星火英语适合人教版,只是星火英语可以作为人教版的延伸与辅导。人教版教的单词和语法都是比较基础的,但星火英语的单词和语法可能就要深奥些,但其词汇和语法的延伸都是以人教版的单词和语法为基础。同学们用星火英语和人教版相互撘配使用,这样学习英语就会比较轻松了。
2023-08-01 19:20:191

LOL TOT是什么意思

是表情
2023-08-01 19:20:226

Summertime (Lullaby) (2008 Digital Remaster) 歌词

歌曲名:Summertime (Lullaby) (2008 Digital Remaster)歌手:Paul Robeson专辑:Paul Robeson: The Complete Emi Sessions 1928-1939Do some people wind up with the one that they adorein a heart-shaped hotel room it"s what a heart is forthe bubble floats so madly will it stay sky-high?Hello partner, kiss your name bye-byeooh sometimes...romantic piscean seeks angel in disguisechinese-speaking girlfriend big brown eyesliverpudlian lady, sophisticated malehello partner, tell me love can"t fail& it"s you and me in the summertimewe"ll be hand in hand down in the parkwith a squeeze & a sigh & that twinkle in your eye& all the sunshine banishes the darkdo some people wind up with the one that they abhorin a distant hell-hole room, the third world warbut all I see is films where colourless despairmeant angry young men with immaculate hairooh sometimes...Get up a voice inside says there"s no time for looking downonly a pound a word & you"re talking to the townbut how do you coin the phrase though that will set your soul apartjust to touch a lonely heart& it"s you & me in the summertimewe"ll be hand down in the parkwith a squeeze & a sigh & that twinkle in your eye& all the sunshine banishes the dark& it"s you I need in the summertimeas I turn my white skin redtwo peas from the same pod yes we areor have I read too much fiction?Is this how it happens?How does it happen?Is this how it happens?Now, right nowhttp://music.baidu.com/song/2830567
2023-08-01 19:20:261

linux怎么读

linux的读音是["li:nэks]。Linux操作系统,是一种计算机操作系统,中文读法大致一般为“哩内克斯”,但真正的读法应为“哩纳克斯”。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。绝大多数基于Linux内核的的操作系统使用了大量的GNU软件,包括了shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如Emacs。正因为如此,GNU计划的开创者理查德·马修·斯托曼博士提议将Linux操作系统改名为GNU/Linux。但有些人只把操作系统叫做"Linux"。Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途,同时它们都尽可能被编写得更好。其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。至于说Linux是基于Unix的,很大程度上也是因为这两者的基本思想十分相近。
2023-08-01 19:20:291

大林寺桃花的意思是什么?

  《大林寺桃花》这首诗的字面意思是:在人间四月里百花凋零已尽,高山古寺中的桃花才刚刚盛开。我常为春光逝去无处寻觅而怅恨,却不知它已经转到这里来。  这首诗是唐代诗人白居易于元和十二年(817年)初夏在江州(今九江)庐山上大林寺时即景吟成的一首七绝。此诗说初夏四月作者来到大林寺,此时山下芳菲已尽,而不期在山寺中遇上了一片刚刚盛开的桃花。诗中写出了作者触目所见的感受,突出地展示了发现的惊讶与意外的欣喜。全诗把春光描写得生动具体,天真可爱,活灵活现;立意新颖,构思巧妙,趣味横生,是唐人绝句中一首珍品。
2023-08-01 19:20:321

PPP模式与BOT,TOT是一回事吗

PPP模式是一种项目特许经营模式,主要是指政府和社会资本通过股权形式合作建设社会公共服务项目的模式,包括经营性的项目和非经营性的项目两类。目前的具体实施模式包括BOT(建造-运营-移交)、BT(建造-移交)、TOT(转让-经营-转让)、BOO(建造-拥有-经营)、BOOT(建造-拥有-经营-移交)等多种模式。
2023-08-01 19:20:062

《大林寺桃花》的诗意是什么?

诗意:在人间四月里百花凋零已尽,高山古寺中的桃花才刚刚盛开。我常为春光逝去无处寻觅而怅恨,却不知它已经转到这里来。《大林寺桃花》是唐代诗人白居易所作,原文为:人间四月芳菲尽,山寺桃花始盛开。长恨春归无觅处,不知转入此中来。注释:1、大林寺:在庐山大林峰,相传为晋代僧人昙诜所建,为中国佛教胜地之一。2、人间:指庐山下的平地村落。3、芳菲:盛开的花,亦可泛指花,花草艳盛的阳春景色。4、尽:指花凋谢了。5、长恨:常常惋惜。6、不知:岂料,想不到。7、转:反。8、此中:这深山的寺庙里。扩展资料创作背景:此诗作于唐宪宗元和十二年(817年)四月。白居易时任江州(今江西九江)司马,年四十六。唐贞元年间进士出身的白居易,曾授秘书省校书郎,再官至左拾遗,可谓春风得意。谁知几年京官生涯中,因其直谏不讳,冒犯了权贵,受朝廷排斥,被贬为江州司马。身为江州司马的白居易,在《琵琶行》一诗中,曾面对琵琶女产生“天涯沦落人”的沧桑感慨。这种沧桑的感慨,也自然地融入了这首小诗的意境,使《大林寺桃花》纪游诗,蒙上了逆旅沧桑的隐喻色彩。
2023-08-01 19:20:041

谁有智妍 lullaby 的音译歌词

哦咧登 呐够咩一so"jyoong"间噶嫩 蛮呐素一斯噶哈吉嘛 嫩咯zei呐咖登call"sei"so恰系难嫩 努木嘛尼 内咕rim"jyo系jyo哈鲁哈鲁起呐噶myo帕啦gyo咧ki噜里rim 呐耶公得里 莎朗jyo凯噶吧噢咧jyong内一ki"so给 压so尅哆 够qyo咯哈鲁哈鲁几起几按ki帕咧哦咧哆 呐够木啵哇jyoki阿内so 唔够一斯呐啵jyoong"间噶够马呐够啦 呐耶so马尼一咯起嫩 坑马内呐 ki大里够诶哟哈鲁哈鲁起呐噶myo帕啦gyo咧ki噜里rim 呐耶公得里 莎朗jyo凯噶吧噢咧jyong内一ki"so给 压so尅哆 够qyo咯哈鲁哈鲁几起几按ki帕咧帕尼哆寒等lyo"so够 po咯啵给哆 哈so几蛮哈鲁哈鲁起呐噶myo帕啦gyo咧醒lyo唔嫩 呐耶公得里 呐rim切够哦咧jyo内一ki"so给 压so尅哆 够qyo咯哈鲁哈鲁几起几按ki帕咧哈鲁哈鲁几起几按ki帕咧
2023-08-01 19:20:021

BMI什么意思?

BMI是指体重指数,即体重(kg)除以身高(m的平方)。它是用来评估一个人肥胖程度的常用指标,世界卫生组织认为,成人的BMI在18.5-24之间比较正常。低于18.5时,被认为是体重过轻;超过24时,则被认为是肥胖;而超过28时,就被认为是严重肥胖。
2023-08-01 19:20:003

光大信托tot产品安全吗

光大信托的TOT产品是一种资产支持证券,其安全性主要取决于所支持的资产质量和信用风险。一般来说,TOT产品的风险相对较高,需要投资者具备一定的风险承受能力和投资经验。以下是一些可能存在的风险:1、信用风险:TOT产品所支持的资产质量和借款人信用状况可能存在风险,一旦借款人违约,可能会导致TOT产品的价值下降。2、流动性风险:TOT产品的流动性可能存在一定的风险,一旦市场出现波动,可能会导致TOT产品的买卖价格出现大幅波动,甚至无法及时卖出。3、利率风险:TOT产品的收益率可能会受到市场利率波动的影响,一旦市场利率上升,可能会导致TOT产品的收益率下降。
2023-08-01 19:19:561

张家辉主演罗四海电影叫

赌圣3无名小子
2023-08-01 19:19:554

Linux下的命令sudo怎么读?

好有意思,向来都随便读。另外你也用fedora?
2023-08-01 19:19:555

Lullaby 歌词,完美译,求终级翻译 ,勿用软件

Lullaby (Nighttime Poetry);;催眠曲One thousand thoughts tonight;今夜千丝万缕的思绪went by;路过心田Tonight, my lips were walking;今夜两片薄唇亲吻着in the desert;荒无人烟I just wanted you, my little boy;我的小鬼 我只要你Touching your body is my only sin;我的爱抚 只是原罪Why do we hide this way, go figure;你我为何 销声匿迹One thousand stars are your eyes;你的眼中 万千星辉Burning memory;记忆烧毁I"m dreaming about your lips;庄生晓梦 薄唇两片I wake to your body;你的身体 被我发掘where are we going? 我们去哪Where are we running to?;追寻什么From who are we afraid of?;惧怕着谁Doesn"t matter what they say所言无味
2023-08-01 19:19:551

变形金刚来自什么星球?

赛博坦嘛!
2023-08-01 19:19:535

接受、接纳、欣赏有什么区别?

接纳的意思是:接受,采纳。指的是接过来,并溶入自已的内心,是主动的,是发自内心的。接受的意思是:对事物容纳而不拒绝。接受是被动的,不是发自内心的。
2023-08-01 19:19:533

凡哥lullaby英文歌词的意思?本人行星饭,很急!

lullaby -kris and kevin shin Kris:I"m sorry 对不起Feel like i"ve something to say 感觉有些话我想要说出来but i"ts stuck in my head 可是一直徘徊在我的脑海里Can"t let it go 不能放开,也放不开you know how much I care for you 你知道我是有多么的在乎你I love you 我爱你Don"t eve let me go Please 请别让我离开你Mom 妈妈I love you 我爱你Kevin:It has been so rough for me this past few years 在过去的几年我一直过得很辛苦I konw what"s just been struggle and stress 我懂这些挣扎和压力I wrote this for you mom 妈妈这是我为你写的歌Kris:Hey mom(hey mom)嘿妈 I konw sometimes i beg 我知道有时候我有所乞求I fought with you and i hurt you我会和你吵架..语言中我伤害了你 but deep inside i love so much and deep 可是在心底里,我真的很爱你 对你的爱很深切I"d rather die than see you leave 看见你离开我宁愿死Just give me one more chances Please 请你再给我一次机会去爱你吧Kevin:Last night i woke dope,burning the streets 昨晚我带着泪水醒来 灼热的心坎Cause my mind"s in the hall"tears crawling silent 我的眼泪沉默的在我脑海中爬过Sing what"s up with my pride 唱着 我的高傲都怎么了and i hate to see the right side 我讨厌别人和我说: 向好的方向看吧shrreddin"like cancer 像癌症一样侵蚀着我I become the cause of the devil inside我成为 一个藏着恶魔的人Kris:I know I used to say i will be a good kid 我知道,我以前说 我将来会成为一个好孩子的but everything i leave your tears fall out 可是我离开你的所有一切都令我眼泪掉落it"s like a rainy day never end 就像无尽的下雨天and i never get back to my head 眼泪从来都不会从眼中收回去我的脑海Oh god please Kevin:seven years in the making 7年了It"s has been rough and not for me 努力了那么长时间..还没成为自己before you ,I"m sure when I"m blid too 在你的光芒下,是我太盲目But all like too Shhh....Don"t hush 嘘..别说话I promise there"s alaways a light at the eng of darness 我保证在黑暗的尽头一定会有光芒listen to my voice ang witness 听着我的声音,见证我的成功Kris:I smile 我微笑着Don"t wanna see you cry 真的不想看见你哭Just sing me a lullaby(sing me a lullaby) 给我唱我最喜欢的童谣给我听吧I cry 我哭For you to see you smile 我看着你的微笑This will be my lullaby(mom i just want to be with you) 这是我的童谣,(妈,我只想和你在一起)I smile 我假装的微笑Don"t wanna see you cry 不想看见你为我落泪Just sing me a lullaby(sing me a lullaby) 唱我喜欢的童谣给我听I cry 我忍着泪For you to see you smile 等待你给我的微笑This will be my lullaby(always and forever) 这将会是我的 摇篮曲 (永远)额 我也喜欢他们 ..不过 没太疯狂...这是我刚刚翻译的.......
2023-08-01 19:19:481

大林寺桃花从中我们知道什么不一样桃花盛开的时间也不一样?

从大林寺桃花中我们可以知道地理位置不一样,温度不一样,桃花盛开的时间也不一样。
2023-08-01 19:19:461