以前的软件开发非常注重方法,注重质量,软件开发周期长。
现在的软件开发更注重快速迭代。
一个很重要的原因是:
以前的软件多是开发完卖出去的;
现在的软件大多是自己提供线上服务的;
所以:
对于前者,你不可能让客户每天部署一个新版本;
对于后者,发现问题可以及时修正,成本很小。
以前开发软件,更关心能用,可用。至于可维护性并不重要,毕竟复杂的维护还能收更多的维护费用呢。
DevOps
以前的软件开发非常注重方法,注重质量,软件开发周期长。
现在的软件开发更注重快速迭代。
一个很重要的原因是:
以前的软件多是开发完卖出去的;
现在的软件大多是自己提供线上服务的;
所以:
对于前者,你不可能让客户每天部署一个新版本;
对于后者,发现问题可以及时修正,成本很小。
以前开发软件,更关心能用,可用。至于可维护性并不重要,毕竟复杂的维护还能收更多的维护费用呢。
区块儿是干啥的
真的有些不太适应新版的编辑器
https://blog.csdn.net/xmcy001122/article/details/61623128
freeswitch也叫软电话交换机
freeswitch有docker版本,Windows版本,都非常方便安装
软电话有x-lite,
新装了个 openstack-dashboar 12.0.3 ,切换主题到material总是不成功,直接设置cookie:
theme=material
就可以了
openstack-dashboar 12.0.3似乎没有汉化包
企业的长治久安靠的是制度,企业的发展却要靠人
缘起:
docker stop 时往往会比较慢,起原因多半是docker 容器的init进程没有正确处理信号所致;docker stop的行为为: 先发送一个SIGTERM(15) 信号给init进程,如果一段时间(默认10s)后,依然没有退出,就直接发送 -9 信号,常常我们会登上10s,最终,进程的退出依然是仓促的;所以,实现一个好的init进程非常重要。
想用bash写一个docker 的init进程,当收到SIGTERM信号时,通知容器中的其他进程退出,其他进程退出后自己再退出,这样的话,其他进程可以有时间优雅退出,而且stop操作还可能很快完成。
版本1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#!/bin/bash trap stop 15 PATH=$PATH:/usr/sbin/:/usr/bin function stop() { while :; do local pid=$(pidof cmd) [[ "$pid" == "" ]] && break kill $pid 2>/dev/null sleep 1 done exit 0 } cmd |
实际并不凑效; 原因: bash 在执行外部命令的时候,是不处理信号的
改进:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash trap stop 15 PATH=$PATH:/usr/sbin/:/usr/bin function stop() { while :; do local pid=$(pidof cmd) [[ "$pid" == "" ]] && break kill $pid 2>/dev/null sleep 1 done } nohup cmd & while :; do sleep 10 done |
不足:当有信号到时,依然要等sleep 睡足才能处理信号,如果每次sleep 时间足够短,则总是启动sleep进程也非常不优雅,本身总是看到一个sleep进程已经够闹心的了
改进:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash trap stop 15 PATH=$PATH:/usr/sbin/:/usr/bin function stop() { while :; do local pid=$(pidof cmd) [[ "$pid" == "" ]] && break kill $pid 2>/dev/null sleep 1 done } nohup cmd & while :; do read line done |
优点:
缺点:
测试脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#!/bin/bash trap signal 15 function signal() { echo handle signal } while :; do read line echo $line sleep 10 done |
执行该脚本,然后发送信号15给bash进程,发现:
下面这种写法也比较简单,可以实时处理信号,但是,这个bash进程会fork一个子进程,从top中看起来不够干净。
1 |
CMD [ "/bin/sh", "-c" , "trap 'exit' TERM; { while :; do sleep 100 ;done } & wait" ] |
Dell OpenManage Server Administrator (OMSA)是一款全面的一对一系统管理解决方案。
OMSA可分为两种:
https://blog.csdn.net/wh211212/article/details/70014141
对于http负载均衡,往往有超时限制;对于tcp负载均衡,往往不做源地址转换(无法通过配置的方式设置为需要源地址转换),对于如下部署方式:
APP如果调用自己的话,可能服务器A发起请求,经过负载均衡后,又落到了服务器A自身,这是,由于负载均衡没有做源地址转换,所以,A的回包是发现目的地址就是自己,就不需要离开本机了,然而这种没有经过源地址转换的回包是不会被认可的,所以,这种部署方式存在较大弊端,尤其是一个服务器上部署多个应用时,应用之间的频繁调用就必然会遇到这个问题。
改进方案:
如果请求发起总是在APP上,则上述模式工作的会比较好;
但是,还有情况需要考虑,nginx做内部重定向的情况也是非常常见的,当访问a.i.phpor.net 时,很可能需要nginx直接内部转发到b.i.phpor.net ,这是,请求发起者是nginx,为了节省资源,b.i.phpor.net 也是使用的同样的负载均衡和nginx,于是,又出现了前面所讨论的问题。
再次改进,确保nginx不会重定向请求到负载均衡,毕竟还是要回来,索性在nginx上稍微麻烦一些,直接转发到自己,或者nginx上将所有自己能提供的服务的域名都解析到127.0.0.1
mac 上的docker本质上不是直接跑在mac上的,而是跑在mac上的虚拟机上的,所以,从mac上访问容器的IP就比较麻烦,默认是不行的
参考: https://www.cnblogs.com/yuyutianxia/p/8073411.html
后记:
想在macos上通过ssh-vpn的方式方便访问另外一个网络