码迷,mamicode.com
首页 > 编程语言 > 详细

Java集群优化——dubbo+zookeeper构建高可用分布式集群 【转】

时间:2016-08-15 22:40:53      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:dubbo+zookeeper   dubbo分布式服务   dubbo+springmvc+mybatis   redis分布式缓存   maven+springmvc   

我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容,就是分布式,而当下流行的Dubbo框架,不容我们忽视,这里,咱们一起来探讨一下这个框架的使用。


一,背景


    以前我们需要远程调用他人的接口,我们是这么做的:

                                              技术分享

我们遇到的问题:

        (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大。
此时需要一个服务注册中心,动态的注册和发现服务,使服务的位置透明。
并通过在消费方获取服务提供方地址列表,实现软负载均衡和Failover,降低对F5硬件负载均衡器的依赖,也能减少部分成本。
        (2) 当进一步发展,服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用之前启动,架构师都不能完整的描述应用的架构关系。
这时,需要自动画出应用间的依赖关系图,以帮助架构师理清理关系。
        (3) 接着,服务的调用量越来越大,服务的容量问题就暴露出来,这个服务需要多少机器支撑?什么时候该加机器?
        为了解决这些问题,第一步,要将服务现在每天的调用量,响应时间,都统计出来,作为容量规划的参考指标。
        其次,要可以动态调整权重,在线上,将某台机器的权重一直加大,并在加大的过程中记录响应时间的变化,直到响应时间到达阀值,记录此时的访问量,再以此访问量乘以机器数反推总容量。

        为解决这些问题,Dubbo为我们做了什么呢:

                               技术分享



负载均衡:

                                        技术分享


        这就是所谓的软负载均衡!



        现在让我们一起来接触下这个优秀的框架:

        简介


     架构如图:

                                                      技术分享


节点角色说明:

        Provider: 暴露服务的服务提供方。

        Consumer: 调用远程服务的服务消费方。

        Registry: 服务注册与发现的注册中心。

        Monitor: 统计服务的调用次调和调用时间的监控中心。

        Container: 服务运行容器。


调用关系说明:

        0. 服务容器负责启动,加载,运行服务提供者。

        1. 服务提供者在启动时,向注册中心注册自己提供的服务。

        2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

        3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

        4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

        5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。





        Dubbo提供了很多协议,Dubbo议、RMI协议Hessian协议,我们查看Dubbo源代码,有各种协议的实现,如图所示:

                                                                       技术分享



        我们之前没用Dubbo之前时,大部分都使用Hessian来使用我们服务的暴露和调用,利用HessianProxyFactory调用远程接口。


        上面是参考了Dubbo官方网介绍,接下来我们来介绍SpringMVCDubboZookeeper整合使用。


第三:Dubbo与Zookeeper、SpringMVC整合使用

  

  第一步:在Linux上安装Zookeeper

       Zookeeper作为Dubbo服务的注册中心,Dubbo原先基于数据库的注册中心,没采用ZookeeperZookeeper一个分布式的服务框架,是树型的目录服务的数据存储,能做到集群管理数据 ,这里能很好的作为Dubbo服务的注册中心,Dubbo能与Zookeeper做到集群部署,当提供者出现断电等异常停机时,Zookeeper注册中心能自动删除提供者信息,当提供者重启时,能自动恢复注册数据,以及订阅请求。我们先在linux上安装Zookeeper,我们安装最简单的单点,集群比较麻烦。

   

先需要安装JdK,从Oracle的Java网站下载,安装很简单,就不再详述。

单机模式

        单机安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:C:\zookeeper-3.4.5\下,Zookeeper 的启动脚本在 bin 目录下,Windows 下的启动脚本是 zkServer.cmd。

        在你执行启动脚本之前,还有几个基本的配置项需要配置一下,Zookeeper 的配置文件在 conf 目录下,这个目录下有 zoo_sample.cfg 和 log4j.properties,你需要做的就是将 zoo_sample.cfg 改名为 zoo.cfg,因为 Zookeeper 在启动时会找这个文件作为默认配置文件。下面详细介绍一下,这个配置文件中各个配置项的意义。

框架简介:

本系统一款通用的SOA中间件平台,用来开发各类J2EE企业级应用,节省时间和人力成本。本系统采用MVC模式、AOP引擎、任务调度器、Ajax、拦截器、过滤器、缓存、日志监控、数据访问、表达式、国际化等技术。

框架/平台构成:
Maven+Springmvc + Mybatis + Shiro(权限)+ Tiles(模板) +ActiveMQ(消息队列) + Rest(服务) + WebService(服务)+ EHcache(缓存) + Quartz(定时调度)+ Html5(支持PC、IOS、Android)

用户权限系统:
组织结构:角色、用户、用户组、组织机构;权限点:页面、方法、按钮、数据权限、分级授权

项目管理新体验
快速出原型系统、组件树、版本控制、模块移植、协同开发、实时监控、发布管理

可持续集成:
所有组件可移植、可定制、可扩充,开发成果不断积累,形成可持续发展的良性循环

支持平台平台: 
Windows XP、Windows 7 、Windows 10 、 Linux 、 Unix

服务器容器:
Tomcat 5/6/7 、Jetty、JBoss、WebSphere 8.5 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 技术分享

 

技术分享

 

技术分享

 

技术分享

 

技术分享

 


[html] view plain copy

  1. <span style="font-size:18px;"># The number of milliseconds of each tick  

  2. tickTime=2000  

  3. # The number of ticks that the initial   

  4. # synchronization phase can take  

  5. initLimit=10  

  6. # The number of ticks that can pass between   

  7. # sending a request and getting an acknowledgement  

  8. syncLimit=5  

  9. # the directory where the snapshot is stored.  

  10. # do not use /tmp for storage, /tmp here is just   

  11. # example sakes.  

  12. dataDir=C:\\zookeeper-3.4.5\\data  

  13. dataLogDir=C:\\zookeeper-3.4.5\\log  

  14. # the port at which the clients will connect  

  15. clientPort=2181  

  16. #  

  17. # Be sure to read the maintenance section of the   

  18. # administrator guide before turning on autopurge.  

  19. #  

  20. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance  

  21. #  

  22. # The number of snapshots to retain in dataDir  

  23. #autopurge.snapRetainCount=3  

  24. # Purge task interval in hours  

  25. # Set to "0" to disable auto purge feature  

  26. #autopurge.purgeInterval=1</span>  


  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据

   

(4)项目启动,Dubbo管理页面,能看到消费者,如图所示:

 技术分享

(5)然后访问消费者项目,Controller层能像调用本地一样调用服务的具体实现,如图所示:

  技术分享


总结:

        经过一系列的操作之后,我们感觉,的确很简单,dubbo给我们封装了很多操作,让我们不需要过多考虑具体的实现细节,配置化生成咱们的应用,这样的思想,现在在IT行业正在盛行!


Java集群优化——dubbo+zookeeper构建高可用分布式集群 【转】

标签:dubbo+zookeeper   dubbo分布式服务   dubbo+springmvc+mybatis   redis分布式缓存   maven+springmvc   

原文地址:http://11936070.blog.51cto.com/11926070/1838743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!