中间件上云部署 rocketmq

news2024/11/26 2:56:50

中间件上云部署 rocketmq

  • rocketmq部署
  • 一、rokectmq介绍
  • 二、rokectmq特性
  • 三、使用rocketmq理由
  • 四、rocketmq 核心概念
  • 五、rocketmq角色
  • 六、rocketmq集群部署方式
  • 七、rocketmq集群部署
    • 7.1 环境说明
    • 7.2 构建rocketmq镜像
    • 7.3 获取rocketmq-dashboard镜像
    • 7.4 rocketmq部署描述文件编写
      • 7.4.1 rocketmq-namesrv部署描述文件
      • 7.4.2 rocketmq-broker部署描述文件
      • 7.4.3 rocketmq-dashboard部署描述文件
    • 7.5 执行部署描述文件
      • 7.5.1 rocketmq-namesrv部署
      • 7.5.2 rocketmq-broker部署
      • 7.5.3 rocketmq-dashboard部署
    • 7.6 调整副本
    • 7.7 创建ingress资源对象实现域名访问dashboard

rocketmq部署

一、rokectmq介绍

Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟、高性能和可靠性、万亿级别的容量和灵活的可伸缩性。

二、rokectmq特性

  • 发布/订阅消息传递模型
  • 定期消息传递
  • 按时间或偏移量进行消息回溯
  • 日志中心流
  • 大数据集成
  • 在同一队列中可靠的FIFO和严格的有序消息传递
  • 有效的拉伸消费模式
  • 在一个队列中有百万级的消息积累容量
  • 多种消息传递协议,如JMS和OpenMessaging
  • 灵活的分布式扩展部署体系结构
  • 快速批量消息交换系统。
  • 各种消息过滤机制,如SQL和标记
  • 用于隔离测试和云隔离集群的Docker映像。
  • 用于配置、度量和监视的功能丰富的管理仪表板

三、使用rocketmq理由

  • 强调集群无单点,可扩展,任意一点高可用,水平可扩展
    ​ 方便集群配置,而且容易扩展(横向和纵向),通过slave的方式每一点都可以实现高可用

  • 支持上万个队列,顺序消息
    顺序消费是实现在同一队列的,如果高并发的情况就需要队列的支持,rocketmq可以满足上万个队列同时存在

  • 任性定制你的消息过滤
    rocketmq提供了两种类型的消息过滤,也可以说三种可以通过topic进行消息过滤、可以通过tag进行消息过滤、还可以通过filter的方式任意定制过滤

  • 消息的可靠性(无Buffer,持久化,容错,回溯消费)
    消息无buffer就不用担心buffer回满的情况,rocketmq的所有消息都是持久化的,生产者本身可以进行错误重试,发布者也会按照时间阶梯的方式进行消息重发,消息回溯说的是可以按照指定的时间进行消息的重新消费,既可以向前也可以向后(前提条件是要注意消息的擦除时间)

  • 海量消息堆积能力,消息堆积后,写入低延迟
    针对于provider需要配合部署方式,对于consumer,如果是集群方式一旦master返现消息堆积会向consumer下发一个重定向指令,此时consumer就可以从slave进行数据消费了

  • 分布式事务
    rocketmq对这一块说的不是很清晰,而且官方也说现在这块存在缺陷(会令系统pagecache过多),所以线上建议还是少用为好

  • 消息失败重试机制
    针对provider的重试,当消息发送到选定的broker时如果出现失败会自动选择其他的broker进行重发,默认重试三次,当然重试次数要在消息发送的超时时间范围内。
    针对consumer的重试,如果消息因为各种原因没有消费成功,会自动加入到重试队列,一般情况如果是因为网络等问题连续重试也是照样失败,所以rocketmq也是采用阶梯重试的方式。

  • 定时消费
    除了上面的配置,在发送消息是也可以针对message设置setDelayTimeLevel

  • 活跃的开源社区
    现在rocketmq成为了apache的一款开源产品,活跃度也是不容怀疑的

  • 成熟度
    经过双十一考验

四、rocketmq 核心概念

  • NameServer
    这里我们可以理解成类似于zk的一个注册中心,而且rocketmq最初也是基于zk作为注册中心的,现在相当于为rocketmq自定义了一个注册中心,代码不超过1000行。RocketMQ 有多种配置方式可以令客户端找到 Name Server, 然后通过 Name Server 再找到 Broker,分别如下,优先级由高到低,高优先级会覆盖低优先级。客户端提供http和ip:端口号的两种方式,推荐使用http的方式可以实现nameserver的热部署。

  • Push Consumer
    Consumer 的一种,应用通常通过 Consumer 对象注册一个 Listener 接口,一旦收到消息,Consumer 对象立刻回调 Listener 接口方法,类似于activemq的方式

  • Pull Consumer
    Consumer 的一种,应用通常主动调用 Consumer 的拉消息方法从 Broker 拉消息,主动权由应用控制

  • Producer Group
    一类producer的集合名称,这类producer通常发送一类消息,且发送逻辑一致

  • Consumer Group
    ​ 同上,consumer的集合名称

  • Broker
    消息中转的角色,负责存储消息(实际的存储是调用的store组件完成的),转发消息,一般也称为server,同jms中的provider

  • Message Filter
    可以实现高级的自定义的消息过滤

  • Master/Slave
    集群的主从关系,broker的name相同,brokerid=0的为主master,大于0的为从slave,可以一主多从,但一从只能有一主

五、rocketmq角色

RocketMQ由四部分构成:Producer、Consumer、Broker和NameServer
启动顺序:NameServer->Broker
为了消除单点故障,增加可靠性或增大吞吐量,可以在多台机器上部署多个nameserver和broker,并且为每个broker部署1个或多个slave

在这里插入图片描述

Topic & message queue:一个分布式消息队列中间件部署好以后,可以给很多个业务提供服务,同一个业务也有不同类型的消息要投递,这些不同类型的消息以不同的 Topic 名称来区分。所以发送和接收消息前,先创建topic,针对某个 Topic 发送和接收消息。有了 Topic 以后,还需要解决性能问题 。 如果一个Topic 要发送和接收的数据量非常大, 需要能支持增加并行处理的机器来提高处理速度,这时候一个 Topic 可以根据需求设置一个或多个 Message Queue, Message Queue 类似分区或 Partition 。Topic有了多个 Message Queue 后,消息可以并行地向各个Message Queue 发送,消费者也可以并行地从多个 Message Queue 读取消息并消费 。

六、rocketmq集群部署方式

  • 单Master模式
    只有一个 Master节点
    优点:配置简单,方便部署
    缺点:这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用

  • 多Master模式
    一个集群无 Slave,全是 Master,例如 2 个 Master 或者 3 个 Master
    优点:配置简单,单个Master 宕机或重启维护对应用无影响,在磁盘配置为RAID10 时,即使机器宕机不可恢复情况下,由与 RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
    缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响

  • 多Master多Slave模式(异步复制)
    ​ 每个 Master 配置一个 Slave,有多对Master-Slave, HA,采用异步复制方式,主备有短暂消息延迟,毫秒级。
    ​ 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从 Slave消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。
    ​ 缺点: Master 宕机,磁盘损坏情况,会丢失少量消息。

  • 多Master多Slave模式(同步双写)
    每个 Master 配置一个 Slave,有多对Master-Slave, HA采用同步双写方式,主备都写成功,向应用返回成功。
    优点:数据与服务都无单点, Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
    缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能

七、rocketmq集群部署

rocketmq-operator都是不能很灵活的调整副本数,毕竟每个副本对应其唯一的配置的文件,不同的broker实例使用的配置文件都是不一样的,都存在差异,一旦副本变化了,就不能很好的和broker 的配置文件内容一 一对应起来。

接下来我们创建一个基于k8s部署单master以及多master部署rocketmq集群,并且只需要一个broker配置文件,多个broker实例会自动基于该broker配置文件模板,自动生成不同broker实例的broker配置文件,扩容或者伸缩rocketmq集群 nameserver或者broker副本数的时候不需要理会配置文件,仅仅是调整实例的副本即可。

备注:该方案不适合有slave节点的部署方式。

7.1 环境说明

  • 提供持久存储动态供给功能
[root@k8s-master01 ~]# kubectl get storageclass
NAME         PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client   fuseim.pri/ifs   Delete          Immediate           false                  8d
  • 提供metallb功能

按官网提供的方式修改即可,链接:https://metallb.universe.tf/

# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.5/config/manifests/metallb-native.yaml
# vim ippool.yaml
# cat ippool.yaml

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.10.100-192.168.100.110
# kubectl create -f ippool.yaml
# vim l2.yaml
# cat l2.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
# kubectl create -f l2.yaml
  • 提供ingress nginx controller
# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
部署前修改362行,把Local修改为Cluster
# kubectl apply -f deploy.yaml
# kubectl get ns
NAME               STATUS   AGE
ingress-nginx      Active   8s
# kubectl get pods -n ingress-nginx
NAME                                        READY   STATUS      RESTARTS   AGE
ingress-nginx-admission-create-r9gqt        0/1     Completed   0          62s
ingress-nginx-admission-patch-r24d6         0/1     Completed   0          62s
ingress-nginx-controller-7844b9db77-mxrgn   1/1     Running     0          62s
# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.96.21.124    192.168.10.100   80:31844/TCP,443:32294/TCP   49m
ingress-nginx-controller-admission   ClusterIP      10.109.18.235   <none>           443/TCP                      49m
  • 容器镜像仓库

没有本地容器镜像仓库,可以使用hub.dockcer.com。

7.2 构建rocketmq镜像

rocketmq-namesrv和 rocketmq-broker共用同一个镜像,仅仅是启动命令和启动参数不一样,后期可灵活的通过调整启动命令和启动参数来实现不同的效果(比如通过挂载configMap的方式自定义rocketmq的配置文件,而不需要重建rocketmq的镜像。

# vim Dockerfile
# cat Dockerfile
 
FROM   docker.io/library/openjdk:8u102-jdk AS JDK
LABEL mail=admin@zxk.com
RUN  rm -vf /etc/localtime \
     && ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
     && echo "Asia/Shanghai" > /etc/timezone \
     && export LANG=zh_CN.UTF-8
RUN  curl -k https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip \
         -o /tmp/rocketmq-all-4.9.4-bin-release.zip    \
     && unzip /tmp/rocketmq-all-4.9.4-bin-release.zip -d /tmp/ \
     && mv /tmp/rocketmq-all-4.9.4-bin-release /opt/rocketmq \
     && rm -rf /tmp/*
 
RUN  sed -ir '/-Xmx/c JAVA_OPT=${JAVA_OPT}' /opt/rocketmq/bin/runserver.sh \
     && sed -ir '/-Xmx/c JAVA_OPT=${JAVA_OPT}' /opt/rocketmq/bin/runbroker.sh
 
##  运行 MQ 应用时候可以通过环境变量设置 jvm 数值,如:JAVA_OPT="-server -Xms2g -Xmx2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
 
ENV     ROCKETMQ_HOME=/opt/rocketmq
WORKDIR $ROCKETMQ_HOME
# docker build -t docker.io/nextgo/rocketmq:v1 . --no-cache
# docker images
REPOSITORY                                TAG         IMAGE ID       CREATED          SIZE
nextgo/rocketmq                        v1          ed01df462eb3   31 seconds ago   677MB
# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: nextgo 替换为自己仓库的用户名
Password: 替换为自己仓库的用户名
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
# docker push docker.io/nextgo/rocketmq:v1

7.3 获取rocketmq-dashboard镜像

rocketmq-dashboard是一个可视化的rocketmq集群运维监控工具。

7.4 rocketmq部署描述文件编写

7.4.1 rocketmq-namesrv部署描述文件

# vim rocketmq-namesrv.yaml
# cat rocketmq-namesrv.yaml
---
apiVersion: v1
kind: Namespace
metadata:
  name: rocketmq
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rocketmq-namesrv
  namespace: rocketmq
spec:
  serviceName: rocketmq-namesrv
  replicas: 2
  selector:
    matchLabels:
      app: rocketmq-namesrv
  template:
    metadata:
      labels:
        app: rocketmq-namesrv
    spec:
      containers:
      - name: rocketmq-namesrv-container
        image: docker.io/nextgo/rocketmq:v1
        imagePullPolicy: IfNotPresent
        command:
        - bin/mqnamesrv
        env:
        - name: JAVA_OPT
          value: -server -Xms2g -Xmx2g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-namesrv
  namespace: rocketmq
  labels:
    app: rocketmq-namesrv
spec:
  ports:
  - port: 9876
    protocol: TCP
    targetPort: 9876
  selector:
    app: rocketmq-namesrv
  type: ClusterIP
# dig -t a rocketmq-namesrv.rocketmq.svc.cluster.local. @10.96.0.10

7.4.2 rocketmq-broker部署描述文件

# vim rocketmq-broker.yaml
# cat rocketmq-broker.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: rocketmq-broker
  namespace: rocketmq
spec:
  serviceName: rocketmq-broker
  replicas: 2
  selector:
    matchLabels:
      app: rocketmq-broker
  template:
    metadata:
      labels:
        app: rocketmq-broker
    spec:
      containers:
      - name: rocketmq-broker
        image: nextgo/rocketmq:v1
        imagePullPolicy: IfNotPresent
        command:
        - bin/mqbroker
        - --namesrvAddr=rocketmq-namesrv.rocketmq.svc.cluster.local.:9876
        env:
        - name: JAVA_OPT
          value: -server -Xms1g -Xmx1g
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate

7.4.3 rocketmq-dashboard部署描述文件

部署一个能实现运维监控rocketmq的可视化web应用。

部署rocketmq-dashboard应用时候重点关注部署文件里面的env环境变量参数JAVA_OPTS,该env环境变量(JAVA_OPTS)决定了应用是否能成功连接到 rocketmq-namesrv 服务。

# vim rocketmq-dashboard.yaml
# cat rocketmq-dashboard.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: rocketmq-dashboard
  namespace: rocketmq
  labels:
    app: rocketmq-dashboard
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rocketmq-dashboard
  template:
    metadata:
      labels:
        app: rocketmq-dashboard
    spec:
      containers:
      - name: rocketmq-dashboard
        image: apacherocketmq/rocketmq-dashboard:latest
        imagePullPolicy: IfNotPresent
        env:
        - name: JAVA_OPTS
          value: -Drocketmq.namesrv.addr=rocketmq-namesrv.rocketmq.svc.cluster.local.:9876
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: rocketmq-dashboard
  namespace: rocketmq
  labels:
    app: rocketmq-dashboard
spec:
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: rocketmq-dashboard
  type: ClusterIP

7.5 执行部署描述文件

7.5.1 rocketmq-namesrv部署

# kubectl create -f rocketmq-namesrv.yaml
# kubectl get pods -n rocketmq
NAME                                 READY   STATUS    RESTARTS   AGE
...
rocketmq-namesrv-0                   1/1     Running   0          14m
rocketmq-namesrv-1                   1/1     Running   0          13m

7.5.2 rocketmq-broker部署

# kubectl create -f rocketmq-broker.yaml
# kubectl get pods -n rocketmq
NAME                                 READY   STATUS    RESTARTS   AGE
rocketmq-broker-0                    1/1     Running   0          4m16s
rocketmq-broker-1                    1/1     Running   0          4m15s

7.5.3 rocketmq-dashboard部署

# kubectl create -f rocketmq-dashboard.yaml
# kubectl get pods -n rocketmq
NAME                                 READY   STATUS    RESTARTS   AGE
rocketmq-dashboard-f4ccdf496-sv984   1/1     Running   0          73s

7.6 调整副本

调整rocket-namesrv副本数

kubectl scale sts rocketmq-namesrv --replicas=3 -n rocketmq
# kubectl get pods -n rocketmq
NAME                                 READY   STATUS    RESTARTS   AGE
rocketmq-namesrv-0                   1/1     Running   0          15m
rocketmq-namesrv-1                   1/1     Running   0          14m
rocketmq-namesrv-2                   1/1     Running   0          4s
调整rocket-broker副本数,集群节点内存要大于副本数中内存。
kubectl scale sts rocketmq-broker --replicas=3 -n rocketmq

7.7 创建ingress资源对象实现域名访问dashboard

# vim rocketmq-dashboard-ingress.yaml
# cat rocketmq-dashboard-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-rocketmq-dashboard                    #自定义ingress名称
  namespace: rocketmq
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: rocketmq-dashboard.zxk.com                   # 自定义域名
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: rocketmq-dashboard     # 对应上面创建的service名称
            port:
              number: 8080
# kubectl create -f rocketmq-dashboard-ingress.yaml
# kubectl get ingress -n rocketmq
NAME                         CLASS    HOSTS                            ADDRESS   PORTS   AGE
ingress-rocketmq-dashboard   <none>   rocketmq-dashboard.zxk.com             80      31s

在这里插入图片描述

在这里插入图片描述

然后在页面中进行查看监控信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/770380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ROS学习——常用API

一、初始化 1.作用 ROS初始化函数 2.参数列表 argc------------封装实参的个数&#xff08;n1&#xff09; argv------------封装参数的数组 name----------为 节点命名&#xff0c;需要保证其唯一性 options---------节点启动选项 返回值&#xff1a;void 3.使用细节 …

超低输入电压升压电路解决方案

便携式产品一般都采用电池供电&#xff0c;而因为成本和体积方面的考虑&#xff0c;在设计上有减少使用电池数量及体积的趋势。另外&#xff0c;亦因全球能源问题&#xff0c;各种各类的电池使用已备受关注了。当中包括太阳能电池及燃料电池。 而这样就会影响到电源电压比设备所…

人工智能革命|是疯狂炒作还是大势所趋?

近期关于人工智能的话题与炒作激增。如果你看看过去五年“AI”一词的搜索量&#xff0c;就会发现它一直停滞&#xff0c;直到2022年11月30日&#xff0c;OpenAI 凭借 ChatGPT 引发了人工智能革命。 Google 趋势 — 过去 5 年“AI”搜索量 短短六个月内&#xff0c;究竟发生了…

系统学习Linux-搭建基础服务器实验集合

实验分析 主机DHCP分配静态253地址&#xff0c;需配置网关主机DNF静态分配252地址域名机dhcp自动分配地址要求251中继主机添加成两块网卡并配置两个网段的网卡地址DNS解析域名并把客户机251装apache、tomcat、ngnix并把根目录设置成web下 一、搭建DHCP服务器 vm1网卡 配置网…

「硬核」实操如何拥有一个自己的数字人模型

一、前言 近年来&#xff0c;随着人工智能技术&#xff0c;VR&#xff0c;元宇宙等技术的发展&#xff0c;数字人&#xff08;Digital Human&#xff09;逐渐成为研究的热点之一&#xff0c;数字人是指通过计算机技术模拟出的具有人类外表&#xff0c;动作和语言能力的虚拟人物…

【想要学习适当技能来处理复杂数据科学项目和“用数据思考”?看《现代数据科学(R语言·第2版)》就对了】

《现代数据科学(R语言●第2版)》是面向本科生的综合性数据科学教材&#xff0c;通过结合使用统计和计算方式来解决现实中的数据问题。本书不仅专注于案例或编程语法&#xff0c;还讲述如何利用最新R/RStudio计算环境中的统计编程&#xff0c;从各种数据中提取有意义的信息&…

Jmeter性能测试通过插件监控服务器资源使用情况

Jmeter作为性能测试的首选工具&#xff0c;那么在性能测试过程中如何方便快捷的监测服务器资源使用情况&#xff1f; 可以通过jmeter 安装"PerfMon(Servers Performance Monitoting)"插件并配合服务端资源监控工具进行实现&#xff0c;详细操作流程如下&#xff1a;…

微服务部署架起App运维的高速通道

今天来说下微服务&#xff0c;我们知道微服务在 App 开发中具备模块化开发、独立部署扩展、问题隔离等特点&#xff0c;这种微服务架构模式能够使应用程序更具弹性、可扩展和可维护&#xff0c;能够更好地应对快速变化的需求和规模的增长。 准备通过系统的梳理说一说微服务部署…

谷歌云构建漏洞容易引发潜在的供应链攻击

云安全公司Orca Security在谷歌云构建&#xff08;Google Cloud Build&#xff09;服务中发现了一个关键的设计漏洞&#xff0c;该漏洞会让攻击者的权限升级&#xff0c;使他们可以在未经授权的情况下访问谷歌构件注册表&#xff08;Google Artifact Registry&#xff09;代码库…

数学建模-多元线性回归分析

回归分析介绍和分类 数据分类及数据的来源 线性回归 四种模型的解释、虚拟变量的设置以及交互项的解释 3个定量&#xff0c;7个定类插入&#xff0c;表格&#xff0c;包含标题&#xff0c;标题换黑色 可以右键&#xff0c;复制表格&#xff0c;excel中设置三线表 ,gen(A)是参数…

基于Gerapy部署分布式爬虫管理平台

文章目录 1. 服务器安装scrapyd1.1 scrapyd安装1.2 scrapyd配置允许外网访问1.3 服务器安全组开启端口1.4 服务器防火墙开启端口1.5 scrapyd测试 2. Gerapy 环境搭建2.1 gerapy安装2.2 gerapy测试2.3 项目部署2.4 定时任务2.5 线上代码修改 Gerapy是一个Python的分布式爬虫部署…

Python 5类数据容器总结

数据容器简单分类&#xff1a; 是否支持下标索引 支持&#xff08;序列类型&#xff09;&#xff1a;列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字符串&#xff08;str&#xff09;不支持&#xff08;非序列类型&#xff09;&#xff1a;集合&…

论文解读: 2023-Lost in the Middle: How Language Models Use Long Contexts

大模型使用的关键在于Prompt&#xff0c;然而大模型存在幻觉现象&#xff0c;如何减少这种现象的发生成为迫切解决的问题。外部知识库LLM的方法可以缓解大模型幻觉&#xff0c;但是如何撰写Prompt才能发挥LLM的性能。下面介绍这篇论文说明上下文信息出现在Prompt什么位置使模型…

Python 算法基础篇之 Python 语言回顾:变量、条件语句、循环语句、函数等

Python 算法基础篇之 Python 语言回顾&#xff1a;变量、条件语句、循环语句、函数等 引言 1. 变量2. 条件语句3. 循环语句 a ) for 循环 b ) while 循环 4. 函数总结 引言 Python 是一种流行的编程语言&#xff0c;具有简洁而易读的语法。在学习算法时&#xff0c;了解 Python…

被B站用户高赞的广告文案:暴涨900万播放

今年6月&#xff0c;B站公布第一季度财报数据&#xff0c;B站日均活跃用户达9370万&#xff0c;月活3.15亿。在高月活的基础上&#xff0c;用户日均使用时长已经到了96分钟&#xff0c;日均视频播放量达41亿。 来源-B站 用户属性年轻、活跃度高已经成为B站典型的平台标签&…

Apikit 自学日记:私有云才有的测试文件库功能,该如何使用呢

在 APIkit 的私有云版本中&#xff0c;提供了测试文件库功能。不过目前该功能仅供私有云产品&#xff0c;线上SaaS产品不提供测试文件库功能 API自动化测试中可以添加文件参数。在这里统一管理所有测试文件。 在测试文件库界面&#xff0c;点击上传文件&#xff1a; 在私有云产…

【C++】STL反向迭代器模拟实现,迭代器适配器,迭代器类型简单介绍

反向迭代器 前言正式开始基本演示模拟实现的大致思路基本框架前置、--*重载->重载list和vector适配反向迭代器迭代器的类型库中reverse和sort模板参数中的迭代器reversesort 前言 本篇主要讲反向迭代器的模拟实现。 能够加深各位对泛型的理解。 前面我那篇string介绍里面…

Ubuntu学习笔记(二)——文件属性与权限

文章目录 前言一、用户与用户组1.用户&#xff08;文件拥有者&#xff09;2.用户组3.其他人 二、Linux用户身份与用户组记录文件1. /etc/passwd2. /etc/shadow3. /etc/group 三、文件属性与权限1. 查看文件属性的方法&#xff08;ls&#xff09;2.文件属性详细介绍2.1 权限2.2 …

Python多个if代码优化

一、背景 大量的if … elif…代码非常难看&#xff0c;也很难维护。扩展不太方便 二、优化方案 以下栗子展示不同的角色获取折扣信息。 1、正常写法 def discount_algorithm(user_role):if user_role admin:discount 0.1return discountelif user_role msp:discount 0.…

【protobuf】socket.io序列化和反序列化

1.背景 后台利用socket.io发送websocket消息&#xff0c;加密用到protobuf 2.反序列化时遇到问题 Traceback (most recent call last): File "D:/locust/Nigeria/test3.py", line 40, in <module> play.ParseFromString(decode_spin_str) google.proto…