单体程序开发(特指Java单体程序开发)全貌如图1所示。
图1
备注:
- 分布式系统本质上是单体程序的有机集合体
- 大数据平台下的用户程序本质上还是单体程序,只不过遵循大数据平台的开发接口,并且由大数据平台负责“分布式化”
- 综合以上两点,可知:单体程序的开发是核心
一、程序开发
1.1、核心功能开发
1.1.1、操作系统
1.1.2、网络原理
可使用“tcpdump+Wireshark”工具组合进行网络协议数据分析。
1.1.3、JDK
1.1.4、Java语言语法
1.1.5、第三方库使用
1.1.6、中间件使用
消息队列:ActiveMQ,Kafka,RocketMQ,…
数据库:Mysql,Redis,MongoDB,…
其他:ZooKeeper,BookKeeper,…
1.1.7、数据结构和算法
1.2、日志系统
作用:记录程序运行现场信息,展现程序运行状态信息,提供程序运行问题排查线索,提供程序运行状态量化指标等。
推荐使用“SLF4J+Log4j/Log4j 2”组合方案。
选型范围:Java Logging API,JCL,Log4j,Log4j 2,Logback。
备注:
- 日志系统可直接连接Kafka等中间件,但导致权责不明晰,故不推荐这种方案
1.3、测试系统
作用:确保迭代质量不会后退,提升迭代信心,加快迭代效率。
测试方案有很多种,比如“单元测试,集成测试,系统测试,回归测试,用户验收测试,压力测试”等。
1、单元测试
推荐使用:JUnit+JMockit[1]。
选型范围:JMockit,Mockito。
1.4、配置机制
配置机制包括:硬编码,配置文件,数据库配置,独立的配置中心。
根据具体需求选取实际应用的配置机制。
1.5、监控报警系统
监控报警分类:存活监控报警,性能监控报警,业务监控报警。
主要实现形式:1)自实现(监控逻辑完全在被监控进程内部实现);2)独立进程实现(包括“平台实现”,“平台实现”是特殊的“独立进程实现”。监控进程独立于被监控进程,一部分监控逻辑可能仍需存在于被监控进程中)。
1.5.1、存活监控报警
既然是监控“存活”,那么自然不能使用“自实现”形式,即只能使用“独立进程实现”形式。
具体实现时又可细分为:1)主动注册(比如“向心跳中心注册”);2)被动监测(比如“提供一个存活接口,供调用监测”)。
1.5.2、性能监控报警
作用:监控Java进程运行状态,有利于排查问题,提供一个性能优化的量化指标。
当被监控进程性能存在问题时,能否继续正常运行是未可知的,因此,不能使用“自实现”形式,而只能使用“独立进程实现”形式。
具体实现举例:1)运行一个第三方独立进程进行监控,使用jstat等工具进行监测;2)借助于Java字节码增强技术对被监控进程进行零侵入监控,单独运行一个监控数据收集展示进程(比如有相应平台:CAT[2],JavaMelody[3])。
1.5.3、业务监控报警
业务报警:比如“日志错误数量超过一定阈值”。
既可使用“自实现”形式,也可使用“独立进程实现”形式。
二、版本管理
推荐使用:Git。
选型范围:Git,SVN。
三、项目管理
推荐使用:Maven。
选型范围:Ant,Maven,Gradle。
**参考文献:** [1]https://www.slant.co/topics/259/~best-mock-frameworks-for-java#1 [2]https://github.com/dianping/cat [3]https://github.com/javamelody/javamelody