Skip to content

Commit e047ff3

Browse files
committed
Polish a format
1 parent c990a17 commit e047ff3

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

_posts/2020-10-24-MSA-implementation-3322-rules.md

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,61 @@ icon: icon-html
2626

2727
12条金规总结的非常好,但是缺点是不太容易记住。 我总结了一个三三两两的顺序去理解和记忆,这样不容易遗漏,并且可以比较系统的对照自己的微服务开发的问题与改进。
2828

29-
# 三三两两-3C 3D, 2B 2P
29+
# 三三两两-3C 3D, 2B 2P
3030

3131
## 3C
3232
### CodeBase
33+
一个微服务一个代码仓库。 同一个服务不同的环境的部署也是共用的一个仓库。
34+
微服务的运维、编译、自动化程序以及配置、依赖等等都应该放在一个仓库里面。 尽可能少的让一个微服务分散到两个或者以上的代码仓库中。
35+
36+
当然任何规则都有特例, 高级玩家可以无视这些规则,比如Google, Facebook他们经常一个repo容纳很多的微服务,模块。但是交付出很多的部署单元。
37+
38+
3339
### Config
40+
配置两个方案
41+
42+
环境变量
43+
44+
配置文件
45+
3446
### Concurrency
47+
平发靠复制进程
48+
3549
## 3D
3650
### Dependencies
51+
依赖要明确指出。
52+
53+
必须很简单能够启动,运行,在任何环境。 不能有各种隐含依赖
54+
55+
必须能够 "just work", "work out of box"。 人类对于懒惰的渴望已经是永无止境的,多一步都不行。
56+
3757
### Deposable
58+
像日抛型商品,或者纸杯一样, 它应该是很容易安全抛弃,并且很容易用新实例代替的。
59+
这里要求两个指标:
60+
61+
启动容易,快,不冲突。尤其是要初始化数据的时候。
62+
63+
关闭要优雅,就是关闭的时候要考虑用户的请求得到妥善处理,不能说停就停了。
64+
3865
### Dev/prod parity
3966
## 2B
4067
### Backing services
68+
状态应该隔离到 Backing services当中,比如数据库,或者能够存储数据库的微服务。
69+
或者nosql数据库
4170
### Build,Release,Run
42-
### 3P
71+
DevOps, CICD
72+
### 2P
4373
### Processes
74+
无状态、share-nothing规则
75+
Cache应该放到Backing services当中,不应该设计在Process里面。
76+
4477
### Port Binding
78+
一个微服务 应该将自己的服务可以绑定到一个port上面,这样以便于别人可以通过服务发现访问和使用。
79+
这并不限于http服务。
80+
81+
现代容器技术 也专门有一项就是将容器的端口暴露出去然后容器内部映射到服务当中。
82+
83+
并且这一条也要求我们的服务是自包含的,也就是说一个服务就要对应一个(或者多个端口也可以)服务端口。 像以前把多个应用程序 部署到tomcat中 然后统一通过8080端口,只是通过访问路径的方式是一种反模式。 但是现在springboot jar包方式将tomcat自包含到应用中就使得这一条原则得到满足。
4584

4685
# 另外两条跑哪去了?
4786
你看,没有忘记吧,我们中国人数学是最好的, 三三两两为十, 十二条金规还有两条

0 commit comments

Comments
 (0)