技术选型
项目用maven管理,使用checkstyle,findbugs,cobertura等插件生成项目报告。
使用Spring框架,采用注解的方式,尽量零配置。
统一化持久层模块。Repository分为JPA,MongoDB,HBase,Redis,Zookeeper等。
JPA repository使用Spring Data JPA,尽量简化Repository层,使用接口 + JPQL操作数据库。
MongoDB repository同样使用Spring Data Mongo实现。但是MongoDB毕竟不同于关系型数据库,Spring Data Mongo的实现方式未见得是最优,有待考虑。
对于像Zookeeper等Spring Data未提供的,考虑封装原生API。
服务全部发布为分布式,使用Netty做长连接通信,Protobuf或者Kyro做序列化。使用动态代理透明化调用,让客户端感觉不到是分布式服务。
提供基于Zookeeper的SOA的服务管理注册中心,注册服务的提供者和消费者。服务高可用且支持动态扩容及权重调整,支持各种负载均衡策略。
提供监控中心监控服务调用情况,考虑使用Strom流式计算服务监控统计。
提供消息中介机制。对于事务型队列使用ActiveMQ,对于大流量队列使用Kafka。
Web MVC 使用Springmvc,提供Rest API+页面的方式。
展现层使用freemarker+sitemesh
使用guava和lombok等能让代码看起来更清爽的类库。
测试使用junit,dbunit,mockito。尽可能的提升测试覆盖率。原来喜欢使用unitils,但是由于长时间未更新,且用起来较为臃肿,暂时考虑放弃。
代码结构
分为common,container,repository,mq,remote,registry,monitor,service,webmvc,test等模块。每个模块又会再有子模块,用于具体实现。
Common模块放置系统基础异常,基础对象以及一些工具类。
Container模块定义系统容器的API以及具体的实现,目前只考虑Spring一个容器实现。
Repository定义持久层。又分成JPA,MongoDB,HBase,Redis,Zookeeper等子模块。
Mq定义消息中介层。分成JMS,Kafka等子模块,以后可以考虑增加ZeroMQ,甚至RocketMQ等。
Remote定义远程调用的代码。仍然是提炼出一个API模块,以及多个实现模块。先实现Netty模块,以后可以考虑增加Mina,Grizzly甚至直接使用NIO的模块。
Registry用于注册中心,同样是提炼出一个API模块,以及多个实现。先实现Zookeeper的注册中心,以后可以增加Redis,Multicast等。不同的是,需要再实现一个注册中心用户界面模块,以后还可以实现一个Shell模块。
Monitor用于监控中心。分为Kafka收集模块,Strom分析模块,以及用户界面模块。
Service定义服务层。透明化调用等模块应该在此层实现。
Webmvc定义Controller跳转,web服务器的一些如多语言,Cookie,Session等相关的类。
Test定义一些基本的测试工具类。
一些初步的想法,以后会陆续把想法付诸实现,希望大家多指正,多提宝贵意见,多探讨交流。谢谢。