社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
向Nasa的《NASA的10条代码编写原则》学习,目的有二:一是约束Java代码的使用、规避较高危的代码,二是code review更易识别。有很多优秀的JAVA规范、如《阿里巴巴JAVA开发手册》等都介绍了编码的一些原则、编程风格等,本文不再赘述;这里更多介绍生产环境易出故障的javacode。
提高生产环境系统的稳定性、可用性并非代码一项,需要有一套结构化的体系、从系统运营角度去通盘考虑;代码是系统基石之一。
代码危险程度很难量化分析,从生产环境的故障着手分析。笔者统计了新美大近两年半对交易额有较大损失影响的线上S1故障(日交易额影响比大于5%),发现WEB服务影响最大的是DB、其次CACHE,还有些重复打款、zk重连、专线故障、前端轮询、内存不足、LOG问题等,比较共性的是:资源层级越底层、对交易额的损失越大。因此代码危险程度可以从代码对资源影响程度去衡量。
Nasa的编写原则面向航空场景的C语言,与互联网WEB场景相比、1)服务远程通讯更少2)偏硬件打交道得多,对低能耗和安全的要求比较高,既非cpu密集型、也非io密集型 3)代码工程浩大。因此Nasa主要集中在mem及代码工程上。NASA规范总结有3条:限制内存动态分配、限制指针层级、优化C编译器做集成和静态检查。
互联网WEB场景,普通service属于cpu密集型,cpu及network资源容易出现瓶颈;而像mysql、redis等存储系统对碰盘i/o、cpu、network的要求都很高。JAVA耻笑自动档内存的C、JVM在解放程序猿对内存管理的同时,也因将内存管理交给了JVM、比C更容易出现不明所以的故障,当你越不了解它、也就越难真正驾驭它。本文主要针对JAVA互联网WEB、规范单机的三处资源:内存、CPU、网络。
本文分类的原则、是从java单机的视角去看待资源(cpu、mem、i/o、network),例如mysql的吐吞率大的sql归在Network资源方面。
· 服务器TCP连接出现大量的TIME_WAIT、CLOSE_WAIT,占用大量fd、导致服务器不可用。优化思路大体是调整保活机制、快速回收,线上故障通过重启机器解决此类问题。
OWASP TOP 10-2017(全球WEB安全10大安全问题排行榜):
更多细节请详细访问:https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
当热点key的QPS超过一定阈值会出现网卡打满的情况。现在redis集群是万兆网卡(10000Mbps),对照表如下:
传输对象平均大小 |
打满万兆网卡的qps |
打满千兆网卡的qps |
备注 |
1KB |
128w/s |
12.8w/s |
|
2KB |
64w/s |
6.4w/s |
|
4KB |
32w/s |
4.2w/s |
|
8KB |
16w/s |
1.6w/s |
|
16KB |
8w/s |
8k/s |
|
32KB |
4w/s |
4k/s |
|
64KB |
2w/s |
2k/s |
|
128KB |
1w/s |
1k/s |
|
256KB |
5k/s |
500/s |
|
512KB |
2.5k/s |
250/s |
|
将cache的大小限制在8k以下会比较安全一些。
https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
https://blog.octo.com/en/the-evolution-of-bottlenecks-in-the-big-data-ecosystem/
https://github.com/eishay/jvm-serializers/wiki
http://www.cnblogs.com/sunxucool/p/3449068.html
=>更多文章请参考:《中国互联网业务研发体系架构指南》
=>更多行业权威架构案例及领域标准、技术趋势请关注微信公众号 '软件真理与光':
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!