DevilKing's blog

冷灯看剑,剑上几分功名?炉香无需计苍生,纵一穿烟逝,万丈云埋,孤阳还照古陵

0%

原文链接

采用的方式是Fresh, 并通过跟docker结合的方式

watch files, 这里面ignored: assets, tmp, vendor

原理上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
watcher, err := fsnotify.NewWatcher()
if err != nil {
fatal(err)
}

go func() {
for {
select {
case ev := <-watcher.Event:
if isWatchedFile(ev.Name) {
watcherLog("sending event %s", ev)
startChannel <- ev.String()
}
case err := <-watcher.Error:
watcherLog("error: %s", err)
}
}
}()

watch使用的是fsnotify部分,然后传递到startChannel队列中,通过对startChannel的解析,然后进行分发build

核心部分的build代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
func build() (string, bool) {
buildLog("Building...")

cmd := exec.Command("go", "build", "-o", buildPath(), root())

stderr, err := cmd.StderrPipe()
if err != nil {
fatal(err)
}

stdout, err := cmd.StdoutPipe()
if err != nil {
fatal(err)
}

err = cmd.Start()
if err != nil {
fatal(err)
}

io.Copy(os.Stdout, stdout)
errBuf, _ := ioutil.ReadAll(stderr)

err = cmd.Wait()
if err != nil {
return string(errBuf), false
}

return "", true
}

另一种live reload的方式

git repo

realize支持多种方式的live reload,同时,还可以针对web程序

Runbook的实践

这篇文章讲述了这个小团队如何让两三个人做 OnCall,但其实讲述的是 Runbook 的一些实践。

  • Runbook 是用来给 24x7 团队在非工作时间不用召唤开发的情况下可以自己根据文档运行一些基本故障的对应解决方案。
  • 原则:如果命令未来可能会被再次执行,那就花点时间写点文档,写清楚执行的步骤。
  • Runbook 尽可能按照一个模板来写,有一些基本的信息,比如有哪些环境,怎么找日志,怎么做 troubleshooting。
  • 代码库里面嵌入一些 scripts, 方便执行。
  • 如果 Runbook 来不及更新,好歹留一条评论在那里。
  • Runbook 有个 owner,出问题好抓人。

有钱人的世界是彩色的,孤独流浪的人,最后可能连个线都没有

释迦,孑然一身,孤独地在世间逛一逛


本周:

  • 接入几家agency
  • 继续理解ml中关于lstm部分知识

本周所学:

  • lstm中bucket部分,关于前后变换的长度限制
  • conda的部分使用

下周计划:

  • 尝试将lstm部分写出来,开始训练,写代码
  • 整理一下,开始进行leetcode的训练

锻炼部分,恢复的不错,继续坚持和保持下去,关于跑步的里程数方面,提高到一周15km,定一个全年跑步里程数,加油!

烦恼什么,不过是在哪里什么都不动的自我逃避,行动起来,不管是什么样,行动

时间分配上,开始找到一些感觉,但还不够,回家的那几个小时,要抓起来,调整下作息,早上的时候,可以来段英语学习。。

相处上,还是按部就班,尽量保持独立吧,还是抓不住什么,自己要控制lol。。简直像是精虫上脑一样。。。

原文链接

While it is true that Redshift is based off PostgreSQL it has been so heavily modified

There are 3 important aspects in big data architecture: Scalability, Scalability and Scalability (maintaining performance despite ever increasing volumes of data)

Such “trends” include:

  • The rise of noSQL database management systems (To solve the inherent scalability problems of relational databases)
  • The rise of functional programming paradigms (Make concurrency easier to reason with. Big data processing systems are often — by there very nature — distributed and highly concurrent)

big data landscape

Spark: It also uses a DAG (Directed Acyclic Graph) Engine to optimize workflows. The DAG engine essentially takes the tasks that needs to be completed and works backwards to determine the most optimum way to carry them out.

Hadoop was designed for storing large amounts of data and running batch processing applications against said data (known as an OLAP system). As such It is unsuitable for serving customer facing applications such as web applications (OLTP system).

CAP theorem

最新的是解决CA问题的是google的spannr服务。类似于Tidb

As a Data Engineer you may be involved in projects such as the following:

  • Building ETL (Extract-Transform-Load) pipelines: Not to be confused with “data ingestion” which is simply moving data from one place to another. ETL pipelines are a fundamental component of any data system. They extract data from many disparate sources, transform (aka wrangling) the data (often making it fit the data model defined by your data warehouse) then load said data into your data warehouse. These are systems built from scratch using programming languages such as Python, Java, Scala, Go, etc.
  • Building metric analysis tools: Tools used to query the data pipeline for statistics such as customer engagement, growth or operational efficiency.
  • Building/Maintaining Data Warehouse/Lake: Data engineers are the “librarians” of the data warehouse, cataloguing and organizing metadata. They must also define the processes by which other people in your organisation load or extract data to/from the warehouse (As a gatekeeper of sorts).

原文链接

Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation.

掌握一些 Kubernetes 的核心概念:

  • Cluster: 一个容器网络,它们之间可以互相通信。
  • Nodes: Cluster 里面跑的的节点。
  • Master:可以控制其他节点,所有操作命令跑在 master 上,Master 决定 Cluster 里面的哪个节点跑应用。
  • Network: Kubernetes 假设你搞好了网络可以让节点互相通信。有很多开源方案可以选择。
  • Kubernetes API: Master 开放出来的接口
  • Kubelet: 每个 Node 上跑着 Kubelet,负责管理当前 Node,以及和 Master 通信。通信使用 Kubernetes API。
  • kubectl: 一个命令行工具,调用 Kubernetes API 和 Master 通信用来管理。
  • kubeadm: 一个用来初始化 cluster 的程序,能给 Cluster 配置好所需要的 add-ons。
  • etcd: 一个分布式 key-value 数据仓库。存储了所有 Cluster Nodes 的信息。
  • Kubernetes objects: 是 cluster 中操作的基本对象,也是会在 Kubernetes 中存储的数据。这些数据用来描述 Cluster 应该处于的状态。包括 deployments, replica sets, services, pods, etc.
  • Pod: 一组容器(比如 docker containers)以及它们之间的关系;它们之间有共享的网络和存储。在网络上,这组容器可以通过一个独立 IP 地址访问。
  • Service: 定义了 Pods 的逻辑分组 以及如何访问它们。因为 Pod 很容易被创建和销毁,Kubernetes 引入了 Service,只要给 Pods 给一个标签,所以流量都会由标签指定的 Service 处理。
  • Deployment: 设定预期状态,如果不符合,Kubernetes 会保证 Cluster 达到这个状态。Deployment 告诉了 Kubernetes 如何创建和更新应用的实例。