关于dubbo-zookeeper:分布式电商项目九DubboZookeeper项目重构

SOA思维SOA思维介绍面向服务的架构(SOA)是一个组件模型,它将应用程序的不同性能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协定分割起来。接口是采纳中立的形式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的零碎中的服务能够以一种对立和通用的形式进行交互。 RPC介绍(调用模式的统称)RPC介绍RPC(Remote Procedure Call)近程过程调用,简略的了解是一个节点申请另一个节点提供的服务本地过程调用:如果须要将本地student对象的age+1,能够实现一个addAge()办法,将student对象传入,对年龄进行更新之后返回即可,本地办法调用的函数体通过函数指针来指定。近程过程调用:addAge办法在其余的服务器中,如果须要调用则必须通过近程的形式告诉其余服务器帮我实现业务调用. 总结: 利用第三方的服务器,帮我实现业务调用的过程.了解: 分布式环境中 业务调用简直都是RPC的. 微服务什么是微服务阐明: 为了升高代码的耦合性,将我的项目进行了拆分.依照功能模块拆分为若干个我的项目.该我的项目称之为服务.(分布式思维).如果采纳微服务的构造,要求服务器如果呈现了故障应该实现自动化的故障的迁徙(高可用HA)现有服务剖析阐明:因为nginx负载平衡/反向代理都须要人为的配置,并且呈现了问题不能及时的实现故障的迁徙,所以须要降级为微服务的架构的设计. 微服务架构设计实现步骤: 服务提供者启动时,.将本人的信息注册到注册核心中.注册核心承受到了用户的申请之后,更新服务列表信息.当消费者启动时,首先会链接注册核心,获取服务列表数据.注册核心将本人的服务列表信息同步给客户端(消费者)消费者接管到服务列表数据之后,将信息保留到本人的本地.不便下次调用当消费者接管到用户的申请时,依据本人服务列表的信息进行负载平衡的操作,抉择其中一个服务的提供者,依据IP:PORT 进行RPC调用.当服务提供者宕机时,注册核心会有心跳检测机制,如果查看宕机,则更新本地的服务列表数据,并且全网播送告诉所有的消费者更新服务列表.ZookeeperZookeeper介绍ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的性能包含:配置保护、域名服务、分布式同步、组服务等。ZooKeeper的指标就是封装好简单易出错的要害服务,将简略易用的接口和性能高效、性能稳固的零碎提供给用户。ZooKeeper蕴含一个简略的原语集,提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在zookeeper-3.4.3srcrecipes。其中散布锁和队列有Java和C两个版本,选举只有Java版本。 总结:Zookeeper负责服务的协调调度.当客户端发动申请时,返回正确的服务器地址. Zookeeper下载网址: http://zookeeper.apache.org/releases.html. ZK装置先装置JDK(jdk1.8)1.上传安装文件解压目录: tar -xvf zookeeper-3.4.8.tar.gz2.批改配置文件在zk根目录下创立文件夹data/log mkdir data log 3.跳入conf目录中批改配置文件复制配置文件并且批改名称 cp zoo_sample.cfg zoo.cfg 4.启动zk跳转到bin目录中 zk启动敞开命令如下. sh zkServer.sh start 或者 ./zkServer.sh startsh zkServer.sh stopsh zkServer.sh status Zookeeper集群装置1.筹备文件夹在zookeeper根目录中创立新的文件夹zkCluster.创立zk1/zk2/zk3文件夹.在每个文件夹里创立data/log文件夹. mkdir {zk1,zk2,zk3}/{data,log} 2.在每个文件夹里创立data/log文件夹.mkdir {zk1,zk2,zk3}/{data,log} 3.别离在zk1/zk2/zk3中的data文件夹中创立新的文件myid.其中的内容顺次为1/2/3,与zk节点号对应. 4.在config目录中将zoo_sample.cfg 复制为zoo1.cfg之后批改配置文件.将zoo_sample.cfg 复制为zoo1.cfg之后批改配置文件. 5.批改zoo1.cfg 配置实现后将zoo1.cfg复制2份.之后须要批改对应的文件夹目录.和不同的端口即可. 6.ZK集群测试通过上面的命令启动zk集群. sh zkServer.sh start zoo1.cfgsh zkServer.sh stop zoo1.cfgsh zkServer.sh status zoo1.cfg查看主从关系,从机状况阐明查看主从关系,主机状况阐明 对于zookeeper集群阐明Zookeeper集群中leader负责监控集群状态,follower次要负责客户端链接获取服务列表信息.同时参加投票. 为什么集群个别都是奇数个?公式: 存活的节点 > N/2 ...

November 29, 2020 · 5 min · jiezi

关于dubbo-zookeeper:Dubbo微服务

SOA思维概念soa思维即为面向服务开发;倒退步骤:面向对象思维-->面向接口开发-->面向切面开发-->面向服务开发 概括:SOA思维要求依照业务将服务进行拆分,之后依照同一的中立的接口进行交互. 结构图相比拟于上一篇文章的httpclient的近程调用,soa中将前端的service中httpclient局部以及后端的controller部门简化为一个公共中立的接口方便使用与调用. RPC概念RPC为近程过程调用--简略了解:一个节点申请另一个节点提供的服务1.本地过程调用:本地调用办法执行业务2.近程过程调用:在服务之间,由第三方实现本人的工作的过程. 微服务调用原理必要两点:1.依据业务拆分的思维 进行了分布式的设计2.当服务产生异样时能够主动的实现故障的迁徙(高可用)无需人为的干涉. 传统服务调用形式因为nginx做负载平衡时须要依赖配置文件.然而当服务器新增/缩小时.都须要手动的批改配置文件.不能自动化的实现.所以临时达不到微服务的规范. 微服务调用形式步骤:**1.当服务的提供者启动时,会将本人的服务信息(服务名称/IP/端口号)进行记录2.服务注册核心须要记录提供者的信息 保护服务列表3.当服务消费者启动时会链接注册核心.4.从注册核心中获取服务列表信息,不便下次调用5.当消费者调用服务时,会依据负载平衡的机制筛选其中的一个服务提供者进行拜访.6.当服务提供者宕机时,因为注册核心有心跳检测机制,会保护服务列表.当宕机的提供者标识为down7.当服务列表保护之后,会全网播送告诉所有服务器的消费者更新服务列表信息.** 对于集群阐明集群为何是奇数台准则: 搭建集群必须满足公式 现有的节点数量 > N/2为什么集群的最小单位是3台:假如:1台 1-1=0 > 1/2 false2台 2-1=1 > 2/2 false3台 3-1=2 > 3/2 true 3台是搭建集群的最小单位.4台 4-1=3 > 4/2 true 只有大概3台都能够搭建集群. 集群中最多容许宕机的台数为多少:3台最多容许宕机几台---最多宕机1台4台最多容许宕机几台---最多宕机1台 从实用性的角度思考问题 发现搭建奇数台和偶数台的容灾能力雷同.所以选用奇数台. zookeeper总结:Zookeeper负责服务的协调调度.当客户端发动申请时,返回正确的服务器地址. zookeeper即为微服务中咱们所要应用的注册核心,以下简称zk,装置运行/搭建集群过程不做赘述,请自行查阅. zk集群选举的原理原理阐明: zk集群的选举依据最大值优先的规定,进行选举. 如果集群一旦超过半数以上的票数批准,则入选主机,同时选举完结. 题目: 有1,2,3,4,5,6,7节点顺次启动.问题1: 谁当主机? 4当主机问题2: 哪几台永远不能入选主机? 1 2 3 Dubbo框架介绍官网简介Apache Dubbo |db| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大外围能力:面向接口的近程办法调用,智能容错和负载平衡,以及服务主动注册和发现。 个性 工作原理和上文中微服务调用过程基本一致 入门案例1.定义第三方的公共接口我的项目:消费者和提供者都会依赖此接口来进行传输,其中须要定义pojo类以及service接口 2.提供者阐明:1).编辑Dubbo的service接口的实现类:实现公共接口我的项目的service接口(前提我的项目要依赖)实现类注解要写Dubbo的@Service而不是spring的注解 2).编辑YML配置文件:端口号/数据源/MP/Dubbo配置(包门路/利用名称(一个服务一个名称)/注册核心/协定) 3.消费者阐明:1).编辑controller:注入service:利用dubbo的形式@Reference为接口创立代理对象,利用rpc调用;而不是@Autowired 2).编辑YML配置文件:端口号/Dubbo配置(包门路/利用名称(一个服务一个名称)/注册核心) 4.启动测试业务 Dubbo题目问题1: 如果将其中的一个服务的提供者敞开,问 用户拜访是否受影响---不受任何影响问题2: 如果将dubbo中的注册核心全副敞开,问用户拜访是否受到影响---不受影响,因为消费者将服务列表数据保留到本地.

September 16, 2020 · 1 min · jiezi

Spring-Boot集成Dubbo-并且使用使用zookeeper作为注册中心

Spring Boot集成Dubbo 并且使用使用zookeeper作为注册中心前言本文全程在Windos下操作,大致操作与Linux相差无异,具体细节请百度,有条件的可以谷歌! 需要了解的知识点 Dubbo 和 zookeeper 环境以及了解这两个是个什么东东Spring Boot 知识点,仅限于包结构 pom依赖 继承等Maven 聚合工程JDK 和 tomcat 环境配置等首先环境配置JDK 8 Maven 3.xSpring Boot 1.5.22tomcat 8.xMysql 5.5dubbo 2.5.4zookeeper 3.5.8 关于Dubbo 、zookeeper 以及微服务是什么东西,请百度,如不知道就不要往下看了。 首选需要了解和安装Dubbo 和 zookeeper 环境 可以查看 Windows下搭建dubbo和zookeeper环境 搭建Maven聚合项目先新建父级工程 输入项目名和groupid 和 ArtifactId 然后在父级包上右键新建Module 如下图,点击完成即可。 等等新建结束后点击父级pom可以看到子maven模块 项目结构 新建后的pom文件 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gamll</groupId> <artifactId>gamll-parent</artifactId> <version>1.0-SNAPSHOT</version> <description>父级maven</description> <modules> <module>gmall-api</module><!-- <module>gmall_user</module>--> <module>gmall-common-util</module> <module>service-util</module> <module>gmall-user-service-dir/gmall-user-service</module> <module>gmall-user-service-dir/gmall-user-web</module> </modules></project>引入Spring Boot 依赖后 和 部分依赖后,依赖维护 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.gamll</groupId> <artifactId>gamll-parent</artifactId> <version>1.0-SNAPSHOT</version> <description>父级maven</description> <modules> <module>gmall-api</module><!-- <module>gmall_user</module>--> <module>gmall-common-util</module> <module>service-util</module> <module>gmall-user-service-dir/gmall-user-service</module> <module>gmall-user-service-dir/gmall-user-web</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.22.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <packaging>pom</packaging> <!-- 定义依赖版本 --> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <fastjson.version>1.2.46</fastjson.version> <dubbo-starter.version>1.0.10</dubbo-starter.version> <dubbo.version>2.6.0</dubbo.version> <zkclient.version>0.10</zkclient.version> <mybatis.version>1.3.1</mybatis.version> <nekohtml.version>1.9.20</nekohtml.version> <xml-apis.version>1.4.01</xml-apis.version> <batik-ext.version>1.9.1</batik-ext.version> <jsoup.version>1.11.2</jsoup.version> <httpclient.version>4.5.5</httpclient.version> <commons-lang3.version>3.7</commons-lang3.version> <mapper-starter.version>1.2.3</mapper-starter.version> <jedis.version>2.9.0</jedis.version> <jest.version>5.3.2</jest.version> <jna.version>4.5.1</jna.version> <beanUtils.version>1.9.3</beanUtils.version> </properties> <!--依赖维护--> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>${dubbo.version}</version> </dependency> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>${zkclient.version}</version> </dependency> <dependency> <groupId>com.gitee.reger</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>${dubbo-starter.version}</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>${nekohtml.version}</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>${xml-apis.version}</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-ext</artifactId> <version>${batik-ext.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>${jsoup.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>${httpclient.version}</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>${commons-lang3.version}</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>${mapper-starter.version}</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>${jedis.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/io.searchbox/jest --> <dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifactId> <version>${jest.version}</version> </dependency> <!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna --> <dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>${jna.version}</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>${beanUtils.version}</version> </dependency> </dependencies> </dependencyManagement></project>gmall-api存放实体类,和定义service接口 ...

June 27, 2020 · 6 min · jiezi