深圳网站建设 信科便宜,网站ip流量查询,网站开发教学网站,5在线做网站一、微服务架构 微服务架构是一种架构概念#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 分布式系统式若干独立系统的集合#xff0c;但是用户使用起来好像是在使用一套系统。 和微服务对应的是单体式开发#xff0c;即所有的功能打包在一个WAR…一、微服务架构 微服务架构是一种架构概念旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 分布式系统式若干独立系统的集合但是用户使用起来好像是在使用一套系统。 和微服务对应的是单体式开发即所有的功能打包在一个WAR包里基本没有外部依赖部署在一个JavaEE容器里包括DO/DAOService,UI等所有逻辑。 微服务架构将庞大的单体应用程序分解成一套服务使得每个服务可以由一个团队独立专注开发每个微服务独立部署。开发人员需要基于RPC或者消息实现微服务之间的调用和通信 目前两种微服务架构解决方案 1SpringBootSpringCloud 2DubboZooKeeperDubbo是一个阿里巴巴开源出来的一个分布式服务框架致力于提供高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。ZooKeeper用来实现服务的注册与发现和进行负载均衡。
补充 1RPC远程调用 RPC是指远程过程调用也就是说两台服务器AB一个应用部署在A服务器上想要调用B服务器上应用提供的函数/方法由于不在一个内存空间不能直接调用需要通过网络来表达调用的语义和传达调用的数据。 常用的RPC框架包括gRPC、Thrift、Dubbo等。
二、Dubbo Dubbo 作为一款微服务框架最重要的是向用户提供跨进程的 RPC 远程调用能力。如上图所示Dubbo 的服务消费者Consumer通过一系列的工作将请求发送给服务提供者Provider。 2.1 Dubbo性能高的原因 Dubbo是一个RPC框架主要干的是远程过程方法调用提升性能就要从最关键、最耗时的两个方面入手序列化和网络通信。 序列化Java网络开发中本地的对象要在网络上传输必须要实现Serializable接口也就是必须序列化序列化的方案很多xml、json、二进制流…其中效率最高的就是二进制流而dubbo采用的就是效率最高的二进制。 网络通信不同于HTTP需要进行7步走三次握手和四次挥手dubbo采用Socket通信机制一步到位提升了通信效率并且可以建立长连接不用反复连接直接传输数据。 2.2 dubbo的三大核心功能 面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现。 Container就是Spring容器dubbo和Spring是无缝对接的。Provider启动时加载到Container容器中启动完服务后spring容器注册到Registry注册中心。Consumer启动时也需要加载到Spring容器中未画出服务启动完成后Spring容器也取Registry注册中心订阅(subscribe)服务订阅完成后注册中心将地址列表如果有变更Registry将基于长连接推送变更数据给Provider发送(notify)给Consumer,Consumer根据这些地址基于软负载均衡算法选一台提供者进行调用如果调用失败再选另一台调用。Consumer和Provider在内存中累计调用次数和调用时间定时每分钟发送一次统计数据到监控中心Monitor。 说明Consumer、Provider、Container和Register需要进行开发Monitor是现成的不需要进行开发。也可以没有RegistryProvider告诉Consumer地址Consumer直接调用。 2.3 dubbo支持的协议 Consumer向Provider请求服务(invoke)时支持多种协议Dubbo、hessian、rmi、http、thrift、redis等dubbo官方推荐使用dubbo协议默认端口20880。 使用dubbo协议Spring配置文件加入 dubbo:protocol name“dubbo” port“20880”
三、 dubbo调用服务方式–直连方式 3.1 直连方式只包括Provider工程和Consumer工程 实例 1.新建项目作为Provider 1在IDEA中新建空项目在空项目中新建maven项目新建java和resources目录。 2在pom.xml文件中删除多余依赖加入所需依赖 3新建实体类User 新建服务接口和实现类 4新建dubbo的核心配置文件(Spring的xml)将建立的服务暴露出去。 补充说明 dubbo:application 标签中的name属性值即为服务名称。 dubbo:service标签的registry置为N/A表示使用不通过注册中心的直连方式。 5配置监听器 6配置项目的tomcat 7打包 注释掉下图中的标签 打包项目到本地仓库 取消注释 2.新建项目作为Consumer 1与1的1相同 2与2的2的区别 加入下面依赖 3配置dubbo核心配置文件 4配置spring的核心配置文件
5编写控制层代码 6修改web.xml 7创建页面 8部署tomcat启功Comsumer和Provider服务
效果如下 3.2 直连方式将接口和实体bean单独放到一个接口工程里 建立3个工程分别是接口工程、Provider工程和Consumer工程这也是官方推荐的工程。 接口工程是maven java工程。 一建立接口工程 新建实体类 新建服务类 二新建Provider工程 添加依赖 注意还需要引入接口工程并对接口工程里的接口具体实现 实现接口 新建核心配置文件dubbo-userservice-provider.xml 修改web.xml文件 配置tomcat。 三新建Consumer工程
也要导入接口工程 新建核心配置文件dubbo-consumer.xml Consumer用到了.jsp页面需要新建springSpringMVC的核心配置文件applicationContext.xml 新建控制层的类 修改web.xml 创建页面 配置tomcat。 启动Comsumer和Provider服务浏览器访问 总结Consumer直接引入接口工程接口工程只有接口而接口的具体实现在Provider项目Provider引入接口工程实现中。 问题 直连方式无注册中心Consumer直接向指定的Provider请求服务不能保证服务最优化没有考虑集群之间存在调度问题。
四、注册中心ZooKeeper 4.1 注册中心 对于服务提供方需要发布服务而且由于应用系统的复杂性服务的数量、类型也不断膨胀对于服务消费方最关心如何获取到它所需要的服务而面对复杂的应用系统需要管理大量的服务调用。 而且对于服务提供方和服务消费者来说还有可能兼具这两种角色即需要提供服务又需要消费服务通过统一管理起来可以有效地优化内部应用对服务发布/使用的流程的管理服务注册中心可以通过特定协议来完成服务对外的统一。 Dubbo推荐Zookeeper注册中心。 Zookeeper是Apacahe Hadoop的子项目是一个树形的目录结构支持变更推送服务有变更会被推送适合作为Dubbo服务的注册中心。 下图为Zookeeper的管理方式 4.2安装Zookeeper 下载官网 zookeeper.apache.org 下载的压缩包 解压文件 打开conf目录 复制zoo_sample.cfg文件为zoo.fcg 编辑zoo.cfg 修改dataDir的值并在本地文件夹建立项目的空目录 双击执行bin目录下的zkServer.cmd 五、dubbo调用服务方式–使用注册中心 一新建接口工程 加依赖
新建实体类 接口类
二新建Provider工程 加依赖 新建接口实现类 新建dubbo核心配置文件dubbo-zk-userservice-provider.xml 三新建Consumer项目 添加依赖 修改核心配置文件 新建SpringMVC核心配置文件applicationContext.xml 修改web.xml 新建控制层类 配置tomcat。 打开Zookeeper双击bin目录下的zkServer.sh
启动Comsumer和Provider服务浏览器访问 六、版本号version 有的时候想要改进Provider里的实现类的内容或者增加新的实现类为了区分可以使用版本号。 一新建provider 添加依赖 从上图中可以看出引入的是之前创建的接口工程。 新建多个接口实现类 新建核心配置文件dubbo-userservice-multi-provider.xml 注意不管一个接口是否有多个实现类只要服务提供者向外暴露接口服务时指定了版本号作为消费者引用远程接口服务的时候就必须执行版本号。
二创建Consumer 添加依赖 新建核心配置文件dubbo-multi-consumer.xml 如上图dubbo引用多个标签id不能相同并写明不同的版本号。 新建SpringMVC的核心配置文件 修改web.xml 新建.jsp文件 配置tomcat并启动Comsumer和Provider服务。 七、关闭检查 dubbo缺省会在启动时检查依赖的服务是否可用不可用时会抛出异常阻止Spring初始化完成以便上线时能及早地发现问题默认checktrue。通过checkfalse关闭检查比如测试时有些服务不关心或者出现了循环依赖必须有一方先启动。