0%

1. quick start

1
2
3
4
5
6
7
8
9
10
11
12
package main

import (
"log"
"net/http"
_ "net/http/pprof"
)

func main() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}

阅读全文 »

tmux是一款优秀的终端复用软件,它比Screen更加强大。 tmux之所以受人们喜爱,主要得益于以下功能:

  • 丝滑分屏(split),虽然iTem2也提供了横向和竖向分屏功能,但这种分屏功能非常拙劣,完全等同于屏幕新开一个窗口,新开的pane不会自动进入到当前目录,也没有记住当前登录状态。这意味着如果我ssh进入到远程服务器时,iTem2新开的pane中,我依然要重新走一遍ssh登录的老路(omg)。tmux就不会这样,tmux窗口中,新开的pane,默认进入到之前的路径,如果是ssh连接,登录状态也依旧保持着,如此一来,我就可以随意的增删pane,这种灵活性,好处不言而喻。

  • 保护现场(attach),即使命令行的工作只进行到一半,关闭终端后还可以重新进入到操作现场,继续工作。对于ssh远程连接而言,即使网络不稳定也没有关系,掉线后重新连接,可以直奔现场,之前运行中的任务,依旧在跑,就好像从来没有离开过一样;特别是在远程服务器上运行耗时的任务,tmux可以帮你一直保持住会话。如此一来,你就可以随时随地放心地进行移动办公,只要你附近的计算机装有tmux(没有你也可以花几分钟装一个),你就能继续刚才的工作。

阅读全文 »

1. 从0到100万用户的扩展

1.1 考虑因素

  • 因此对于大型应用来说,采用横向扩展更合适一些
  • 采用负载均衡器(nginx, k8s, istio等)
  • 数据库主从复制,数据库扩展
  • 使用缓存,CDN
  • 让网络层无状态,方便扩展
  • 多数据中心
  • 使用消息队列
  • 记录日志、收集指标与自动化
46549_33_2
阅读全文 »

1. 有无 / 结尾

在location中匹配的url最后有无/结尾,指的是模糊匹配与精确匹配的问题
在proxy_pass中代理的url最后有无/结尾,指的是在proxy_pass 指定的url后要不要加上location匹配的url的问题

1.1 localtion 加不加 /

  • location /abc/def

    可以匹配/abc/defghi的请求,也可以匹配/abc/def/ghi ……

  • location /abc/def/

    不能匹配/abc/defghi的请求,只能精确匹配 /abc/def/ghi这样的请求

阅读全文 »

经常用的 bearychat 凉了(估计受疫情影响), 还有国内的瀑布IM也凉了, 不得不选用一个新的企业协作工具.

那么在国内为什么不选用钉钉, 飞书, 企业微信? 哈哈哈你懂的. slack 是谁? 算是前面的标杆

阅读全文 »

1. 安装

1.1 安装前要求

Master服务器要2GB RAM 和 2个 CPU, docker和 k8s 在 master 和 node 节点都需要安装.

阅读全文 »

Kubernetes中的大部分概念Node、Pod、Replication Controller、Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过kubectl工具(API调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。

从这个角度来看,kubernetes其实是一个高度自动化的资源控制系统,通过跟踪对比etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

阅读全文 »

好久没写golang相关的blog了, 记录一些常见的golang技巧。

1. 不影响函数调用, 增加参数

先看以下函数调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
package main

import "fmt"

func ExecUser(name string, age int) {
fmt.Println("name:", name, "age:", age)
}

func main() {
ExecUser("levonfly", 9)
}

// name: levonfly age: 9
阅读全文 »

Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf

阅读全文 »