左耳听风专栏笔记
左耳听风专栏笔记
技术变现
- 程序员用手艺、技术养活自己,不依靠公司;
- 提高工作效率,去研究那些难的,公司内外的核心技术;
- 注重输出,输出技术、价值观,帮助更多的人,提高影响力。
- 去高速发展的公司,而不是初创业务未稳定或项目维护期的。
- 提升业务代码编写效率,争取时间学习。
- 关注技术的本质,新技术的出现解决了什么问题和不可替代性
- 技术付费点,挣钱和省钱。
- 找到有价值的信息源。(西方美国)
- 朋友圈
技术领导力
-
扎实的基础技术
-
非同一般的学习能力
-
坚持做正确的事
-
不断得高对自己的要求标准;
新技术
能否发展要素
-
有没有一个比较好的社区。
-
有没有一个或多个杀手级应用。
-
学习难度是否低,上手是否快。
-
没有一个不错的提高开发效率的开发框架。
-
是否有一个或多个巨型的技术公司作为后盾。
时间管理大师
投资自己的时间
-
花时间学习基础知识,花时间读文档。系统地学习一门知识
-
花时间在解放自己生产力的事上(可以牺牲现在时间解放为了更多的时间 - 代码规范 设计模式)
-
花时间在让自己成长的事上
-
花时间在建立高效的环境上
规划自己的时间
-
定义好优先级 (to do List)
-
最短作业优先 (先完成快速简单的 更有动力完成接下来的)
-
关注长期利益规划
用好自己的时间
- 形成正反馈。
- 反思和举一反三
应对故障
发生时
-
重启和限流
-
回滚操作
-
降级操作
-
紧急更新。
出现故障时,最重要的不是 debug 故障,而是尽可能地减少故障的影响范围,并尽可能快地修复问题。
Git协同工作流
中心式协同工作流
- 从服务器上做
git pull origin master
把代码同步下来。 - 改完后,
git commit
到本地仓库中。 - 然后
git push origin master
到远程仓库中,这样其他同学就可以得到你的代码了。
- 功能分支协同工作流
- 首先使用
git checkout -b new-feature
创建 “new-feature”分支。 - 然后共同开发这个功能的程序员就在这个分支上工作,进行 add、commit 等操作。
- 然后通过
git push -u origin new-feature
把分支代码 push 到服务器上。 - 其他程序员可以通过
git pull --rebase
来拿到最新的这个分支的代码。 - 最后通过 Pull Request 的方式做完 Code Review 后合并到 Master 分支上。
GitFlow 协同工作流
整个代码库中一共有五种分支。
- Master 分支。也就是主干分支,用作发布环境,上面的每一次提交都是可以发布的。
- Feature 分支。也就是功能分支,用于开发功能,其对应的是开发环境。
- Developer 分支。是开发分支,一旦功能开发完成,就向 Developer 分支合并,合并完成后,删除功能分支。这个分支对应的是集成测试环境。
- Release 分支。当 Developer 分支测试达到可以发布状态时,开出一个 Release 分支来,然后做发布前的准备工作。这个分支对应的是预发环境。之所以需要这个 Release 分支,是我们的开发可以继续向前,不会因为要发布而被 block 住而不能提交。
一旦 Release 分支上的代码达到可以上线的状态,那么需要把 Release 分支向 Master 分支和 Developer 分支同时合并,以保证代码的一致性。然后再把 Release 分支删除掉。
- Hotfix 分支。是用于处理生产线上代码的 Bug-fix,每个线上代码的 Bug-fix 都需要开一个 Hotfix 分支,完成后,向 Developer 分支和 Master 分支上合并。合并完成后,删除 Hotfix 分支。
GitHub Flow
所谓 GitHub Flow,其实也叫 Forking flow,也就是 GitHub 上的那个开发方式。
- 每个开发人员都把“官方库”的代码 fork 到自己的代码仓库中。
- 然后,开发人员在自己的代码仓库中做开发,想干啥干啥。
- 因此,开发人员的代码库中,需要配两个远程仓库,一个是自己的库,一个是官方库(用户的库用于提交代码改动,官方库用于同步代码)。
- 然后在本地建“功能分支”,在这个分支上做代码开发。
- 这个功能分支被 push 到开发人员自己的代码仓库中。
- 然后,向“官方库”发起 pull request,并做 Code Review。
- 一旦通过,就向官方库进行合并。
GitLab Flow
引入环境分支,如下图所示,其包含了预发布(Pre-Production)和生产(Production)分支。
Master 分支是一个 roadmap 分支,然后,一旦稳定了就建稳定版的分支,如 2.3.stable 分支和 2.4.stable 分支,其中可以 cherry-pick master 分支上的一些改动过去。
这样也就解决了两个问题:
- 环境和代码分支对应的问题;
- 版本和代码分支对应的问题。
我们将软件开发升级并简化到 SOA 服务化以及 DevOps 上来,那么协同工作流就会变得非常简单。所以,协同工作流的本质,并不是怎么玩好代码仓库的分支策略,而是玩好我们的软件架构和软件开发流程。
与其花时间在 Git 协同工作流上,还不如把时间花在调整软件架构和自动化软件生产和运维流程上来,这才是真正简化协同工作流程的根本。
分布式系统架构
冰与火
使用分布式系统原因
-
增大系统容量。(单体应用局限于系统的性能)
-
加强系统可用。(通过分布式架构来冗余系统以消除单点故障)
优缺点
需要注意的问题
异构系统的不标准问题
- 软件和应用不标准。
- 通讯协议不标准。
- 数据格式不标准。
- 开发和运维的过程和方法不标准。
系统架构中的服务依赖性问题
故障发生的概率更大