分布式轻量级框架 设计&实现 1 - 初步想法&技术选型

技术选型

  1. 项目maven管理,使用checkstyle,findbugs,cobertura等插件生成项目报告。

  2. 使用Spring框架,采用注解的方式,尽量零配置。

  3. 统一化持久层模块。Repository分为JPA,MongoDB,HBase,Redis,Zookeeper等。

    1. JPA repository使用Spring Data JPA,尽量简化Repository层,使用接口 + JPQL操作数据库。

    2. MongoDB repository同样使用Spring Data Mongo实现。但是MongoDB毕竟不同于关系型数据库,Spring Data Mongo的实现方式未见得是最优,有待考虑。

    3. 对于像Zookeeper等Spring Data未提供的,考虑封装原生API。

  4. 服务全部发布为分布式,使用Netty做长连接通信,Protobuf或者Kyro做序列化。使用动态代理透明化调用,让客户端感觉不到是分布式服务。

  5. 提供基于Zookeeper的SOA的服务管理注册中心,注册服务的提供者和消费者。服务高可用且支持动态扩容及权重调整,支持各种负载均衡策略。

  6. 提供监控中心监控服务调用情况,考虑使用Strom流式计算服务监控统计。

  7. 提供消息中介机制。对于事务型队列使用ActiveMQ,对于大流量队列使用Kafka。

  8. Web MVC 使用Springmvc,提供Rest API+页面的方式。

  9. 展现层使用freemarker+sitemesh

  10. 使用guava和lombok等能让代码看起来更清爽的类库。

  11. 测试使用junit,dbunit,mockito。尽可能的提升测试覆盖率。原来喜欢使用unitils,但是由于长时间未更新,且用起来较为臃肿,暂时考虑放弃。

代码结构

  1. 分为common,containerrepository,mqremote,registry,monitor,service,webmvc,test等模块。每个模块又会再有子模块,用于具体实现。

  2. Common模块放置系统基础异常,基础对象以及一些工具类。

  3. Container模块定义系统容器的API以及具体的实现,目前只考虑Spring一个容器实现。

  4. Repository定义持久层。又分成JPA,MongoDB,HBase,Redis,Zookeeper等子模块。

  5. Mq定义消息中介层。分成JMS,Kafka等子模块,以后可以考虑增加ZeroMQ,甚至RocketMQ等。

  6. Remote定义远程调用的代码。仍然是提炼出一个API模块,以及多个实现模块。先实现Netty模块,以后可以考虑增加Mina,Grizzly甚至直接使用NIO的模块。

  7. Registry用于注册中心,同样是提炼出一个API模块,以及多个实现。先实现Zookeeper的注册中心,以后可以增加Redis,Multicast等。不同的是,需要再实现一个注册中心用户界面模块,以后还可以实现一个Shell模块。

  8. Monitor用于监控中心。分为Kafka收集模块,Strom分析模块,以及用户界面模块。

  9. Service定义服务层。透明化调用等模块应该在此层实现。

  10. Webmvc定义Controller跳转,web服务器的一些如多语言,Cookie,Session等相关的类。

  11. Test定义一些基本的测试工具类。

 一些初步的想法,以后会陆续把想法付诸实现,希望大家多指正,多提宝贵意见,多探讨交流。谢谢。


 


 











你可能感兴趣的:(java,高可用,分布式,架构,设计)