什么是消息队列
消息队列是在消息传输过程中保存消息的容器。 通常有生产者和消费者两个角色:
- 生产者只负责发送数据到消息队列,谁消费他不管
- 消费者只负责从消息队列中取数据处理,谁发送数据他不管
常见消息队列中间件
- Kafka 高吞吐量, 实时日志采集
- RabbitMQ Erlang语言, 灵活性和易用性,中小规模应用
- RocketMQ 阿里出品, Java开发, 国内市场有很高知名度和应用案例
使用Python pika客户端, 写一个简单的生产者和消费者
1 | Producer ------> Queue -----> Consumer |
先连接Broker, 建立connection和channel
1 | import pika |
接着声明一个队列; 在RabbitMQ中,消息不是直接发送到队列,而是先发送到交换机(exchange), 由交换机发送到队列。
1 | channel.queue_declare(queue='hello') |
使用basic_publish发送消息。 这里使用默认交换机(‘’), routing_key参数指定为队列名称
1 | channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') |
同花顺做了一张2024年度资产收益图,大家可以看看
1 | vector<int> v(size); |
1 | for (int i = 0; i < vec.size(); ++i) { |
1 | vec1.insert(vec1.end(), vec2.begin(), vec2.end()); |
1 | sort(nums.begin(), nums.end()); |
1 | sort(nums.begin(), nums.end(), greater<int>()); |
1 | vector<vector<bool>> visited(rows, vector<bool>(cols, false)); |
Docker Compose 是一个用于运行多容器应用的工具, 通过一个docker-compose.yml
文件, 配置应用的服务、网络和卷,然后使用简单的命令启动或停止所有服务
当你有一个包含多个相互依赖的容器应用时,手动管理每个服务的启动、停止以及配置会比较复杂且容易出错
Docker Compose 提供了一种更简便的方法, 在单节点部署多个容器, 使得开发测试环境的一致性得到保证,同时简化了部署过程
下面演示如何使用 Docker Compose 在单个节点上部署一个包含 WordPress 和 MySQL 的简单网站。
官网上查找匹配版本安装, 我直接取最新版本安装
1 | curl -L "https://github.com/docker/compose/releases/download/v2.34.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose |
在我之前的项目中,对微服务升级采用的做法是删除整个namespace, 再重新应用所有yaml。 这种方式简单粗暴,但是不可避免的导致服务中断,影响了用户体验
为了解决更新服务导致的服务中断问题, Kubernetes提供了一种有效的服务升级方式 —— 滚动更新(Rolling Update)
滚动更新是一种部署策略。 允许用户逐步替换旧的Pod实例为新版本,而不是一次性替换所有Pod,从而实现零停机时间的部署更新。 解决了如下问题:
RollingUpdate策略有两个重要参数:
说明: 对于关键业务, 可以用保守的设置, 比如maxUnavailable=0, maxSurge=1; 较大的maxSurge可以加快更新速度,但增加了集群压力; 根据实际情况调整这两个参数
写一个简单的微服务, Pod副本数设置为5, 观察Kubernetes滚动更新过程
来看一张经典的图
Rocky Linux 9
1 | rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc |
在/etc/yum.repos.d/目录下创建一个名为rabbitmq.repo的文件,并添加以下内容:
我在VMware ESXi上,用官方Rockylinux minimal ISO装了一台Linux机器。导出OVA文件发现大小有3个G。查看OVA文件,发现有个ISO文件占了2G,这个ISO文件用不到,如何删除?
1 | # tar tvf va.ova |
Poweroff虚拟机,修改虚拟机配置,把光驱删掉,再重新导出OVA即可