0%

CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD的核心概念是持续集成、持续交付和持续部署。

方案一

软件

  • Gogs: 是一个Git服务。
  • Jenkins: 是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
  • Redmine: 是一个开源的、基于Web的项目管理和缺陷跟踪工具。
  • Kubernetes: 是一个开源平台,用于跨主机群集自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构。
  • Slack: Slack 是聊天群组 + 大规模工具集成 + 文件整合 + 统一搜索。 Slack 已经整合了电子邮件、短信、Google Drives、Twitter、Trello、Asana、GitHub 等 65 种工具和服务,把可以把各种碎片化的企业沟通和协作集中到一起。
Read more »

这几天公司忙着做CMMI3认证,其中有一项是关于数据库设计的,需要以word文档的形式列举现有的表结构。 如果一个一个字段复制粘贴,那也太费时费力了,而且也非常容易遗漏。故需要有一种更简捷方便的方式导出表结构。

经查,pg_dump可以一次性将库中所有表结构导出来:

1
pg_dump -h host -p port -U username -s -t tablename dbname > struct.sql
  • -s:只导表结构,不会导出数据
  • -t:指定要导出的数据库表

这样导出的是sql语句格式的表结构,虽然比一个一个字段复制粘贴的方式好一些(文本编辑器的多光标操作),但也费时费力。

再查,发现PostgreSQL中有一个内置的表information_schema.columns,使用pgadmin执行下面sql语句:

Read more »

这两天做代码审查时,发现一处celery错误的用法。 他现在的做法是将一类任务通过计算hash值的方式,手动分配到多个队列中,然后每个队列起一个worker处理任务:

  • 手动分配队列,首先代码的复杂度提升,其次编写代码的时候需要保持对队列使用的高度关注,再次,后期代码维护时极有可能遗忘这里关于队列的特殊用法
  • 手动分配会导致任务分配不均,极有可能出现一个worker始终处于繁忙状态,且任务一直在堆积中,而其他worker却处于空闲状态
  • 后期提升workers的处理能力将会变得困难,需要修改代码
Read more »

今天遇到一个需求,SSH远程登录之后自动切换到root用户,这里需要用到expect命令,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env expect

## 设置超时时间
set timeout 1
## 执行ssh命令,并等待 成功提示
spawn ssh -i ~/.ssh/id_rsa $username@1.2.3.4
expect "Login Success*"
## 执行切换用户命令,并等待 输入密码提示
send "sudo su -\r"
expect "Password:"
## 发送密码
send "$password\r"
## 保持交互状态,把控制权交给控制台,此时可继续手工操作
interact
Read more »

用到了两个库:shapelypyproj,直接pip安装即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pyproj import Geod
from shapely.geometry import Point, LineString, Polygon

# 计算距离
line_string = LineString([Point(123.429056, 41.833526), Point(123.435235, 41.773191)])
geod = Geod(ellps="WGS84")
geod.geometry_length(line_string)

# 计算封闭区域面积、周长
geod = Geod(ellps="WGS84")
geod.geometry_area_perimeter(Polygon([
(123.432746, 41.792136), (123.435922, 41.784584),
(123.450857, 41.784392), (123.447681, 41.79252),
]))
Read more »

什么是Serverless

Serverless架构,或者称为无服务器架构,是最近几年新冒出来的一种架构风格。这究竟是一种什么样的架构?无服务器,就是真的没有服务器了么? 其实,对于Serverless来说,只是用户不用更多的去考虑服务器的相关内容了,无需再去考虑服务器的规格大小、存储类型、网络带宽、自动扩缩容问题了; 同时,也无需再对服务器进行运维了,无需不断的打系统补丁、应用补丁、无需进行数据备份、软件配置等工作了。

但是没有服务器,如何来将程序、应用运行起来呢?这里要介绍的是Serverless下包含的两个概念: 函数即服务(FaaS,Function as a Service)、后端即服务(BaaS,Backend as a Service)。

Read more »

架构师是一个承前启后的岗位,正如一个路由器,对各种业务需求加以分析处理后交由到下游产品和研发团队。 所以,架构师对于业务的理解能力是必不可少的。

架构师业务思维

  • 主动性:做业务不是等着别人来找你,这就变成了做需求的了,业务思维很重要的一点就是要能主动出击。 不仅要关注眼前做的那部分东西,还要学会横向去看,去对比,对标行业的解决方案和思路。
  • 平衡性:权衡技术思维和业务思维,不能一味的用业务的模式来解决问题,也不能固执的用技术思维来确定方案,两者需要做好平衡。
  • 前瞻性:架构先行一定是需要有一定的业务前瞻性,理解分析业务、参与到业务中、对未来的业务进行预判。
Read more »

在Linux系统中有先进的缓存机制,会针对dentry(用于VFS,加速文件路径名到inode的转换)、 Buffer Cache(针对磁盘块的读写)和Page Cache(针对文件inode的读写)进行缓存操作,有效缩短 I/O系统调用(比如read、write)的时间。 但当进行了大量文件操作之后,缓存会把内存资源基本用光,导致系统缓慢,使用swap空间,影响了性能,这时就需要清理缓存了。

如何清除Cache

在清除Cache之前,先执行sync命令将缓冲区的数据写入磁盘, 然后通过向文件/proc/sys/vm/drop_caches写入值123的方式来清除Cache:

注意:文件/proc/sys/vm/drop_caches只有在进行写操作时才会触发清除cache操作

1
2
3
4
5
6
# 1. 仅清除页面缓存(PageCache)
sync; echo 1 > /proc/sys/vm/drop_caches
# 2. 清除目录项和inode
sync; echo 2 > /proc/sys/vm/drop_caches
# 3. 清除页面缓存,目录项和inode
sync; echo 3 > /proc/sys/vm/drop_caches

第一条命令是最安全的,它只会清除页面缓存,一般情况下,我们只需要执行第一条命令即可。 在生产环境中,不建议执行第三条命令,除非你明确知道你需要执行什么。

Read more »

使用ROW_NUMBER() OVER()来实现此功能,语法如下:

1
ROW_NUMBER() OVER([PARTITION BY col1] ORDER BY col2 [DESC])
  • ROW_NUMBER: 为返回的记录定义行编号
  • PARTITION BY col1: 根据字段col1进行分组
  • ORDER BY col2: 按字段col2进行排序
Read more »