-
Neutron的服务service与代理agent
2019-07-06 23:42:08通常Neutron环境由运行在一个或多个节点上的多个服务service和代理agent组成(尽管某些特殊环境可能不需要任何代理)。每个服务都提供了一些网络或API接口。特别感兴趣的有以下几个: neutron-server. 提供API端点...通常Neutron环境由运行在一个或多个节点上的多个服务service和代理agent组成(尽管某些特殊环境可能不需要任何代理)。每个服务都提供了一些网络或API接口。特别感兴趣的有以下几个:
-
neutron-server. 提供API端点以及数据库访问点。它通常在称为控制器Controller的节点上运行。
-
Layer2 agent代理. 通过Open vSwitch, Linuxbridge或其它厂商的特殊技术为project网络提供分段和隔离的功能。 L2 agent 代理应在每个需要提供连接和保护功能的虚拟接口的节点上运行(通常是计算节点和网络节点)。
-
Layer3 agent. 运行在网络节点上,并提供东西向East-West和南北向North-South路由功能,外加一些先进服务功能,如FWaaS或VPNaaS。
在本文档中,我们将运行在每个节点的所有服务service、服务器server和代理agent统称为服务"service"。
入口点 Entry points
服务的入口点在setup.cfg文件的"console_scripts"段定义。这些入口点通常应该指向位于neutron/cmd/…路径下的main()函数。
注意:一些现存的vendor/plugin代理仍然在其它位置维护入口点。鼓励负责这些代理的开发人员应用以上的规则指南。
与 Eventlet 交互
Neutron广泛利用eventlet库为其服务提供异步的并发模型。为了正确使用它,以下内容应该记住。
如果服务使用了eventlet库,那么它不应该直接调用eventlet.monkey_patch(),而是在neutron/cmd/eventlet/…下维护其入口点main()。如果是这样,标准Python库将为入口点上的服务自动修补(monkey修补是在 python package file 中完成的。
注意:入口点’main()'函数可能只是间接位置,其指向一个位于他处的真正调用,类似于参考服务(referrence service)中的实现。如参考服务:DHCP、L3和neutron-server。
有关代码树建立背后的基本原理信息,请参见文档 the corresponding cross-project spec。
连接到数据库 Connecting to the Database
只有neutron-server连接到neutron数据库。代理可能永远不会直连到数据库,因为这会破坏滚动升级能力。
配置选项 Configuration Options
除了数据库访问之外,配置选项也在neutron-server和agent之间分隔。服务和代理都可以加载neutron.conf文件,因为这个文件包含有内部Neutron RPCs的oslo.messaging配置,也可能包含特定于主机的配置,如文件路径。此外,neutron.conf文件包含数据库、Keystone、Nova凭据和仅供neutron-server使用的端点。
此外,neutron-server还可以加载插件特定的配置文件。agent不应该这样做。因为插件配置主要是站点范围的选项,而且插件为Neutron提供持久层,agent
应被指示为通过RPC作用于这些值。每个代理都可以有自己的配置文件。这个文件应该在主文件neutron.conf之后加载,所有代理配置具有高优先级。agent特定的配置文件可能包含因Neutron部署中因主机不同而不相同的配置,如对于L3代理的external_network_bridge配置。如果任何代理需要访问超出Neutron RPC的外部服务,这样的端点应定义在agent特定配置文件中(如,metadata agent的nova元数据)。
-
-
Java.lang.Instrument 代理Agent使用
2021-01-20 03:34:50java.lang.Instrument包是在 JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码 。... (1) 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也是在main方法执行之前,执行agent的代码。 a -
第五章 慕课网学习-随机获取更换用户代理 agent
2017-08-25 23:46:541.随机获取更换用户代理 agent class RandomUserAgentMiddleware(object): """ 随机获取更换用户代理 agent """ def __init__(self, crawler): super(RandomUserAgentMiddleware, self).__init__()1.随机获取更换用户代理 agent
class RandomUserAgentMiddleware(object): """ 随机获取更换用户代理 agent """ def __init__(self, crawler): super(RandomUserAgentMiddleware, self).__init__() self.ua_type = crawler.settings.get("AGETN_TYPE", "random") self.ua = UserAgent() @classmethod def from_crawler(cls, crawler): return cls(crawler) def process_request(self, request, spider): print("RandomUserAgentMiddleware".center(20, "*")) def get_ua(): return getattr(self.ua, self.ua_type) # 此用法非常的巧妙 --> self.ua.random = self.ua.self.ua_type # 设置headers中的User-Agent request.headers.setdefault("User-Agent", get_ua())
-
java.lang.Instrument 代理Agent使用
2018-11-06 20:49:39原文出处: 陶邦仁 java.lang.Instrument包是在JDK5引入的...在类的字节码载入JVM前会调用ClassFileTransformer的transform方法,从而实现修改原类方法的功能,实现AOP,这个的好处是不会像动态代理或者CGLIB技术实...原文出处: 陶邦仁
java.lang.Instrument包是在
JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码
。这通常是在类的main方法调用之前
进行预处理的操作,通过java指定该类的代理类来实现。在类的字节码载入JVM前
会调用ClassFileTransformer的transform方法,从而实现修改原类方法的功能,实现AOP,这个的好处是不会像动态代理或者CGLIB技术实现AOP那样会产生一个新类,也不需要原类要有接口
。(1) 代理 (agent) 是在你的main方法前的一个拦截器 (interceptor),也就是在main方法执行之前,执行agent的代码。 agent的代码与你的main方法在
同一个JVM
中运行,并被同一个system classloader
装载,被同一的安全策略 (security policy)
和上下文 (context)
所管理。 代理(agent)这个名字有点误导的成分,它与我们一般理解的代理不大一样。java agent使用起来比较简单。怎样写一个java agent? 只需要实现premain这个方法:public static void premain(String agentArgs, Instrumentation inst)
JDK 6 中如果找不到上面的这种premain的定义,还会尝试调用下面的这种premain定义:public static void premain(String agentArgs)
(2)Agent 类必须打成jar包,然后里面的
META-INF/MAINIFEST.MF
,必须包含Premain-Class
这个属性。 下面是一个MANIFEST.MF的例子:Manifest-Version: 1.0 Premain-Class:MyAgent1 Created-By:1.6.0_06
然后把
MANIFEST.MF
加入到你的jar包中。以下是agent jar文件的Manifest Attributes清单: Premain-Class 如果JVM 启动时指定了代理
,那么此属性指定代理类,即包含 premain 方法的类。如果 JVM 启动时指定了代理,那么此属性是必需的。如果该属性不存在,那么 JVM 将中止。注:此属性是类名,不是文件名或路径。 Agent-Class 如果实现支持 VM 启动之后某一时刻启动代理的机制
,那么此属性指定代理类。 即包含 agentmain 方法的类。 此属性是必需的,如果不存在,代理将无法启动。注:这是类名,而不是文件名或路径
。 Boot-Class-Path 设置引导类加载器搜索的路径列表。路径表示目录或库(在许多平台上通常作为 JAR 或 zip 库被引用)。查找类的特定于平台的机制失败后,引导类加载器会搜索这些路径
。按列出的顺序搜索路径。列表中的路径由一个或多个空格分开。路径使用分层 URI 的路径组件语法。如果该路径以斜杠字符(“/”)开头,则为绝对路径,否则为相对路径。相对路径根据代理 JAR 文件的绝对路径解析。忽略格式不正确的路径和不存在的路径。如果代理是在 VM 启动之后某一时刻启动的,则忽略不表示 JAR 文件的路径。此属性是可选的。 Can-Redefine-Classes 布尔值(true 或 false,与大小写无关)。是否能重定义此代理所需的类。true 以外的值均被视为 false。此属性是可选的,默认值为 false。 Can-Retransform-Classes 布尔值(true 或 false,与大小写无关)。是否能重转换此代理所需的类。true 以外的值均被视为 false。此属性是可选的,默认值为 false。 Can-Set-Native-Method-Prefix 布尔值(true 或 false,与大小写无关)。是否能设置此代理所需的本机方法前缀。true 以外的值均被视为 false。此属性是可选的,默认值为 false。(3)所有的这些Agent的jar包,都会自动加入到程序的classpath中。所以不需要手动把他们添加到classpath。除非你想指定classpath的顺序。
(4)一个java程序中-javaagent这个参数的个数是没有限制的,所以可以添加任意多个java agent。所有的java agent会按照你定义的顺序执行。 例如:
java -javaagent:MyAgent1.jar -javaagent:MyAgent2.jar -jar MyProgram.jar
假设MyProgram.jar里面的main函数在MyProgram中。MyAgent1.jar, MyAgent2.jar, 这2个jar包中实现了premain的类分别是MyAgent1, MyAgent2 程序执行的顺序将会是:
MyAgent1.premain -> MyAgent2.premain -> MyProgram.main
(5)另外,放在main函数之后的premain是不会被执行的,例如:
java -javaagent:MyAgent1.jar -jar MyProgram.jar -javaagent:MyAgent2.jar
MyAgent2 都放在了MyProgram.jar后面,所以MyAgent2的premain都不会被执行,所以执行的结果将是:
MyAgent1.premain -> MyProgram.main
(6)每一个java agent 都可以接收一个字符串类型的参数,也就是premain中的agentArgs,这个agentArgs是通过java option中定义的。例如:
java -javaagent:MyAgent2.jar=thisIsAgentArgs -jar MyProgram.jar
MyAgent2中premain接收到的agentArgs的值将是”thisIsAgentArgs” (不包括双引号)。
(7)参数中的Instrumentation:通过参数中的Instrumentation inst,添加自己定义的ClassFileTransformer,来改变class文件。这里自定义的Transformer实现了transform方法,在该方法中提供了对实际要执行的类的字节码的修改,甚至可以达到执行另外的类方法的地步。例如:
写agent类
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package
org.toy;
import
java.lang.instrument.Instrumentation;
import
java.lang.instrument.ClassFileTransformer;
public
class
PerfMonAgent {
private
static
Instrumentation inst =
null
;
/**
* This method is called before the application’s main-method is called,
* when this agent is specified to the Java VM.
**/
public
static
void
premain(String agentArgs, Instrumentation _inst) {
System.out.println(
"PerfMonAgent.premain() was called."
);
// Initialize the static variables we use to track information.
inst = _inst;
// Set up the class-file transformer.
ClassFileTransformer trans =
new
PerfMonXformer();
System.out.println(
"Adding a PerfMonXformer instance to the JVM."
);
inst.addTransformer(trans);
}
}
写ClassFileTransformer类
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package
org.toy;
import
java.lang.instrument.ClassFileTransformer;
import
java.lang.instrument.IllegalClassFormatException;
import
java.security.ProtectionDomain;
import
javassist.CannotCompileException;
import
javassist.ClassPool;
import
javassist.CtBehavior;
import
javassist.CtClass;
import
javassist.NotFoundException;
import
javassist.expr.ExprEditor;
import
javassist.expr.MethodCall;
public
class
PerfMonXformer
implements
ClassFileTransformer {
public
byte
[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain,
byte
[] classfileBuffer)
throws
IllegalClassFormatException {
byte
[] transformed =
null
;
System.out.println(
"Transforming "
+ className);
ClassPool pool = ClassPool.getDefault();
CtClass cl =
null
;
try
{
cl = pool.makeClass(
new
java.io.ByteArrayInputStream(
classfileBuffer));
if
(cl.isInterface() ==
false
) {
CtBehavior[] methods = cl.getDeclaredBehaviors();
for
(
int
i =
0
; i < methods.length; i++) {
if
(methods[i].isEmpty() ==
false
) {
doMethod(methods[i]);
}
}
transformed = cl.toBytecode();
}
}
catch
(Exception e) {
System.err.println(
"Could not instrument "
+ className
+
", exception : "
+ e.getMessage());
}
finally
{
if
(cl !=
null
) {
cl.detach();
}
}
return
transformed;
}
private
void
doMethod(CtBehavior method)
throws
NotFoundException,
CannotCompileException {
// method.insertBefore("long stime = System.nanoTime();");
// method.insertAfter("System.out.println(\"leave "+method.getName()+" and time:\"+(System.nanoTime()-stime));");
method.instrument(
new
ExprEditor() {
public
void
edit(MethodCall m)
throws
CannotCompileException {
m.replace(
"{ long stime = System.nanoTime(); $_ = $proceed($$); System.out.println(\""
+ m.getClassName()+
"."
+m.getMethodName()
+
":\"+(System.nanoTime()-stime));}"
);
}
});
}
}
上面两个类就是agent的核心了,jvm启动时并会在应用加载前会调用 PerfMonAgent.premain,然后PerfMonAgent.premain中实例化了一个定制的ClassFileTransforme即 PerfMonXformer,并通过inst.addTransformer(trans);把PerfMonXformer的实例加入Instrumentation实例(由jvm传入),这就使得
应用中的类加载的时候
, PerfMonXformer.transform都会被调用,你在此方法中可以改变加载的类,真的有点神奇,为了改变类的字节码,我使用了jboss的javassist,虽然你不一定要这么用,但jboss的javassist真的很强大,让你很容易的改变类的字节码。在上面的方法中我通过改变类的字节码,在每个类的方法入口中加入了long stime = System.nanoTime();,在方法的出口加入了System.out.println(“methodClassName.methodName:”+(System.nanoTime()-stime));
-
SQL2008 代理 agent XPx disabled
2011-01-24 10:47:00"Object Explorer"里面选中某个服务器——》右键——》"Facets"——》选择"Server Configuration"——》"AgentXPsEnabled"改为"True"Object Explorer"里面
选中某个服务器——》右键——》"Facets"——》选择"Server Configuration"——》"AgentXPsEnabled"改为"True"
-
[Imp] 基于net-snmp的代理agent开发详解
2018-04-02 11:37:50,而我们要开发的程序是一种子代理(subagent),是需要连snmpd的master agent的。rocommunity (只读对象)和rwcommunity(读写对象)的密码都是public.(这个密码就是客户端访问OID时需要提供的密码,比如在任一一... -
基于net-snmp的代理agent开发详解
2013-09-17 13:58:16master 是说该snmpd以主代理方式运行,目前主代理snmpd只支持agentx类型,而我们要开发的程序是一种子代理(subagent),是需要连snmpd的master agent的。rocommunity (只读对象)和rwcommunity(读写对象)的密码... -
ServiceAgent服务代理
2018-02-07 11:23:09代理服务英文全称是(Server agent),其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。代理服务器就好象一个大的Cache,这样就能显著提高浏览速度和效率。更重要的是:Proxy Server(代理... -
用户代理 User Agent
2013-02-25 09:41:06用户代理是指浏览器,它的信息包括硬件平台、系统...在Firefox中可以下载”User Agent Switcher“扩展来设置和切换UA,官方地址如下: https://addons.mozilla.org/zh-CN/firefox/addon/59 安装后会工具目录下有”Us -
jsch设置代理_SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能介绍
2021-02-01 06:59:56之前有详细介绍SSH密钥方式登录,SSH端口转发 ,以及X11转发,可点击如下原链接查看结合下面拓扑图模拟演示并介绍SSH代理(ssh-agent)及SSH代理转发(agent-forwarding)功能 Server_A: 192.168.31.80Server_B: 192.168.... -
用户代理USER-AGENT
2021-01-28 18:13:08User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 产品名称 ... -
Neutron代理扩展 Agent extensions
2019-07-09 20:49:31所有引用代理都使用一个通用的扩展机制,该机制允许引入和启用核心资源扩展而无需更改代理代码。此机制允许单个代理同时运行多个代理扩展。这种机制对位于Neutron代码树之外的第三方扩展特别有用。 在此框架下,代理... -
User Agent 用户代理
2018-01-16 21:32:00User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 User Agent的含义 一些... -
常见浏览器Agent代理信息
2021-01-01 10:21:34IE6 User-Agent Mozilla/4.0 (Windows; MSIE 6.0; Windows NT 5.2) IE7 User-Agent Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0) IE8 User-Agent Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; ... -
User Agent与代理IP
2018-08-27 11:50:40原文... 1、使用User Agent与代理IP都是为了防止程序被网站识别为爬虫。 2、User Agent存放于Headers中,常见的Agent 1.Android Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/... -
自动代理(automated agent,AA)
2019-05-15 18:18:29自动代理(automated agent,AA)不一定是指SkyNet或一些通用的人工智能。自动代理至少已经存在10年了,无须人工干预运行的或者说自主运行的软件都是AA。计算机病毒就是个完美的例子。开发者制作并把它广泛散发出去... -
Pycharm - Python 开发工具通过 agent 代理使用
2020-09-23 11:24:13文章目录Pycharm - Python 开发工具通过 agent 代理使用1、下载 Pycharm2、支持3、参数4、步骤5、代理包下载 Pycharm - Python 开发工具通过 agent 代理使用 1、下载 Pycharm 下载地址 2、支持 本代理包支持 2020 ... -
了解ssh代理:ssh-agent
2020-09-14 15:04:07转载自了解ssh代理:ssh-agent | 朱双印博客 了解ssh代理:ssh-agent ssh代理是一个程序,它可以帮助我们管理私钥,ssh-agent即为ssh代理程序。 那么什么时候需要ssh代理帮助我们管理私钥呢?当遇到如下情况时,我们... -
java设计模式之——代理(agent)模式
2020-06-08 13:34:32GoF的23种设计模式设计模式之——代理(agent)模式代理模式定义代理模式的优点代理模式的缺点代理模式的实现代理模式的使用场景 设计模式之——代理(agent)模式 代理模式定义 为其他对象提供一种代理以控制对这... -
node-https-proxy-agent, HTTPS端点的HTTP代理 `http.Agent` 实现.zip
2019-10-10 09:06:38node-https-proxy-agent, HTTPS端点的HTTP代理 `http.Agent` 实现 https-proxy-agent HTTPS的HTTP代理 http.Agent 实现 这个模块为连接到指定的HTTP或者HTTPS代理服务器提供了 http.Agent 实现,并且可以与内置的... -
datadog-agent:Datadog代理-源码
2021-02-03 14:20:50数据狗代理 当前存储库包含Datadog Agent版本7和版本6的源代码。有关Agent v5,Agent v6和Agent v7之间差异的信息,请参考。 此外,我们提供了预打包的二进制文件列表,以简化安装过程 注意: Datadog Agent v5的源... -
Unity导航网格代理NavMeshAgent
2020-06-16 17:29:24Unity导航网格代理NavMeshAgent 用法 将场景内所有障碍物(地形、树木、房屋等)标记为Navigation static,以使其参与Unity导航网格的烘焙过程。 在Unity中打开Windows–>Navigation面板,选择bake选项,设置好... -
用于Python爬虫的IP代理、user_Agent代理
2018-08-18 00:19:59一、常见的User Agent 1.Android Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19 Mozilla/5.0 (Linux; U; Android ... -
User-Agent和代理IP
2017-10-14 16:00:00User-Agent 有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不...User Agent的中文名为用户代理,简称UA。 User Agent存放于Headers中,服务器就是通过查看Head... -
efc2-agent:efc2代理-源码
2021-02-02 21:53:36有效代理 Efc Agent是用Go语言编写的,用于从其运行的系统或其他服务中收集指标,并将其发送给 。 从源头建造 要自己从源代码构建Efc Agent,您需要使用Go环境。 $ mkdir -p $GOPATH/src/github.com/efc2 $ cd $... -
Chrome:查看用户代理User-Agent
2021-01-18 17:04:56用户代理(User-Agent)是浏览器客户端与服务器交互时的重要信息之一,用于帮助服务器识别请求用户的浏览器类别,以便于网站发送相应的网页数据。 用户代理数据包括:操作系统标识、加密等级标识和浏览器语言。 那么...