其他
揭秘软件开发的达摩克利斯之剑
如果测试的时候发现有些功能不可用,那很简单,不管他,直接 PS 一张正常运行的图就行。
如果比赛的时候发现有些功能不可用,那也很简单,把锅甩给 “现场网络不好” 就行。
达摩克利斯之剑
在和平安宁之后,时刻存在着危险与不安。
当一个人获取多少荣誉和地位,他都要付出同样多的代价。
地位越高,看似越安全,实则越危险。
居安思危,对随时可能带来的严重后果,要做到谨慎。
危机四伏
overly pessimistic
(过于悲观),把和程序有关的一切请求、服务、接口、返回值、机器、框架、中间件等等都当做不可信的,步步为营、处处设防。大项目的苦衷
真的可信么?
HTML
、CSS
、JavaScript
这三种最基础的技术,而如今,网站的样式和交互越来越复杂,我们不得不使用一些知名的框架来提升开发效率,比如 Vue
和 React
。1. 开发工具可信么?
JetBrains IDEA
或者 Vscode
。很多刚开始写代码的同学、甚至是一些经验丰富的老手,都对开发工具保持绝对的信任。a
,那编辑器界面上显示的一定是 a
。2. 开源项目可信么?
GitHub
等开源项目平台上能够找到大量优秀的开源项目,好的开源项目甚至可以得到 10 万多个关注,那这些知名的开源项目可信么?Vue
项目,累积提出并关闭了 8000 多个问题。Tomcat
,就遇到了 bug,每次接受到特定的请求都会报错。刚开始我根本没有怀疑是 Tomcat
的问题,而是绞尽脑汁地想自己的代码哪里写错了。后来经过反复的排查和搜索,终于确认了就是 Tomcat
本身的 bug!3. 依赖库可信么?
Maven
和 npm
)搜索依赖库,然后使用包管理器,用一行命令或者编写配置文件就能够让其自动安装依赖,非常方便。JSON
序列化类库 fastjson
,几乎无人不知、无人不晓,因为其极快的解析速度广受好评。但是,这个库被多次曝光存在高危漏洞,可以让攻击者远程执行命令!一般的开发者根本不会发现这点,从而给项目带来了极大的危害。4. 编程语言可信么?
Java
是一种强类型语言,具有健壮性。这句话我相信所有学过 Java
的同学都再熟悉不过了。但是,强类型编程语言就一定可信么?Java
而言,甚至还有一个专门记录 bug 的数据库!5. 服务器可信么?
6. 数据库可信么?
MySQL
,也可以直接租用大公司的云数据库,那么数据库可信么?7. 缓存服务可信么?
Redis
、Memcached
等,可以自己在服务器搭建,也可以直接租用大公司提供的云缓存服务。8. 对象存储可信么?
9. API 接口可信么?
qps
(query per second 每秒查询数)还能达到预期么?接口返回时长真的不会超时么?10. Serverless 可信么?
防御性编程
1. 编程习惯
Java
语言中,应该对所有可能为 NULL
的变量进行检查,防止 NPE
(NULL Pointer Error 空指针异常),在开发多线程程序时,选用线程安全的 ConcurrentHashMap
而不是 HashMap
等等。还可以利用 Assert
(断言)来保证程序运行中的变量值符合预期。2. 异常处理
Java
中,先用 try
捕获异常、再用 catch
处理异常、最后用 finally
释放资源和善后。3. 请求校验
参数类型校验:比如请求参数应该是
Integer
整型而不是Long
长整数类型。值合法性校验:比如整数的范围大于等于 0、字符串长度大于 5,或者满足某种特定格式,比如手机号、身份证等。
用户权限校验:很多接口需要登录用户或者管理员才能调用,因此必须通过请求参数(请求头)来判断当前用户的身份,被一个普通用户下载了 VIP 付费电影肯定是不合理的!
4. 流量控制
用户流控:限制每个用户在一定时间内对某个接口的调用数。
接口流控:限制一定时间内某个接口的总调用数。
单机流控:限制一定时间内单台服务器上的项目所有接口的总调用数。
分布式流控:限制一定时间内项目所有服务器的总请求数。
Java
语言 Guava
库的 RateLimiter
令牌桶单机限流、阿里的 Sentinel
分布式限流框架等。5. 回滚
6. 多级缓存
Redis
) 中查询,如果分布式缓存集体宕机,那就从本地缓存中获取数据。这样,即使缓存挂掉,也能够帮助系统支撑一段时间。7. 服务熔断和降级
Hystrix
就是比较有名的微服务熔断降级框架。8. 主动检测
9. 数据补偿
10. 数据备份
11. 心跳机制
12. 冗余设计
Elasticsearch
)时,至少要多预留一倍的存储空间,即 2G,来应对后面可能的数据增长。业务的发展潜力越大,冗余的倍数也可以越多,但也要注意不要过分冗余,毕竟资源也是很贵的啊!13. 弹性扩缩容
14. 异地多活
15. 监控告警
16. 线上诊断和热修复
Java
中,我们可以使用阿里开源的诊断工具 Arthas
,同时支持线上热修复功能。也可以自己编写脚本来实现,但是相对复杂一些。往期推荐
大厂机密!30 个提升团队研发效能的锦囊
实战 | 尝鲜 Svelte 前端框架,开发读书笔记
实战 | 一不小心创造了新的编程语言!
编程百晓生 | 世上竟有如此优雅的代码!
小记 | 从 0 到 1,看我玩弄千万日志于股掌
觉得不错,长按关注叭
技术无限,抽奖也不停哦后台回复“我要抽奖”即可点小花花,让他们知道你 “在看” 我