如何设计出好用的基础软件

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 如何设计出好用的基础软件 可交互性和可观测性 黄东旭 PingCAP 联合创始人兼 CTO
2. 关于我 • 黄东旭 • PingCAP 联合创始人,CTO • 工程师,分布式系统 / 数据库 • TiDB / TiKV / Codis • 编程,画画,弹琴 • h@pingcap.com
3.
4. 灵魂拷问: 你能够熟练使用 gdb 吗? (Without Google)
5. 系统软件斯德哥尔摩综合症候群 • 可能是系统程序员群体对于精密的复杂有着特别的感情 • 我曾经觉得我不能记住所有的 gdb 指令是我智商不行… • 也曾在能够熟练使用 vim 的时候觉得自己很牛逼 • 终于算一个合格的程序员了? • 但是现在我觉得这些软件应该向我道歉(确实太难用了)
6. 都21世纪了 为什么你们程序员 就不能把东西做得好用一点? (vscode 不香吗?)
7. 我们认知外部世界的模式
8.
9.
10. 需要跨越的两条鸿沟 • 执行的鸿沟 • 评估的鸿沟
11. 01 跨越执行的鸿沟:可交互性
12. 可交互性 - No Surprise! 的概念模型 • 想象一个例子:汽车 • 人对事物通常有预设的心理模式 • 当我们看到 $ _ 或者 > _ 的时 候,想到了什么? • 通常简单/自洽的概念最容易被人 记住(自然映射)
13. 可交互性 - No Surprise! 的概念模型 看几个好例子: UNIX 的概念模型 TiUP • 一切皆是文件 • • 数据是流 Telegram botfather • Pipe 来串联流 • 一切皆是组件 对话 在写一行代码之前,就想好用户如何使用(概念模型)
14. 例子:控制器 - 控制对象 一些好的 控制器 - 控制对象 的例子: redis-cli • 映射到 redis 的概念模型:一切皆是 KV • 交互命令操作模式(甚至修改配置都是) MySQL(或者其他流行的 SQL Database) • SQL 本身就是一个很好的模型 大忌:控制器的对应关系混乱 “一个电视机应该只有一个遥控器”
15. 可交互性 - 没人读文档(探索式学习) 在开发者心目中:文档约等于字典 灵魂拷问:你小时候学汉语是通过看字典学会的吗? 接触一个新东西的时候,开发者正常的内心活动: • “Quick start 在哪里?” • “找到了” • “哪里有深色背景的等宽文字?(注:通常是 install script)" • “太好了!找到了,让我贴到我的 shell 里看看会发生什么吧!”
16. 可交互性 - 没人读文档(探索式学习) Quick start 的第一行 shell 命令至关重要,决定了后续还有没有后续 通常来说,心理接受度排序如下: apt / yum / pacman / brew … > curl xxx | sh >= pip / go get / cargo > Docker >>>> npm 第一行顺利成功以后,最好引导用户到一个可交互环境(告诉用户下一步该干嘛) 论补全的重要性
17.
18.
19.
20. 例子 : Telegram Botfather
21. 可交互性 - 多想一步,告诉用户半步,让用户自己走半步 重要决定不要代替用户做 重要操作请提供 DryRun 的 mode 出错以后怎么办? 一般人遇到软件错误会怎么办? 例子:Terraform 的 Dry Run
22. 例子: Rust 的编译错误提示
23. 可交互性 - 正确的反馈 正常人的反应时间为0.15秒-0.4秒 超过的这个时间,就会有明显的延迟感 反馈是可交互性中最重要的一环,也是软件让人产生愉悦感的重 要来源
24. 可交互性 - 反馈 3 定律 ● ● ● 不要暴露内部概念!不要暴露内部概念!不要暴露内部概念! 用精简的人话暴露进展和状态 ○ 不要说废话,更不要不说 反馈必须即时
25. 一个关于反馈的坏例子: TiDB 的一个报错信息如下: MySQL [test]> SELECT COUNT(1) AS count, SUM(account_balance) AS amount, trade_desc AS type FROM b_test WHERE member_id = "22792279001" AND detail_create_date >= "2019-11-19 17:00:00" AND detail_create_date < "2019-11-28 17:00:00" group by trade_desc; ERROR 9005 (HY000): Region is unavailable
26. 一个关于反馈的好例子
27. 可交互性 - 关于配置 修改配置文件是一个慢反馈过程 ● 配置文件需要在正确的位置 ○ /etc/…. /home/xxx/.config ● 启动的时候检查和告诉用户配置信息(在日志中打印) ● 对于分布式系统,全局的配置中心会是一个更好的体验 ● 热更新好于重启(回想当年 windows 修改配置) ● 提供可交互式工具(控制器)用于配制检查和热更新 ● 提供模版(--print-config-sample),甚至自动生成工具 配置的心智负担(从小到大) 环境变量(通常适合 flags) < 命令行参数 <= 控制器(管控平台) < 配置文件
28. 可交互性 - 你不用重新发明轮子 • 世界上有很多很好例子,抄就完了? • Docker CLI • kubectl (现在难用主要是因为 k8s 太复杂了,以及 yaml 带来的问题) • Redis CLI • tiup • ...
29. 02 跨越评估的鸿沟:可观测性
30. 可观测性:谁在观测 • • 人,可是我们真的做到以人为本了吗? • 我们曾经的一个‘卖点’:我们有几千个监控项 人同一时间大概能跟踪的对象数:4
31. 可观测性:区分噪音和信息 什么是有用的信息? 我的经验:跟着关键资源走 什么是关键资源: • • • • • CPU:都哪些线程在工作?这些线程都在干嘛?这些线程各自消耗了多少 CPU Time? 内存:当前内存中存储了哪些东西?这些东西的命中率情况?(通常我们更关注业务缓存)? 网络 I/O:QPS/TPS 有异常吗?当前主要的网络 I/O 是由什么请求发起的?带宽还够吗?请求延迟?长 链接还是短链接?(衡量 syscall 的开销)? 磁盘 I/O:磁盘在读写文件吗?读写哪些文件?大多数的读写是什么 Pattern?吞吐多大?一次 I/O 延迟 多大? 关键日志:不是所有日志都有用的,人也不会读,只有包含特定关键字的日志,人们才会关心。所以 ,有没有特定的关键字的日志出现?
32. 可观测性:利用人的直觉 如何把‘噪音’变成有用信息:结合业务的上下文 + 人的直觉
33. 可观测性:利用人的直觉 例子: ● TiDB Key Viz
34. 例子: Golang pprof
35. 练习: TiDB TopSQL 试着在我不告诉你这个是什么功能的前提下,从界面上提取信息
36. 可观测性:周期 ● ● 脱离周期谈可观测性都是耍流氓 越贴近业务周期越好用,例子: ○ 为什么我们需要全链路监控
37. 可观测性:事后观测 ● 可观测性什么时候能救命? ● Profile 什么时候是有用的? ● 持续 Profiling
38. 谢谢 ? 参考资料 The Design of Everyday Things: Revised and Expanded – Don Norman Don't Make Me Think – Steve Krug 产品故事地图 – Donna Lichaw UNIX 编程艺术 – Eric Raymond

Home - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-16 00:23
浙ICP备14020137号-1 $Map of visitor$