您现在的位置是: 首页 > 车市行情 车市行情
apollo配置中心_apollo配置中心表示已经发布
2024-10-29 11:20:55 31人已围观
简介apollo配置中心_apollo配置中心表示已经发布 在接下来的时间里,我将尽力为大家解答关于apollo配置中心的问题,希望我的回答能够给大家带来一些思考。关于apollo配置中心的话题,我们开始讲解吧。1..NET Core etcd 配置源2.java热部署:tomcat运行中,动态修改
在接下来的时间里,我将尽力为大家解答关于apollo配置中心的问题,希望我的回答能够给大家带来一些思考。关于apollo配置中心的话题,我们开始讲解吧。
1..NET Core etcd 配置源
2.java热部署:tomcat运行中,动态修改配置文件(java文件)中的static属性并生效
3.消息传输推与拉的比较
.NET Core etcd 配置源
etcd 是一个高可用的 Key/Value 存储系统,主要用于共享配置和服务发现,和目前比较主流的配置中心(如:Spring Cloud Config、Apollo、Consul、Nacos)、注册中心(如:Zookeeper、Eureka、Consul、Nacos)功能上有很多相似之处,关于各框架之间的对比可以网上搜索。ectd 的搭建不是本文的重点,本文将基于 ectd v3 版本来测试,为了方便查看效果,还将借助 etcd-manage 可视化管理工具。
既然程序需要获取 etcd 中的配置信息,那就必须有对 etcd 操作的客户端代码。官方提供了调用 etcd 服务的 gRPC 接口定义,而 gRPC 有一个特点就是跨语言,所以如果项目中需要引入 etcd 作为配置或注册中心,完全可以直接基于 gRPC 接口定义文件生成对应语言的客户端代码实现远程调用。而对于目前来说,客户端代码的封装在 Github 上早已有实现,如:Java 的 jetcd,.NET 的 dotnet-etcd ,所以我们完全可以站在巨人的肩膀上玩耍。
关于如何在 .NET 中操作 etcd ,我们可以根据 dotnet-etcd 的介绍来进行一系列测试,本文主要介绍 .NET Core 基于 etcd 实现服务的配置管理。既然客户端代码有现成的,那是不是直接 NuGet 安装 dotnet-etcd 后,通过方法调用拿到某些 key 的值使用就好了?当然这么玩没有任何问题,但个人感觉这样在程序上看来有些松散,毕竟 .NET Core 有可扩展性的配置体系,最终都通过 ConfigurationBuilder 构造供使用。
基于上篇文章 .NET Core 自定义配置源 的介绍,接下来将使用 etcd 作为自定义配置源,所以为了接下来理解顺利,请 务必阅读 过 .NET Core 自定义配置源 。
前面提到了 etcd 是一个 Key/Value 存储系统,我们可以指定 完整 key 或 key 前缀 来获取配置信息,下面将基于 /namespance1/ 这个前缀进行获取并监听变更来演示效果。
etcd-manage
定义接口 IConfigrationWatcher,含 FireChange 方法,这里定义的比较简单,只在配置发生变更时发出一个信号,所以是 void 类型,但如果要实现对特定 key 变更进行增量处理也是可以的。
定义接口 IConfigrationRepository,包含 GetConfig 和 Watch 两个方法。
GetConfig 实现根据指定的前缀从 ectd 获取配置,转换成 IDictionary 返回。
Watch 则监听配置变更,当发生变更时,调用 IConfigrationWatcher 对象的 FireChange 方法。
完整实现代码:EtcdConfigurationRepository.cs,主要使用到 dotnet-etcd 中的 GetRange 和 WatchRange,WatchRange 的实现是基于 gRPC 的双向流模式,变更通知可以理解为是实时的。
EtcdConfigurationProvider 的实现和之前的介绍类似,区别在于这里将使用到父类 ConfigurationProvider 的 GetReloadToken 和 OnReload 方法,构造函数中通过 ChangeToken.OnChange 对 ReloadToken 进行状态变更监听。
IConfigrationWatcher 的 FireChange 触发 OnReload,OnReload 触发 ChangeToken 的状态变化,ChangeToken 的状态变化触发 Load 方法重新执行,Data 属性被重新赋值。
注: 需不需要 Reload 可通过 reloadOnChange 参数自定义
EtcdConfigurationSource 则返回 EtcdConfigurationProvider 对象即可,最后定义 IConfigurationBuilder 扩展方法 AddEtcd 供使用。完整代码请参考:Etcd.Configuration
appsettings.json 增加 etcd 相关配置参数:
Program.cs 增加 AddEtcd
Startup.cs 的 Configuration 对象中 EtcdConfigurationProvider Data 数据如下:
etcd data
基于这样的数据格式,可以将其注入到 Namespace1Options 实体上,然后在程序中直接使用 Namespace1Options:
Startup.cs 的 ConfigureServices 方法中添加如下代码:
使用 Namespace1Options :
etcd 中对 company 值就行修改,在不重启服务情况下,马上生效。
result
java热部署:tomcat运行中,动态修改配置文件(java文件)中的static属性并生效
去年 4 月,在陆奇的带领下,百度宣布对外开放自家的自动驾驶能力,“阿波罗平台”(Apollo)就此诞生。不过那时,没有人知道 Apollo 平台是何走向。3 个月后,在百度 AI 开发者大会上,陆奇再次站台,对外公布了 Apollo 1.0 的具体细节,1.0 主要发布的是完整的封闭场地循迹自动驾驶。具体开放能力集中在数据平台 1.0、3D 障碍物标注数据、Road Hackers 数据、高精地图数据等方面。
循着“每周更新,两个月左右进行一次新版本和总体能力的提升”的节奏,去年 9 月,Apollo 1.5 对外发布,据当时新智驾的报道,整个系统新增了 65000 行代码,重点开放了 5 种能力:障碍物感知、决策规划、云端仿真、高精地图服务、端到端的深度学习,其中前四种能力均为首次开放。而且,1.5 支持昼夜定车道自动驾驶,可实现夜间环境下的障碍物识别,以及非典型交通场景下的异性障碍物识别。
距离 Apollo 1.5 发布,3 个多月的时间过去了,Apollo 计划也即将迎来 2.0 的更新。这一次,百度将重大发布放到了 CES 2018 上。在此之前,百度将国内诸多媒体请到其硅谷的新研发中心,举行了一场规模庞大的展前自动驾驶汽车体验活动。
该研发中心位于硅谷桑尼韦尔(Sunnyvale),旁边就是旧金山湾。去年 10 月正式揭幕,未来主要用于自动驾驶和互联网安全领域的相关研发工作。加上百度此前在硅谷库比蒂诺(Cupertino)以及西雅图开设的研发中心或办公室,如今,百度在美国已经形成了三地联动。
据了解,百度美国研究院拥有超过 200 名员工,主要集中在人工智能、安全和硬件、自动驾驶三个领域进行先进技术的研究。
此次自动驾驶体验活动上,百度还邀请了 Apollo 平台的诸多合作伙伴到场,其中包括 GPU 巨头英伟达、自动驾驶汽车改装企业 AutonomouStuff、汽车零部件供应商采埃孚(ZF)以及汽车分时租赁企业盼达用车。
这些企业之间形成的合作,你中有我、我中有你,构成了百度所期待的“生态圈”。
去年 1 月,采埃孚成为第一家宣布采用英伟达 Drive PX2 计算平台的汽车供应商,双方要打造自动驾驶控制平台 ZF ProAI;
去年 7 月,百度与英伟达宣布联合开发自动驾驶技术,二者结成联盟;百度目前基于林肯 MKZ 改装的自动驾驶汽车便是与 AutonomouStuff 合作完成;几乎同一时间,AutonomouStuff 宣布为英伟达旗下的自动驾驶平台——Drive PX 以及传感器提供相关套件;
去年 9 月,采埃孚与百度共同宣布,双方正式达成新的战略合作,将在自动驾驶、车联网以及移动出行服务领域展开合作,为中国市场开发完备的自动驾驶解决方案;
去年 11 月,百度与盼达用车展开合作,百度将其 Apollo 平台的自动驾驶技术集成到盼达的共享运营车辆上,后者将率先在重庆两江新区开展自动驾驶共享汽车的试运营,可以达到 L3 级别,支持自主泊车以及 App 叫车。而百度与盼达合作的自动驾驶车辆便采用了采埃孚 ProAI 控制平台。
当然,这并不是百度 Apollo 自动驾驶生态的全部。今年 CES,趁着 Apollo 2.0 的更新,百度的更多伙伴将齐聚“Baidu World”大会。
不过,在此之前,所有风头都是属于自动驾驶车辆试乘。这一次,百度把与采埃孚、盼达(包括力帆)合作的 L3 级别自动驾驶分时租赁车型以及搭载了 Apollo 2.0 最新技术的 L4 级别自动驾驶车型都展示了出来并且提供试乘。
Apollo 2.0 + Drive PX2 = L4 自动驾驶
这就是搭载了百度 Apollo 2.0 系统,具备 L4 级别能力的自动驾驶原型车。
这款自动驾驶汽车是由百度和 AutonomouStuff 联手基于林肯 MKZ 车型改造而成,车顶搭载了 Velodyne 的一枚 64 线激光雷达和两枚 16 线激光雷达,同时还配有 GPS 定位传感器。在激光雷达的左右两侧,各自安装了一枚前视摄像头,可通过视觉途径识别目标物,比如红绿灯。在车辆前脸部位,其搭载的是一款来自大陆的毫米波雷达,安装位置经过了精确的调校。
当然,这样的一套传感器配置是可以灵活应变的,这其中起关键作用的是传感器融合的技术。只要针对传感器的数据修改相应的算法,便可以实现传感器配置的变化,都是可以定制的。
在车辆的后备箱内,是对于自动驾驶最为关键的车载电脑,是整个系统的计算单元。
百度的这辆自动驾驶汽车配备了两台车载电脑:一台是基于 Apollo 2.0 所需要的工控机(使用的是 Neousys Nuvo-6108GC,这是一款性能强大的 X86 解构工业控制计算机);旁边则是英伟达用于自动驾驶的 Drive PX2。据百度方面的技术负责人介绍,这两台电脑虽然服务的是两套不同的系统,但 Apollo 系统会对这两套系统都进行支持。
实际上,任何一台电脑工作都可以实现车辆的自动驾驶,而百度之所以这样配置,是为了免去测试过程中来回拆机器的过程。问及两台电脑之间的性能区别,该技术负责人向新智驾表示,英伟达的 Drive PX2 在图像处理的性能上更加优异,因为其有自带的 GPU 以及进行图像处理的软件;而针对另一台普通的工控机,百度在其中添加了英伟达的 GPU,用于处理图像数据以及激光雷达扫描产生的点云数据,工控机的运算能力相比 Drive PX2 则要强一些。
百度方面称,现阶段,这款车支持在简单的城市道路、高速上行驶。这次试乘,也是百度 Apollo 2.0 首次在加州的公路上进行路测。
百度搭载了 Apollo 2.0 的 L4 级别自动驾驶车辆试乘是在百度美研办公楼周围的一段公共道路上进行的。整个行驶区域的道路相关信息已经进行过采集,百度专门为这段路制作了高精地图来辅佐自动驾驶车辆。
在试乘的整个过程中,会碰到红绿灯、交叉路口、其他机动车以及自行车等,车辆需要自己进行刹车、启动、变道、加速等操作。加之当日是阴雨天,也给自动驾驶汽车带来了一些难度。
整体体验来看,因为是简单的城市道路,这个过程完成得还是比较顺利的,最高时速达到 56 公里/时,车辆刹车、变道的平稳度还是可圈可点的。但是在加速操作时,这辆车还显得有些不够沉稳。
百度相关技术负责人告诉新智驾,目前,Apollo 2.0 的相关更新代码已经上传至 Github,包括相关的软硬件指导。而 Apollo 2.0 的最终发布要在几天后到来的 CES 2018 上进行。
Apollo 2.0 + ProAI + 盼达 = L3 自动驾驶落地
除了 L4 级别的自动驾驶汽车外,作为百度 Apollo 平台的合作伙伴,总部位于重庆的新能源汽车分时租赁企业盼达用车将双方合作的成果空运到了硅谷百度美研。
其实称双方并不准确,这款车其实是五方合作的成果,包括百度、采埃孚、博世、力帆以及盼达。其中采埃孚提供的技术非常特别,是其与英伟达合作研发的自动驾驶控制平台 ZF ProAI,这个平台刚刚量产不久,就得到了盼达方面的采用。从几方宣布合作,到自动驾驶汽车落地,整个过程据称只花了一个多月的时间。
在传感器方面,这款车算是非常简约,只有前后两个摄像头以及周身的 12 枚超声波雷达,这样的传感器配置已让其具备了 L3 级别的自动驾驶能力,而且,还支持自动找车位和自主泊车的操作。
实际上,低速、简约的传感器配置以及自动找车位和自主泊车的能力某种程度上让这款车非常适合于分时租赁或者其他共享服务。
盼达用车 CEO 高钰告诉新智驾,目前盼达已经在重庆两江新区启动了自动驾驶分时租赁车辆的试点运营,先期将投放数十辆车进行尝试。这到底是不是一门好生意,现在谁也不知道。
从真实体验来看,这款车因为目前还不能开上公共道路,所以行驶的速度很慢;在刹车、转向时,整体体验不如此前 L4 自动驾驶汽车那样顺畅。
无论是 L3 还是 L4,看完完整视频的你对于百度自动驾驶的能力应该有所拿捏。Apollo 2.0,CES 2018 上再见。
消息传输推与拉的比较
<Context path="/tomcatTest" reloadable="true" docBase="E:\workplace\testProject\WebRoot"/>
第一个是容器里的项目path 要加/
第二个参数是你的workplace的路径,一般是到webroot
写个context.xml文件,放到项目的META-INF里.context.xml头部像上面那样写就可以
在服务器与客户端进行信息传输的时候,是客户端从服务器拉去消息,还是服务器往客户端推送消息,这是在设计一个需要网络通讯系统需要考虑的问题。
本文将介绍推与拉这两种交互方式的优缺点,和一些案例经典的框架是如何选择推和拉的形式的。
推和拉都有各自的优缺点,先说推、拉的实现。推一般情况下是服务端与客户端维护了长连接,服务端使用这个长连接进行的消息推送。而拉则是客户端采用轮询的方式定期查看服务端是否有消息变更,如果有就拉去下来。
这就是简单的推和拉的实现,他们的优缺点也比较明显。推的优势在于实时性很高,当服务端发送信息变更之后由服务端主动推送这样的实时性是非常高的。而缺点在于消息都是由服务端主动推送,当服务端很频繁的推送消息的时候,由于客户端的处理速度是不同的,由服务端去推送消息目的是为了让信息及时发送给客户端提高客户端的消费速率,但是当客户端的处理速度低于服务端的推送速度,客户端往往会不堪重负。
而拉的优点在于,由客户端按照自身的处理情况按照一定的周期去服务器拉去信息,这样就不会出现服务端压死客户端的情况。但是拉的形式有一个问题是你拉去的周期是多少?周期太长,服务端与客户端的消息延迟最坏情况就是一个周期,周期太短,当服务端没有信息的时候会导致长期的空轮训。基于这个问题我们可以采用长轮询去解决,客户端会一直阻塞直到服务端有数据才返回。
上面介绍了推和拉的实现和各自的优缺点,这里将列举一些经典框架,看它们是如何选择的,这样也会加深对推和拉的认识。
kafak作为消息队列,采用的是生产者往broker推消息,消费者往broker拉消息。为什么消费者采用的是拉的形式?上面分析过,如果采用推的形式,各个消费者的消费速率是不同的很可能将客户端压垮。而且采用推在消息系统中还有另外一个不好的点,因为kafak为了提高吞吐量,消息都是批量发送和批量消费,当服务端不知道下游的消费速率的时候,将系统调整为低延迟状态,这就会导致一次只发送一条消息,以至于传输的数据不再被缓冲,这种方式是极度浪费的。 因为 消费者 总是将所有可用的(或者达到配置的最大长度)消息 pull 到 log 当前位置的后面,从而使得数据能够得到最佳的处理而不会引入不必要的延迟。
apollo作为配置中心,当我们更改了配置之后,服务端能够及时的将变动通知给客户端,apollo采用的就是拉的形式,下面是apollo客户端获取变更的步骤:
不同于传统的pull,apollo采用的是 long pull,简单来说传统的pull当服务端没有消息的时候会立即返回,而long pull在服务端没有变动的时候会将请求挂起,直到有数据或者请求超时才返回请求。这有点类似于jdk中的阻塞队列 BlockingQueue 调用poll方法会一直阻塞当前线程直到有数据返回,只不过这个是跨进程的。
配置中心对于变更的实时性要求不是很高,所以apollo采用了拉的形式,而且为了避免客户端的空轮训采用长轮询的方式。
zookeeper作为分布式协调框架,提供丰富的功能,其中一个就是watcher机制。Watcher是zookeeper中很重要的功能。客户端通过对znode创建watcher当节点发生变化的时候(节点删除、数据更改、子节点变化等),ZooKeeper将会通知注册Watcher的客户端节点已经变更。
zookeeper实现watcher采用的是推和拉结合的方式,节点的变化是需要实时通知的所以采用推的模式,但是zookeeper这里推送的信息只是节点的变化事情,告诉客户端这个节点发生了变动,而非推送这次变动的信息。具体的变动信息是客户端按照自己的需要去从服务端拉去变动的信息。采用这样方式每次变动只需要传输少量数据,减少变动通知的IO传输。
经过分析了kafka、apollo、zookeeper三个案例之后,发现推和拉并没有什么绝对的使用场景,还是需要在自己特定的创建选择合适的方法,必要时候两个也可以同时存在,适合自己才是最好的。
好了,今天关于“apollo配置中心”的话题就讲到这里了。希望大家能够通过我的讲解对“apollo配置中心”有更全面、深入的了解,并且能够在今后的学习中更好地运用所学知识。