1什么是分布式系统?

  在《分布式系统原理与范型》一书中有如下定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”;

  分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据

分布式系统(distributed system)是建立在网络之上的软件系统。

  首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。

Dubbo文档
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,急需一个治理系统确保架构有条不紊的演进。
在Dubbo的官网文档有这样一张图


单一应用架构
  当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。


适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。
缺点:
  1、性能扩展比较难
  2、协同开发问题
  3、不利于升级维护


垂直应用架构
  当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。


  通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有针对性。
缺点:公用模块无法重复利用,开发性的浪费


分布式服务架构
  当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。


流动计算架构
  当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)[ Service Oriented Architecture]是关键。


2什么是RPC?

http: 通信协议
rpc:通信协议

  RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。

  也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。为什么要用RPC呢?就是无法在一个进程内,甚至一个计算机内通过本地调用的方式完成的需求,比如不同的系统间的通讯,甚至不同的组织间的通讯,由于计算能力需要横向扩展,需要在多台机器组成的集群上部署应用。RPC就是要像调用本地的函数一样去调远程函数;


RPC基本原理


步骤解析:


RPC两个核心模块:通讯,序列化。


3如何给老婆解释什么是RPC

  1. 一个阳光明媚的早晨,老婆又在翻看我订阅的技术杂志。
  2. “老公,什么是RPC呀,为什么你们程序员那么多黑话!”,老婆还是一如既往的好奇。
  3. “RPC,就是Remote Procedure Call的简称呀,翻译成中文就是远程过程调用嘛”,我一边看着书,一边漫不经心的回答着。
  4. “啥?你在说啥?谁不知道翻译成中文是什么意思?你个废柴,快给我滚去洗碗!”
  5. “我去。。。”,我如梦初醒,我对面坐着的可不是一个程序员,为了不去洗碗,我瞬间调动起全部脑细胞,星辰大海在我脑中汇聚,灵感涌现…
  6. "是这样,远程过程调用,自然是相对于本地过程调用来说的嘛。
  7. “嗯哼,那先给老娘讲讲,本地过程调用是啥子?”
  8. “本地过程调用,就好比你现在在家里,你要想洗碗,那你直接把碗放进洗碗机,打开洗碗机开关就可以洗了。这就叫本地过程调用。”
  9. “哎呦,我可不干,那啥是远程过程调用?”
  10. “远程嘛,那就是你现在不在家,跟姐妹们浪去了,突然发现碗还没洗,打了个电话过来,叫我去洗碗,这就是远程过程调用啦”,多么通俗易懂的解释,我真是天才!
  11. “哦!我明白了”,说着,老婆开始收拾包包。
  12. “你这是干啥去哦”
  13. “我?我要出门浪去呀,待会记得接收我的远程调用哦,哦不,咱们要专业点,应该说,待会记得接收我的RPC哦!

4什么是Dubbo

  是一个Jar包

  Apache Dubbo 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

dubbo官网 http://dubbo.apache.org/zh-cn/index.html

  1.了解Dubbo的特性
  2.查看官方文档
dubbo基本概念

  专业的事,交给专业的人来做~不靠谱!

  服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。

  服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

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

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

调用关系说明

  1. 服务容器负责启动加载运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

5什么是zookeeper

产生背景
  当今是个分布式、集群、云计算等名词满天飞的时代。造成这种局面的一个重要因素就是,单一机器的处理能力已经不能满足我们的需求,不得不采用由多台机器组成的服务集群。服务集群对外提供服务的过程中,可以分解处理压力,在一定程度上打破性能瓶颈,并提高服务的可用性(不会因为一台机器宕机而造成服务不可用)。

  上图中有三台机器,每台机器跑同样的一个应用程序。然后我们将这三台机器通过网络将其连接起来,构成一个系统来为用户提供服务,对用户来说这个系统的架构是透明的,他感觉不到这个系统是一个什么样的架构。那么我们就可以把这种系统称作一个分布式系统。

那么,问题来了
  1.程序的运行往往依赖很多配置文件,比如数据库地址、黑名单控制、服务地址列表等,而且有些配置信息需要频繁地进行动态变更,这时候怎么保证所有机器共享的配置信息保持一致?

  2.如果有一台机器挂掉了,其他机器如何感知到这一变化并接管任务?如果用户激增,需要增加机器来缓解压力,如何做到不重启集群而完成机器的添加?

  3.用户数量增加或者减少,会出现有的机器资源使用率繁忙,有的却空闲,如何让每台机器感知到其他机器的负载状态从而实现负载均衡?

  4.在一台机器上要多个进程或者多个线程操作同一资源比较简单,因为可以有大量的状态信息或者日志信息提供保证,比如两个A和B进程同时写一个文件,加锁就可以实现。但是分布式系统怎么办?需要一个三方的分配锁的机制,几百台worker都对同一个网络中的文件写操作,怎么协同?还有怎么保证高效的运行?


  除了上面列举的几种,还有很多细思极恐的问题,分布式系统到底有多然人抓狂,可以想想你第一次接触多线程的感觉;
计划中的多线程

现实中的多线程

分布式系统可以看作多线程的N级加强版……


ZooKeeper的前世今生
  分布式系统的很多难题,都是由于缺少协调机制造成的。
  目前,在分布式协调技术方面做得比较好的就是Google的Chubby还有Apache的ZooKeeper。有人会问既然有了Chubby为什么还要弄一个ZooKeeper,难道Chubby做得不够好吗?主要是Chubby是非开源的,Google自家用。后来雅虎模仿Chubby开发出了ZooKeeper,也实现了类似的分布式锁的功能,并且将ZooKeeper作为一种开源的程序捐献给了Apache,那么这样就可以使用ZooKeeper所提供锁服务。而且在分布式领域久经考验,它的可靠性,可用性都是经过理论和实践的验证的。

  至于这个神器为什么叫ZooKeeper,与外国人一贯的幽默精神有关。
  众所周知,外国人喜欢给用一个动物作为吉祥物,在IT界也不例外。比如,负责大数据工作的Hadoop是一个黄色的大象;负责数据仓库的Hive是一个虚拟蜂巢;负责数据分析的Apache Pig是一头聪明的猪;负责管理web容器的tomcat是一只雄猫……那好,负责分布式协调工作的角色就叫ZooKeeper(动物园饲养员)吧。


ZooKeeper能干什么
官方说辞是:
  ZooKeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper的目标就是封装好复杂 易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper在一致性、可用性、容错性的保证,也是ZooKeeper的成功之处,它获得的一切成功都与它采用的协议——Zab协议是密不可分的。

  为了实现前面提到的各种服务,比如分布式锁、配置维护、组服务等,ZooKeeper设计了一种新的数据结构——Znode,然后在该数据结构的基础上定义了一些原语,也就是一些关于该数据结构的一些操作。有了这些数据结构和原语还不够,因为ZooKeeper工作在分布式环境下,服务是通过消息以网络的形式发送给分布式应用程序,所以还需要一个通知机制——Watcher机制。总结一下,ZooKeeper所提供的服务主要是通过:数据结构 + 原语 + watcher机制,三个部分来实现的。

6安装dubbo-admin

  是一个监控管理后台~查看我们注册了哪些服务,哪些服务被消费了

  dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。

  但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序dubbo-admin,不过这个监控即使不装也不影响使用。
这里来安装一下:

下载dubbo-admin

地址 :https://github.com/apache/dubbo-admin/tree/master




解压进入目录
修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址


在项目目录下打包dubbo-admin
清除并打包

mvn clean package -Dmaven.test.skip=true


打包完成

启动jar 包

记得启动zookeeper

访问

http://localhost:7001/

用户名和密码都是root


【狂神说Java】Double/Zookeeper初识相关推荐

  1. 【狂神说Java】视频笔记

    视频:狂神说Java 预科 (P7-12) 什么是计算机 Computer:全称电子计算机,俗称电脑. 能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备. 由硬件和软件所组成. 常见的形式 ...

  2. 【狂神说Java】ElasticSearch7.6.x

    [狂神说Java]ElasticSearch7.6.x学习笔记 在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发 是apache软件基金会 jakart ...

  3. Java入门学习笔记[狂神说Java]

    写在前面: 本文根据B站狂神说Java 与菜鸟教程 整理而来,仅供个人学习使用,如有侵权,请联系删除. 文章目录 IDEA使用 Java基础01:注释 Java基础02:数据类型 Java基础03:类 ...

  4. 狂神说Java学习笔记 Java基础

    目录 机器语言 第二代语言(汇编语言) 第三代语言 高级语言 Java特性和优势 JDK(Java Development Kit) JRE(Java Runtime Enviroment) JVM( ...

  5. Java开发必读--初识微服务一定要阅读这篇文章

    原文转自一线互联网资深架构师,微服务布道师小马哥的原创文章,始发与小马哥公众号. 微服务是什么? 微服务是一种细粒度(Fine-Grain)的SOA 或许在座的高朋了解过其概念.个人认为,与其说微服务 ...

  6. 【狂神说Java】Docker最新超详细版教程通俗易懂 - 学习笔记

    传送门:官方参考文档 | Docker Hub镜像仓库 | [狂神说Java]Docker视频教程 Docker概述 Docker 是一个便携的应用容器,基于 Go 语言开发的.它可以让开发者打包应用 ...

  7. SpringBoot所有知识点详解,根据狂神说java老师的整理

    1.SpringBoot:Hello,World! SpringBoot简介 1.1.回顾什么是Spring Spring是一个开源框架,2003 年兴起的一个轻量级的Java 开发框架,作者:Rod ...

  8. 基于《狂神说Java》ElasticSearch--学习笔记

    前言: 本笔记仅做学习与复习使用,不存在刻意抄袭. 给各位学友强烈推荐<遇见狂神说>他的整套Java学习路线使我获益匪浅!!! 点击跳转至遇见狂神说哔哩哔哩首页 点击跳转至原笔记地址 如果 ...

  9. Docker02 狂神Docker视频学习笔记 :【狂神说Java 哔哩哔哩】Docker最新超详细版教程通俗易懂

    目录 0. 视频源 0. 学习网址 基础篇 1. Docker概述 1.1 Docker为什么出现? 1.2 Docker历史 1.3 Docker能干什么 2. Docker安装 2.1 Docke ...

最新文章

  1. CVPR 2020 | 元学习人脸识别框架详解
  2. Docker简介以及mysql和redis的部署
  3. linux rpm 包制作详解
  4. Qt 互斥锁 QMutex 的简单应用
  5. lwip+freeRTOS 实现热插拔功能
  6. 项目总结2:ionic3开发跨平台App如何设置和替换应用图标及启动图
  7. 谷粒商城集群篇爬坑笔记--Gitee拉取项目报错、项目target文件不存在(部分项目不全)、SonarQube报错
  8. 第1章 MatConvNet简介
  9. 超牛无损图片放大神器PhotoZoom
  10. 基于云开发的成语答题小程序
  11. 素材.html,素材标签.html
  12. 蚂蚁金服AntV开源地理可视化引擎 L7 2.0——聊聊AntV背后那些事
  13. 说说我是如何拿下腾讯offer的
  14. 罗振宇跨年演讲精华版:2017年小心这五只黑天鹅
  15. 真正厉害的人,都是“反内耗”体质
  16. 【年度总结】继往开来:回首不靠谱的2021,希冀靠谱的2022
  17. 如何在线批量将caj转换成PDF
  18. Leetcode 594. 最长和谐子序列
  19. 6款漂亮HTML CSS样式用户留言表单
  20. windows计划任务后台运行,windows定时任务去掉黑窗口xp,win7, win10,server2008,server2012,server2016都行

热门文章

  1. (转)火溶CEO王伟峰:Unity3D手机网游开发
  2. 前端不止:Web内容的无障碍性
  3. 02 地铁自助售票机
  4. 当前安全设置不允许下载该文件 完美解决方案
  5. 单片机简谱音乐2(孤勇者)-连音与0调的音处理,一个音仅占一个字节(8bit)大小
  6. 如何在 Python 中删除文件或文件夹?
  7. 阿里云服务器怎么搭建IPv6?
  8. 16款蔬果 吃吃就降糖
  9. 谷粒学苑 —— 7、课程管理:课程发布页面2 —— 课程大纲
  10. 显卡显存测试u盘 mats_与RX5700持平?RX 5600 XT Phantom Gaming 开箱/测试