技术选型web
项目用maven管理,使用checkstyle,findbugs,cobertura等插件生成项目报告。数据库
使用Spring框架,采用注解的方式,尽可能零配置。服务器
统一化持久层模块。Repository分为JPA,MongoDB,HBase,Redis,Zookeeper等。mvc
JPA repository使用Spring Data JPA,尽可能简化Repository层,使用接口 + JPQL操做数据库。负载均衡
MongoDB repository一样使用Spring Data Mongo实现。可是MongoDB毕竟不一样于关系型数据库,Spring Data Mongo的实现方式未见得是最优,有待考虑。框架
对于像Zookeeper等Spring Data未提供的,考虑封装原生API。maven
服务所有发布为分布式,使用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定义一些基本的测试工具类。
一些初步的想法,之后会陆续把想法付诸实现,但愿你们多指正,多提宝贵意见,多探讨交流。谢谢。