dubbo+zookeeper构建高可用分布式集群

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


一,背景


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

                                              dubbo+zookeeper构建高可用分布式集群_第1张图片

我们遇到的问题:

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

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

                               dubbo+zookeeper构建高可用分布式集群_第2张图片



负载均衡:

                                        

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



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

        简介

     架构如图:

                                                      

节点角色说明:

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

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

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

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

        Container: 服务运行容器。


调用关系说明:

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

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

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

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

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

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



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

                                                                       

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


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


大家来看看JEESZ分布式框架的基本信息:

介绍

1.      项目核心代码结构截图

dubbo+zookeeper构建高可用分布式集群_第3张图片

<modules>
        <!-- jeesz 工具jar -->
        <module>jeesz-utils</module>
        <!-- jeesz 公共配置jar -->
        <module>jeesz-config</module>
        <!-- jeesz 核心框架jar -->
        <module>jeesz-framework</module>
        <!-- jeesz CMS业务jar -->
        <module>jeesz-core-cms</module>
        <!-- jeesz 代码自动生成业务jar -->
        <module>jeesz-core-gen</module>
        <!-- jeesz 我的收藏业务jar -->
        <module>jeesz-core-bookmark</module>
        <!-- jeesz 电子流业务jar -->
        <module>jeesz-core-act</module>
        <!-- jeesz OA业务jar -->
        <module>jeesz-core-oa</module>
        <!-- jeesz 测试业务jar -->
        <module>jeesz-core-test</module>
        <!-- jeesz 定时调度业务jar -->
        <module>jeesz-core-scheduler</module>
        <!-- jeesz 我的任务业务jar -->
        <module>jeesz-core-task</module>
        <!-- jeesz admin后台管理系統 -->
        <module>jeesz-web-admin</module>
        <!-- jeesz Restful服务管理系統 -->
        <module>jeesz-web-service</module>
        <!-- jeesz 定时调度管理系統 -->
        <module>jeesz-web-scheduler</module>
        <!-- jeesz 我的任务Dubbo服务消費者 -->
        <module>jeesz-web-task</module>
        <!-- jeesz 我的收藏Dubbo服务消費者 -->
        <module>jeesz-web-bookmark</module>
        <!-- jeesz 我的收藏Dubbo服務接口 -->
        <module>jeesz-facade-bookmark</module>
        <!-- jeesz 我的收藏Dubbo服务生产者 -->
        <module>jeesz-service-bookmark</module>
        <!-- jeesz 我的任务Dubbo服务接口 -->
        <module>jeesz-facade-task</module>
        <!-- jeesz 我的任务Dubbo服务生产者 -->
        <module>jeesz-service-task</module>
        <!-- JMS消息 -->
        <module>jeesz-web-mq-task</module>
    </modules>

特别提醒:开发人员在开发的时候可以将自己的业务REST服务化或者Dubbo服务化

 

2.     项目依赖介绍

    2.1  后台管理系统、Rest服务系统、Scheculer定时调度系统依赖如下图:

 

dubbo+zookeeper构建高可用分布式集群_第4张图片

        2.2  Dubbo独立服务项目依赖如下图:

dubbo+zookeeper构建高可用分布式集群_第5张图片

 

3.      平台简介
        Jeesz是一个分布式的框架,提供项目模块化、服务化、热插拔的思想,高度封装安全性的Java EE快速开发平台。

        Jeesz本身集成Dubbo服务管控、Zookeeper注册中心、Redis分布式缓存技术、FastDFS分布式文件系统、ActiveMQ异步消息中间件、Nginx负载均衡等分布式技术

        使用Maven做项目管理,项目模块化,提高项目的易开发性、扩展性

        以Spring Framework为核心容器,Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎等。

        前端集成Bootstrap4 metronic框架,UI响应式、扁平化布局,适应所有PC、Pad、Anroid、ios 移动设备等。

        Jeesz主要定位于互联网企业架构,已内置企业信息化系统的基础功能和高效的代码生成工具,包括:系统权限组件、数据权限组件、数据字典组件、核心工具 组件、视图操作组件、工作流组件、代码生成等。采用分层设计、双重验证、提交数据安全编码、密码加密、访问验证、数据权限验证。

        Jeesz目前包括以下模块项目,后台系统管理系统RestFul独立服务系统Scheduler定时调度系统内容管理(CMS)系统在线办公(OA)系统我的待办(Task服务)我的收藏(Bookmark服务)

        后台管理系统包括企业组织架构(用户管理、机构管理、区域管理)、菜单管理、角色权限管理、字典管理等功能;

        RestFul独立提供标准Rest服务API,您可以快速实现自己的业务,提供需要的服务;

        Quartz定时调度系统可以动态配置您的任务规则等;

        内容管理(CMS)系统,包括内容管理,栏目管理、站点管理、公共留言、文件管理、前端网站展示等功能;

        在线办公(OA)系统,主要提供简单的流程实例。

        Jeesz提供了常用工具进行封装,包括日志工具、缓存工具、服务器端验证、数据字典、当前组织机构数据(用户、机构、区域)以及其它常用小工具等。另外 还提供一个强大的在线 代码生成 工具,此工具提供简单的单表、一对多、树结构功能的生成,如果对外观要求不是很高,生成的功能就可以用了。使用了Jeesz基础框架,可以提高快速开发效 率。

 

4.    内置功能(只列了一部分功能)
    1.用户管理:用户是系统操作者,该功能主要完成系统用户配置。
    2.机构管理:配置系统组织机构(公司、部门、小组),树结构展现,可随意调整上下级。
    3.区域管理:系统城市区域模型,如:国家、省市、地市、区县的维护。
    4.菜单管理:配置系统菜单,操作权限,按钮权限标识等。
    5.角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
    6.字典管理:对系统中经常使用的一些较为固定的数据进行维护,如:是否、男女、类别、级别等。
    7.操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
    8.连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
    9.工作流引擎:实现业务工单流转、在线流程设计器。

 

5.    开发工具
    1.Eclipse IDE:采用Maven项目管理,模块化。
    2.代码生成:通过界面方式简单配置,自动生成相应代码,目前包括三种生成方式(增删改查):单表、一对多、树结构。生成后的代码如果不需要注意美观程度,生成后即可用。

 

6.    技术选型(只列了一部分技术)
    1、后端
        服务框架:Dubbo、zookeeper、Rest服务
        缓存:Redis、ehcache
        消息中间件:ActiveMQ
        负载均衡:Nginx
        分布式文件:FastDFS
        数据库连接池:Alibaba Druid 1.0
        核心框架:Spring framework
        安全框架:Apache Shiro 1.2
        视图框架:Spring MVC 4.0
        服务端验证:Hibernate Validator 5.1
        布局框架:SiteMesh 2.4
        工作流引擎:Activiti 5.15
        任务调度:quartz 1.8.5
        持久层框架:MyBatis 3.2
        日志管理:SLF4J 1.7、Log4j
        工具类:Apache Commons、Jackson 2.2、Xstream 1.4、Dozer 5.3、POI
    2、前端
        JS框架:JQuery 1.9。
        CSS框架: Bootstrap 4 metronic
        客户端验证:JQuery Validation Plugin。
        富文本:CKEcitor
        文件管理:CKFinder
        动态页签:Jerichotab
        数据表格:jqGrid
        对话框:jQuery jBox
        树结构控件:jQuery zTree
        其他组件:Bootstrap 4 metronic
    3、支持
        服务器中间件:Tomcat 6、7、Jboss 7、WebLogic 10、WebSphere 8
        数据库支持:目前仅提供mysql数据库的支持,但不限于数据库,下个版本升级多数据源切换和数据库读写分离: 如:Oracle、SqlServer、H2等
        支持开发环境:Eclipse、MyEclipse、Ras、Idea等

声明:该框架面向企业,是大型互联网分布式企业架构,后期会介绍linux上部署高可用集群项目。

有愿意了解框架技术或者源码的朋友直接加Q(2137028325)一起学习




你可能感兴趣的:(redis,maven,mybatis,shiro,springMVC,zookeeper,fastDFS,DUBBO,druid,Restful)