带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)
这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用口头语言就是不好描述,这很正常!
其实,用一两次就知道了,然后你再慢慢看那些大神的原理和文字描述。
1.简要说说分布式
在这里,我就大白话大概说一说分布式是个什么鬼,也不知道对不对,详细的可以多在博客园查查相关的内容。
分布式,看名字就知道应该是要把什么东西分开布置,对于我们新手来说,那就是把所谓的web应用分开,那为什么要分开呢?写在一起部署在一台服务器多好啊,容易开发,又好维护。。。
这其实也是早期的一种方式,所有的都布置在一台服务器上。但是时代在进步,现在人手一个手机甚至多个手机,还有电脑,平板什么的,都去访问一个网站,这么高的访问量、高并发量很容易一下子就把一台服务器卡爆了,然后很多数据就会丢失,用户体验很差,最后造成用户流失,各种问题。就像淘宝,百度等这种,你很难想象如果是一台服务器,那这台服务器那要多牛才能满足几千万甚至上亿的访问量。
现在摆在明面上的修改方案有两个:
1.我很有钱,我去买一个非常牛的服务器或者话很多钱把原来的服务器升级,性能是原来的菜鸡服务器的两三倍甚至更高(这种方式也叫做纵向扩展)。
2.只有一点钱,再买一个菜鸡服务器2号,想办法把原来的那个web应用的一部分布置到这个菜鸡服务器2号上,然后再想个办法使得一些请求到原来的服务器上之后,实际上就会调用菜鸡服务器2号上的一些功能。(这也叫做横向扩展)
两种方式虽然各有优缺点:第一种方案最大的缺点是要花很多很多钱,有的时候,将性能提升一倍,花的钱都够再买几台这样的服务器了!最重要的是,这种方案是有天花板的、有瓶颈的,你还真能一直升级服务器性能么;优点就不多说,就用起来很方便,方便维护管理,开发也比较容易。
方案二的缺点是开发的难度就提升了很多,而且类似淘宝这种超大型项目,可不是一两台服务器,可能是十几台甚至几十台服务器的相互配合,维护起来也是各种困难,而且还有可能服务器之间还要相互依赖,就更为复杂了。优点却是更明显,就是性能提升无上限,你只要有这个技术水平,可以买几百台菜鸡服务器组合成分布式系统,那个性能可比最顶级的服务器高了不知道多少。
所以我们现在的问题就是怎么样使得两台服务器可以相互调用,举个例子:我在一个服务器写个controller,另外一个服务器写个service,现在就用这个controller调用service中的方法;只要这个可以成功调用,那最基本的分布式原理就懂了一点点了。
这里先理清楚一个逻辑:controller是使用别人方法的一方,而service是提供方法的一方;于是我们就称controller为服务的消费者,service成为服务的提供者。
ok,分布式系统的大概原理到这里结束,更专业的解释去看看那些大牛的博客吧!
2.什么是Zookeeper+Dubbo组合
先说Zookeeper,上文说过服务提供者和服务消费者的概念,但是你要知道服务提供者可不止那一个,而是很多很多的,假如有几百个,一部分在这台服务器,一部分在另外一台服务器里,还有一些在其他服务器里,这个时候问题来了,服务消费者要消费服务,怎么判断在哪个服务器里,你总不可能自己手动的一个一个去找吧?那就太坑爹了。
于是就有了一个Zookeeper的存在,这个单词的百度翻译是"动物园管理员",还真的有点形象,其实就是管理所有服务的管理员,只要服务提供者将自己的服务注册到Zookeeper里,服务消费者订阅了自己需要的服务;Zookeeper就能把详细的服务列表推送给服务消费者, 而且一旦服务提供者发生变化,那么Zookeeper就会自动更新自己的服务列表,并且将最新的服务列表推送给服务消费者。
有点类似于那个啥婚介所,假如一个帅哥要找女朋友,帅哥就是服务消费者,要找的女朋友就是服务提供者,而婚介所不就是Zookeeper嘛,婚介所时刻更新妹纸的最新消息,一旦有什么最新情况,肯定就会把最新情况告诉帅哥啊!哈哈哈,稍提一下
那么Dubbo又是什么呢?刚刚说到Zookeeper把最新服务列表给了服务消费者,但是服务消费者也是只看眼巴巴的看着这么多的服务,却用不了(就像去酒店点菜,看着那个菜单你能把菜单给吃了吗?),需要Dubbo里面的功能才能实现远程调用,也就是用RPC远程过程调用协议才能够调用远处的服务器里的服务。
在这里稍提一下,Dubbo是一个开源分布式框架,它的功能可以简单的看作将服务提供者注册进Zookeeper中,指定Zookeeper所在的ip地址,让服务订阅者订阅Zookeeper中的服务,还能够让服务消费者远程调用服务,以及监控等等。。。用中学语文来描述,应该叫做贯穿全文,哈哈!
下面这个图可以大概看一看流程:

3.下载并启动Zookeeper
Zookeeper的详细知识就不在这里介绍了,博客园里搜一下有很多,可以自己慢慢学习,这里只是用一下。
Zookeeper安装方式有三种:单机模式(就一个Zookeeper),伪集群模式(一台电脑下载多个Zookeeper),集群模式(多台电脑每台都下载Zookeeper)
我们就用单机模式直观一点:
下载地址:http://mirror.bit.edu.cn/apache/zookeeper/,我下载的是3.4.13版本,速度很快,很快就下好了,解压,于是可以看到下面这样的文件夹

在这里,我们需要配置一些东西,首先明确一点,这个Zookeeper是用java写的,所以需要jdk环境,最好是jdk8,jdk7也行,再低就可能出现版本问题了。
而且我们需要对zookeeper进行一些小的修改;添加创建两个文件夹data、logs,用来存放数据和日志,并且在配置文件里配置一下这两个文件夹路径(这里有个坑,这个配置文件的名字要修改,不改居然会报错),接下来演示一下:


打开改名后的配置文件

基本的配置结束,现在我们要启动它,我们怎么简单怎么来,不配置环境变量(想配置的可惜自己配置环境变量),然后进入bin文件夹


看到下面这内容监听2181端口,在等待客户端连接,就成功了(注意:这个窗口不要关了)

我们可以用客户端连接试试,再在bin目录下打开命令窗口执行下面所示命令。(其实可以直接在bin目录里双击ZkCli.cmd更简单)

可以看到下图所示,随便输入个字母h,能看到Zookeeper的很多命令,连接成功。具体的命令的使用可以自己去学习,这里就不多说了。

4.搭建基本环境
弄清楚Zookeeper和Dubbo之间的关系之后,就来简单用一下,咳,由于没有两台电脑,也木有装虚拟机(本来搞了一个virtualbox虚拟机的,貌似是我电脑配置太低了,虚拟机网速太慢了,卸载了。。。)
我就简单的用idea开两个应用吧!这里有两种方式:
第一种:类似Eclipse那种多项目查看的方式,你只需要在idea中设置File------->Setting-------->Appearance & behavior------->System Settings ,但是这种很不好用,就是每查看一个项目都要切换一下整个页面,不怎么直观。

第二种:用多模块的方式(idea推荐用多模块的方式),我用的就是多模块的方式。
注意:会用多模块的小伙伴可以直接跳一下,其实就是新建一个空项目,在空项目里新建两个只导入web模块的springboot应用(一个叫做provider,一个叫做consumer,都是1.5.xx版本)。
首先新建空项目,点击next取个名字,就会提示你要新建模块


然后就是新建一个springboot应用,后面的就和原来的一样(记住只需要web模块+1.5.xx版本),啪啪啪,我就当你新建成功了一个provider模块

继续新建第二个模块consumer

一顿简单操作,最后的目录结构就是I这样

下一节就简单使用一下分布式系统的调用。。。
带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)的更多相关文章
- 带着新人学springboot的应用01(springboot+mybatis+缓存 上)
上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...
- 带着新人学springboot的应用04(springboot+mybatis+redis 完)
对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...
- 带着新人学springboot的应用05(springboot+RabbitMQ 上)
这次就来说说RabbitMQ,这个应该不陌生了,随便一查就知道这个是用来做消息队列的.(注意:这一节很多都是概念的东西,需要操作的比较少) 至于AMQP协议(Advanced Message Queu ...
- 带着新人学springboot的应用13(springboot+热部署)
spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...
- 带着新人学springboot的应用10(springboot+定时任务+发邮件)
接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...
- 带着新人学springboot的应用09(springboot+异步任务)
本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...
- 带着新人学springboot的应用08(springboot+jpa的整合)
这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...
- 带着新人学springboot的应用06(springboot+RabbitMQ 中)
上一节说了这么多废话,看也看烦了,现在我们就来用鼠标点点点,来简单玩一下这个RabbitMQ. 注意:这一节还是不用敲什么代码,因为上一节我们设置了那个可视化工具,我们先用用可视化工具熟悉一下流程. ...
随机推荐
- linux centos 用户权限相关总结
linux上用户管理 以及 相应权限 查看 增加 删除用户 修改密码 用户 用户组 用户默认目录 用户shell路径 等 用户管理 相关文件 1. 查看系统有哪些用户 cat /etc/passwd ...
- BZOJ.5467.[PKUWC2018]Slay the Spire(DP)
LOJ BZOJ 洛谷 哪张能力牌能乘攻击啊,太nb了叭 显然如果有能力牌,那么应该选最大的尽可能的打出\(k-1\)张. 然后下面说的期望都是乘总方案数后的,即所有情况的和.然后\(w_i\)统一用 ...
- webstorm2018.2.3激活
一,简介 WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.目前已经被广大中国JS开发者誉为"Web前端开发神器"."最强大的HTML5编 ...
- 使用ftp读取文件夹中的多个文件,并删除
public class FTPUtils { private static final Logger LOG = LoggerFactory.getLogger(FTPUtils.class); / ...
- 马昕璐 201771010118《面向对象程序设计(java)》第十五周学习总结
第一部分:理论知识学习部分 JAR文件:将.class文件压缩打包为.jar文件后,使用ZIP压缩格式,GUI界面程序就可以直接双击图标运行. 既可以包含类文件,也可以包含诸如图像和声音这些其它类型的 ...
- 如何理解opencv, python-opencv 和 libopencv?
转: OpenCV is a computer vision library written using highly optimized C/C++ code. It makes use of ...
- 如何使用微信小程序云函数发送短信验证码
其实微信小程序前端和云端都是可以调用短信平台接口发送短信的,使用云端云函数的好处是无需配置域名,也没有个数限制. 本文使用的是榛子云短信平台(http://smsow.zhenzikj.com) ,S ...
- linux端安装Anaconda,方便远端访问jupyter
ipython notebook是一个基于浏览器的python数据分析工具,使用起来非常方便,具有极强的交互方式和富文本的展示效果.jupyter是它的升级版,它的安装也非常方便,一般Anaconda ...
- 多个router和多个network
一般搭建成功了opentack后,都会按照文档的这样创建网络 Scenario 1: one tenant, two networks, one router Scenario 2: two tena ...
- MSSQL事务隔离级别详解(SET TRANSACTION ISOLATION LEVEL)
控制到 Transact-SQL 的连接发出的 SQL Server 语句的锁定行为和行版本控制行为. TRANSACT-SQL 语法约定 语法 -- Syntax for SQL Server ...