InfraPub 为您找到相关结果 773

Golang 之禅: 如何写优质代码

。 明确处理错误 健壮的程序其实是由处理故障案例的片段组成的,并且需要在故障出现之前处理好。冗余的if err != nil { return err }比出了故障再一个个去处理更有价值。panic 和 recover 也一样。 尽早 return,不要深陷 每次缩进时都会在程序员的堆栈中添加另一个先决条件,这会占用他们短期内存中的 7±2 个片段。避免需要深层缩进的控制流。与其深入嵌套,不如使用守卫子句将成功路径保在左侧。 并发权留给调用者 让调用者选择是否要异步运行你的库或函数,不要强制他们使用异步。 在启动 goroutine 之前,要知道它什么时候会停止 goroutines 拥有资源、锁、变量与内存等,释放这些资源的可靠方法是停止 goroutine。 避免包级别的状态 要完成明确和...阅读全文

博文 2020-02-25 20:48:33 debian.cn

Linux 进程 PID 编号最大为多少

整理本文,起源是看到知乎上的一个问题,为什么Linux的进程pid编号极限最大值( process pid max)是131070? 问题中提到,通过提问者的测试(Ubuntu18.04操作系统下),Python脚本实现的分配进行pid脚本,渠道系统自动分配给进程的最大pid值是131070,这是一个并不特殊的值。(通常可以想到的上限会是与二进制数字相关,例如1024,65536等等)。 很高兴,看到还是有很多人在坚知乎的本来精神,先问是不是,再问为什么。 Linux 内核的进程 PID 最大值并非 131070,而是 32768 (32 位系统)和 2 的 22 次方(64 位系统)。这是Linux手册中明确给出的说明: /proc/sys/kernel/pid_max (since...阅读全文

博文 2021-01-12 11:47:15 debian.cn

如何重启 Kubernetes 中的 Pods

{namespace} 这个方法简单粗暴有效。因为 Kubernetes 是声明式 API,所以删掉了之后,Pod API 对象就与预期的不一致了,便会自动重新创建 Pod 保与预期一致。但是如果ReplicaSet 管理的 Pod 对象很多的话,那么要一个个手动删除,会很麻烦,所以可以使用命令来删除 ReplicaSet, kubectl delete replicaset {rs_name} -n {namespace} 由于 Deployment 对象并不是直接操控的 Pod 对象,而是操控的 ReplicaSet 对象,而 ReplicaSet 对象就是由副本数目的定义和Pod 模板组成,所以我们也可以通过调整 ReplicaSet 的数量来实现重启,比如先 scale 到 0,然后再 scale...阅读全文

博文 2020-07-13 21:23:30 debian.cn

Scrapy 架构及数据流图简介

URL的类。 每个spider负责处理一个特定(或一些)网站。 Item Pipeline Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及久化(例如存取到数据库中)。 下载器中间件(Downloader middlewares) 下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。 Spider中间件(Spider middlewares) Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests...阅读全文

博文 2017-07-23 22:56:26 debian.cn

Django 采用新的项目治理模式

Django 此前的治理模式不太合理,对于续发展壮大的 Django 社区产生阻碍。官网博客介绍,最开始 Django 项目发起人(Adrian Holovaty 和 Jacob Kaplan-Moss)可以授权其他人 commit 的权限。到了 2014 年,committer 的核心团队人数已经不少,在两位创始人辞去领导职务后, 保留了一个核心 committer 团队的基本结构,该团队可以根据自己的选择向 Django 添加代码。同时创建了一个新的小组:由核心 committer 选举产生的由 5 名 committer 组成的“技术委员会”,并作为最终的决策者。 但是实际上,现在几乎所有添加到 Django 的代码都由 Django Software Foundation(DSF...阅读全文

博文 2020-03-26 08:51:49 debian.cn

如何在 Debian 中安装 DHCP 服务器

。 4、 现在打开并修改主文件,定义 DHCP 服务器选项: $ sudo vi /etc/dhcp/dhcpd.conf 在文件顶部设置以下局参数,它们将应用于下面的所有声明(请指定适用于你情况的值): option domain-name "tecmint.lan"; option domain-name-servers ns1.tecmint.lan, ns2.tecmint.lan; default-lease-time 3600; max-lease-time 7200; authoritative; 5、 现在定义一个子网,这里我们为 192.168.10.0/24 局域网设置 DHCP (请使用适用你情况的参数): subnet 192.168.10.0 netmask...阅读全文

博文 2021-01-28 17:50:25 debian.cn

全民HTTPS时代:盘点免费SSL证书那些事儿

根据 Let’s Encrypt CA 的统计,截至 2017 年 11 月,Firefox 加载的网页中启用 HTTPS 的比例占 67%,比去年底的 45% 有巨大提升。浏览器开发商如 Mozilla, Google 准备采取下一步措施:将所有 HTTP 网站标记为不安。 随着 HTTPS 的普及,给网站加个 SSL 证书已经是大势所趋而且很有必要了。目前已经存在不少免费好用的 SSL 证书,因此,本文就来盘点一下关于免费 SSL 证书的那些事儿。 一、Let’s Encrypt 官方网站:https://letsencrypt.org/ 点评:毫无疑问,Let’s Encrypt 是目前使用范围最为广泛的免费 SSL 证书,而且官方博客宣布,自 2018 年开始提供通配符 SSL...阅读全文

bmon:一个强大的网络带宽监视和调试工具

用 proc 输入模块运行 bmon: $ bmon -i proc -p enp1s0 如何使用 bmon 输出模块 bmon 也使用输出模块显示或者导出上面输入模块收集的统计数据,输出模块包括: curses - 这是一个交互式的文本用户界面,它提供实时的网上估计以及每个属性的图形化表示。这是默认的输出模块。 ascii - 这是用于用户查看的简单可编程文本输出。它能显示网卡列表、详细计数以及图形到控制台。当 curses 库不可用时这是默认的备选输出模块。 format - 这是完脚本化的输出模式,供其它程序使用 - 意味着我们可以在后面的脚本和程序中使用它的输出值进行分析。 null - 停用输出。 像下面这样通过 help 选项获取更多的模块信息。 $ bmon -o...阅读全文

博文 2021-01-28 17:50:27 debian.cn

高性能缓存服务器 Nuster

Nuster 是一个基于 HAProxy 的高性能缓存服务器。Nuster 完兼容 HAProxy,并且利用 HAProxy 的 ACL 功能来提供非常细致的缓存规则,比如 请求地址为某某时缓存 请求参数中的 X 为 Y 时缓存 响应头中的 X 为 Y 时缓存 请求速率超过多少时缓存 等等 Nuster 性能评测 非常快, 单进程模式下是 nginx 的 3 倍,多进程下 nginx 的 2 倍,varnish 的 3 倍。详见benchmark 安装 Nuster git clone https://github.com/jiangwenyuan/nuster.git cd nuster make TARGET=linux2628 make install 详情请参照 HAProxy...阅读全文

博文 2017-12-15 22:17:31 debian.cn

kubelet 中垃圾回收机制的设计与实现

表 evictUnits, err := cgc.evictableContainers(gcPolicy.MinAge) if err != nil { return err } // 2、回收 Deleted 状态以及 Terminated 状态的 pod,此处 allSourcesReady 指 kubelet // 的三种 podSource 是否都可用 if allSourcesReady { for key, unit := range evictUnits { if cgc.podStateProvider.IsPodDeleted(key.uid) || (cgc.podStateProvider.IsPodTerminated(key.uid...阅读全文

博文 2021-02-05 17:48:22 知乎

Debian的版本号及distributions

distribution的revision level递增,比如从3.0变为3.0r1,2.2r4变为2.2r5 APT::Default-release 在不同的环境下,我们对debian系统的要求也会不同,比如在生产环境下,我们希望系统是相当稳定的,这时stable就是最好的选择;而对于一个喜欢尝试新功能、新软件的用户,testing或unstable可能更合适些。要达到这样的要求,我们可以在/etc/apt/sources.list文件中只指定一种distribution源,比如想使用stable distribution,就在sources.list里只加入stable源,这样系统上安装的package的版本都会是进入了stable的版本。但有些时候我们也需要一个混合的系统,比如希望在保整个系统是...阅读全文

博文 2021-01-28 17:50:08 debian.cn

Kubernetes常用命令大全(持续更新)

-versions #### API kubectl get events #### 查看事件 kubectl get nodes //获取部节点 kubectl delete node k8s2 //删除节点 kubectl rollout status deploy nginx-test 创建 kubectl create -f ./nginx.yaml #### 创建资源 kubectl create -f . #### 创建当前目录下的所有yaml资源 kubectl create -f ./nginx1.yaml -f ./mysql2.yaml #### 使用多个文件创建资源 kubectl create -f ./dir #### 使用目录下的所有清单文件来创建资源 kubectl...阅读全文

博文 2020-03-13 12:35:13 debian.cn

监控Kubernetes集群证书过期时间的三种方案 - OSCHINA

-certificate-exporter监控集群所有node的 /etc/kubernetes/pki 和 /var/lib/kubelet 下的证书以及 kubeconfig 文件 优势: 可以监控所有 node, 所有 kubeconfig 文件, 以及 所有 tls 格式的 secret 证书, 如果要监控 Kubernetes 集群以外的证书, 也可以如法炮制; 范围广而; 需要额外安装: x509-certificate-exporter, 对应有 1 个 Deployment 和 多个 DaemonSet, 对 Kubernetes 集群的资源消耗不少. 可以根据您的实际情况灵活进行选择. 🎉🎉🎉 📚️参考文档 如何使用 Blackbox Exporter 监控 URL? - 东风微鸣技术...阅读全文

博文 2022-12-10 06:49:43 中文开源技术交流社区

Debian 10使用 Wine 安装配置微信、QQ与TIM

Serif"="simsun" "MS Shell Dlg"="simsun" "MS Shell Dlg 2"="simsun" "System"="simsun" "Tahoma"="simsun" "Times"="simsun" "Times New Roman CE,238"="simsun" "Times New Roman CYR,204"="simsun" "Times New Roman Greek,161"="simsun" "Times New Roman TUR,162"="simsun" "Tms Rmn"="simsun" 文章wine中文乱码的解决同样是部换成simsun的reg注册表设置,不过设置更短,如下所示:笔者试过也没有问题。 REGEDIT4...阅读全文

最全 MongoDB 基础教程

: } ) query: update的查询条件,类似sql update查询内where后面的 update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入 multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录部更新 writeConcern: 可选,抛出异常的级别 案例 db.ruochen.insert({ title: 'mongodb', description: 'Nosql 数据库', by...阅读全文

博文 2021-02-22 07:45:45 OSChina

nsenter 及 Linux命名空间 简介

nsenter 是一个可以在指定进程的命令空间下,运行程序的命令,它位于 util-linux 包中。 nsenter 用途 nsenter 的一个典型用途是进入容器的网络名字空间,进行网络相关的排障。大多数容器,为了保轻量,没有包含较为基础的命令,比如说 ip,ping,telnet,ss,tcpdump等,这就给容器内的网络调试带来困扰。这时就可以使用 nsenter 命令仅进入到容器的网络命名空间,使用宿主机的相关命令调试容器网络。 此外,nsenter也可以进入 mnt, uts, ipc, pid, user 命令空间,以及指定根目录和工作目录。 nsenter 使用 首先看下nsenter命令的语法: nsenter [options] [program [arguments...阅读全文

博文 2020-12-15 11:22:44 debian.cn

深入了解Docker背后的namespace技术

时候,我们往往不能预想到最终结果貌。不论怎样,我们就把 CLONE_NEWNS添加到clone_flags变量中,结果就是, int clone_flags = CLONE_NEWNS | SIGCHLD;,再来编译mount.c并运行同样的命令。 > cp skeleton.c mount.c > gcc -o mount mount.c > ./mount mount 这次没有任何变化,为何?因为运行在新的mount namespace中的进程,在底层系统下仍然拥有一个/proc视图。结果就是新的进程继承了底层挂载点的视图。我们有一些方法来阻止出现这样的结果,比如说,使用 pivot_root,将在后续的博客中详细介绍。 然而,有一种方法,我们可以尝试在新的mount...阅读全文

博文 2015-05-17 10:03:00 debian.cn

aptitude 与 apt

的。apt-get upgrade——更新所有已安装的软件包apt-get dist-upgrade——将系统升级到新版本apt-cache search string——在软件包列表中搜索字符串dpkg -l package-name-pattern——列出所有与模式相匹配的软件包。如果您不知道软件包的名,您可以使用“*package-name-pattern*”。aptitude——详细查看已安装或可用的软件包。与apt-get类似,aptitude可以通过命令行方式调用,但仅限于某些命令——最常见的有安装和卸载命令。由于aptitude比apt-get了解更多信息,可以说它更适合用来进行安装和卸载。apt-cache showpkg pkgs——显示软件包信息。apt-cache...阅读全文

博文 2021-01-28 17:50:09 get 的区别与联系

Golang Context 探究

server 来解释, Go 服务每次都是启动一个新的 goroutine 来处理每一个请求,在这个请求的操作往往会启动新 goroutine 访问数据库或其他服务,如果此时客户端断开了连接,后续的消耗资源的操作就完没必要了。所以我们需要一个在 goroutine 之间同步取消信号,截止时间的机制或者特定请求数据。而 Context 被设计出来就是帮我们实现这个目标。 1 2 3 |-----------| |-----------| |-----------| | goroutine |-------> | goroutine |-------> | goroutine | |-----------| |-----------| |-----------| 默认 Context context 包...阅读全文

博文 2021-02-25 09:27:27 lxkaka

Golang 中的 channel 通道详解

制将在编译期检测。func f1(out chan<- int) {} func f2(out chan<- int, in <-chan int){} 在调用f1或f2的时候,传入的chan类型参数会自动隐式转换为chan<- int 和<-chan int类型,这种转换只是单向的,没有单向channel类型转换为chan类型。因为关闭操作只用于断言不再向channel发送新的数据,所以只有在发送者所在的goroutine才会调用close函数,因此对一个只接收的channel调用close将是一个编译错误。带缓存的channel带缓存的Channel内部有一个元素队列。队列的最大容量是在调用make函数创建channel时通过第二个参数指定的。通过内置函数cap() 可以获得...阅读全文

说透IO多路复用模型_京东云开发者的博客

位是否为1。 FD_SET(int fd,fd_set*set) 用来设置描述词组set中相关fd的位,即将bitmap结构中某一位设置为1,索引值为fd。 FD_ZERO(fd_set *set) 用来清除描述词组set的部位,即将bitmap结构部清零。 首先来看一段服务端采用了select模型的示例代码: //创建server端套接字,获取文件描述符 int listenfd = socket(PF_INET,SOCK_STREAM,0); if(listenfd < 0) return -1; //绑定服务器 bind(listenfd,(struct sockaddr*)&address,sizeof(address)); //监听服务器 listen(listenfd,5...阅读全文

博文 2023-01-01 15:13:50 CSDN博客

深入理解Golang之context

Server、Connection、Request,不仅将上游的信息共享给下游任务,同时实现了上游可发送取消信号取消所有下游任务,而下游任务自行取消不会影响上游任务。总结context主要用于父子任务之间的同步取消信号,本质上是一种协程调度的方式。另外在使用context时有两点值得注意:上游任务仅仅使用context通知下游任务不再需要,但不会直接干涉和中断下游任务的执行,由下游任务自行决定后续的处理操作,也就是说context的取消操作是无侵入的;context是线程安的,因为context本身是不可变的(immutable),因此可以放心地在多个协程中传递使用。参考资料1、Package context2、Go Concurrency Patterns: Context3...阅读全文

博文 2021-01-27 09:05:27 知乎

六大算法之三:动态规划【转载】

3,5的数额等;2、填写二维数组第一列时,代表到用到面额为i时,剩余数额为0,即只用i就可以组成相应数额,这也是一种方法,所以第一列的值,第一个为0,后面为1. public static int SmallMoney(int num[],int target) { int m = num.length; int dp[][] = new int[m][target+1]; dp[0][0] = 1; for(int i=1;i<=target;i++){ if(i%num[0] == 0){ dp[0][i] = 1;//第一行数值填写 }else{ dp[0][i] = 0; } } for(int i=0;i阅读全文

博文 2021-07-31 07:18:53 CSDN博客