架构篇
- 代码架构需要应对可能的变化(最好的例子莫过于spring),考虑扩展性
- 代码分层需要考虑技术细节和业务逻辑的分层,需要做到两点
- 技术细节和业务逻辑隔离(有利于后续技术实现的变更)
- 面向接口编程
推荐的编码规范,代码解耦以及内聚。每个模块的代码应该存在其专职,大模块体现实现思路,小函数实现其具体细节
资源篇
- CPU/内存/硬盘存储空间等硬件指标
- 堆栈使用率/线程池使用率等编程资源指标
目前推荐使用 prometheus + grafana + exporter,基于时间序列采集硬件设备资源信息
性能篇
- 使用jdk benchmark/skywalking对功能和远程执行效率进行监控分析
apm系列,推荐使用skywalking对应用进行性能分析
运行分析篇
- arthas在运行时候通过jvm工具进行分析,堆栈/已加载字节码/线程跟踪分析
- jconsole/jcmd/jmap等 对jvm内存使用率,CPU使用率,线程等资源运行时监控
日志篇
- 堆栈日志,堆栈异常时还原堆栈异常时线程执行过程
- 日志要素,记录全局流水号(串联业务处理流程)/线程号/主机名(或者IP)/属地(可选)/执行函数/执行行数
- 日志采集分析
目前推荐elk,基于log对系统状态进行记录和查询
自动化篇
- 使用python+shell等脚本实现自动化需求
- 使用jenkins+git+sonatype+上面的脚本实现可持续集成及自动部署+代码检查等(devops)
- 使用容器docker或者其他containerd+k8s实现快速启动以及一定的自适应(目前docker在推docker+Wasm组合实现更快速的轻量跨平台容器)
加密篇
- 通过套壳或者源码函数名混淆及去除所有注释的方式来增加反编译难度,降低源码可读性
- 通过特殊的加解密中间流程来防止源码外流,核心代码可以使用so库或者其他已经编译加密过的二进制流
Q.E.D.