vault backup: 2026-01-05 13:03:55
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: =Draft= Project Manager for solo person
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
- Tags: [[Project Management]] [[Productivity]] [[Notion]] [[ClickUp]] [[Todoist]] [[Drafts]]
|
||||
- ## References/Ideas
|
||||
- Refererences:
|
||||
- [[Project Management]] [[=Draft= 5 Projects Rules]] [[ClickUp]] [[Notion]] [[Todoist]]
|
||||
- Mention/Search:
|
||||
-
|
||||
- # Draft
|
||||
A little while ago I was feeling overwhelmed for what seemed no apparent reason. I had a lot of projects going on, but nothing out of the ordinary. I had 3-4 projects I was tracking. I was looking at my schedule weekly. Everything should be fine normally. But then I started to feel the pull of trying new application. That's not nescessarily a good default really to go chase the "oh shiny" but if I let myself experiement, fully knowing about it, I often end up finding the actual pain point to fix. So I tried a bunch of new apps and ways to try to fix the problem I was having. Then I realized what I was wanting out of all of those and what I was trying to achieve.
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
|
||||
ACTION_ACCESS_TOKEN:
|
||||
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
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Blog
|
||||
type: area-hub
|
||||
tags: [area, para, blog, writing]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Blog"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
---
|
||||
title: Feedback sessions
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
### Things to look out for:
|
||||
|
||||
**C** - Confusing
|
||||
|
||||
**R** - Repetitive
|
||||
|
||||
**I** - Insightful
|
||||
|
||||
**B** - Boring
|
||||
|
||||
**S** - Surprising
|
||||
|
||||
- 5s glance for overview
|
||||
- Implied why that don't get answered
|
||||
- long sentences
|
||||
- flow
|
||||
- unanswered question
|
||||
- missing point
|
||||
- too many of something
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Hugo Version Change
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
## Notes:
|
||||
|
||||
To change Hugo version on AWS Amplify
|
||||
- On the site go to Build Settings
|
||||
- Build image settings -> Edit
|
||||
- Change the version to the desired one
|
||||
@@ -0,0 +1,27 @@
|
||||
---
|
||||
title: Writing cheatsheet
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
### C.R.I.B.S
|
||||
- **C**onfusing
|
||||
- **R**epeated
|
||||
- **I**nsightful
|
||||
- **B**oring
|
||||
- **S**urprising
|
||||
### Writing Tips
|
||||
- **Do not be afraid of removing/changing things as you go**
|
||||
- ==**Remember to structure for interest**==
|
||||
- <mark class='blue'>**Answer "why would I read this" as fast as possible**</mark>
|
||||
- Short sentences as much as possible
|
||||
- More example for interesting topics
|
||||
- Use precise data/example instead of generality
|
||||
|
||||
### Editing
|
||||
- <mark class='green'>Intro (;m1)</mark>
|
||||
- <mark> Main point (;m2) </mark>
|
||||
- <mark class='blue'>Transition (;m3)</mark>
|
||||
- <mark class='orange'>Example (;m4) </mark>
|
||||
- <mark class='pink'>Verify (;m5)</mark>
|
||||
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: Annual Salary to Weekly
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
## Notes:
|
||||
|
||||
### Calculate approximate
|
||||
- To get an approximate number divide new annual total with 1.50
|
||||
- Divide the total by 26 to get weekly numbers
|
||||
ex. 61500 / 1.50 = 4100 / 26 = 1576
|
||||
|
||||
### Calculate new percent
|
||||
- Take the current weekly total * 26
|
||||
- This will give the current annual after taxes, insurance, etc
|
||||
- Now just divide the current full annual with this
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Finance
|
||||
type: area-hub
|
||||
tags: [area, para, finance]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Finance"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
title: YNAB Reminder
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
title: Bills
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
|
||||
https://laomaoyun.me/
|
||||
|
||||
### D套餐 (200G)
|
||||
|
||||
于 2023/04/15 到期,距离到期还有 31 天
|
||||
30元
|
||||
|
||||
https://09.laomao1.xyz/api/v1/client/subscribe?token=daddf8de9b1e002478b6fc59a6760e85
|
||||
|
||||
|
||||
|
||||
https://www.cutecloud.net/
|
||||
**19.80**
|
||||
|
||||
此商品无限制购买
|
||||
|
||||
会员等级
|
||||
|
||||
中杯
|
||||
|
||||
等级时长
|
||||
|
||||
30 天
|
||||
|
||||
添加流量
|
||||
|
||||
200 GB
|
||||
|
||||
重置周期
|
||||
|
||||
30天重置
|
||||
|
||||
同时在线
|
||||
|
||||
5个设备
|
||||
|
||||
峰值速率
|
||||
|
||||
2000Mbps
|
||||
|
||||
描述
|
||||
|
||||
全球节点分布
|
||||
|
||||
快速客服响应
|
||||
|
||||
全平台客户端
|
||||
|
||||
共享Apple ID账户
|
||||
|
||||
共享流媒体账户
|
||||
|
||||
解锁主流流媒体限制
|
||||
|
||||
https://sub.cutecloud.link/link/rCvnzdf6GsYxO0TT?clash=1
|
||||
|
||||
|
||||
vnet@windy.me
|
||||
|
||||
https://pwjmtniso4.stcserver-cloud.com/
|
||||
|
||||
## ¥0.8 /G
|
||||
50G 一年
|
||||
https://subapi1.gardenparty.one/link/7662I1Snxww7zkgq?sub=3
|
||||
|
||||
|
||||
|
||||
150g/14月
|
||||
|
||||
https://dog1.ssrdog111.com/
|
||||
https://host.api-baobaog.rest/api/v1/client/subscribe?token=ab911d53f4ef8abb40da6fd6c5ab326d
|
||||
|
||||
|
||||
|
||||
https://qbwiue.meslcloud.com/#/stage/dashboard
|
||||
100G
|
||||
Premium 100G
|
||||
|
||||
于 2026/06/18 到期
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Clash 热点升级
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
experimental:
|
||||
interface-name: eth0 //上网的网卡
|
||||
|
||||
创建tap设备
|
||||
打开tap设备属性,更改 share
|
||||
共享的网卡选择热点的网卡 wlan1
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: providers
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Health
|
||||
type: area-hub
|
||||
tags: [area, para, health]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Health"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
---
|
||||
title: 自行车
|
||||
tags: [health, garmin, cycling, data-sync]
|
||||
lang: zh
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### 数据同步
|
||||
|
||||
佳明国服数据同步到外服
|
||||
[[DailySync · GitLab]]
|
||||
|
||||
|
||||
- 安装node执行环境
|
||||
|
||||
安装 nvm
|
||||
```shell
|
||||
|
||||
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
|
||||
```
|
||||
|
||||
|
||||
安装 node yarn
|
||||
```shell
|
||||
$ nvm install --lts
|
||||
$ npm install -g yarn
|
||||
```
|
||||
|
||||
|
||||
- 安装软件
|
||||
|
||||
```shell
|
||||
$ git clone https://gitlab.com/zhiqiangf/dailysync.git
|
||||
$ yarn
|
||||
```
|
||||
|
||||
- 配置帐号
|
||||
打开 src/constant.ts 编辑帐号名
|
||||
```typescript
|
||||
// 佳明中国区账号及密码
|
||||
export const GARMIN_USERNAME_DEFAULT = '';
|
||||
export const GARMIN_PASSWORD_DEFAULT = '';
|
||||
|
||||
// 佳明国际区区账号及密码
|
||||
export const GARMIN_GLOBAL_USERNAME_DEFAULT = '';
|
||||
export const GARMIN_GLOBAL_PASSWORD_DEFAULT = '';
|
||||
```
|
||||
|
||||
|
||||
- 配置定时任务
|
||||
|
||||
```shell
|
||||
$ vi sync.sh
|
||||
#!/usr/bin/zsh
|
||||
|
||||
cd /opt/dailysync/dailysync
|
||||
yarn sync_cn >> /var/log/dailysync.log
|
||||
#yarn sync_global >> /var/log/dailysync.log
|
||||
|
||||
$ crontab -e
|
||||
0 * * * * /opt/dailysync/dailysync/sync.sh
|
||||
|
||||
$ chmod +x sync.sh
|
||||
|
||||
$ sudo vim /etc/logrotate.d/dailysync
|
||||
/var/log/dailysync.log {
|
||||
monthly
|
||||
create 0644 windy root
|
||||
rotate 5
|
||||
size=1M
|
||||
dateext
|
||||
dateformat -%d%m%Y
|
||||
notifempty
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: Apartment
|
||||
tags:
|
||||
- house
|
||||
- apartment
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "2. 📝 Areas/Apartment"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: Brand and Models
|
||||
tags: [house, brands, products, reference]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
## Notes:
|
||||
|
||||
Toothbrush:
|
||||
- Oral-B Braun
|
||||
|
||||
Water filter:
|
||||
- Brita
|
||||
|
||||
Toothpaste:
|
||||
- Sensodyne complete
|
||||
|
||||
Laundry soap:
|
||||
- Tide free and gentle non perfumed
|
||||
|
||||
Soap:
|
||||
- Dove classic non perfumed
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: House
|
||||
type: area-hub
|
||||
tags: [area, para, house, home]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/House"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
title: Moving tip
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
## Notes:
|
||||
|
||||
Take a picture of everything in the box while packing or after done packing then link the picture with the box (mark a number on it or something) then you can find things back easily
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Filesystem limitation
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
Fundamental rules for for Universal Naming Convention (UNC),which enable applications to create and process valid names for files and directories, regardless of the file system:
|
||||
|
||||
Following reserved characters:
|
||||
```
|
||||
< (less than)
|
||||
> (greater than)
|
||||
: (colon)
|
||||
" (double quote)
|
||||
/ (forward slash)
|
||||
\ (backslash)
|
||||
| (vertical bar or pipe)
|
||||
? (question mark)
|
||||
* (asterisk)
|
||||
```
|
||||
Use any character in the current code page for a name, including Unicode characters and characters in the extended character set (128–255),
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
title: Gradle cheatsheet
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
Java parameters references:
|
||||
[Gradle Java Plugin](https://docs.gradle.org/current/userguide/java_plugin.html)
|
||||
|
||||
Running only certain test to debug problems:
|
||||
```
|
||||
gradle test --tests org.gradle.SomeTest.someSpecificFeature
|
||||
gradle test --tests *SomeTest.someSpecificFeature
|
||||
gradle test --tests *SomeSpecificTest
|
||||
gradle test --tests all.in.specific.package*
|
||||
gradle test --tests *IntegTest
|
||||
gradle test --tests *IntegTest*ui*
|
||||
gradle test --tests *IntegTest.singleMethod
|
||||
gradle someTestTask --tests *UiTest someOtherTestTask --tests *WebTest*ui
|
||||
```
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: Install IPA server
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
```bash
|
||||
|
||||
sudo ipa-server-install --realm=INT.IT2000.COM.CN --domain=int.it2000.com.cn --ds-password=admingzzn --admin-password=admingzzn --hostname=ipa.int.it2000.com.cn --ip-address=10.16.67.98 --setup-dns
|
||||
|
||||
sudo firewall-cmd --add-service={http,https,dns,ntp,freeipa-ldap,freeipa-ldaps} --permanent
|
||||
|
||||
sudo firewall-cmd --reload
|
||||
|
||||
```
|
||||
@@ -0,0 +1,63 @@
|
||||
---
|
||||
title: The Omnipresence of Work - More to That
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
Title: "The Omnipresence of Work - More to That"
|
||||
Author: [[moretothat.com]]
|
||||
From: https://moretothat.com/the-omnipresence-of-work/
|
||||
|
||||
## Highlights:
|
||||
|
||||
The moment one node dies, many others will learn from the ideas of that node, and those thoughts form the foundation of further ideas to come. This is why the words of dead poets, politicians, and philosophers grow increasingly influential as time runs its course
|
||||
|
||||
---
|
||||
|
||||
In this case, the always-on nature of the mind is a key feature of our species, creating products that hopefully increase well-being with each release.
|
||||
|
||||
---
|
||||
|
||||
If Condition #1 is taken to its logical endpoint, then we will view the natural world primarily for its utility, rather than for its sheer beauty
|
||||
|
||||
---
|
||||
|
||||
If Condition #2 is taken to its logical endpoint, then things look even bleaker. If everything we touch in the material world has to serve some sort of function, isn't it only a matter of time before humans themselves have to serve some sort of greater function as well
|
||||
|
||||
---
|
||||
|
||||
In both scenarios, however, labor and leisure were delineated by physical space. If you were situated within the four walls of your factory or office, it was time to work. If you found yourself within the four walls of your home, it was time to relax
|
||||
|
||||
---
|
||||
|
||||
The home is no longer an environmental cue to put work aside. It is a place that constantly reminds you that there is always more work to be done.
|
||||
|
||||
---
|
||||
|
||||
Availability is no longer determined by one's time, but by one's attention.
|
||||
|
||||
---
|
||||
|
||||
Technological progress in the era of knowledge work can be defined by these three things:
|
||||
|
||||
(1) Make it easier to connect with others,
|
||||
|
||||
(2) Make it faster to get what you need,
|
||||
|
||||
(3) Make it pretty and appealing.
|
||||
|
||||
---
|
||||
|
||||
We willingly tether ourselves to the constant demands of the workplace, either by actively working on our projects during the day, or by passively checking on their progress at night.
|
||||
|
||||
---
|
||||
|
||||
but given this dynamic, it seems inevitable that we start defining ourselves by what we're able to produce, while everything else goes by the wayside.
|
||||
|
||||
---
|
||||
|
||||
Work, like everything else in nature, follows a circadian rhythm. Intense periods of energy expenditure are followed by requisite periods of rest. The important thing is that the rest must be sustained, and not broken up by intermittent worries and thoughts. That's like getting 8 hours of sleep, but having it interrupted by the hour. You and I know that nothing productive will be done the following morning.
|
||||
|
||||
---
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: block sudo to specific command
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
If your user is called `user` and your host is called you could add these lines to `/etc/sudoers`:
|
||||
|
||||
```
|
||||
user = (root) NOPASSWD: /sbin/shutdown
|
||||
user = (root) NOPASSWD: /sbin/reboot
|
||||
```
|
||||
|
||||
This will allow the user `user` to run the desired commands without entering a password. All other sudoed commands will still require a password.
|
||||
|
||||
The commands specified in the `sudoers` file _must_ be fully qualified (i.e. using the absolute path to the command to run)
|
||||
|
||||
If the command ends with a trailing `/` character and points to a directory, the user will be able to run any command in that directory (but not in any sub-directories therein). In the following example, the user `user` can run any command in the directory `/home/someuser/bin/`:
|
||||
|
||||
```
|
||||
user = (root) NOPASSWD: /home/someuser/bin/
|
||||
```
|
||||
|
||||
As an alternative to editing the `/etc/sudoers` file, you could add the two lines to a new file in `/etc/sudoers.d` e.g. `/etc/sudoers.d/shutdown`. This is an elegant way of separating different changes to the `sudo` rights and also leaves the original `sudoers` file untouched for easier upgrades.
|
||||
|
||||
*visudo can be used to edit those files too, this prevent error that could lock you out of the system*
|
||||
```
|
||||
sudo visudo -f /etc/sudoers.d/shutdown
|
||||
```
|
||||
@@ -0,0 +1,49 @@
|
||||
---
|
||||
title: curl POST examples
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
|
||||
<h2>Common Options</h2>
|
||||
<div>-#, --progress-bar Make curl display a simple progress bar instead of the more informational standard meter.</div>
|
||||
<div>-b, --cookie <name=data> Supply cookie with request. If no =, then specifies the cookie file to use (see -c).</div>
|
||||
<div>-c, --cookie-jar <file name> File to save response cookies to.</div>
|
||||
<div>-d, --data <data> Send specified data in POST request. Details provided below.</div>
|
||||
<div>-f, --fail Fail silently (don't output HTML error form if returned).</div>
|
||||
<div>-F, --form <name=content> Submit form data.</div>
|
||||
<div>-H, --header <header> Headers to supply with request.</div>
|
||||
<div>-i, --include Include HTTP headers in the output.</div>
|
||||
<div>-I, --head Fetch headers only.</div>
|
||||
<div>-k, --insecure Allow insecure connections to succeed.</div>
|
||||
<div>-L, --location Follow redirects.</div>
|
||||
<div>-o, --output <file> Write output to . Can use --create-dirs in conjunction with this to create any directories specified in the -o path.</div>
|
||||
<div>-O, --remote-name Write output to file named like the remote file (only writes to current directory).</div>
|
||||
<div>-s, --silent Silent (quiet) mode. Use with -S to force it to show errors.</div>
|
||||
<div>-v, --verbose Provide more information (useful for debugging).</div>
|
||||
<div>-w, --write-out <format> Make curl display information on stdout after a completed transfer. See man page for more details on available variables. Convenient way to force curl to append a newline to output: -w "\n" (can add to ~/.curlrc).</div>
|
||||
<div>-X, --request The request method to use.</div>
|
||||
<h2>POST</h2>
|
||||
<div>When sending data via a POST or PUT request, two common formats (specified via the Content-Type header) are:</div>
|
||||
<ul><li><div>application/json</div></li><li><div>application/x-www-form-urlencoded</div></li></ul>
|
||||
<div>Many APIs will accept both formats, so if you're using curl at the command line, it can be a bit easier to use the form urlencoded format instead of json because</div>
|
||||
<ul><li><div>the json format requires a bunch of extra quoting</div></li><li><div>curl will send form urlencoded by default, so for json the Content-Type header must be explicitly set</div></li></ul>
|
||||
<div>This gist provides examples for using both formats, including how to use sample data files in either format with your curl requests.</div>
|
||||
<h2>curl usage</h2>
|
||||
<div>For sending data with POST and PUT requests, these are common curl options:</div>
|
||||
<ul><li><div>request type</div></li><ul><li><div>-X POST</div></li><li><div>-X PUT</div></li></ul><li><div>content type header</div></li><li><div>-H "Content-Type: application/x-www-form-urlencoded"</div></li><li><div>-H "Content-Type: application/json"</div></li><li><div>data</div></li><ul><li><div>form urlencoded: -d "param1=value1&m2=value2" or -d @data.txt</div></li><li><div>json: -d '{"key1":"value1", "key2":"value2"}' or -d @data.json</div></li></ul></ul>
|
||||
<h2>Examples</h2>
|
||||
<h3>POST application/x-www-form-urlencoded</h3>
|
||||
<div>application/x-www-form-urlencoded is the default:</div>
|
||||
<div>curl -d "param1=value1&m2=value2" -X POST http://localhost:3000/data</div>
|
||||
<div>explicit:</div>
|
||||
<div>curl -d "param1=value1&m2=value2" -H "Content-Type: application/x-www-form-urlencoded" -X POST http://localhost:3000/data</div>
|
||||
<div>with a data file</div>
|
||||
<div>curl -d "@data.txt" -X POST http://localhost:3000/data</div>
|
||||
<h3>POST application/json</h3>
|
||||
<div>curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST http://localhost:3000/data</div>
|
||||
<div>with a data file</div>
|
||||
<div>curl -d "@data.json" -X POST http://localhost:3000/data</div>
|
||||
<div><br></div>
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: 酸黄瓜制作
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
## 2023.4.18 尝试
|
||||
小黄瓜原料: 1044克
|
||||
盐: 21.7克
|
||||
糖: 11.7克
|
||||
蒜末
|
||||
姜末
|
||||
蒜苔切碎
|
||||
芝麻
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: 文明
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
文明7标准:
|
||||
```
|
||||
7I0EZ-N5HWF-JYIGF
|
||||
```
|
||||
激活码2:
|
||||
```
|
||||
EIFGE-K032P-RQ8BH
|
||||
```
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Entray Door
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
## lock
|
||||
### 静脉解锁
|
||||
|
||||
|
||||
## door
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
title: Inside Size
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
|
||||
床边衣柜
|
||||
|
||||
高 38
|
||||
宽 35
|
||||
深 39
|
||||
|
||||
床角衣柜
|
||||
上柜下层:
|
||||
|
||||
宽:69
|
||||
深:56
|
||||
高:27.5
|
||||
隔板深:39.5
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: box
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
厨房清洁剂储物盒子
|
||||
```
|
||||
24*24*40
|
||||
```
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,170 @@
|
||||
---
|
||||
title: "在非原生ESIM设备上申请Giffgaff ESIM"
|
||||
source: "https://simonmy.com/posts/giffgaff-esim-apply-without-official-app.html#1-%E7%94%A8%E9%82%AE%E7%AE%B1%E6%B3%A8%E5%86%8C%E4%B8%80%E4%B8%AAgiffgaff%E8%B4%A6%E5%8F%B7"
|
||||
author:
|
||||
- "[[Simon (Yu Ma)]]"
|
||||
published: 2024-10-22
|
||||
created: 2025-09-25
|
||||
description: "Progress is the activity of today and the assurance of tomorrow."
|
||||
tags:
|
||||
- "clippings"
|
||||
---
|
||||
## 背景
|
||||
|
||||
Giffgaff是英国的一家虚拟运营商,其Giffgaff卡适合长期保号使用。Giffgaff原先只提供实体SIM卡,随后开始支持将实体SIM卡转换为esim或者直接购买新的esim。Giffgaff并不提供ESIM的二维码,而是通过Giffgaff APP直接将ESIM配置文件下载到手机中。Giffgaff在申请或更换ESIM时都会检测当前手机是否能够支持ESIM功能,由于国内设备或早期发行的设备不支持ESIM功能,客户端将无法进行申请。本文介绍如何使用抓包请求的方式,直接申请Giffgaff ESIM卡,并获取二维码进行绑定。ESTK/5ber/9esim等均可采用此方案。
|
||||
|
||||
## 操作步骤
|
||||
|
||||
### 1\. 用邮箱注册一个Giffgaff账号
|
||||
|
||||
打开官网注册链接([https://www.giffgaff.com/auth/register](https://www.giffgaff.com/auth/register)),进行常规注册。特别需要注意的地方我截图放在下面,没有提到的步骤就按照常规进行填写。
|
||||
|
||||
安全提醒
|
||||
|
||||
注意!这一步的邮箱是安全邮箱,一定要自己可信的邮箱来注册,后续经常要用来做验证,不要使用临时邮箱或不安全的邮箱。
|
||||
|
||||
1. 填写安全邮箱
|
||||
2. 邮箱收到验证码后,填写进行下一步
|
||||
3. 密码符合要求填写就好,一定要记住,后续要频繁使用
|
||||
4. 选择 `No Thanks` ,生日可不写
|
||||
5. 当你看到 `Welcome` 的时候,说明已经注册成功,点击按钮回到 `我的Giffgaff`
|
||||
6. 不要关闭这个窗口,后续要用!
|
||||
|
||||
[](https://image.simonmy.com/file/1729607150231_image.png) [](https://image.simonmy.com/file/1729607245363_image.png) [](https://image.simonmy.com/file/1729607267059_image.png)
|
||||
|
||||
特别提醒
|
||||
|
||||
后续登录都是使用 `我的Giffgaff` 中显示的用户名登录,不会使用邮箱。 邮箱是用来收验证码
|
||||
|
||||
### 2\. 下载Postman客户端
|
||||
|
||||
通过官方网站下载Postman客户端,首次运行会提示并注册并登录Postman,如果你自己有账号可直接登录。切记,这里一定要注册登录,因为后续要依赖Postman的高级功能,不登录无法使用。
|
||||
|
||||
特别提醒
|
||||
|
||||
如果你仅希望临时注册一个账号并不暴露自己的邮箱,可以使用下面的网站快速获得临时邮箱,完成接验证码或确认邮件。 [https://fakemail.ink/](https://fakemail.ink/) 和 [https://fakemail.chat/](https://fakemail.chat/)
|
||||
|
||||
下载地址:https://www.postman.com/downloads/
|
||||
|
||||
[](https://image.simonmy.com/file/1729606034895_image.png) [](https://image.simonmy.com/file/1729606121802_image.png) [](https://image.simonmy.com/file/1729606169022_image.png)
|
||||
|
||||
跳回软件后的部分,自己随便填写就好,没有什么要特别注意的了。
|
||||
|
||||
### 3\. 导入Postman脚本
|
||||
|
||||
打开软件后,直接点击Import按键,粘贴脚本地址到图示位置即可。
|
||||
|
||||
脚本地址:
|
||||
|
||||
```
|
||||
https://assets.simonmy.com/2025-02-25/pNpfad.json
|
||||
```
|
||||
|
||||
备用脚本地址:
|
||||
|
||||
```
|
||||
https://image.simonmy.com/file/1740496037998_Giffgaff-swap-esim_20250225a.json
|
||||
```
|
||||
|
||||
[](https://image.simonmy.com/file/1729606423680_image.png) [](https://image.simonmy.com/file/1729606546311_image.png)
|
||||
|
||||
### 4\. Postman登录账号获取Token
|
||||
|
||||
提示:这个步骤后续还要重复操作,下文中提到重新执行 `Postman登录账号`, 具体过程执行以下步骤即可
|
||||
|
||||
要通过HTTP请求的方式直接与Giffgaff服务器通讯,首先需要获取一个Access Token。向服务器发送的请求中需要包含这个Token来验证用户身份。 具体步骤如下:
|
||||
|
||||
1. 选中这一组脚本后,依次点击 `Authorization` - `滚动条划到最后` - `Clear cookies` - `Get New Access Token`
|
||||
2. 弹窗后输入用户名和密码,注意这里的用户名是 `我的Giffgaff` 中的用户名,并不是邮箱
|
||||
3. 邮箱接收验证码,提交登录
|
||||
4. 稍等一会,Postman有一个弹框,点击按钮 `Use Token`
|
||||
|
||||
[](https://image.simonmy.com/file/1729608044731_image.png) [](https://image.simonmy.com/file/1729608249229_image.png) [](https://image.simonmy.com/file/1729608325194_image.png)
|
||||
|
||||
### 5\. 执行脚本 - 邮箱二次确认,获取签名
|
||||
|
||||
脚本中的前三步骤我合并在一起描述,本步骤是为了二次验证,获取签名。 具体步骤如下:
|
||||
|
||||
1. 点击 `發送認證郵件 Send Email Verification` ,并发送请求
|
||||
2. 安全邮箱收到验证码后,填写到 `檢查郵件認證碼 Verify Email code` 的 `Body` ,并且发送请求
|
||||
3. 点击 `取得會員資訊 Get Member` ,并发送请求
|
||||
|
||||
[](https://image.simonmy.com/file/1729609371482_image.png) [](https://image.simonmy.com/file/1729609494858_image.png) [](https://image.simonmy.com/file/1729609604305_image.png)
|
||||
|
||||
### 6\. 执行脚本 - 申请ESIM卡
|
||||
|
||||
1. 点击 `申請 SIM卡 Reserve SIM` 发送请求
|
||||
2. 注意返回体里面的 `esim` 部分,这一块要复制保存下来
|
||||
[](https://image.simonmy.com/file/1729615482105_image.png)
|
||||
|
||||
### 7\. 通过官方APP - 激活ESIM卡并完成充值
|
||||
|
||||
1. 通过 `Play商店` 或 `App Store` 下载 Giffgaff
|
||||
2. 使用用户名(注意不是邮箱)和密码 登录官方App,同样邮箱会收到验证码,正常验证即可
|
||||
3. 登录后选择选择 `SIM Card` 下的 `Activate your SIM card`
|
||||
4. 输入上一步获取的 `activationCode` 6位激活码,提交激活
|
||||
5. 页面拉到最下面,选择 `I don't want a plan` 付费方案
|
||||
|
||||
[](https://image.simonmy.com/file/1734447150223_image.png) [](https://image.simonmy.com/file/1734447173642_image.png) [](https://image.simonmy.com/file/1734447218968_image.png)
|
||||
|
||||
1. 选择最小充值金额 €10, 再次提交继续。
|
||||
2. 新增一个付款方式,并选择 `Add Card`, 这里可以使用国内发行的Visa和Master Card。 并填写账单信息,用地址生成器弄一个英国的地址。或者你写中国自己的地址也可以,并没有非常强的要求。
|
||||
3. 勾选协议授权,并提交。
|
||||
4. 稍等片刻你应该就可以看到自己的手机号码了
|
||||
|
||||
[](https://image.simonmy.com/file/1734447264041_image.png) [](https://image.simonmy.com/file/1734447318908_image.png) [](https://image.simonmy.com/file/1734447381690_image.png)
|
||||
|
||||
注意:此时此刻你是无法进行安装ESIM的,回到电脑端Postman窗口
|
||||
|
||||
### 8\. 下载ESIM,生成二维码
|
||||
|
||||
由于我的卡是之前操作过的,所以就没有办法继续演示截图。后续就是顺序执行剩下的脚本,我把步骤列在这里。
|
||||
|
||||
特别提醒
|
||||
|
||||
不要去执行 `申請交換eSIM Swap SIM` ,这个步骤一定要跳过!!!
|
||||
|
||||
1. 执行脚本 `取得eSIM Get ESIMs` , 获取当前可以下载的ESIM信息
|
||||
2. 执行脚本 `取得eSIM下載碼 Get ESIM Token` , 获取ESIM LPA信息。如果你知道LPA怎么用,下面扫码的步骤可不执行。
|
||||
3. 执行脚本 `產生QRCode Get ESIM QRCode`
|
||||
|
||||
[](https://image.simonmy.com/file/1729611969794_image.png) [](https://image.simonmy.com/file/1729612014146_image.png) [](https://image.simonmy.com/file/1729612038215_image.png)
|
||||
|
||||
### 9\. 导入ESIM, 等待服务器激活
|
||||
|
||||
使用支持eSIM的手机、EasyUICC或者其他第三方的eSIM管理工具扫描这个二维码,即可下载并安装eSIM配置文件
|
||||
|
||||
### 10\. 更换ESIM卡(SIM换ESIM同理)
|
||||
|
||||
特别提醒
|
||||
|
||||
首次申请不需要关注这个过程,此过程是帮助有换卡需求的小伙伴
|
||||
|
||||
近期Giffgaff API更新,很多小伙伴在使用脚本时都出现了 `Required header 'X-GG-MFA-REF' is not present.`异常。 如果你也遇到了这个问题,请按照下面的步骤解决。
|
||||
|
||||
1. 执行上述步骤的 `1-6` ,你会在Postman中获得一个状态为 `RESERVED` 的ESIM卡, 请如图,暂时保存这个卡的所有信息,尤其是 `activationCode` 和 `ssn` ,Postman不要关闭,后续有用!!!
|
||||
2. 登录并打开官网个人信息页([https://www.giffgaff.com/profile/details](https://www.giffgaff.com/profile/details))
|
||||
3. 找到SIM Card - Replace my SIM 这个Tab, 点击Open - Activate your SIM, 如图
|
||||
4. 进入激活页面后,填写你上述的 `activationCode` ,点击 `Active`
|
||||
5. 点击下面的确认按钮,跳转页面后再次点击确认,网页会跳转到首页并提示成功。
|
||||
6. 回到Postman, 执行上述第8步
|
||||
|
||||
> 执行脚本 `取得eSIM Get ESIMs` , 获取当前可以下载的ESIM信息
|
||||
> 执行脚本 `取得eSIM下載碼 Get ESIM Token` , 获取ESIM LPA信息。如果你知道LPA怎么用,下面扫码的步骤可不执行。
|
||||
> 执行脚本 `產生QRCode Get ESIM QRCode`
|
||||
|
||||
[](https://image.simonmy.com/file/1753876221141_GvRPUJ.png) [](https://image.simonmy.com/file/1753876440224_J0BMEg.png) [](https://image.simonmy.com/file/1753876538880_vs8rh3.png) [](https://image.simonmy.com/file/1753876624730_gQ0myu.png)
|
||||
|
||||
### 11\. 其他
|
||||
|
||||
如果你在过程中遇到了问题,可以在下方留言或通过 [https://t.me/Charpati](https://t.me/Charpati) 寻求帮助
|
||||
寻求帮助前,请一定准备好下面材料和设备:
|
||||
|
||||
1. 一个可用的安全邮箱
|
||||
2. 一个可支付的银行卡
|
||||
3. 一个支持ESIM的设备(可以是estk、5ber、9esim等)
|
||||
4. 当前遇到的问题
|
||||
|
||||
## 参考文章
|
||||
|
||||
1. [如何将GiffGaff sim卡转换为esim](https://azhu.site/posts/1015/)
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: 摩托罗拉
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
|
||||
【联想服务】尊敬的moto用户,您好:
|
||||
感谢致电400热线,Moto手机双清的方法如下:
|
||||
1、在关机状态下,同时按住开机键和音量减键3S左右,屏幕出现机器人倒地界面后松开,
|
||||
2、按音量减键直到右上角显示RECOVERY MODE,
|
||||
3、按电源键确认进入recovery,此时手机会出现moto开机logo,耐心等待一会,手机屏幕会显示机器人倒地界面,显示No command(无命令),此时按住电源键,然后短按一下音量加键,即可显示recovery菜单,
|
||||
4、在recovery菜单界面按音量减键移动到光标到wipe data/factory reset,按电源键确认,然后按音量减键选择Factory data reset,再按电源键确认即可开始清除,
|
||||
5、清除完毕后屏幕上再次显示recovery菜单,左下角显示data wipe complete,到此已经完成双清的操作,手机中包括设置的锁屏密码、个人资料、内部存储设备存储的照片音乐文档等数据均已被清除,选择reboot system now选项后按电源键确认即可重启手机。
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Network & VPN
|
||||
type: area-hub
|
||||
tags: [area, para, network, vpn]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Network & VPN"
|
||||
sort file.name
|
||||
```
|
||||
@@ -0,0 +1,86 @@
|
||||
---
|
||||
⚠️ **警告 WARNING**: 此文件包含敏感信息(VPN订阅链接和tokens)
|
||||
- 建议迁移到密码管理器(如1Password, Bitwarden)
|
||||
- 避免提交到公开git仓库
|
||||
- 定期更新和轮换凭证
|
||||
---
|
||||
|
||||
https://laomaoyun.me/
|
||||
|
||||
### D套餐 (200G)
|
||||
|
||||
于 2023/04/15 到期,距离到期还有 31 天
|
||||
30元
|
||||
|
||||
https://09.laomao1.xyz/api/v1/client/subscribe?token=daddf8de9b1e002478b6fc59a6760e85
|
||||
|
||||
|
||||
|
||||
https://www.cutecloud.net/
|
||||
**19.80**
|
||||
|
||||
此商品无限制购买
|
||||
|
||||
会员等级
|
||||
|
||||
中杯
|
||||
|
||||
等级时长
|
||||
|
||||
30 天
|
||||
|
||||
添加流量
|
||||
|
||||
200 GB
|
||||
|
||||
重置周期
|
||||
|
||||
30天重置
|
||||
|
||||
同时在线
|
||||
|
||||
5个设备
|
||||
|
||||
峰值速率
|
||||
|
||||
2000Mbps
|
||||
|
||||
描述
|
||||
|
||||
全球节点分布
|
||||
|
||||
快速客服响应
|
||||
|
||||
全平台客户端
|
||||
|
||||
共享Apple ID账户
|
||||
|
||||
共享流媒体账户
|
||||
|
||||
解锁主流流媒体限制
|
||||
|
||||
https://sub.cutecloud.link/link/rCvnzdf6GsYxO0TT?clash=1
|
||||
|
||||
|
||||
vnet@windy.me
|
||||
|
||||
https://pwjmtniso4.stcserver-cloud.com/
|
||||
|
||||
## ¥0.8 /G
|
||||
50G 一年
|
||||
https://subapi1.gardenparty.one/link/7662I1Snxww7zkgq?sub=3
|
||||
|
||||
|
||||
|
||||
150g/14月
|
||||
|
||||
https://dog1.ssrdog111.com/
|
||||
https://host.api-baobaog.rest/api/v1/client/subscribe?token=ab911d53f4ef8abb40da6fd6c5ab326d
|
||||
|
||||
|
||||
|
||||
https://qbwiue.meslcloud.com/#/stage/dashboard
|
||||
100G
|
||||
Premium 100G
|
||||
|
||||
于 2026/06/18 到期
|
||||
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: Design Your Habits
|
||||
tags: [personal-development, habits, productivity]
|
||||
lang: en
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
Teacher: [[Tiago Forte]]
|
||||
|
||||
## Highlights:
|
||||
|
||||
3 part of habits
|
||||
- Trigger
|
||||
- Behavior
|
||||
- Reward
|
||||
|
||||
If the reward was positive is reinforced
|
||||
|
||||
Different kinds of habits,
|
||||
- Emotional and mental habits
|
||||
- Keystone habits
|
||||
- Productivity habits
|
||||
- Goal oriented habits
|
||||
|
||||
Keystone are one that form structure for other habits to build on
|
||||
|
||||
Should be short, specific, repeatable, daily
|
||||
|
||||
Habit chosen: Wakeup at 8:00 every day
|
||||
|
||||
Best trigger are other habits, anchor habits
|
||||
|
||||

|
||||
|
||||
It should be consistent, precise, frequent (around the same frequency as the habit), logical
|
||||
|
||||
Trigger chosen:
|
||||
- alarm clock
|
||||
- lights on and going to work message
|
||||
|
||||
Best reminder are unavoidable and automated
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
---
|
||||
title: Excitement map
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
<ul><li><div>Take a sheet of paper</div></li><li><div>Put life in the middle </div></li><li><div>Add 10-20 things around life that are exciting to you</div></li><li><div>Add another layer of details for each things</div></li><ul><li><div>What excited you about it, why are you excited about it</div></li><li><div>Those points brings to mind research material, ideas, thing to collect</div></li></ul></ul>
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Personal Development
|
||||
type: area-hub
|
||||
tags: [area, para, personal-development, growth]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Personal Development"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
---
|
||||
title: 架构目标 · 产出(Deliverables)知识点总结
|
||||
tags: [architecture, deliverables, knowledge-base]
|
||||
created: "<% tp.file.creation_date('YYYY-MM-DD') %>"
|
||||
updated: "<% tp.file.last_modified_date('YYYY-MM-DD HH:mm') %>"
|
||||
---
|
||||
|
||||
> 只保留“应知应会”的**知识点**:定义、必要字段、度量要点、生命周期、常见坑。
|
||||
|
||||
## 1. 核心产出一览(知道它们各自解决什么问题)
|
||||
- **SLO 定义**:把“好到什么程度”量化(可用性/性能/错误率的阈值+窗口)。
|
||||
- **Error Budget 策略**:把“差多少还能忍”制度化(预算→动作→解除条件)。
|
||||
- **观测规范(OTel/RED/USE)**:统一指标/日志/追踪口径,避免“各说各话”。
|
||||
- **发布与回滚策略**:降低变更风险(金丝雀/止损/自动回滚/证据化)。
|
||||
- **韧性配置基线**:容错与隔离的“默认安全网”(超时/重试退避/熔断/隔离舱/限流/降级)。
|
||||
- **容量与压测报告**:峰值与冗余的事实依据(假设→方法→瓶颈→复验)。
|
||||
- **接口契约(OpenAPI/Proto)**:稳定演进与兼容治理(版本/弃用策略)。
|
||||
- **数据主权与一致性图**:谁是“真源”与一致性策略(强一致/最终一致/补偿)。
|
||||
- **成本模型与看板(FinOps)**:单位经济性(Cost/Txn、资源分摊、优化项)。
|
||||
- **合规与审计材料**:可证合规(驻留/留存/脱敏/DSR 流程与证据)。
|
||||
- **ADR + Trade-off**:决策可追溯(背景→选项→量化权衡→回滚)。
|
||||
- **Runbook & 演练记录**:告警到行动的闭环(症状→动作→诊断→事后)。
|
||||
|
||||
## 2. 每个产出的“最少集”字段(记住这 6 个)
|
||||
- **目标值**(阈值+窗口)
|
||||
- **判定条件**(什么算“可用/成功/达标”)
|
||||
- **数据源**(指标/仪表板/追踪链接)
|
||||
- **触发动作**(止损/回滚/冻结/降级)
|
||||
- **责任人与节奏**(Owner、评审/更新频率)
|
||||
- **证据化**(压测/截图/演练/工单编号)
|
||||
|
||||
## 3. 度量与验证(避免“看不见/对不齐”)
|
||||
- **统一口径**:端到端 vs 单服务要**分开**;不要混用。
|
||||
- **分桶**:按路由/版本/地区/用户群细分,避免均值掩盖尾部。
|
||||
- **以请求为单位聚合**:避免“实例均值”稀释问题。
|
||||
- **抽样策略**:追踪 1–10% + 核心路径全量;日志冷热分层(7/30/90 天)。
|
||||
|
||||
## 4. 生命周期(它们不是一次性交付)
|
||||
- **创建**:立项/里程碑前产出“初版” → 过架构/安全/变更评审。
|
||||
- **运行**:与监控/告警/发布管道**绑定**(门禁/止损/回滚自动化)。
|
||||
- **复盘**:月度 SLO/成本/事故复盘→更新 SLO、韧性基线、Runbook。
|
||||
- **淘汰/替换**:ADR 记录弃用与替代方案,给出迁移窗口与兼容策略。
|
||||
|
||||
## 5. 交叉约束(这些关系要牢记)
|
||||
- **SLO ↔ Error Budget**:预算透支 → 冻结发布/仅修复;预算结余 → 允许做成本优化。
|
||||
- **观测规范 ↔ 发布门禁**:没有 RED/USE 指标就**不能放量**。
|
||||
- **韧性基线 ↔ 性能目标**:超时/重试参数会影响 P95/P99,需协同调参与压测。
|
||||
- **数据主权 ↔ 接口契约**:谁是“真源”决定契约变更节奏与兼容窗口。
|
||||
|
||||
## 6. 检查清单(评审时逐条过)
|
||||
- [ ] 目标值/判定条件/数据源**齐全且一致**(SLO 文档可复算 Error Budget)。
|
||||
- [ ] 有**证据链**:压测报告、金丝雀对比、演练记录、合规材料链接。
|
||||
- [ ] 发布门禁生效(止损条件、自动回滚、合格截图/链接)。
|
||||
- [ ] 观测到 Runbook **成链闭环**(告警直接指向可执行操作)。
|
||||
- [ ] 成本与合规有**看板与记录**,更新节奏明确。
|
||||
- [ ] ADR 完整(选项、量化权衡、回滚、指标),能追溯历史决定。
|
||||
|
||||
## 7. 常见反模式(踩坑黑名单)
|
||||
- **只有口号**:SLO 没有“可用判定条件/数据源/验证方法”。
|
||||
- **口径混乱**:端到端/单服务、客户端/服务端混用导致对账不一致。
|
||||
- **证据缺失**:放量或回滚没有前后对比与链接。
|
||||
- **韧性缺省**:无统一超时/重试/熔断,导致雪崩或放大故障。
|
||||
- **契约裸奔**:API 无版本/兼容/弃用计划;数据“共享大水库”无主数据。
|
||||
- **仅建监控不建 Runbook**:告警没人知道下一步干啥。
|
||||
|
||||
## 8. 记忆卡(一分钟回顾)
|
||||
- 产出=**目标**(SLO/预算)+ **看到**(观测)+ **变更安全**(发布/回滚/韧性)+ **事实**(压测/证据)+ **治理**(ADR/合规/成本)。
|
||||
- 每份产出都要回答:**“怎么判定好、谁来量、触发什么动作、有无证据、谁负责、多久更新?”**
|
||||
@@ -0,0 +1,373 @@
|
||||
---
|
||||
title: 决策方法
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
tags: [architecture, decision, ATAM, ADR, tradeoff, risk, wsjf]
|
||||
created: "<% tp.file.creation_date('YYYY-MM-DD') %>"
|
||||
updated: "<% tp.file.last_modified_date('YYYY-MM-DD HH:mm') %>"
|
||||
|
||||
> 目标:让架构决策 **可解释 / 可量化 / 可追溯 / 可回滚**。
|
||||
## 1) 方法家族(知道用什么)
|
||||
|
||||
- **ATAM**:以“质量属性场景”驱动的架构权衡;产出风险/敏感点/权衡点、Utility Tree。
|
||||
|
||||
- **ADR**:单条架构决策记录;背景→选项→量化权衡→决策→回滚→验证。
|
||||
|
||||
- **Trade-off Matrix**:把可用性/成本/复杂度/交付周期等维度量化对比。
|
||||
|
||||
- **Utility Tree**:质量属性(可用/性能/安全…)→ 场景化 → 重要度×难度评分。
|
||||
|
||||
- **WSJF / CoD**:对一篮子能力排序(价值/时效/风险降低 ÷ 规模)。
|
||||
|
||||
- **风险分析**:风险登记(概率×影响)、敏感性(Tornado)、决策树(期望值)。
|
||||
|
||||
- **实验驱动**:金丝雀/灰度/A-B;以 **SLO & Error Budget** 作为放量门禁。
|
||||
|
||||
|
||||
## 2) 统一流程(Playbook)
|
||||
|
||||
1. 对齐业务目标与 **NFR/SLO**
|
||||
|
||||
2. 列出 ≥ 2 个候选(含“不做/延后”)
|
||||
|
||||
3. **Utility Tree** 场景化:重要度 (BI) × 难度 (TR)
|
||||
|
||||
4. **Trade-off** 量化:可用/性能/成本 (TCO)/复杂度/交付
|
||||
|
||||
5. 风险登记:概率×影响 + 缓解/触发器/应对
|
||||
|
||||
6. 做出决策并写 **ADR**(含回滚条件与验证指标)
|
||||
|
||||
7. 金丝雀验证 → 复盘(按月/季度迭代)
|
||||
|
||||
|
||||
## 3) 最小公式(随手可用)
|
||||
|
||||
- Error Budget(同窗) = `1 - SLO`;例:99.95%/月 ≈ **22 分钟**
|
||||
|
||||
- Burn Rate = `实际消耗 / 线性应消耗`(> 1 表示过快)
|
||||
|
||||
- 串行可用性近似:`A_total ≈ ∏ A_i`;并联冗余:`A = 1 - ∏(1 - A_i)`
|
||||
|
||||
- WSJF = `(业务价值 + 时效性 + 风险降低) / 规模`
|
||||
|
||||
- 风险评分 = `概率(1–5) × 影响(1–5)`(> 12 需强缓解)
|
||||
|
||||
- 停机成本 ≈ `分钟 × 单位损失 × 影响用户占比`
|
||||
|
||||
- 年度 TCO ≈ `计算+存储+网络+日志+监控 + 人力×系数 + 预留 10%`
|
||||
|
||||
|
||||
## 4) 权衡维度(打分建议)
|
||||
|
||||
- **可用性**(预期 SLO / RTO / RPO)
|
||||
|
||||
- **性能**(P95 / P99 目标可达性)
|
||||
|
||||
- **成本**(一次性 vs 年度 TCO)
|
||||
|
||||
- **复杂度**(开发/运维/组织)
|
||||
|
||||
- **交付周期**(从 PoC 到可用上线)
|
||||
|
||||
- **风险**(技术/合规/运营)
|
||||
|
||||
|
||||
> 建议:评分用 1(优)~ 5(差);或直接用定量值(SLO%、$TCO、周数)对比。
|
||||
|
||||
## 5) 模板速用
|
||||
|
||||
### 5.1 Trade-off Matrix(权衡矩阵)
|
||||
|
||||
|方案|SLO/可用性|年 TCO|复杂度|交付周期|关键风险|结论|
|
||||
|---|--:|--:|--:|--:|---|---|
|
||||
|A|99.9%|$X|3|1|区域单点|过渡|
|
||||
|B|99.95%|$X+30%|4|2|跨区复制/切换|✅|
|
||||
|C|99.99%|$X+80%|5|4|一致性冲突|暂缓|
|
||||
|
||||
### 5.2 Utility Tree(简版)
|
||||
|
||||
```yaml
|
||||
availability:
|
||||
- scenario: "Region 故障 30m 内恢复"
|
||||
BI: 5 # Business Importance
|
||||
TR: 4 # Technical Risk
|
||||
performance:
|
||||
- scenario: "峰值 5k QPS P95≤250ms"
|
||||
BI: 5
|
||||
TR: 3
|
||||
security:
|
||||
- scenario: "密钥自动轮换/静态加密"
|
||||
BI: 4
|
||||
TR: 2
|
||||
```
|
||||
|
||||
### 5.3 ADR(Architecture Decision Record)
|
||||
|
||||
```markdown
|
||||
# ADR-XXXX: <标题>
|
||||
## 背景
|
||||
目标 / SLO / 约束(预算/期限/团队)
|
||||
## 选项
|
||||
A / B / C(含“不做”)
|
||||
## 量化权衡
|
||||
权衡矩阵 + TCO + 停机成本 + 风险表
|
||||
## 决策
|
||||
选择 X(理由与 SLO/成本对齐)
|
||||
## 回滚计划
|
||||
触发条件(p95>阈、burn_rate>2x…)与一键脚本
|
||||
## 验证
|
||||
金丝雀步骤、成功判据、观测指标(RED/USE)
|
||||
## 后续
|
||||
里程碑、技术债、风险缓解任务
|
||||
```
|
||||
|
||||
### 5.4 风险登记(Risk Register)
|
||||
|
||||
|ID|风险|概率|影响|分数|缓解|触发器|应对|
|
||||
|---|---|--:|--:|--:|---|---|---|
|
||||
|R1|复制延迟超阈|3|4|12|增带宽/压测|lag>15s|降级读主库|
|
||||
|R2|切流脚本失败|2|5|10|预演|回滚>5m|手动 Runbook|
|
||||
|
||||
### 5.5 WSJF / CoD(优先级)
|
||||
|
||||
|能力/改造|价值|时效|风险降|规模|WSJF|
|
||||
|---|--:|--:|--:|--:|--:|
|
||||
|自动回滚|7|9|8|4|6.0|
|
||||
|观测统一|6|8|7|5|4.2|
|
||||
|跨区主备|8|7|6|8|2.6|
|
||||
|
||||
## 6) 验证要点(决策“落地就绪”)
|
||||
|
||||
- 有 **回滚条件与脚本**(已演练)
|
||||
|
||||
- 金丝雀/灰度 **与 SLO/预算** 绑定(stop_if 明确)
|
||||
|
||||
- 成本/停机损失 **有计算来源**(表/链接可追溯)
|
||||
|
||||
- 风险登记 **有触发器与应对动作**
|
||||
|
||||
- **ADR 已归档**,并在 PR / 变更单中引用
|
||||
|
||||
|
||||
## 7) 常见反模式(避免)
|
||||
|
||||
- 只有口头结论、无 ADR / 无量化
|
||||
|
||||
- 只看一次性成本,不看年度 **TCO** 与 **停机成本**
|
||||
|
||||
- 无回滚/未演练;金丝雀只是“形式”
|
||||
|
||||
- 风险登记没有触发器,告警不连 Runbook
|
||||
|
||||
- 用平均延迟代替 P95/P99,掩盖体验尾部
|
||||
|
||||
|
||||
## 8) 记忆卡(60 秒回顾)
|
||||
|
||||
- **工具箱**:ATAM / ADR / Trade-off / Utility Tree / WSJF / 风险登记
|
||||
|
||||
- **关键四问**:值不值?做得成?能按时?出事能回?
|
||||
|
||||
- **落地三件套**:SLO & 预算门禁、回滚脚本、ADR 可追溯
|
||||
|
||||
|
||||
下面给你一份“**按实际操作最常用**”的架构决策方法清单——偏**工程落地**,少理论。每条都写**什么时候用、产出、优缺点**,最后给一套“80/20 标配组合”。
|
||||
|
||||
---
|
||||
|
||||
## 现在最常用的决策方法(工程实践版)
|
||||
|
||||
### 1) RFC / 设计提案评审(Design Doc / RFC Review)
|
||||
|
||||
- **场景**:中大型改造、跨团队影响、有外部依赖的变更。
|
||||
|
||||
- **怎么做**:一页或多页设计文档(问题→方案A/B/C→权衡→风险→回滚),线上异步评审+同步评审会。
|
||||
|
||||
- **产出**:评审结论、改动清单、遗留问题、后续指标。
|
||||
|
||||
- **优点**:共识快、成本低、适配组织协作;易留档。
|
||||
|
||||
- **缺点**:如果不强制“量化对比”,容易拍脑袋。
|
||||
|
||||
- **要点**:文档内嵌**Trade-off 表**与**回滚计划**,引用 SLO&预算。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 2) 权衡矩阵(Trade-off Matrix)
|
||||
|
||||
- **场景**:在 2–3 个候选架构/云上拓扑/中间件里做选择。
|
||||
|
||||
- **怎么做**:对**可用性/性能/成本(TCO)/复杂度/交付周期/风险**打分或填入实数(推荐实数)。
|
||||
|
||||
- **产出**:1 张表 + 结论 + 假设与数据来源。
|
||||
|
||||
- **优点**:直观、团队对齐快;适合管理沟通。
|
||||
|
||||
- **缺点**:维度权重主观;需配真实数据支撑。
|
||||
|
||||
- **要点**:把**SLO、停机成本、年度 TCO**放进表里,避免空话。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 3) ADR(Architecture Decision Record)
|
||||
|
||||
- **场景**:任何会影响系统边界/接口/成本的决定(无论大小)。
|
||||
|
||||
- **怎么做**:每个决定 1 条 ADR(背景→选项→量化权衡→决策→回滚→验证)。
|
||||
|
||||
- **产出**:可追溯的决策档案;PR/变更单引用。
|
||||
|
||||
- **优点**:治理性强、可回溯;适合审计与人员更替。
|
||||
|
||||
- **缺点**:只记录、**不替代**分析;若无模板易变成流水账。
|
||||
|
||||
- **要点**:强制包含**回滚触发条件**与**验证指标**(如 burn rate、P95)。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 4) 轻量 ATAM(场景化权衡)
|
||||
|
||||
- **场景**:质量属性冲突明显(可用性↔成本、性能↔一致性)。
|
||||
|
||||
- **怎么做**:把 NFR 拆成**场景**(如“Region 挂 30 分钟仍对外 99.95%”),对**重要度×难度**打分,找**敏感点/风险点**。
|
||||
|
||||
- **产出**:简化版 Utility Tree、风险/敏感点列表。
|
||||
|
||||
- **优点**:能把“质量属性”落到可验证场景。
|
||||
|
||||
- **缺点**:完整 ATAM 成本高;建议做**轻量版**(半天内搞定)。
|
||||
|
||||
- **要点**:每个场景都要有**验证口径**(数据源+SLO/阈值)。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 5) 实验/金丝雀 + 守护指标(Experiment / Canary with SLO Gates)
|
||||
|
||||
- **场景**:对性能、稳定性有不确定性的变更或新中间件上线。
|
||||
|
||||
- **怎么做**:5%→25%→100% 放量,**stop_if**:`P95>阈`、`错误率>阈`、`burn_rate>2x` 自动回滚。
|
||||
|
||||
- **产出**:放量对比截图/链接、是否推广的结论。
|
||||
|
||||
- **优点**:用事实说话;能避免“大爆炸上线”。
|
||||
|
||||
- **缺点**:需要可观测性底座与自动回滚脚本。
|
||||
|
||||
- **要点**:把**SLO & Error Budget**作为发布门禁,而不是“建议”。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 6) WSJF / RICE(优先级排序)
|
||||
|
||||
- **场景**:多项能力/改造同时竞争资源(平台建设、韧性改造、性能优化)。
|
||||
|
||||
- **怎么做**:WSJF =(价值+时效+风险降低)/ 规模;或 RICE = Reach × Impact × Confidence ÷ Effort。
|
||||
|
||||
- **产出**:有理有据的 Roadmap 排期。
|
||||
|
||||
- **优点**:跨团队对齐投资顺序很有效。
|
||||
|
||||
- **缺点**:打分主观;需定期复盘更新分值。
|
||||
|
||||
- **要点**:把**停机成本/合规风险**折算进“价值/时效”。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 7) 风险登记+触发器(Risk Register with Triggers)
|
||||
|
||||
- **场景**:跨区复制、数据一致性、迁移/割接、重大高风险变更。
|
||||
|
||||
- **怎么做**:列出风险,**概率×影响**评分;为每条风险设**触发器**(如 `lag>15s/10m`)与**应对动作**。
|
||||
|
||||
- **产出**:风险台账、演练计划、应对 Runbook。
|
||||
|
||||
- **优点**:让风险可运营、可预案,不是“备忘录”。
|
||||
|
||||
- **缺点**:没有触发器就会沦为形式。
|
||||
|
||||
- **要点**:触发器必须对接**告警**并链接**Runbook**。
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 8) 成本模型 / TCO 评估(含停机成本)
|
||||
|
||||
- **场景**:云上选型、多活/主备、日志与追踪留存策略、CDN 与边缘。
|
||||
|
||||
- **怎么做**:测算**年度 TCO** + **停机成本**(分钟损失×影响用户),放入权衡矩阵。
|
||||
|
||||
- **产出**:成本对比表与单位经济性(Cost/Txn、Cost/1k req)。
|
||||
|
||||
- **优点**:管理层买单的通用语言。
|
||||
|
||||
- **缺点**:参数需持续校准;早期估算误差较大。
|
||||
|
||||
- **要点**:与 SLO 联动:**SLO 提升→停机成本下降**可抵消一部分 TCO 增量。
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 80/20 标配组合(推荐你实际落地就用这套)
|
||||
|
||||
> 小团队/中型组织都适用,投入小、收益高。
|
||||
|
||||
1. **RFC + Trade-off 表**(所有非小改都走)
|
||||
|
||||
2. **ADR**(每个决定 1 条,PR 必须引用)
|
||||
|
||||
3. **金丝雀 + SLO 门禁**(stop_if 自动回滚)
|
||||
|
||||
4. **轻量 ATAM**(半天工作坊:列场景→标敏感点)
|
||||
|
||||
5. **WSJF**(季度 Roadmap 排序)
|
||||
|
||||
6. **风险登记(带触发器)**(迁移/跨区/数据一致性类必配)
|
||||
|
||||
7. **成本模型**(年度复盘,纳入权衡矩阵)
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 一页式对照表(可贴墙)
|
||||
|
||||
|方法|典型时机|输入|产出|用时|负责人|
|
||||
|---|---|---|---|---|---|
|
||||
|RFC/设计提案|中大型变更|问题/约束/选项|评审结论 & TODO|0.5–2 天|方案 Owner|
|
||||
|Trade-off|多选其一|SLO、TCO、性能/复杂度|权衡矩阵 & 选择|1–3 小时|架构师|
|
||||
|ADR|任意决定|RFC/评审结论|可追溯记录|30–60 分钟|Owner|
|
||||
|轻量 ATAM|质量冲突|NFR 场景|Utility Tree & 风险点|半天|架构+SRE|
|
||||
|金丝雀+门禁|上线放量|SLO & Budget|对比证据/回滚与否|持续|Dev+SRE|
|
||||
|WSJF/RICE|排期取舍|候选能力列表|排序表 & Roadmap|2–4 小时|PM/架构|
|
||||
|风险登记|高风险变更|风险清单|触发器 & Runbook|1–2 小时|Owner|
|
||||
|成本模型|选型/复盘|账单/流量/人力|年度 TCO & Unit Cost|1–3 天|FinOps|
|
||||
|
||||
---
|
||||
|
||||
## 可复制的最小模板片段
|
||||
|
||||
**Trade-off(行内版)**
|
||||
`A: 99.9% / $X / 复杂度3 / 1周 | B: 99.95% / $X+30% / 复杂度4 / 2周 -> 选 B(停机成本年省≈$91k)`
|
||||
|
||||
**ADR 抬头**
|
||||
`ADR-2025-10-XX 多Region主备:选 B;回滚触发=burn_rate>2x 或 P95>+20%;验证=金丝雀 5%→25%→100%`
|
||||
|
||||
**金丝雀 stop_if**
|
||||
`["p95_ms>阈","error_rate>阈","burn_rate_any>2x"] 触发自动回滚 + 切流`
|
||||
|
||||
**风险登记一条**
|
||||
`R1 跨区复制延迟:概率3 影响4=12;触发=lag>15s/10m;应对=降级读主库 + 补偿队列;季度演练`
|
||||
|
||||
---
|
||||
|
||||
想让我把这套“标配组合”打成一份 Obsidian 模板(带 Front-matter 和 Templater 变量)吗?我可以直接给你可粘贴的文件结构和占位内容。
|
||||
@@ -0,0 +1,88 @@
|
||||
---
|
||||
title: 架构目标(Architecture Goals)总结
|
||||
tags: [architecture, goals, SLO, NFR, governance]
|
||||
created: "<% tp.file.creation_date('YYYY-MM-DD') %>"
|
||||
updated: "<% tp.file.last_modified_date('YYYY-MM-DD HH:mm') %>"
|
||||
---
|
||||
|
||||
> 架构目标 = 面向业务的**可度量**NFR 套件 + **清晰边界与取舍** + **工程化落地**(观测、演练、回滚)+ **持续复盘**。
|
||||
|
||||
## 1. 目标框架(Framework)
|
||||
- 业务价值:增长/转化/留存/合规/成本
|
||||
- 质量属性(NFR):可用性、性能、安全、可维护性、可扩展性、可观测性、韧性、成本、合规
|
||||
- 约束:预算、交付周期、团队能力、地域/数据主权、遗留系统边界
|
||||
- 产出:SLO/阈值、数据源、验证方法、Error Budget、ADR/Trade-off 记录
|
||||
|
||||
## 2. 维度与指标(Dimensions & KPIs)
|
||||
| 维度 | 典型指标 |
|
||||
|---|---|
|
||||
| 可用性 | 月度 SLO(如 99.95%)、MTTR、MTBF、Error Budget |
|
||||
| 性能 | P95/P99 延迟、QPS/TPS、并发连接、队列时长 |
|
||||
| 可靠性/韧性 | 错误率、降级成功率、熔断/限流命中、故障演练通过率 |
|
||||
| 安全 | 高危漏洞处置时限、证书/密钥轮换周期、加密覆盖率、审计合规 |
|
||||
| 可维护性 | 变更 Lead Time、变更失败率、回滚时长、代码可测试性 |
|
||||
| 可扩展性 | 扩缩容时间、峰值利用率、容量裕度 |
|
||||
| 可观测性 | RED/USE 覆盖率、追踪采样策略、告警→行动闭环率 |
|
||||
| 成本 | Cost/Txn、成本结构占比(计算/存储/网络/日志/监控) |
|
||||
| 合规 | 数据驻留/留存期/可删除、审计通过率 |
|
||||
|
||||
## 3. SMART 化表达(Examples)
|
||||
- 可用性:**99.95%/月**;“可用”定义= P95 ≤ 400ms 且错误率 ≤ 0.2% → Error Budget ≈ 22 分钟/月
|
||||
- 性能:`/checkout` **P95 ≤ 250ms、P99 ≤ 600ms** @ 5k QPS
|
||||
- 安全:高危漏洞 **≤ 24h** 修复;静态数据加密 **100% 覆盖**
|
||||
- 维护:主干集成 Lead Time **≤ 1 天**;单键回滚 **≤ 15 分钟**
|
||||
- 成本:**Cost/1000 req ≤ $0.08**;监控+日志成本 **≤ 18%**
|
||||
|
||||
## 4. 制定流程(Playbook)
|
||||
1) 业务对齐 → 明确北极星指标
|
||||
2) 关键路径建模 → C4 + 时序 + 依赖图
|
||||
3) 设定 SLO 与成本上限 → 基于历史与压测基线
|
||||
4) 明确约束与非目标(不做/后做)
|
||||
5) 方案权衡 → Trade-off Matrix + ADR
|
||||
6) 接入度量/告警/演练 + 灰度/回滚策略
|
||||
7) 月度/季度复盘 → 目标、成本、事故与技术债
|
||||
|
||||
### Trade-off Matrix(简表)
|
||||
| 方案 | 可用性 | 成本 | 复杂度 | 交付周期 | 结论 |
|
||||
|---|---:|---:|---:|---:|---|
|
||||
| 单 Region 多 AZ | 高 | 中 | 中 | 快 | 先上 |
|
||||
| 多 Region 主备 | 更高 | 高 | 高 | 中 | 次阶段 |
|
||||
| 多 Region 多活 | 最高 | 最高 | 最高 | 慢 | 暂缓 |
|
||||
|
||||
## 5. 落地抓手(Engineering Levers)
|
||||
- 变更安全网:金丝雀 + 自动回滚 + 契约测试 + DB 迁移对称脚本
|
||||
- 韧性底座:超时/重试退避/熔断/隔离舱/限流/降级 **统一库 + 配置化**
|
||||
- 容量模型:峰值 N 倍冗余;弹性扩容 **≤ 5 分钟**
|
||||
- 观测默认开启:RED/USE 指标、端到端追踪、Runbook 与告警绑定
|
||||
- 数据主权:谁是“真源”、一致性策略(强一致/最终一致/CQRS/Outbox)
|
||||
|
||||
## 6. 冲突与解法(Trade-offs)
|
||||
- 可用性 ↔ 成本:分层 SLO + 主备先行,逐步演进多活
|
||||
- 性能 ↔ 一致性:核心写强一致,读侧 CQRS + 最终一致
|
||||
- 安全 ↔ 体验:风险分层验证(低风险免验证,高风险二验)
|
||||
- 可观测性 ↔ 成本:追踪采样 + 热点全量;日志冷热分层
|
||||
|
||||
## 7. 评审清单(Checklist)
|
||||
- [ ] 与业务北极星对齐,定义“可用/达成”的**判定条件**
|
||||
- [ ] 每个目标 **可度量**(阈值、数据源、验证方法)
|
||||
- [ ] 明确 **非目标/边界** 与阶段性演进计划
|
||||
- [ ] 关键链路有端到端观测与 **Runbook/告警**
|
||||
- [ ] 具备 **压测与容量评估**、留足冗余
|
||||
- [ ] 灰度/回滚/契约测试/DB 迁移流程完备
|
||||
- [ ] 安全与合规评审通过,关键证据归档
|
||||
- [ ] 成本上限与分摊模型可视化
|
||||
- [ ] ADR/Trade-off 文档化并归档
|
||||
|
||||
## 8. 模板(Templates)
|
||||
|
||||
### 8.1 SLO 模板
|
||||
```text
|
||||
【目标名称】结算服务端到端可用性
|
||||
SLO:99.95% / 月;滑动窗口:5 分钟
|
||||
“可用”定义:P95 ≤ 400ms 且 错误率 ≤ 0.2%
|
||||
Error Budget:≈ 22 分钟/月
|
||||
数据源:Prometheus / OTel(checkout_end_to_end_*)
|
||||
发布策略:金丝雀 + 自动回滚
|
||||
韧性参数:依赖超时 800ms;重试指数退避上限 2 次
|
||||
演练计划:季度混沌、半年度跨 AZ 切流
|
||||
负责人:结算团队 TL
|
||||
@@ -0,0 +1,164 @@
|
||||
---
|
||||
title: 系统架构分析员知识体系
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
# 系统架构分析员·知识点清单(精要版)
|
||||
|
||||
> 只保留“应知应会”的知识点;去重、分类、层级化;按「必会 / 进阶 / 选修」标注。
|
||||
|
||||
---
|
||||
|
||||
## 0. 基本方法与思维(必会)
|
||||
- 架构目标:业务价值对齐、风险可控、成本可控、可演化
|
||||
- 分析范式:功能性 vs 非功能性(NFR);质量属性权衡(可用/可靠/性能/安全/可维护/成本)
|
||||
- 决策方法:ATAM、Trade-off Matrix、ADR(架构决策记录)
|
||||
- 可演化架构:小步演进、可替换性、逆向依赖最小化
|
||||
- 系统思维:反馈环、瓶颈识别(Theory of Constraints)
|
||||
|
||||
---
|
||||
|
||||
## 1. 架构原则与模式(必会)
|
||||
- 设计原则:高内聚低耦合、SRP/OCP/DIP/ISP、组合优于继承、面向接口
|
||||
- 分层与边界:分层架构/六边形/洋葱/Clean;限界上下文(DDD)
|
||||
- 常用模式:微服务、事件驱动、Serverless、服务网格、CQRS、Event Sourcing、Saga
|
||||
- 接口契约:REST/GraphQL/gRPC、OpenAPI/Proto/AsyncAPI、契约测试
|
||||
- 抗脆弱性:熔断、限流、隔离舱、重试退避、幂等、去抖动、优雅降级
|
||||
|
||||
---
|
||||
|
||||
## 2. 需求与建模(必会)
|
||||
- 需求采集:业务目标→用例/用户故事→NFR 列表(SLO/安全/合规/性能/可观测性)
|
||||
- 建模工具:UML(用例/时序/部署)、BPMN、DFD、C4(C1~C4)
|
||||
- DDD 要点:限界上下文、上下文映射、聚合/实体/值对象、领域事件、应用服务
|
||||
- 边界识别:有界上下文间通信、数据主权(谁是“真源”)、一致性策略
|
||||
|
||||
---
|
||||
|
||||
## 3. 后端与中间件(必会)
|
||||
- 语言/框架:Java/Kotlin(Spring)、Go(Echo/Fiber)、Python(FastAPI)、Node(NestJS)
|
||||
- 通信:HTTP/2、gRPC、GraphQL、WebSocket/SSE;序列化(JSON/Proto/Avro)
|
||||
- 配置与发现:Consul/etcd、配置中心、Feature Flag
|
||||
- 消息与事件:Kafka/RabbitMQ/NATS(有序性、语义:至多一次/至少一次/恰好一次)
|
||||
- API 管理:网关(Nginx/Envoy/Traefik)、鉴权/配额/金丝雀/灰度
|
||||
|
||||
---
|
||||
|
||||
## 4. 数据与存储(必会)
|
||||
- 数据建模:ER/范式与反范式、索引/分区/分片、冷热分层
|
||||
- 引擎选择:RDBMS(PostgreSQL/MySQL)、KV/文档(Redis/Mongo)、搜索(Elasticsearch)、列存(ClickHouse)
|
||||
- 一致性:ACID/BASE、读写分离、二阶段提交/Outbox/Saga
|
||||
- 性能要点:慢查询分析、连接池、批量/流水线、缓存穿透/击穿/雪崩治理
|
||||
- 数据生命周期:归档/脱敏/血缘/主数据(MDM)/数据质量
|
||||
|
||||
---
|
||||
|
||||
## 5. 基础设施与云原生(必会)
|
||||
- 容器与镜像:Docker/OCI、镜像分层与最小基镜像、SBOM
|
||||
- 编排:Kubernetes/K3s、Helm、HPA/VPA、Pod 反亲和、节点污点/容忍
|
||||
- 网络:CNI、Ingress/Service/EndpointSlice、eBPF 概念
|
||||
- 存储:CSI、PVC、状态有/无服务部署策略(StatefulSet vs Deployment)
|
||||
- 平台工程:IaC(Terraform/Ansible)、GitOps(ArgoCD)、平台与自助化门户
|
||||
|
||||
---
|
||||
|
||||
## 6. CI/CD 与发布治理(必会)
|
||||
- 流水线:构建→测试→扫描(SAST/DAST/License)→制品库→部署→回滚
|
||||
- 策略:蓝绿/金丝雀/分批、Feature Flag、数据库变更(迁移/回滚/对称脚本)
|
||||
- 质量门禁:测试金字塔(单元/契约/集成/端到端)、覆盖率与变更风险
|
||||
- 运行制品:容器镜像签名、供应链安全(SLSA)
|
||||
|
||||
---
|
||||
|
||||
## 7. 安全(必会)
|
||||
- 身份与鉴权:OIDC/OAuth2、SAML、RBAC/ABAC、最小权限
|
||||
- 数据安全:TLS、mTLS、密钥管理(KMS/Vault)、加密(静态/传输/字段级)
|
||||
- 应用安全:OWASP Top 10、CSRF/XSS/注入、依赖与容器镜像扫描
|
||||
- 网络安全:零信任、WAF、DDoS 基础、分段与边界
|
||||
- 合规:日志留存/可审计性、隐私(GDPR/数据最小化/可删除)
|
||||
|
||||
---
|
||||
|
||||
## 8. 可靠性与韧性(必会)
|
||||
- SLI/SLO/SLA:可用性、延迟、错误率、吞吐、成熟度指标
|
||||
- 灾备:RPO/RTO、主备/多活/异地容灾、演练(GameDay)
|
||||
- 故障注入:混沌工程、失效域隔离(AZ/Region/Cell)
|
||||
- 容量规划:QPS/并发/连接数、排队论基础、峰值与冗余策略
|
||||
|
||||
---
|
||||
|
||||
## 9. 性能工程(必会)
|
||||
- 指标与基线:P50/P95/P99、吞吐-延迟曲线、抖动/长尾
|
||||
- 端到端优化:算法/IO/锁竞争/内存分配、N+1 查询、批量化与并发模型
|
||||
- 压测方法:负载模型(恒定/阶梯/突刺)、数据与会话保真度、环境隔离
|
||||
- 缓存:多级缓存、TTL/主动失效、热点/大 Key、写策略(WT/WB/W-through)
|
||||
|
||||
---
|
||||
|
||||
## 10. 可观测性(必会)
|
||||
- 三要素:日志/指标/追踪(OpenTelemetry)
|
||||
- 指标体系:RED(Rate/Errors/Duration)、USE(Utilization/Saturation/Errors)
|
||||
- 工具:Prometheus/Grafana、Loki/ELK、Jaeger/Tempo
|
||||
- 告警:症状优先、静态阈值 vs 自适应、抑制/合并、值班与Runbook
|
||||
|
||||
---
|
||||
|
||||
## 11. 前端与客户端(进阶)
|
||||
- 架构:SPA/MPA/微前端、组件化/状态管理
|
||||
- 性能:首屏/TTI/资源拆分、CDN/边缘渲染
|
||||
- 通信:GraphQL/Gateway、WebSocket、离线与同步策略
|
||||
- 可访问性与国际化:a11y、i18n、RUM 观测
|
||||
|
||||
---
|
||||
|
||||
## 12. 成本与治理(进阶)
|
||||
- 成本模型:云账单矩阵(计算/存储/网络/日志/监控)、单位经济性(Cost per Txn)
|
||||
- 架构治理:技术债台账、依赖健康度、版本治理/弃用策略
|
||||
- 文档化:C4 图谱、ADR 目录、运维手册/Runbook/手术刀式文档
|
||||
|
||||
---
|
||||
|
||||
## 13. 领域化知识(选修,按行业取舍)
|
||||
- 电商:库存一致性、幂等支付、促销引擎、风控与反刷
|
||||
- 金融:清算/对账/合规模型、强一致与审计、短路保护
|
||||
- 通信与IM:会话/漫游/离线推送、实时性/有序性、扩散/收敛模型
|
||||
- IoT:MQTT/CoAP、设备影子、OTA、边缘与断连一致性
|
||||
- AI/ML 平台:模型注册/版本/特征库、在线推理/批推理、GPU 调度与缓存
|
||||
|
||||
---
|
||||
|
||||
## 14. 反模式与常见坑(必会)
|
||||
- 过度微服务化、耦合的“分布式单体”
|
||||
- 无契约的接口演进、未做幂等与重试退避
|
||||
- 数据作为“共享大水库”,无主数据/血缘
|
||||
- 缺失 SLO/告警洪水/无归因的 MTTR 拉长
|
||||
- 无灰度/不可逆 DB 变更、无回滚策略
|
||||
- 监控多而乱,无“症状→行动”的告警设计
|
||||
- 混合云/多Region 架构未验证真实流量切换
|
||||
|
||||
---
|
||||
|
||||
## 15. 清单与模板(实用)
|
||||
- 质量属性清单:可用性/性能/安全/可维护/可观测/成本→量化目标
|
||||
- 架构评审清单:边界/数据主权/一致性/扩展性/容灾/SLO/部署/回滚
|
||||
- 上线前检查:契约测试/迁移脚本/金丝雀/回滚演练/告警阈值
|
||||
- 运行手册:故障树、Runbook、Dashboard 链接、演练计划
|
||||
|
||||
---
|
||||
|
||||
## 16. 术语速览(检索用)
|
||||
- 一致性:强/因果/最终、一致性语义(At-most/At-least/Exactly-once)
|
||||
- 可用与容灾:RTO/RPO、Multi-AZ/Region/Cell
|
||||
- 指标:RED/USE、P95/P99、Error Budget、SLO/SLI
|
||||
- 模式:CQRS/Event Sourcing/Saga、熔断/限流/隔离舱
|
||||
- 图模:C4(C1~C4)、UML(用例/时序/部署)、BPMN
|
||||
|
||||
---
|
||||
|
||||
# 学习路径(对标知识点)
|
||||
- 初级(必会 0~6,10 基础):能画 C4、写 ADR、搭建可用链路、具备基本 SLO/监控
|
||||
- 中级(补齐 7~10、11、12):掌握韧性/容量/成本与治理,能独立做灰度与回滚
|
||||
- 高级(14~15 强化、13 选修):能做企业级架构治理与跨域系统整合、度量驱动演进
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: remark42
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
google auth
|
||||
|
||||
AUTH_GOOGLE_CID=935204735749-4jvsveemaohtblrip12n2r3jqc3cd9q0.apps.googleusercontent.com
|
||||
|
||||
AUTH_GOOGLE_CSEC=yQh4_H7BgeG8mf2_yMy0yE-D
|
||||
|
||||
github
|
||||
|
||||
AUTH_GITHUB_CID=`62127bb1a774bb05ce16`
|
||||
|
||||
AUTH_GITHUB_CSEC=`7d1b0c35b777bdeea30dcb2749908bbe66015156`
|
||||
|
||||
```text-plain
|
||||
AUTH_GITHUB_CID=62127bb1a774bb05ce16
|
||||
AUTH_GITHUB_CSEC=7d1b0c35b777bdeea30dcb2749908bbe66015156
|
||||
```
|
||||
|
||||
`AUTH_TWITTER_CID=CjyfOrHd6C90Yox97WBOOGYDw`
|
||||
|
||||
`AUTH_TWITTER_CSEC=XwxSvqF1Pf9qn8Oyk23EZpTSdlhaG6ybxrSvVqXuOeV5CKssk4`
|
||||
|
||||
```text-plain
|
||||
ADMIN_SHARED_ID=github_20924f5ace2e27ff9b98801b837b8a495308d782
|
||||
```
|
||||
|
||||
```text-plain
|
||||
NOTIFY_TYPE=telegram
|
||||
NOTIFY_TELEGRAM_TOKEN=1312138212:AAFhKNaLXTT1-cqPrcOiLTLKr3656uviRLE
|
||||
```
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Daily Productive Hours
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
- Focus block for at least 2pm to 3pm as it's my most productive hour.
|
||||
- Probably better to go for 2-4 pm as 4pm is where stuff drops
|
||||
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Productivity
|
||||
type: area-hub
|
||||
tags: [area, para, productivity]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
### Notes
|
||||
```dataview
|
||||
table file.ctime as Date from "200-area/Productivity"
|
||||
sort file.name
|
||||
```
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
title: Task Triage
|
||||
tags: [productivity, task-management, prioritization]
|
||||
created: 2025-12-29
|
||||
updated: 2025-12-29
|
||||
---
|
||||
|
||||
1. Direct real harmful impact if not done -> drop everything and do it
|
||||
- Customer lost data, server.
|
||||
- Family member in trouble
|
||||
- [[Nala]] is sick and need care
|
||||
2. Important needed to be done today -> start working on it asap
|
||||
- Surprise deadline, blocking work
|
||||
- Might turn into a no. 1 if left unattended
|
||||
- Important show stopper
|
||||
3. Important needed to advance -> schedule it to be done
|
||||
- Could block a project
|
||||
- Needed to advance other project
|
||||
- Can be pushed for a couple days
|
||||
4. Nice to have -> try to scheduling it before it grow higher
|
||||
- If I have time left
|
||||
- Will become needed later
|
||||
- Might be done in a couple day or week without impact
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: Timesheet
|
||||
created: 2025-12-30
|
||||
updated: 2025-12-30
|
||||
tags: []
|
||||
---
|
||||
|
||||
### Week view
|
||||
|
||||
^a7db2c
|
||||
|
||||
%% The dates are setup for previous Monday to last Friday range, when we're Monday %%
|
||||
```dataview
|
||||
task from "1. 📚 Projects/📅 Planning"
|
||||
where file.day >= date(today) - dur(7 days) and file.day < date(today) - dur(2 days)
|
||||
sort file.day asc
|
||||
```
|
||||
Reference in New Issue
Block a user