首页 文章 精选 留言 我的

精选列表

搜索[环境],共10000篇文章
优秀的个人博客,低调大师

docker toolbox环境下 使用阿里云容器镜像加速器

1、启动Docker Quickstart Terminal,等待docker虚拟机启动完毕2、在Docker Quickstart Terminal 命令行输入命令:docker-machine ssh default意思是采用docker-machine命令,以ssh方式,从当前 Docker Quickstart Terminal 窗口登录名称为default的docker虚拟机3、此时窗口进入到了docker虚拟机,docker-machine命令已经失效。linux命令生效。输入cat /var/lib/boot2docker/profile查看当前配置文件,其中第一句中EXTRA_ARGS='--registry-mirror=http://f1361db2.m.daocloud.ioregistry-mirror=后的网址即为当前镜像地址。4、使用如下命令即可改为阿里云镜像地址: sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://8888888.mirror.aliyuncs.com |g" /var/lib/boot2docker/profile 注意:需要登录阿里云容器镜像服务,获取自己的加速地址5、以上第2步中,是使用Docker Quickstart Terminal窗口登录的docker虚拟机,Docker Quickstart Terminal窗口不支持鼠标粘贴复制操作,使用不是太方便。其实在第1步开启docker虚拟机以后,在Docker Quickstart Terminal窗口上看得到虚拟机的IP信息,使用其他ssh工具登录此IP,也可以登录docker虚拟机。

优秀的个人博客,低调大师

阿里云ACK环境下采集Flexvolume数据卷的Metric信息

Flexvolume数据卷采集Metric说明 Flexvolume插件采集Metric数据依赖于Kubernetes的支持,有以下注意事项: Kubernetes从1.13版本开始支持Flexvolume数据卷的监控数据采集;实现详情;阿里云ACK不支持Kubernetes 1.13版本,所以需要您的Kubernetes集群版本大于等于1.14; Flexvolume要求版本大于等于v1.14.6.15-8d3b7e7-aliyun; 阿里云Flexvolume目前支持云盘、NAS两种卷的Metric采集,oss卷暂不支持; Metric采集只支持PV、PVC数据卷,通过InlineVolume配置的数据卷不支持采集; 数据卷Metric采集默认没有打开,需要按照下面方法进行配置: 查看云盘卷Metric 在集群、Flexvolume版本满足上

优秀的个人博客,低调大师

Node 13.0 发布,服务器端的 JavaScript 运行环境

Node 13.0已经发布,这个版本标志着 Node.js 12.x转为长期支持(LTS)。Node.js 13 版本取代了版本 12,13.0 版本不会推广到 LTS。该版本提供了更快的启动速度和更好的默认堆限制、V8、TLS、llhttp 的更新、新特性(包括诊断报告)、以及对 Work Thread、N-API 等的更新。 V8 升级:V8 更新到 V8 7.8,带来性能调整和改进 默认情况下启用Full ICU 稳定的Workers API 采用较新的 C++ 特性,并利用较新的编译器优化和安全性增强 在支持 Python 3 构建 Node.js 方面也取得了进展 发布说明: https://github.com/nodejs/node/blob/master/BUILDING.md#platform-list

优秀的个人博客,低调大师

容器服务及相关云环境几次故障和问题排查记录

1. 镜像仓库被设置为公有,导致镜像泄露风险: 错误现象: 公有镜像仓库可能会被云上其它用户拉取,导致泄露镜像安全风险;部分运维或者开发同学,因为没有设置准确的 secret 到 Deployment,为了解决无法拉取镜像问题,直接开放镜像仓库为公有。 解决方法: 镜像仓库的命名空间一定要设置为私有,准确设置绑定云效中docker 镜像账号,通过云效发布应用; 严格设定容器镜像仓库的维护权限; 2. 镜像拉取失败: 错误现象: ## 查看 pod 部署日志 kubectl logs {pod} ## 错误信息 Failed to pull image "registry-vpc.{region_id}.aliyuncs.com/{app_name}-daily/{app_n

优秀的个人博客,低调大师

RocketMQ实战:生产环境中,autoCreateTopicEnable为什么不能设置为true

1、现象 很多网友会问,为什么明明集群中有多台Broker服务器,autoCreateTopicEnable设置为true,表示开启Topic自动创建,但新创建的Topic的路由信息只包含在其中一台Broker服务器上,这是为什么呢? 期望值:为了消息发送的高可用,希望新创建的Topic在集群中的每台Broker上创建对应的队列,避免Broker的单节点故障。 现象截图如下: 正如上图所示,自动创建的topicTest5的路由信息: topicTest5只在broker-a服务器上创建了队列,并没有在broker-b服务器创建队列,不符合期望。 默认读写队列的个数为4。 我们再来看一下RocketMQ默认topic的路由信息截图如下: 从图中可以默认Topic的路由信息为broker-a、broker-b上各8个队列。 2、思考 默认Topic的路由信息是如何创建的? Topic的路由信息是存储在哪里?Nameserver?broker? RocketMQ Topic默认队列个数是多少呢? 3、原理 3.1 RocketMQ基本路由规则 Broker在启动时向Nameserver注册存储在该服务器上的路由信息,并每隔30s向Nameserver发送心跳包,并更新路由信息。 Nameserver每隔10s扫描路由表,如果检测到Broker服务宕机,则移除对应的路由信息。 消息生产者每隔30s会从Nameserver重新拉取Topic的路由信息并更新本地路由表;在消息发送之前,如果本地路由表中不存在对应主题的路由消息时,会主动向Nameserver拉取该主题的消息。 回到本文的主题:autoCreateTopicEnable,开启自动创建主题,试想一下,如果生产者向一个不存在的主题发送消息时,上面的任何一个步骤都无法获取一个不存在的主题的路由信息,那该如何处理这种情况呢? 在RocketMQ中,如果autoCreateTopicEnable设置为true,消息发送者向NameServer查询主题的路由消息返回空时,会尝试用一个系统默认的主题名称(MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC),此时消息发送者得到的路由信息为: 但问题就来了,默认Topic在集群的每一台Broker上创建8个队列,那问题来了,为啥新创建的Topic只在一个Broker上创建4个队列? 3.2 探究autoCreateTopicEnable机制 3.2.1 默认Topic路由创建时机 温馨提示:本文不会详细跟踪整个创建过程,只会点出源码的关键入口点,如想详细了解NameServer路由消息、消息发送高可用的实现原理,建议查阅笔者的书籍《RocketMQ技术内幕》第二、三章。 Step1:在Broker启动流程中,会构建TopicConfigManager对象,其构造方法中首先会判断是否开启了允许自动创建主题,如果启用了自动创建主题,则向topicConfigTable中添加默认主题的路由信息。 TopicConfigManager构造方法 备注:该topicConfigTable中所有的路由信息,会随着Broker向Nameserver发送心跳包中,Nameserver收到这些信息后,更新对应Topic的路由信息表。 BrokerConfig的defaultTopicQueueNum默认为8。两台Broker服务器都会运行上面的过程,故最终Nameserver中关于默认主题的路由信息中,会包含两个Broker分别各8个队列信息。 Step2:生产者寻找路由信息生产者首先向NameServer查询路由信息,由于是一个不存在的主题,故此时返回的路由信息为空,RocketMQ会使用默认的主题再次寻找,由于开启了自动创建路由信息,NameServer会向生产者返回默认主题的路由信息。然后从返回的路由信息中选择一个队列(默认轮询)。消息发送者从Nameserver获取到默认的Topic的队列信息后,队列的个数会改变吗?答案是会的,其代码如下: MQClientInstance#updateTopicRouteInfoFromNameServer 温馨提示:消息发送者在到默认路由信息时,其队列数量,会选择DefaultMQProducer#defaultTopicQueueNums与Nameserver返回的的队列数取最小值,DefaultMQProducer#defaultTopicQueueNums默认值为4,故自动创建的主题,其队列数量默认为4。 Step3:发送消息 DefaultMQProducerImpl#sendKernelImpl 在消息发送时的请求报文中,设置默认topic名称,消息发送topic名称,使用的队列数量为DefaultMQProducer#defaultTopicQueueNums,即默认为4。 Step4:Broker端收到消息后的处理流程服务端收到消息发送的处理器为:SendMessageProcessor,在处理消息发送时,会调用super.msgCheck方法: AbstractSendMessageProcessor#msgCheck在Broker端,首先会使用TopicConfigManager根据topic查询路由信息,如果Broker端不存在该主题的路由配置(路由信息),此时如果Broker中存在默认主题的路由配置信息,则根据消息发送请求中的队列数量,在Broker创建新Topic的路由信息。这样Broker服务端就会存在主题的路由信息。 在Broker端的topic配置管理器中存在的路由信息,一会向Nameserver发送心跳包,汇报到Nameserver,另一方面会有一个定时任务,定时存储在broker端,具体路径为${ROCKET_HOME}/store/config/topics.json中,这样在Broker关闭后再重启,并不会丢失路由信息。 广大读者朋友,跟踪到这一步的时候,大家应该对启用自动创建主题机制时,新主题是的路由信息是如何创建的,为了方便理解,给出创建主题序列图: 3.2.2 现象分析 经过上面自动创建路由机制的创建流程,我们可以比较容易的分析得出如下结论: 因为开启了自动创建路由信息,消息发送者根据Topic去NameServer无法得到路由信息,但接下来根据默认Topic从NameServer是能拿到路由信息(在每个Broker中,存在8个队列),因为两个Broker在启动时都会向NameServer汇报路由信息。此时消息发送者缓存的路由信息是2个Broker,每个Broker默认4个队列(原因见3.2.1:Step2的分析)。消息发送者然后按照轮询机制,发送第一条消息选择(broker-a的messageQueue:0),向Broker发送消息,Broker服务器在处理消息时,首先会查看自己的路由配置管理器(TopicConfigManager)中的路由信息,此时不存在对应的路由信息,然后尝试查询是否存在默认Topic的路由信息,如果存在,说明启用了autoCreateTopicEnable,则在TopicConfigManager中创建新Topic的路由信息,此时存在与Broker服务端的内存中,然后本次消息发送结束。此时,在NameServer中还不存在新创建的Topic的路由信息。 这里有三个关键点: 启用autoCreateTopicEnable创建主题时,在Broker端创建主题的时机为,消息生产者往Broker端发送消息时才会创建。 然后Broker端会在一个心跳包周期内,将新创建的路由信息发送到NameServer,于此同时,Broker端还会有一个定时任务,定时将内存中的路由信息,持久化到Broker端的磁盘上。 消息发送者会每隔30s向NameServer更新路由信息,如果消息发送端一段时间内未发送消息,就不会有消息发送集群内的第二台Broker,那么NameServer中新创建的Topic的路由信息只会包含Broker-a,然后消息发送者会向NameServer拉取最新的路由信息,此时就会消息发送者原本缓存了2个broker的路由信息,将会变为一个Broker的路由信息,则该Topic的消息永远不会发送到另外一个Broker,就出现了上述现象。 原因就分析到这里了,现在我们还可以的大胆假设,开启autoCreateTopicEnable机制,什么情况会在两个Broker上都创建队列,其实,我们只需要连续快速的发送9条消息,就有可能在2个Broker上都创建队列,验证代码如下: public static void main(String[] args) throws MQClientException, InterruptedException { DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name"); producer.setNamesrvAddr("127.0.0.1:9876"); producer.start(); for (int i = 0; i < 9; i++) { try { Message msg = new Message("TopicTest10" ,"TagA" , ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET)); SendResult sendResult = producer.send(msg); System.out.printf("%s%n", sendResult); } catch (Exception e) { e.printStackTrace(); Thread.sleep(1000); } } producer.shutdown(); } 验证结果如图所示: 本文就分析到这里了,大家如果喜欢这篇文章,麻烦大家帮忙点点赞,同时大家也可以给作者留言,告知在使用RocketMQ的过程中遇到的疑难杂症,与作者互动。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册