前言 序列都是用createsequence命令创建的单行表,常用于为表的行生成唯一的标识符。 相关函数 函数 作用 nextval() 递增序列并返回新值 currval() 返回最近一次用nextval()函数获取的指定序列的值 lastval() 返回最近一次用nextval()函数获取的任何序列的值 setval() 设置序列的当前值 基本操作 创建递增序列,最小为0,步长为2,从4开始自增 createsequenceseqtestasintincrement2minvalue0start4; 列出序列 selectFROMpg_catalo...

  25xeEEK55E62   2024年04月30日   55   0   0 PostgreSQL

前言 最近有个个人需求是要把多个图片文件合并为一个PDF文件,这样方便用PDF阅读器连续看,避免界面点一下,只会图片放大。(比如看漫画) 主要思路是先把单张图片转换成单个PDF文件,然后把PDF文件进行合并。原先是用WPS的转换工具做的,但WPS每次只能批量转换30张,如果有大量图片文件,用WPS就不太方便了。 现成的工具找不到,索性自己整一个。python的pillow库和pypdf2库就可以实现这样的需求。 安装依赖库 本地的python版本为3.11。注意pypdf2升级到3.0版本后,一些类和方法和版本2有些区别。 python-mpipinstallPyPDF23.0.1pillow...

  25xeEEK55E62   2024年03月02日   128   0   0 Python

简介 抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式将一组具有共同主题的单个工厂封装起来,它提供接口用于创建相关或依赖对象的家族,而不需要指定具体的类。 抽象工厂模式包含以下几个核心角色: 抽象工厂(AbstractFactory):声明了一组用于创建产品对象的方法,每个方法对应一种产品类型。抽象工厂可以是接口或抽象类。 具体工厂(ConcreteFactory):实现了抽象工厂接口,负责创建具体产品对象的实例。 抽象产品(AbstractProduct):定义了一组产品对象的共同接口或抽象类,描述了产品对象的公共方法。...

  25xeEEK55E62   2024年02月23日   103   0   0 设计模式

简介 简单工厂模式又称为静态工厂模式,属于创建型模式,但不属于GOF23设计模式。由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。 简单工厂适用场景:工厂类负责创建的对象比较少;客户端只需要知道传入工厂类的参数,对于如何创建对象的逻辑并不关心。 简单工厂优缺点: 优点:只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其细节创建。 缺点:工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背了开闭原则。 示例代码 Go go语言没有构造函数,所以一般会定义NewXXX函数来初始化相关类。New...

  25xeEEK55E62   2024年02月21日   86   0   0 设计模式

前言 策略模式定义了一系列算法,并将每个算法封装起来,使它们可以互相替换,且算法的变换不会影响使用算法的客户。 在项目开发中,我们经常要根据不同的场景,采取不同的措施,也就是不同的策略。假设我们需要对a、b这两个整数进行计算,根据条件的不同,需要执行不同的计算方式。我们可以把所有的操作都封装在同一个函数中,然后根据if...else...的形式来调用不同的计算方式,这种方式称为硬编码。 在实际应用中,随着功能和体验的不断增长,我们需要经常添加/修改策略,进而需要不断修改已有代码,这不仅会让这个函数越来越难以维护,还会因为修改带来一些Bug。因此,为了解耦,我们需要使用策略模式,定义一些独立的类...

  25xeEEK55E62   2024年02月19日   54   0   0 设计模式

前言 单例模式是最简单的一种模式。在Go中,单例模式指的是全局只有一个实例,并且它负责创建自己的对象。单例模式有减少内存和系统资源开销、防止多个实例产生冲突等优点。 因为单例模式保证了实例的全局唯一性,并且只被初始化一次,所以比较适合全局共享一个实例,且只需要被初始化一次的场景,例如数据库实例、全局配置、全局任务池等。 单例模式又分为饿汉方式和懒汉方式。饿汉方式是指全局的单例实例在包被加载时创建,而懒汉方式指全局的单例实例在第一次被使用时创建。其中懒汉方式是开源项目中使用最多的方式。 示例代码 Go 懒汉方式的缺点是非并发安全,实际使用中一般加锁,或者使用sync.Once packagesi...

  25xeEEK55E62   2024年02月19日   83   0   0 设计模式

前言 默认情况下,postgres未开启归档模式。当重做日志被写满时,之前的重做日志信息将被覆盖,这就可能导致重做日志信息的丢失。为了保证所有的重做日志不被覆盖,生产环境下一般启用归档模式。当重做日志被写满,pg先产生归档日志文件以备份重做日志,然后再覆盖重做日志文件。 配置步骤 在psql中查看当前的归档模式。默认为off,也就是未开启归档模式。 showarchive_mode; 创建归档日志目录。个人习惯在数据目录下创建,可根据实际需求修改。 mkdir-p/home/postgres/apps/pgsql/data/archivelog 修改postgresql.conf...

  25xeEEK55E62   2024年02月19日   74   0   0 PostgreSQL

前言 原本应用的日志是全部输出到os的stdout,也就是控制台输出。因其它团队要求也要保留日志文件,便于他们用其他工具统一采集,另一方面还要保留控制台输出,便于出问题的时候自己直接看pod日志。具体需求如下: 日志支持同时控制台输出和文件输出 控制台的输出级别可以高点,比如WARNING,个人这边的实际情况是WARNING或ERROR就能判断大部分问题。日志文件的输出级别设置为INFO,如果控制台日志找不到问题,可以具体看日志文件的内容。 因为用到了多进程,所以写文件的时候要保证多进程安全,避免日志内容不会缺失。 日志文件可以设置自动分割,避免长时间不清理导致硬盘存储资源浪费。 因为不允...

  25xeEEK55E62   2024年01月23日   25   0   0 Python

前言 常见的应用配置方式有环境变量和配置文件,对于微服务应用,还会从配置中心加载配置,比如nacos、etcd等,有的应用还会把部分配置写在数据库中。此处主要记录从环境变量、.env文件、.ini文件、.yaml文件、.toml文件、.json文件读取配置。 ini文件 ini文件格式一般如下: [mysql] type="mysql" host="127.0.0.1" port=3306 username="root" password="123456" dbname="test" [redis] host="127.0.0.1" port=6379 password="123456" d...

  25xeEEK55E62   2024年01月09日   23   0   0 Python

前言 目前有个python应用需要在容器镜像内拉取git私有仓库的代码,一开始的想法是用GitPython,折腾一番ssh私钥和known_hosts问题后,发现还是在镜像中封装个git最省事,然后用subprocess调用系统命令,镜像体积也没有想象中增加特别多。 准备ssh私钥和known_hosts文件 应用内通过repo的sshurl克隆和拉取仓库,所以ssh私钥和known_hosts要封装到镜像中。 生成ssh密钥文件。一般来说提示输入直接回车即可。生成的$HOME/.ssh/id_ed25519为私钥文件,是需要拷贝到镜像中的。$HOME/.ssh/id_ed25519.pub...

  25xeEEK55E62   2024年01月03日   21   0   0 Python

前言 自从使用docker以来,就经常听说MySQL数据库最好别运行在容器中,性能会损失很多。一些之前没使用过容器的同事,对数据库运行在容器中也是忌讳莫深,甚至只要数据库跑在容器中出现性能问题时,首先就把问题推到容器上。 那么到底会损失多少,性能损失会很多吗? 为此我装了两个MySQL,版本都是8.0.34。一个用官网二进制包安装,另一个用dockerhub的MySQL镜像安装。两个MySQL都运行在同一台机器,但不同时运行,先后运行测试。测试工具用的sysbench,运行在另一台机器。 提前声明:测试流程比较简单,只是用sysbench测了混合读写场景,测试次数也较少,不具有权威性。感兴趣...

  25xeEEK55E62   2023年11月26日   29   0   0 MySQL

前言 nginx安装后一般都会进行参数优化,网上找找也有很多相关文章,但是这些参数优化对Nginx性能会有多大影响?为此我做个简单的实验测试下这些参数能提升多少性能。 声明一下,测试流程比较简单,后端服务也很简单,测试时间也很短,所以实验并不严谨,结果仅作参考,需要根据实际情况进行参数调优。 文章或有错误和疏漏之处,欢迎各位大佬指出或补充。 环境 IP 操作系统 CPU 内存 部署服务 192.168.3.60 Debian11.8 4 4GB wrk 192.168.3.61 Debian11.8 4 4GB nginx 192.168.3.62 Debian11.8 ...

  25xeEEK55E62   2023年11月06日   53   0   0 软件测试

前言 假设gRPC服务端的主机名为qw.er.com,需要为gRPC服务端和客户端之间的通信配置tls双向认证加密。 生成证书 生成ca根证书。生成过程会要求填写密码、CN、ON、OU等信息,记住密码。 opensslreq-x509-newkeyrsa:4096-keyoutca.key-outca.crt-subj"/CN=qw.er.com"-days365 新建并编辑文件openssl.cnf文件。req_distinguished_name中内容按需填写,DNS.1要替换成实际域名。 [req] req_extensions=v3_req distinguished_nam...

  25xeEEK55E62   2023年11月02日   50   0   0 Go

简介 借助github.com/hpcloud/tail,可以实时追踪文件变更,达到类似shell命令tail-f的效果。 示例代码 以下示例代码用于实时读取nginx的access.log日志文件,读取到后输出到控制台。如果nginx日志做了json格式化,还可以解析读取到的内容,对日志进行更多处理,比如日志内容写入数据库、做日志告警等,对于访问量较小的系统来说,这样就不需要消耗很多资源去搭建ELK、Loki等专门的日志监控系统。 packagemain import( "flag" "fmt" "io" "os" "github.com/hpcloud/tail" ) va...

  25xeEEK55E62   2023年11月02日   40   0   0 Go

前言 假设一个场景,服务端部署在内网,客户端需要通过暴露在公网的nginx与服务端进行通信。为了避免在公网进行http明文通信造成的信息泄露,nginx与客户端之间的通信应当使用https协议,并且nginx也要验证客户端的身份,也就是mTLS双向加密认证通信。 这条通信链路有三个角色:服务端、Nginx、客户端。 服务端部署在内网,与nginx使用http通信。 客户端在公网,与nginx使用https通信,且双向加密认证。 服务端 服务端只使用http,所以这里用gin框架写个简单的示例,返回客户端一些基本的http信息,比如客户端IP、请求方法、host等。 packagemain...

  25xeEEK55E62   2023年11月02日   112   0   0 Go

0.前言 k8s从1.24版本开始不再直接支持docker,但可以自行调整相关配置,实现1.24版本后的k8s还能调用docker。其实docker自身也是调用containerd,与其k8s通过docker再调用containerd,不如k8s直接调用containerd,以减少性能损耗。 除了containerd,比较流行的容器运行时还有podman,但是podman官方安装文档要么用包管理器在线安装,要么用包管理器下载一堆依赖再编译安装,内网离线环境下安装可能会比较麻烦,而containerd的安装包是静态二进制文件,解压后就能直接使用,离线环境下相对方便一点。 本文将在内网离线环境下用...

  25xeEEK55E62   2023年11月01日   69   0   0 Kubernetes

前言 metricsserver为Kubernetes自动伸缩提供一个容器资源度量源。metrics-server从kubelet中获取资源指标,并通过MetricsAPI在KubernetesAPI服务器中公开它们,以供HPA和VPA使用。 之前已经用k8s的二进制文件搭建了一套集群环境,搭建步骤见:二进制部署k8s集群-基于containerd。现需要在这个集群环境内部署Metrics-Server,用于配置应用自动伸缩。 集群环境: 主机:Debian11 Kubernetes版本:1.26.6 步骤 获取yaml文件。 wgethttps://github.com/kubern...

  25xeEEK55E62   2023年11月01日   87   0   0 Kubernetes

前言 kubernetes官方文档中的webUI网页管理工具是kubernetes-dashboard,可提供部署应用、资源对象管理、容器日志查询、系统监控等常用的集群管理功能。为了在页面上显示系统资源的使用情况,需要部署MetricsServer(参考博客园安装metrics-server)。 kubernetes版本:1.26.6 创建资源对象 官方yaml。github仓库地址:https://github.com/kubernetes/dashboard。这里的版本为v2.7.0。 用到的镜像分别为kubernetesui/dashboard:v2.7.0和kubernetesui...

  25xeEEK55E62   2023年11月01日   30   0   0 Kubernetes

前言 进程在运行,但是不代表应用是正常的,对此pod提供的探针可用来检测容器内的应用是否正常。k8s对pod的健康状态可以通过三类探针来检查:LivenessProbe、ReadinessProbe和StartupProbe。 健康检查探针 LivenessProbe 用于判断容器是否存活(Running状态),如果LivenessProbe探针检测到容器不健康,则kubelet“杀掉”容器,并根据容器的重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为该容器的livenessprobe探针返回的值永远是success。 ReadinessProbe...

  25xeEEK55E62   2023年11月01日   64   0   0 Kubernetes

前言 首先必须介绍下Matrix。Matrix是一个开源、可交互、去中心化的实时通信服务框架。使用Matrix可以搭建安全的通信服务器,配合支持Matrix的客户端可以实现个人、团队间的实时聊天交互。 与常见的QQ、微信、钉钉相比,Matrix的特点就是开源,可私有化部署,保证通信的安全和隐私。与Rocket.chat、MatterMost相比,matrix的特点还要再加上去中心化。每个运行Matrix的服务器都是一个节点,用户可以选择在任意节点注册、连接,同一个节点内的用户可以任意通信。同时,节点与节点之间也可以通过联锁(Federation)机制进行通信,实现不同节点的用户之间进行通信。 ...

  25xeEEK55E62   2023年11月01日   70   0   0 其他技术区
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~