范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Dubbo源码应用级别注册发现

  前言
  本章基于dubbo2.7.6。
  分析应用级别服务注册与发现特性,使用默认local模式元数据服务。
  主要内容包括:
  1)rpc服务级别 vs 应用级别
  2)DubboBootstrap#start API的作用,整体流程梳理
  3)应用级别服务注册发现如何适配rpc服务级别老逻辑
  该特性在rpc调用期间没有变更(运行期间也不依赖注册中心),主要在启动阶段和注册表变更阶段做了适配。现状
  2.7.5之前dubbo仅支持rpc服务级别注册与发现。
  注册中心以zk为例。
  provider在暴露rpc服务阶段,向注册中心注册数据如下,在/dubbo/{rpc服务}/providers下列举了所有服务提供者:
  在同一个rpc服务下,会有多个providers,每个provider对应一个url,如:
  dubbo://127.0.0.1:20881/org.apache.dubbo.demo.DemoService?anyhost=true&application=heihei-app&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=org.apache.dubbo.demo.DemoService&methods=sayHello,sayHelloAsync&pid=7451&release=&scope=remote&side=provider×tamp=1679471005075
  consumer在引用阶段,根据订阅rpc服务,找到所有providers,用url构造Invoker缓存在RegistryDirectory中。优势
  假设DemoService要进行迁移,从a服务迁移到b服务。
  在传统Dubbo中,对于consumer来说不需要关心谁提供了这个服务,不需要进行代码变更。
  而用SpringCloud+OpenFeign,如果DemoService迁移,我们就需要改代码。
  consumer在rpc调用阶段,从RegistryDirectory选择invoker,调用目标节点的rpc服务。
  虽然FeignClient注解支持根据Environment解析占位符,但是本质上consumer对于服务迁移有感知。
  劣势
  1)和当下的流行的服务注册发现模型不匹配
  比如SpringCloud服务注册发现的模型都是基于应用级别,每个ServiceInstance代表一个应用实例。
  2)注册中心压力大
  压力大体现在几个方面:
  如果1个应用有n个实例,每个实例提供m个rpc服务,则注册中心会有n*m条数据;
  如果1个实例下线,该实例有n个rpc服务,每个rpc服务有m个consumer,则注册中心需要通知n*m个consumer;
  单从zk的znode存储来看,providers的url包含了大量数据,随着特性越来越多,数据也越来越多;DubboBootstrap
  针对于上述基于rpc服务级别服务注册发现带来的问题,dubbo提出了服务自省架构。
  笔者认为通俗来说,一个是应用级别服务注册发现,另一个是元数据服务。
  为了支撑新的服务自省架构,在用户侧提供了全新的DubboBootstrap api,统一管理dubbo的配置和启动时序。案例
  服务提供方:ServiceConfig service = new ServiceConfig<>(); service.setInterface(DemoService.class); service.setRef(new DemoServiceImpl()); // DubboBootstrap单例对象创建 DubboBootstrap bootstrap = DubboBootstrap.getInstance(); RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181"); registryConfig.setParameters(new HashMap<>()); // 【关键】 开启【应用级别】服务注册发现 registryConfig.getParameters().put(         RegistryConstants.REGISTRY_TYPE_KEY/*registry-type*/,         RegistryConstants.SERVICE_REGISTRY_TYPE/*service*/); bootstrap.application(new ApplicationConfig("hahaha-app"))         .registry(registryConfig)         .service(service)         .start() // 启动dubbo         .await(); 复制代码
  服务消费方:ReferenceConfig reference = new ReferenceConfig<>(); reference.setInterface(DemoService.class); // 【关键】设置rpc服务提供方应用名称(可省略) // reference.setProvidedBy("hahaha-app"); RegistryConfig registryConfig = new RegistryConfig("zookeeper://127.0.0.1:2181"); // 【关键】 开启【应用级别】服务注册发现 registryConfig.setParameters(new HashMap<>()); registryConfig.getParameters().put(         RegistryConstants.REGISTRY_TYPE_KEY/*registry-type*/,         RegistryConstants.SERVICE_REGISTRY_TYPE/*service*/); // DubboBootstrap单例对象创建 DubboBootstrap bootstrap = DubboBootstrap.getInstance(); bootstrap.application(new ApplicationConfig("service-consumer-app"))         .registry(registryConfig)         .reference(reference)         .start(); // 启动dubbo DemoService demoService = ReferenceConfigCache.getCache().get(reference); String message = demoService.sayHello("dubbo"); System.out.println(message); 复制代码效果
  基于上述改动,provider注册到zk里的数据如下。
  rpc服务->应用列表:
  应用->应用实例列表:
  应用实例信息:
  源码概览
  DubboBootstrap#application、registry、service、reference都是往全局ConfigManager里存配置。
  ConfigManager在第二章介绍过,用于统一存储AbstractConfig
  DubboBootstrap#start控制Dubbo客户端整体启动流程,一共分为5步:
  1)DubboBootstrap#initialize:初始化,之前讲传统服务暴露与引用时说到过,就是初始化全局Envrionment;
  2)DubboBootstrap#exportServices:暴露rpc服务,底层循环调用ServiceConfig#export;
  3)DubboBootstrap#exportMetadataService:如果启用应用级别服务注册,暴露元数据rpc服务;
  4)DubboBootstrap#registerServiceInstance:如果启用应用级别服务注册,向注册中心注册应用实例;
  5)DubboBootstrap#referServices:引用rpc服务,底层循环调用ReferenceConfig#get;
  接下来除了第一步,分析后面四步。
  rpc服务暴露rpc服务注册
  ServiceConfig#doExportUrls:在执行暴露逻辑之前,构造注册url发生变更。
  ConfigValidationUtils#loadRegistries:如果设置了registry-type=service,则注册协议会变为service-discovery-registry,而不是原来的registry协议。
  注册协议变更,不走RegistryProtocol,走ServiceDiscoveryRegistryProtocol继承RegistryProtocol。
  但是新的实现ServiceDiscoveryRegistryProtocol并没有重写export主方法,所以整体暴露流程还是和原来一致:
  1)开启nettyserver
  2)服务注册(发生变更)
  由于ServiceDiscoveryRegistryProtocol#getRegistryUrl重写,所以最终Registry实现发生变更。
  其实这个方法不重写,逻辑上也没有问题,主要是消费侧的那个getRegistryUrl要重写。
  RegistryProtocol#register:这里registryUrl的协议从zookeeper变为service-discovery-registry。
  原来工厂会创建一个具体的注册中心Registry,如ZookeeperRegsitry。
  现在变更为service-discovery-registry实现,工厂创建ServiceDiscoveryRegistry。
  ServiceDiscoveryRegistry内部url协议是具体注册中心协议,如zookeeper。
  ServiceDiscoveryRegistry调用元数据服务,暴露url。
  元数据服务分为两大类,一类是local本地内存元数据服务,一类是远程remote中心化元数据服务(比如zk、nacos)。
  默认使用InMemoryWritableMetadataService,本地元数据服务。
  将暴露url存储到内存map中,key是serviceKey(接口+分组+版本),value是原始暴露url。
  相当于将原来注册到zk的providers节点下的url,注册到了内存中。
  rpc服务与应用映射
  在服务暴露之后,ServiceConfig#exported发送服务暴露完成事件。public synchronized void export() {     // 【step1】2.7.5新单例api 初始化Environment全局配置     if (bootstrap == null) {         bootstrap = DubboBootstrap.getInstance();         bootstrap.init();     }     // 【step2】serviceConfig二次填充并校验     checkAndUpdateSubConfigs();     // 【step3】暴露【核心】     doExport();     // 2.7.5 发布ServiceConfigExportedEvent事件     exported(); } 复制代码
  ServiceNameMappingListener调用ServiceNameMapping#map。
  默认实现DynamicConfigurationServiceNameMapping:
  用配置中心保存rpc服务和应用的映射关系。
  对于zk来说,保存znode=/dubbo/config/mapping/rpc服务/应用名。
  为什么在没有设置配置中心的情况下,这里会走zk来存储?
  因为在DubboBoostrap#initialize中做了特殊处理。
  如果用户没有设置配置中心,且注册中心具备配置中心能力(zk、consul、nacos),就会用注册中心作为配置中心使用。
  元数据服务暴露
  回到DubboBoostrap#start,在所有rpc服务暴露完成后,执行DubboBoostrap#exportMetadataService。
  底层ConfigurableMetadataServiceExporter将Dubbo自己内部的MetadataService暴露为rpc服务。
  需要注意几个细节。
  第一,由于使用ConfigManager管理的全局注册中心配置,所以这里registry-type还是service,暴露流程和应用级别服务注册一致。
  区别在于MetadataService不会向配置中心发布rpc服务和应用的映射关系。
  即对于zk配置中心,/dubbo/config/mapping下不会存在MetadataService。
  第二,MetadataService固定使用Dubbo协议,且端口从20880向上找到一个未被占用的port。
  这意味着通讯层会为了MetadataService会新开一个NettyServer。
  元数据rpc服务和业务rpc服务底层通讯io线程和业务线程都是隔离的。注册应用实例
  回到DubboBootstrap#start,在暴露元数据服务之后,注册应用实例。
  DubboBootstrap#registerServiceInstance:
  1)获取serviceName、host、port,封装ServiceInstance应用实例模型;
  2)向注册中心注册ServiceInstance;
  一个注册中心对应一个ServiceDiscoveryRegistry。
  每个ServiceDiscoveryRegistry会根据实际注册中心协议,创建一个ServiceDiscovery实例。public class ServiceDiscoveryRegistry extends FailbackRegistry {      private final ServiceDiscovery serviceDiscovery;      public ServiceDiscoveryRegistry(URL registryURL) {         super(registryURL);         this.serviceDiscovery = createServiceDiscovery(registryURL);         // ...     } } 复制代码
  比如zookeeper对应ZookeeperServiceDiscovery。
  ZookeeperServiceDiscovery利用Curator客户端扩展包curator-x-discovery实现应用实例注册。
  正因为使用应用级别注册,curator-x-discovery可以直接使用。
  相比较rpc服务级别注册,dubbo需要自己写逻辑。
  curator-x-discovery底层创建"/services/应用/实例地址"临时znode。
  rpc服务引用主流程
  rpc服务引用,和provider一样,由于配置了registry-type=service,底层Registry变为ServiceDiscoveryRegistry,导致服务引用行为发生变更。
  RegistryProtocol#doRefer:主流程不变
  1)Directory#subscribe:向注册中心订阅并注册监听
  2)Directory#subscribe:首次同步刷新RegistryDirectory中的内存注册表(invokers)
  3)Cluster#join:将RegistryDirectory通过Cluster封装为Invoker
  区别在于Registry从ZookeeperRegistry变为ServiceDiscoveryRegistry。
  RegistryDirectory#subscribe:调用ServiceDiscoveryRegistry。
  ServiceDiscoveryRegistry#subscribeURLs:这里是应用级别服务发现的核心逻辑入口
  1)InMemoryWritableMetadataService#subscribeURL:在元数据服务内存中存储订阅url
  2)ServiceDiscoveryRegistry#getServices:根据订阅rpc服务找应用
  优先走用户配置reference.providedBy指定的应用(可多个);
  否则走配置中心,取serviceKey对应所有应用;
  比如zk取/dubbo/config/mapping/rpcService下的所有应用。
  3)ServiceDiscoveryRegistry#subscribeURLs:
  找应用的应用实例,构造providerUrls,通知RegistryDirectory。
  根据应用找应用实例比较简单,对于zk来说,就是找"/services/应用"下的所有节点,构造ServiceInstance实例。
  接下来是核心:
  ServiceDiscoveryRegistry#getExportedURLs:找对应元数据,拼接rpc服务级别url,从而实现适配老逻辑;
  RegistryDirectory#notify:老逻辑,根据providerUrls构造Rpc协议Invoker,放入内存;怎么适配
  为了适配rpc服务级别注册发现,实现的关键是将现有的信息转换为原来注册中心的providerUrl,比如zk中/dubbo/{rpc服务}/providers存储的urls。暴力
  循环所有ServiceInstance,调用对应ServiceInstance的MetadataService Rpc服务,获取对端暴露的url。
  但是一般情况下,同一个应用提供的所有rpc服务都是一样的。revision
  所以这里会提出一个revision的概念,revision相同代表元数据相同。
  比如rpc方法A,在不同应用实例中,配置的超时时间可能不同,就会导致元数据不同。
  那么相同revision的情况下,多个ServiceInstance只需要调用一次MetadataService,调用次数取决于revision数量。
  在provider应用实例注册之前会计算一个revision,代表当前ServiceInstance负责的所有rpc服务信息。
  URLRevisionResolver#resolve:
  1)统计所有rpc服务参数、rpc服务方法,整理成一个有序String集合
  2)用URLRevisionResolver#hashCode计算哈希值
  3)将所有哈希值求和作为最终的revision
  其实也比较容易想到,这个revision就是提取当前应用实例的关键信息,形成一个摘要,比如md5等算法也可以。
  将这个revision连同ServiceInstance一同注册到注册中心,给consumer拼接provider的url做准备。
  比如zk注册中心/services/hahaha-app/127.0.0.1:21880节点数据包含dubbo.exported-services.revision,就是上面计算出来的revision。
  对于consumer来说,同一个revision对应同样的元数据,对应多个url(多个rpc服务),这些url称为模板url。
  ServiceDiscoveryRegistry#serviceRevisionExportedURLsCache:缓存模板url,应用名->revision->模板urls。
  根据模板url,多个ServiceInstance只需要改变host和port就能构造出多个providerUrl,适配老逻辑的同时减少了MetadataService远程调用。热点问题
  如果/services/hahaha-app节点下有多个应用实例,且revision相同。
  对于consumer来说请求谁来获取元数据呢?
  如果每个consumer都走第一个实例获取,那么将会导致热点问题。
  所以目前dubbo的实现是随机选实例调用MetadataService。适配逻辑
  整体流程如下。
  ServiceDiscoveryRegistry#getExportedURLs:
  1)计算revision对应模板url
  1-1)去除缓存中过期的revision
  1-2)重新根据revision初始化模板urls
  2)根据模板url,改变host和port,得到所有url
  ServiceDiscoveryRegistry#prepareServiceRevisionExportedURLs:
  去除过期revision
  ServiceDiscoveryRegistry#expungeStaleRevisionExportedURLs:
  从缓存里获取应用名对应revision和模板urls,删除注册中心中不存在的revision,保留注册中心中存在的revision。
  ServiceDiscoveryRegistry#initializeRevisionExportedURLs:初始化revision对应模板url。
  初始化模板url
  ServiceDiscoveryRegistry#initializeSelectedRevisionExportedURLs:
  为了避免热点问题,会先走RandomServiceInstanceSelector#select随机选择ServiceInstance调用MetadataService获取暴露urls,这部分忽略,我们直接看公共方法initializeRevisionExportedURLs。
  随机选实例之后,还有可能有revision的模板url没覆盖到,所以循环所有ServiceInstance再来走一次initializeRevisionExportedURLs。
  ServiceDiscoveryRegistry#initializeRevisionExportedURLs:
  判断缓存中是否有ServiceInstance.revision对应模板urls,
  如果没有,需要走rpc调用ServiceInstance对应MetadataService#getExportedURLs()获取对端暴露的所有rpc服务urls。
  这里MetadataService是一个rpc服务代理,和普通referenceConfig差不多,不深入分析。
  provider会收到consumer查询暴露url的rpc请求,返回自己暴露的所有url,即InMemoryWritableMetadataService#exportedServiceURLs。
  根据模板url构造所有url
  ServiceDiscoveryRegistry#cloneExportedURLs:最终根据模板urls构造所有provider暴露url,比如:
  dubbo://127.0.0.1:20990/org.apache.dubbo.demo.DemoService,
  dubbo://127.0.0.1:20880/org.apache.dubbo.demo.DemoService。
  总结
  本章分析了应用级别服务注册与发现的特性。
  启用该特性需要两步:
  1)使用DubboBootstrap Api,统一管理dubbo启动;
  2)RegistryConfig需要配置registry-type=service;
  启用该特性后zk中的注册数据会发生变化:
  启用前,在/dubbo/{rpc服务}/providers下列举了所有服务提供者。
  启用后,数据被分为三份:
  1)rpc服务->应用列表:/dubbo/config/mapping/{rpc服务}/{应用} - 注册时间
  2)应用->应用实例列表:/services/{应用}/{实例地址} - 实例信息
  3)元数据都:放在内存InMemoryWritableMetadataService本地内存元数据服务中
  最关键的是当前实例暴露的所有url,即原来/dubbo/{rpc服务}/providers下当前实例暴露的urls。
  应用级别会适配老逻辑,所有适配在启动阶段完成(1-7),整体流程如下:
  Provider侧:
  1)ServiceConfig#doExport:暴露rpc服务,开启底层通讯Server
  2)ServiceNameMapping#map:向配置中心发布rpc服务和应用名称的关系
  3)DubboBootstrap#exportMetadataService:暴露内置的元数据rpc服务,开启底层通讯Server
  4)DubboBootstrap#registerServiceInstance:向注册中心注册应用实例
  Consumer侧:
  5)ServiceDiscoveryRegistry#getServices:根据rpc服务,从配置中心获取应用列表
  比如zk取/dubbo/config/mapping/{rpc服务}下的所有znode
  注:设置ReferenceConfig.providedBy可以指定应用列表,则可以不依赖配置中心。
  6)ServiceDiscoveryRegistry#subscribeURLs:根据5的应用列表,从注册中心获取应用下所有实例
  比如zk取/services/{应用名}下所有znode
  7)ServiceDiscoveryRegistry#getExportedURLs:新老逻辑适配的核心。
  对6的部分应用实例,发起rpc调用MetadataService#getExportedURLs,获取provider暴露url,拼接后通知RegistryDirectory构建invoker。
  rpc调用次数取决于第六步中应用实例的revision数量
  8)rpc调用阶段,所有逻辑不变

7岁夏洛特与乔治聊天,被卡米拉严厉训斥,她后面的梅根眼神凌厉昨天,夏洛特公主参加了女王的葬礼,这应该算是她人生中的一个重大事件了。当天这位小公主是遇事不惊,时刻遵守着王室礼仪,有时候甚至比大两岁的哥哥乔治王子还要沉稳大气,因此她获得了人们的美人计不是吧阿sir,我又过敏了?秋天了换季了,突然我就皮肤容易发红发热发痒洗脸后皮肤紧绷干燥,甚至脱屑用着好好的护肤品,现在用开始有刺痛感了经常觉得皮肤补水没什么用,皮肤不能锁水外油内干,容易长痘,毛孔粗大无尽脱天天洗头还容易油,可能是犯了4大错误!改变几个习惯,帮你拯救大油头现如今,不管是年轻人还是老年人,都有头顶大事,但除了脱发外,让成年人崩溃的还有头发爱出油问题有的人洗完头蓬松柔顺,三五天都不出油有的人则连护发素都不敢用,第二天头发就已经贴上头皮了写给2004年一起听歌的女孩怀念那年发行的华语金曲那一年,是那一年,我还能摸到篮板的那一年,我们寻着七里香追到江南,遇到我们的爱,在宁静的夏天,我们的爱情就像一个寓言,你说我不是黄蓉,我说你是我的欧若拉和Lydia,我们一起快乐崇韩籍华裔乒坛女神叫樊振东东哥,想要与樊振东组跨国混双球迷们喜欢称呼樊振东为小胖,因为其块头比大胖梁靖崑小一些,而且樊振东也年轻,年纪轻轻便有了世界乒坛顶尖的战力,所以习惯称呼樊振东为小胖。但随着时间流转,樊振东也在渐渐变得成熟,年龄包头房价两连跌,包头楼市的神话结束了,包头楼市分析第43期呼和浩特房价下跌,包头楼市也降温了,包头房价三连跌。现在包头房价还在持续下跌当中,包头楼市的热度还是比较低。尤其是现在全国楼市热度都不高,包头楼市就更难走出独立的行情了。在上个月里12,又输了!西甲豪门倒下,轰12脚仍翻车,2场0胜,落后榜首8分西甲焦点大战,马竞坐镇主场迎战皇马,西蒙尼的球队以12的比分输球,遭遇各项赛事2连败。此役,马竞在控球率方面占优,也创造了更多的射门机会,可惜依旧主场沦陷,格里兹曼菲利克斯哑火,埃无视伊藤美诚!女乒名将对标孙颖莎,偶像丁宁,来自日本北京时间2022年9月20日,国际乒联公布新一期世界排名,之前在阿拉木图夺冠的早田希娜反超伊藤美诚,再次成为日本一姐,加上她在阿拉木图加冕双冠王,早田希娜可谓双喜临门。接受采访时,双轨交汇学府落地河西发展进入冲刺时刻近日,一场题为区域共聚向新双轨势向河西丰台河西区域发展论坛,在西山金茂府隆重举行,多位专家与顶流媒体嘉宾出席活动,论坛从多维度探讨了丰台河西地区发展大势。1号线支线(规划中)方案确工龄和缴费相同的退休人员,为何养老金却相差一两千元?怎么算的点击上方蓝色按钮,即可收听全文工龄和缴费情况均相同的退休人员,为何养老金相差一两千元?怎么算的?退休后,养老金成为大多数退休人员唯一的收入来源,养老金的多少直接关系到退休生活质量。主战奥地利,法国为保级非赢不可文羊城晚报全媒体记者刘毅欧洲国家联赛即将重燃战火,2018世界杯和上届欧国联双料冠军法国要为保级而战。欧国联A级四个小组倒数第一下赛季降级为B级,法国现在就是A级A组倒数第一。欧国
罗永浩获4亿融资,将取代手机的下一代终端火热,有哪些商机罗永浩离开直播间之后,又在AR领域发光发热了。根据36氪报道,罗永浩今年7月宣布创建的AR创业公司ThinRedLine近期已经完成了近4亿元的天使轮融资,截止目前ThinRedL年末直飞ampampamp中转回国优劣势对比和推荐随着最近美国直飞回国机票的大幅度降价,很多小伙伴们通过直观价格的对比,可能会选择直飞而放弃中转。那现在的话,我们给大家全方位给大家做个对比分析,大家再结合自身的情况,选取一个最优的6。39英寸OLED屏麒麟980的HUAWEIMate20Pro价格3499元性能怎样?HUAWEIMate20Pro是2018年10月发布的一款智能手机,已经超过4年龄,那么这款手机性能怎么样?手机屏幕这款手机的屏幕是6。39英寸超大OLED电容屏,它的主屏色彩是1步步高创始人段永平,高手有所为有所不为,35条深度思考值得收藏段永平,一个注定在商业史无法被忽视的存在。段永平的经历可谓传奇。他是国内第一个拍下来股神巴菲特午餐的男人,那时候他还带上了现在拼多多的创始人黄铮。而这个一手创办了小霸王步步高等著名双十一2000元档两款精品智能手表,苹果安卓分别怎么选?作为年末最重要的消费节点,双十一的号角也已经吹响。与往年一样,今年的大促节也是异常火爆。在诸多的品牌和产品中,外形时尚又极具科技感的智能穿戴设备,还是备受大众青睐。在现阶段也有许多GMT智能锁3D人脸识别的引力见一面就够了。这是3D人脸识别技术给予的浪漫,也是它的独特引力。对不少用户而言,人脸识别锁听起来像是新技术产品,但若说起刷脸支付,在便利店也随处可见。GMT智能锁应用的3D人脸识别阜阳已建成投运新能源汽车公共充电站11座在这充电又快又方便。10月24日早晨630,在阜城中清河游园地下公共停车充电场站,新能源车主何成将充电枪插入私家车充电接口,使用手机APP启动充电。在中清河游园运动40多分钟后,何荣耀80提上日程,设计是最大亮点,预计11月初发布不得不有些佩服现在的荣耀了,凭借着颜值和设计就这样打动了用户,自从来到2022年之后,似乎荣耀就一直霸占着国内销量的冠军宝座。前段时间的荣耀X40和荣耀X40GT这两款手机又再次得微信又更新!这些功能终于来了微信又有更新了!在群聊里别人可以多选了不需要像以前一样逐一好友关于群聊的更新也相当实用!以后在你退出微信群的时候可以选择保留聊天记录还有一个小更新可以一次性给微信好友同时发送最多9股市终将进入长期持续性牛市周二大盘以震荡为主,虽然收盘仍然小跌一个点,但是已经出现见底信号。上证50和创业板指数对于判断大盘见底极为重要,必须这二者都明显止跌企稳,大盘才谈得上调整结束。上证50指数已经回到四川南部两家银行抢客源引发冲突10月26日,网友爆料称,在四川省南部县建兴镇龙凤场发生了这样一幕,中国邮政储蓄银行建兴支局(下称建兴邮政)以及南部农商银行建兴分行(下称建兴信用社)为了更换村民社保卡一事发生了冲AIGC火了,VC正在催FA推案子文丨刘燕秋来源丨投中网我输入的关键词是冬日海面,鲸鱼,甜甜圈,c4d渲染,装饰管线。十分钟后,群里的机器人给我发过来一张色彩瑰丽且颇具想象力的图片鲸鱼从冬日微微冒烟的海面浮出,棕褐雷军孙正义相继押注,口腔医疗上游为何持续爆火?文观察者网吕栋2022年以来,复杂的国际环境充满不确定性的全球经济,以及疫情形势反复,导致国内机构募资环境进一步恶化活跃度明显下降。甚至在上半年,资本寒冬的说法也被重新提起,很多投A股双减政策后!ampampquot在线教育ampampquot迎来强风口,或迎来高速成长阶段?在线教育就是利用发达网络技术进行的知识传播。用传统的思维模式理解在线教育是错误的。从功能性而言,它是弱化的教育功能,是强化的知识拥有者向更广泛的大众进行知识推广和能力普及的功能。在试驾帝豪L雷神HiP1300km续航,还能边开边充电,谁与争锋?在今年国庆期间,有位特斯拉车主在高速因为堵车电量耗尽,最后只得花2000块钱叫拖车救援一时间,这件事成为众多新能源车主的强烈关注。他们关注的焦点在于,在新能源车型占有率不断提升的当突破1兆安放电我国新一代人造太阳科研再获新进展人民网北京10月21日电(记者杜燕飞)记者从中核集团获悉,10月19日,我国新一代人造太阳中国环流器二号M装置(HL2M)科学研究再获新进展,HL2M等离子体电流突破100万安培(郑州高新区一企业入选智能制造国家队大名单河南日报客户端记者何可近日,由工信部指导智能制造系统解决方案供应商联盟组织开展的关于符合智能制造系统解决方案供应商规范条件(第五批)企业名单申报评审结果正式出炉。经企业申报,公开公中国新能源汽车行业,又多了一家估值超1000亿的大厂每经记者孙磊每经编辑王月龙,裴健如10月20日,广汽集团(601238SH,股价12。42元,市值1300亿元)发布公告称,子公司广汽埃安新能源汽车股份有限公司(以下简称广汽埃安)小巨人释放大能量弘康环保获评国家级专精特新小巨人企业近日,国家工信部公布了2022年第四批专精特新小巨人名单,河南弘康环保科技有限公司荣登榜单。国家级专精特新小巨人企业是专精特新企业中的佼佼者,是专注于细分市场创新能力强市场占有率高iQOONeo7对比iQOONeo6,配置有哪些升级,一眼看懂iQOONeo6iQOONeo7性能骁龙8Gen1LPDDR5UFS3。1天玑9000LPDDR5UFS3。1屏幕6。62英寸120Hz三星E4AMOLED硬性直屏分辨率24001氢燃料电池汽车是未来吗?氢能汽车的可行性白日梦还是下一件大事?关注燃料电池和氢气汽车随着电动革命以越来越快的速度重新绘制汽车版图,你会认为电池电动汽车(BEV)已经赢得了争论以及其他形式的替代燃料,如氢燃中美日三国负债对比美国超30万亿,日本12。7万亿,中国呢?众所周知,衡量一个国家的整体经济实力,采取的主要依据是对应国家的国民生产总值,也就是GDP。从这一方面来讲,美国是当之无愧的世界第一经济强国,中国的GDP虽然与美国的存在一定的差距