精华内容
下载资源
问答
  • 在工业物联网中,现场设备的计算能力有限,基于边缘计算的任务卸载可以有效缓解现场设备的计算压力,提供低时延计算服务。此外,由于网络中不同区域的边缘服务器负载不同,需要合理安排任务卸载以及分配边缘服务器...
  • 文章目录系统测试概述功能测试性能测试负载测试压力测试性能测试、压力测试、负载测试的关系兼容性测试安全测试健壮性测试配置测试可用性测试文档测试 系统测试概述 系统测试的定义 将已经集成好的软件系统,作为...

    系统测试概述

    • 系统测试的定义
      • 将已经集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其它系统元素结合在一起,在实际运行(使用)环境下, - 对计算机系统进行一系列测试活动。
    • 根本任务
      • 证明被测系统的功能和结构的稳定性;还要有一些非功能测试:性能测试、压力测试、可靠性测试等等。
    • 目的
      • 确保软件产品能够被用户或操作者接受。
    • 系统测试属于黑盒测试范畴,不再对软件的源代码进行分析和测试。
    • 系统测试的组织
      • 系统测试主要是由质量部门的测试工程师来主导工作。
        • 测试组组长:组织测试;
        • 测试分析员:负责设计和实现测试脚本和测试用例;
        • 测试者:负责执行测试脚本中记录的测试用例。
      • 系统测试员和用户
        • 相似的地方
          • 都是使用软件,一般不接触软件的代码
          • 都是假设软件应该正确实现说明书的功能
        • 不同的地方
          • 使用软件的目的
          • 对待错误
    • 系统测试的内容
      • 功能特性的测试:功能测试、用户界面测试、安装/卸载测试、可使用性测试。
      • 非功能特性的测试:性能测试、负载测试、压力测试、疲劳测试、安全测试、恢复测试、兼容性测试、可靠性测试、强度测试、容量测试、配置测试。

    功能测试

    功能测试(Functional Test)是在规定的一段时间内运行软件系统的所有功能,以验证这个软件系统有无严重错误。

    • 目标
      • 检验产品功能是否正确实现
    • 内容
      • 正常功能、异常功能、边界测试、界面测试、接口测试、安全测试、错误处理测试等。
    • 依据
      • 需求规格说明书
    • 方法
      • 黑盒测试
        在这里插入图片描述

    性能测试

    性能测试(Performance Testing)通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

    • 目标
      • 对产品的性能进行测试,检验是否达标、是否能够保持。
    • 工具
      • 在需要大访问量时候尤其需要使用工具。
      • 并发性能测试工具 (load—负载)
        • LoadRunner、 QALoad、 SilkPerformer、 WebLoad
    • 用户视角的软件性能
      • 从用户角度来说,软件性能就是软件对用户操作的响应时间。
    • 系统管理员视角的软件性能
      • 系统的响应时间;
      • 系统运行时服务器的状态,如CPU利用情况、内存使用情况等;
      • 系统是否能够实现扩展;
      • 系统支持多少用户访问;
      • 系统性能可能的瓶颈在哪里;
      • 系统是否支持7*24小时的业务访问。
    • 软件性能指标
      • 并发用户
        • 一给定时间内,某个时刻与服务器同时进行会话操作的用户数。
      • 响应时间
        • 客户端发出请求到得到服务器返回结果的整个过程所经历的时间。
      • 吞吐量
        • 单位时间内系统处理的客户请求的数量
        • 一般来说,吞吐量用请求数/秒或页面数/秒来衡量。
        • 从业务的角度,吞吐量也可以用访问人数/天或处理的业务数/小时等单位来衡量。
        • 从网络的角度来说,也可以用字节数/天等单位来考察网络流量。
      • 资源利用率
        • 指系统资源的使用程度,比如服务器的CPU利用率、内存利用率、磁盘利用率、网络带宽利用率等。
    • 软件性能要素
      • 环境要素
        • 软件、硬件、网络
      • 业务要素
        • 用户数、执行功能、数据量
      • 在使用性能指标描述软件的性能特征时,应该给出明确的软件性能要素,否则,所给出的性能指标无法参考。
    • 性能测试用例的设计:主要是通过改变模拟的业务因素来测试软件的性能。
      • 并发用户数
        • 精算法
          在这里插入图片描述
        • 估算法
          在这里插入图片描述
        • 经验值
          • 对于一些系统,可以通过同类软件系统的用户数据来估算,这种估算可以通过类似系统的日志分析和问卷调查来进行。
      • 吞吐量
      • 基于业务的设计

    负载测试

    • 定义
      • 数据在超负荷环境下运行,测试软件系统是否能够承担。这种超负荷主要指多并发用户。
    • 方法
      • 人为生成大数据量,并利用工具模拟频繁并发访问
    • 工具
      • 一般需要使用自动化工具
    • 考察指标
      • 响应时间、交易容量、资源使用率等

    压力测试

    • 定义
      • 指系统不断施加越来越大的负载(并发,循环操作,多用户,网络流量)的测试。
    • 目标
      • 通过确定一个系统的瓶颈或者不能接收的性能点,来确定系统能提供的最大服务级别的测试。

    性能测试、压力测试、负载测试的关系

    • 性能测试是正常情况下的性能指标;
    • 压力测试是测试系统的瓶颈所在;
    • 负载测试是指系统重负荷性能指标;
    • 性能测试、压力测试、负载测试在广义上讲都是性能测试的内容,建议将三种测试结合起来并行进行。

    兼容性测试

    • 定义
      • 测试软件在一个特定的硬件、软件、操作系统、网络等环境下系统能否正常运行。
    • 目的
      • 检验被测软件对其他应用软件或者其他系统的兼容性。

    安全测试

    • 定义
      • 安全测试检测系统对非法入侵的防范能力。
    • 应用程序级别的安全性测试
    • 数据库安全性测试
    • 系统级别的安全性测试

    健壮性测试

    • 定义
      • 又称为容错测试。主要检查系统容错能力。当系统出错时,能否在指定的时间间隔内修正错误并重启系统。
    • 方法
      • 容错测试首先要通过各种手段让软件系统强制发生故障,然后验证系统能否快速恢复。

    配置测试

    • 定义
      • 配置测试将验证软件与其所依赖硬件环境的依赖程度。
    • 测试中的硬件环境指进行测试所必需的服务器、客户端、网络连接设备,以及打印机、扫描仪等辅助硬件设备所构成的环境。
    • 所有软件都需向用户说明其运行的硬件环境,对于多层结构的软件系统来说,需要分别说明其服务器、客户端以及网络所需的环境。

    可用性测试

    可用性测试是面向用户的系统测试。让一群有代表性的用户尝试对产品进行典型操作,- - 同时观察员和开发人员在一旁观察,聆听,做记录。

    • 系统中是否存在繁琐的功能以及指令;
    • 安装过程是否复杂;
    • 错误信息提示内容是否详细;
    • GUI接口是否标准;
    • 登录是否方便;
    • 需要用户记住内容的多少;
    • 帮助文本是否详细;

    文档测试

    • 定义
      • 文档测试是对系统提交给文档进行验证,它要求检查系统的文档是否齐全。
    • 文档的种类
      • 包括联机帮助文档或用户手册,指南和向导,
      • 安装、设置指南,示例及模板,错误提示信息,
      • 用于演示的图像和声音,
      • 授权/注册登记表及用户许可协议,
      • 软件的包装、广告宣传材料等。
    展开全文
  • SSL卸载

    千次阅读 2019-10-24 09:27:12
    一、SSL卸载需求背景及其带来的问题 目前全球已有超过一半的 Web 流量 采用 HTTPS 进行传输,并且正在逐步增长。来自外部的客户端利用 SSL 协议访问数据中心 Web 服务器,提升了 Web 应用的认证安全和数据安全。...

    一、SSL卸载需求背景及其带来的问题

    目前全球已有超过一半的 Web 流量 采用 HTTPS 进行传输,并且正在逐步增长。来自外部的客户端利用 SSL 协议访问数据中心 Web 服务器,提升了 Web 应用的认证安全和数据安全。同时, 日益增长的 SSL 通信量也对系统设计者们提出了更高的要求和前所未有的挑战,尤其是大型网站和数据中心 的场景中,往往需要同时处理数以万计的安全交易,SSL 的加解密过程需要消耗大量的服务器性能,同时各种网络设备对这些加密内容也会变得难以处理。

    为了缓解服务器的性能压力,一度较为流行的方法是安装 SSL 加速卡。但是加速卡对 SSL 数据的处理还是 建立在服务器主机之上,不是完全卸除系统负荷。另一方面,SSL 加速卡一般都存在系统兼容性不佳、性 能受制于总线技术瓶颈、对主机的依赖性大等问题,越来越无法满足大型应用的需求。 同时,基于在服务器上安装 SSL 加速卡的方式,造成其他网络设备无法复用解密后的明文流量,需要重复 对 HTTPS 流量进行加解密,造成资源的严重浪费和用户体验的下降。

    二、SSL卸载解决方案

    SSL 卸载通过将应用访问过程中的 SSL 加解密环节转移到相应提供加解密能力的设备上来实现,在满足高并发访问需求的同时,能够降低服务器的性能压力,提升网站的访问速度,一定情况下,能够帮助用户减少服务器的硬件资源,节省运营成本。 配备 SSL 卸载功能的设备充当 SSL 代理服务器的角色,与客户端建立 SSL 连接,与客户端进行加密通信, 与服务器端进行明文通信,全面卸载 SSL 数据处理的负荷,不影响服务器的硬件资源。SSL 卸载工作原理如下所示:

    三、SSL卸载示例场景

    在某些场景下,如果服务器端开放的普通 HTTP 服务,但是由于一些政策要求,需要客户端采用 HTTPS 访问,此时需要在服务器前端采用某些产品进行 SSL 卸载。山石网科下一代防 火墙支持 SSL 卸载功能(PS:根据测试效果来看,只能识别 443 端口的 HTTPS 做卸载,修改端口后无效)。

    1. 在系统-PKI 中,导入 PKI 密钥(一般由 CA 提供)

    2. 创建 PKI 信任域,导入 CA 证书和服务器证书(两个证书一般由 CA 提供,服务器证书 导入到本地证书即可,防火墙替代服务器做证书验证)。

    注:如果只提供了 CA 证书,没有服务器证书。可以先导入 CA 证书到防火墙,然后填写相关的 CN、OU 等信息,点击申请证书,会得到一个证书申请的字符串。将该字符串发给 CA, 可以制作服务器证书。

    3. 在策略-SSL 代理中,配置 SSL 代理模板

    PS:服务端口指后端服务器实际开放的端口

    4. 安全策略中启用 SSL 代理功能:

    测试效果查看:

    (1)不启用 SSL 卸载时(策略 disable),无法访问测试网站

    (2)启用 SSL 卸载时(策略 enable),可以访问测试网站

    四、SSL卸载常见问题

    4.1 Location字段导致的HTTPS跳转到HTTP

    原因:网站应用程序原因,Location字段为HTTP协议的URL,导致浏览器重定向到HTTP

    决方法:对响应头部的Location字段进行修改

    展开全文
  • 从前慢-各种工具的安装与卸载

    千次阅读 2021-01-22 20:00:03
    vue-cli的卸载与安装 vue-cli的卸载与安装 安装 1.x或2.x npm install vue-cli -g 3.x以上 npm install -g @vue/cli 卸载 前提条件 自己电脑已经安装node.js和npm 卸载vue-cli(1.x或2.x) npm uninstall vue-cli ...

    各种工具的安装与卸载

    在这里插入图片描述

    前端

    1 less

    npm install -g less
    

    2 node

    配置环境变量
    NODE_HOME= nodejs安装目录
    PATH=xxxx;%NODE_HOME%
    
    node_modules文件夹的问题
    文件夹以及文件过多过碎,当我们将项目整体拷贝给别人的时候,,传输速度会很慢很慢. 
    复杂的模块依赖关系需要被记录,确保模块的版本和当前保持一致,否则会导致当前项目运行报错。所以package.json就诞生了
    package.json文件的作用
    项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。
    使用npm init -y(这个选项就是yes的意思,没有这个选项,就要手动设置)命令生成。
    当我们下载别人的文件时,一般没有 node_modules这个文件夹,项目就运行不起来,所以,我们需要使用npm install命令,
    这个命令会自动找到package.json中,然后下载相应的依赖到node_modules.
    

    3 npm

    npm (node package manager) : node的第三方模块管理工具
    下载:npm install 模块名称  # 默认在下载的目录下生成node_modules。
    卸载:npm unintall package    # 模块名称
    
    npm install --save 、--save-dev 、-D、-S 的区别
    1、npm install <=> npm i
    
       --save   <=> -S     
    
       --save-dev  <=> -D 
    
    npm run start <=> npm start  // 对应"scripts"里的"start"命令
    
    2、npm i --save-dev  <packname>  
    
    工程构建(开发时、“打包”时)依赖 ;例:xxx-cli , less-loader , babel-loader...
    
    3、npm i --save <packname> 
    
    项目(运行时、发布到生产环境时)依赖;例:antd , element,react...
    
    

    在这里插入图片描述

    5、使用 npm i 安装package.json里的依赖时,两部分的包都会pull下来
    使用 --prod
    npm i --prod <=> npm i --production  // 仅会拉取dependencies中的依赖
    
    
    npm常规配置
    命令
    //设置淘宝源
    npm config set registry https://registry.npm.taobao.org
    //设置公司的源
    npm config set registry http://127.0.0.1:4873
    //查看源,可以看到设置过的所有的源
    npm config get registry
    通过使用cnpm安装
    npm install -g cnpm --registry=https://registry.npm.taobao.org  # 这里的意思就是安装cnpm,并且registry=https://registry.npm.taobao.org
    使用cnpm代替npm(因为npm下载慢)  cnpm install xxx
    
    windows:
    npm config set cache "E:\installation_program\nodeRepository\npm_cache"  # 设置安装模块的缓存
    npm config set prefix "E:\installation_program\nodeRepository\npm_global"  # 设置全局模块的下载位置
    注意:当你设置这个的时候,一定要设置相应的环境变量。比如
    npm install -g @vue/cli   这里生成的vue命令在E:\installation_program\nodeRepository\npm_global目录下,必须配置环境变量才能识别到vue命令,否则找不到该命令
    

    4 cnpm

    有两个办法:
    
    1、安装cnpm
    
    命令:npm install cnpm -g --registry=https://registry.npm.taobao.org
    
    以后就用 cnpm 代替 npm 做操作。从地址看出这是淘宝的国内镜像,比较快。据说每10分钟更新一次仓库,同步性也好
    
    
    2、更改npm的绑定地址
    命令:npm config set registry https://registry.npm.taobao.org
    这样以后还是用npm,但已切换到淘宝镜像
    更改后可通过下面命令来验证是否成功
    
    npm config get registry
    
    当然,想换回来也行,npm的原始仓库地址是 https://registry.npmjs.org/
    
    
    
    2、更改npm的绑定地址
    命令:npm config set registry https://registry.npm.taobao.org
    这样以后还是用npm,但已切换到淘宝镜像
    更改后可通过下面命令来验证是否成功
    
    npm config get registry
    
    当然,想换回来也行,npm的原始仓库地址是 https://registry.npmjs.org/
    
    npm config list # 查看npm的配置信息
    
    

    5 nodemon

    nodemon是一个命令行工具,用以辅助项目开发。
    在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐。
    使用npm install -g  nodemon下载它
    在命令行工具中用nodemon命令替代node命令执行文件
    

    6 nrm

    nrm ( npm registry manager ):npm下载地址切换工具
    npm默认的下载地址在国外,国内下载速度慢
    使用步骤
    使用npm install nrm –g 下载它
    查询可用下载地址列表 nrm ls
    切换npm下载地址 nrm use 下载地址名称
    

    7 Gulp

    npm install gulp
    基于node平台开发的前端构建工具
    将机械化操作编写成任务, 想要执行机械化操作时执行一个命令行命令任务就能自动执行了.
    用机器代替手工,提高开发效率。
    

    8 Express

    Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。我们可以使用 npm install express 命令进行下载。
    提供了方便简洁的路由定义方式
    对获取HTTP请求参数进行了简化处理
    对模板引擎支持程度高,方便渲染动态HTML页面
    提供了中间件机制有效控制HTTP请求
    拥有大量第三方中间件对功能进行扩展
    

    9 express-art-template

    为了使art-template模板引擎能够更好的和Express框架配合,模板引擎官方在原art-template模板引擎的基础上封装了express-art-template。
    
    使用npm install art-template express-art-template命令进行安装。
    

    10 vue-cli的卸载与安装(包括创建项目)

    第一步:安装node环境
    参看前面步骤即可
    第二步:安装脚手架环境
    安装
    1.x或2.x
    npm install vue-cli -g
    3.x以上
    npm install -g @vue/cli 
    # OR
    yarn global add @vue/cli
    
    卸载vue-cli(1.x 或2.x)
    npm uninstall vue-cli -g 或yarn global remove vue-cli 
    卸载cli3
    npm uninstall -g @vue/cli 或 yarn global remove @vue/cli
    
    升级
    如需升级全局的v Vue CLI 包,请运行:
    npm update -g @vue/cli
    # 或者
    yarn global upgrade --latest @vue/cli
    
    
    创建vue-cli2项目
    vue init webpack 项目名称
    
    创建vue-cli3项目
    图形界面的方式创建项目
    vue ui
    通过命令行创建(主流方式)
    vue create 项目名称
    
    
    脚手架2启动方式
    cd 项目
    npm run dev
    脚手架3启动方式
    cd 项目
    npm run serve
    
    安装serve:npm install -g serve # 因为你最后直接给的是打包文件,交工之前直接测试一下,运行打包文件,查看项目是否完整
    脚手架2打包
    npm run build # 生成的是build文件
    脚手架3打包
    npm run build # 生成的是dist文件
    
    
    
    npm install -g serve
    脚手架2本机测试
    serve build # 因为你最后直接给的是打包文件,交工之前直接测试一下,运行打包文件,查看项目是否完整
    脚手架3本机测试
    serve dist
    

    11 Element-UI 的基本使用

    脚手架2
    1. 基于命令行方式手动安装
    - 安装依赖包 npm i element-ui –S
    - 导入 Element-UI 相关资源
     // 导入组件库
     import ElementUI from 'element-ui';
     // 导入组件相关样式
     import 'element-ui/lib/theme-chalk/index.css';
     // 配置 Vue 插件
     Vue.use(ElementUI);
    2. 基于图形化界面自动安装
    - 运行 vue ui 命令,打开图形化界面
    - 通过 Vue 项目管理器,进入具体的项目配置面板
    - 点击 插件 -> 添加插件,进入插件查询面板
    - 搜索 vue-cli-plugin-element 并安装
    - 配置插件,实现按需导入,从而减少打包后项目的体积
    
    脚手架3
    1 安装
    npm i element-ui -S
    2 引入
    import ElementPlus from 'element-plus';
    import 'element-plus/lib/theme-chalk/index.css';
    
    createApp(App).use(ElementPlus).mount('#app')
    

    12 在脚手架中使用axios

    vue 2
    # 1.安装axios
    npm install --save axios vue-axios
    
    # 2.配置main.js中引入axios
    import axios from 'axios'
    import VueAxios from 'vue-axios'
    
    
    # 3.使用axios
    Vue.use(VueAxios, axios)
    
    
    # 使用axios
    Vue.axios.get(api).then((response) => {
      console.log(response.data)
    })
    
    this.axios.get(api).then((response) => {
      console.log(response.data)
    })
    
    this.$http.get(api).then((response) => {
      console.log(response.data)
    })
    
    
    vue 3
    import axios from 'axios'
    import VueAxios from 'vue-axios'
    createApp(App).use(VueAxios, axios).mount('#app')
    
    使用
    this.axios.get(api).then((response) => {
      console.log(response.data)
    })
    
    this.$http.get(api).then((response) => {
      console.log(response.data)
    })
    

    13 Vuex

    Vue 2
    1. 安装 vuex 依赖包
     npm install vuex --save
    2. 导入 vuex 包
    import Vuex from 'vuex'
    Vue.use(Vuex)
    3. 创建 store 对象
    const store = new Vuex.Store({
      state: {
        count: 0
      },
      mutations: {
        increment (state) {
          state.count++
        }
      }
    })
    
    
    现在,你可以通过 store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更:
    store.commit('increment')
    console.log(store.state.count) // -> 1
    
    4. 将 store 对象挂载到 vue 实例中
    new Vue({
     el: '#app',
     render: h => h(app),
     router,
     // 将创建的共享数据对象,挂载到 Vue 实例中
     // 所有的组件,就可以直接从 store 中获取全局的数据了
     store
    })
    
    5 现在我们可以从组件的方法提交一个变更:
    methods: {
      increment() {
        this.$store.commit('increment')
        console.log(this.$store.state.count)
      }
    }
    
    Vue3
    npm install vuex@next --save
    import { createStore } from 'vuex'
    // 创建一个新的 store 实例
    const store = createStore({
      state () {
        return {
          count: 0
        }
      },
      mutations: {
        increment (state) {
          state.count++
        }
      }
    })
    
    createApp(App).use(store).mount('#app')
    现在,你可以通过 store.state 来获取状态对象,并通过 store.commit 方法触发状态变更:
    store.commit('increment')
    
    console.log(store.state.count) // -> 1
    
    在 Vue 组件中, 可以通过 this.$store 访问store实例。现在我们可以从组件的方法提交一个变更:
    methods: {
      increment() {
        this.$store.commit('increment')
        console.log(this.$store.state.count)
      }
    }
    

    14 TypeScript

    1 命令行运行如下命令,全局安装 TypeScript:
    npm install -g typescript
    
    2 安装完成后,在控制台运行如下命令,检查安装是否成功:
    tsc -V 
    
    vscode自动编译
    1) 生成配置文件tsconfig.json
        tsc --init
    2) 修改tsconfig.json配置
        "outDir": "./js",
        "strict": false,    
    3) 启动监视任务: 
        终端 -> 运行任务 -> 监视tsconfig.json
    

    15 vite 创建Vue3

    安装vue-cli到最新版本 (必须高于4.5.0)
    npm init vite-app   <project-name>
    cd  <project-name>
    npm install 
    npm run dev
    

    16 webpack

    全局安装webpack
    npm install webpack -g
    

    后端

    1 docker

    1 卸载原有 docker
    sudo yum remove docker \
                    docker-client \
                    docker-client-latest \
                    docker-common \
                    docker-latest \
                    docker-latest-logrotate \
                    docker-logrotate \
                    docker-engine
                    
    2 安装docker
    安装docker依赖
    sudo yum install -y yum-utils
    设置docker的yum源
    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    3 安装最新版的docker
    sudo yum install docker-ce docker-ce-cli containerd.io
    
    4 启动docker
    sudo systemctl start docker
    关闭docker
    sudo systemctl stop docker
    
    5 docker配置阿里云镜像加速(每个人都不一样,根据自己的来配置)
    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://r46nkja7.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    
    6 验证docker的镜像加速是否生效  docker info
    出现以下信息说明是正确的
    Insecure Registries:
    127.0.0.0/8
    Registry Mirrors:
    https://r46nkja7.mirror.aliyuncs.com/
    Live Restore Enabled: false
    

    1.1 安装mysql

    1 拉去mysql镜像
    sudo docker pull mysql:8.0
    
    2 启动mysql容器
    # --name指定容器名字 -v目录挂载 -p指定端口映射  -e设置mysql参数 -d后台运行
    sudo docker run --name mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql:/etc/mysql/conf.d -v /usr/local/mysql/log:/var/log/mysql  -e MYSQL_ROOT_PASSWORD=root  -p 3306:3306 -d mysql:8.0
    
    3 使用su - root(切换为root,这样就不用每次都sudo来赐予了)
    su - root
    4 进入mysql容器
    docker exec -it 容器名称|容器id bin/bash
    

    1.2 安装rabbitmq

    1 安装
    docker run -it -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management   # 以后端启动rabbitmq
    
    2 访问
    http://192.168.11.134:15672/  # 访问15672端口
    
    3 默认账号密码为guest
    

    1.3 安装redis

    1 在docker hub搜索redis镜像
    docker search redis
    
    2 拉取redis镜像到本地
    docker pull redis:6.0.10
    
    3 修改需要自定义的配置(docker-redis默认没有配置文件,
    自己在宿主机建立后挂载映射)
    创建并修改/usr/local/redis/redis.conf
    bind 0.0.0.0 开启远程权限
    appendonly yes 开启aof持久化
    
    4 启动redis服务运行容器
    docker run --name redis  -v /usr/local/redis/data:/data  -v /usr/local/redis/redis.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 -d redis:6.0.10  redis-server /usr/local/etc/redis/redis.conf 
    
    解释: -v /usr/local/redis/data:/data  # 将数据目录挂在到本地保证数据安全
     -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf   # 将配置文件挂在到本地修改方便
     
    5  直接进去redis客户端。
    docker exec -it redis redis-cli
    
    1.3.1 redis主从复制
    主从复制架构用来解决数据的冗余备份
    
    拉取redis
    docker pull redis
    
    在各自宿主机建立各自的配置文件
    redis-6377.conf 
    port 6377
    bind 0.0.0.0
    appendonly yes
    
    redis-6378.conf
    port 6378
    bind 0.0.0.0 
    appendonly yes 
    replicaof 192.168.11.148 6377 
    
    redis-6379.conf
    port 6379
    bind 0.0.0.0 
    appendonly yes 
    replicaof 192.168.11.148 6377
    
    
    docker run --name redis-6377  -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/redis-6377.conf:/usr/local/etc/redis/redis-6377.conf -p 6377:6377 -d redis  redis-server /usr/local/etc/redis/redis-6377.conf
    docker run --name redis-6378  -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/redis-6378.conf:/usr/local/etc/redis/redis-6378.conf -p 6378:6378 -d redis  redis-server /usr/local/etc/redis/redis-6378.conf
    docker run --name redis-6379  -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/redis-6379.conf:/usr/local/etc/redis/redis-6379.conf -p 6379:6379 -d redis  redis-server /usr/local/etc/redis/redis-6379.conf
    
    测试
    docker exec -it redis-6377 redis-cli -p 6377
    docker exec -it redis-6378 redis-cli -p 6378
    docker exec -it redis-6379 redis-cli -p 6379
    
    1.3.2 redis哨兵机制
    Sentinel(哨兵)是Redis的高可用性解决方案:由一个或
    多个Sentinel实例组成的Sentinel系统可以监视任意多个主服
    务器,以及这些主服务器属下的所有从服务器,并在被监视的
    主服务器进入下线状态时,自动将下线主服务器属下的某个从
    服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转
    移功能的主从架构。
    
    在各自宿主机建立各自的配置文件
    sentinel-26377.conf
    sentinel monitor mymaster 192.168.11.148 6377 2
    
    sentinel-26378.conf 
    sentinel monitor mymaster 192.168.11.148 6377 2
    
    sentinel-26379.conf
    sentinel monitor mymaster 192.168.11.148 6377 2
    
    
    docker run --name sentinel-26377 -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/sentinel-26377.conf:/usr/local/etc/redis/sentinel-26377.conf -p  26377:26377 -d redis  redis-sentinel /usr/local/etc/redis/sentinel-26377.conf
    docker run --name sentinel-26378 -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/sentinel-26378.conf:/usr/local/etc/redis/sentinel-26378.conf -p  26378:26378 -d redis  redis-sentinel /usr/local/etc/redis/sentinel-26378.conf
    docker run --name sentinel-26379  -v /usr/local/redis/data:/data  -v /usr/local/redis/conf/sentinel-26379.conf:/usr/local/etc/redis/sentinel-26379.conf -p  26379:26379 -d redis  redis-sentinel /usr/local/etc/redis/sentinel-26379.conf
    

    2 maven的安装

    前往maven官网下载最新maven安装包,此处我们下载apache-maven-3.6.0-bin.zip
    

    在这里插入图片描述

    解压maven安装包至本地硬盘
    

    在这里插入图片描述

    右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击“环境变量”,来设置环境变量
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    MAVEN_HOME  变量值为解压路径;MAVEN_HOME变量值为解压路径;如我配置为:D:\apache-maven-3.6.0
    

    在这里插入图片描述
    在这里插入图片描述

    在系统变量Path中添加变量值:;%MAVEN_HOME%\bin
    

    在这里插入图片描述
    在这里插入图片描述

    用win键+R,来打开命令行提示符窗口,即Dos界面,输入mvn -version  若出现以下情况说明配置成功
    

    在这里插入图片描述

    下载慢配置本地仓库跟阿里云镜像
    
    在settings.xml配置
    <localRepository>D:\install\Repository</localRepository>
    
    因为国外的服务器下载jar包很慢所以我们改为阿里云服务器,这两个仓库只用选一个(根据大家反馈建议使用第一个,第二个在有的版本可能会出现warning)
    <!-- 阿里云仓库 -->
            <mirror>
                <id>alimaven</id>
                <mirrorOf>central</mirrorOf>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
            </mirror>
         或者
          <mirror>
    		<id>nexus-aliyun</id>
    		<mirrorOf>*</mirrorOf>
            <name>Nexus aliyun</name>
            <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    	 </mirror>
    
    最后配置jdk,也要夹在两个profiles标签之间(我这里使用的为jdk8)
    <!-- java版本 --> 
    <profile>
          <id>jdk-1.8</id>
          <activation>
    	    <activeByDefault>true</activeByDefault>
            <jdk>1.8</jdk>
          </activation>
    
          <properties>
            <maven.compiler.source>1.8</maven.compiler.source>
    		<maven.compiler.target>1.8</maven.compiler.target>
    		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
          </properties>
    </profile>
    
    
    配置完成,在命令行输入mvn help:system测试,看到下载链接里面是ailiyun的链接表示配置成功
    
    IDEA下配置Maven
    

    在这里插入图片描述
    在这里插入图片描述

    3 tomcat的安装

    3.1 window

    下载Tomcat
    

    在这里插入图片描述

    要根据自己的JDK版本选择Tomcat的版本。
    

    在这里插入图片描述

    配置环境变量
    CATALINA_HOME (一定要这个名字,否则会错)
    验证
    catalina version
    

    3.2 linux

    # 0.下载tomcat
    	http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.46/bin/apache-tomcat-8.5.46.tar.gz
    
    # 1.通过工具上传到Linux系统中
    
    # 2.解压缩到/usr目录中
    	[root@localhost ~]# tar -zxvf apache-tomcat-8.5.46.tar.gz -C /usr/
    	-C 用来指定解压缩的位置
    
    # 3.查看解压内容
    	[root@localhost apache-tomcat-8.5.46]# ls -l
        总用量 124
        drwxr-x---. 2 root root  4096 10月 13 12:27 bin
        -rw-r-----. 1 root root 19318 9月  17 02:19 BUILDING.txt
        drwx------. 2 root root   238 9月  17 02:19 conf
        -rw-r-----. 1 root root  5407 9月  17 02:19 CONTRIBUTING.md
        drwxr-x---. 2 root root  4096 10月 13 12:27 lib
        -rw-r-----. 1 root root 57011 9月  17 02:19 LICENSE
        drwxr-x---. 2 root root     6 9月  17 02:17 logs
        -rw-r-----. 1 root root  1726 9月  17 02:19 NOTICE
        -rw-r-----. 1 root root  3255 9月  17 02:19 README.md
        -rw-r-----. 1 root root  7139 9月  17 02:19 RELEASE-NOTES
        -rw-r-----. 1 root root 16262 9月  17 02:19 RUNNING.txt
        drwxr-x---. 2 root root    30 10月 13 12:27 temp
        drwxr-x---. 7 root root    81 9月  17 02:17 webapps
        drwxr-x---. 2 root root     6 9月  17 02:17 work
    
    # 4.启动tomcat
    	[root@localhost apache-tomcat-8.5.46]# ./bin/startup.sh 
    
    # 5.关闭网络防火墙
    	systemctl stop firewalld	   关闭网络防火墙
    	systemctl disable firewalld  关闭开机自启动(永久关闭)
    
    # 6.在windows中访问tomcat
    	http://10.15.0.8:8080/
    
    # 7.显示tomcat实时控制台信息
    	进入tomcat的logs目录中使用tail -f catalina.out 命令实时查看控制台信息 
    
    # 8.关闭tomcat
    	在tomcat的bin目录下面使用 ./shutdown.sh
    

    4 docker

    4.1 卸载原有 docker

    $ sudo yum remove docker \
                      docker-client \
                      docker-client-latest \
                      docker-common \
                      docker-latest \
                      docker-latest-logrotate \
                      docker-logrotate \
                      docker-engine
    

    4.2 安装docker

    安装docker依赖
    
    $ sudo yum install -y yum-utils \
      device-mapper-persistent-data \
      lvm2
    
    设置docker的yum源
    
    $ sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
    
    安装最新版的docker
    
    $ sudo yum install docker-ce docker-ce-cli containerd.io
    
    指定版本安装docker
    
    $ yum list docker-ce --showduplicates | sort -r
    $ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    $ sudo yum install docker-ce-18.09.5-3.el7 docker-ce-cli-18.09.5-3.el7 containerd.io
    
    启动docker
    
    $ sudo systemctl start docker
    
    关闭docker
    
    $ sudo systemctl stop docker
    
    测试docker安装
    
    $ sudo docker run hello-world
    
    Docker 配置阿里镜像加速服务
    

    在这里插入图片描述

    5 RabiitMQ

    5.1 linux版

    5.1.1 下载

    在这里插入图片描述

    5.1.2 下载的安装包

    在这里插入图片描述

    注意:这里的安装包是centos7安装的包
    
    5.1.3 安装步骤
    # 1.将rabbitmq安装包上传到linux系统中
    erlang-23.3.4.4-1.el7.x86_64.rpm #l7表示是Centosl7,Centosl8表示Centos8
    rabbitmq-server-3.8.18-1.el7.noarch.rpm
    
    # 2.安装Erlang依赖包
    	rpm -ivh erlang-23.3.4.4-1.el7.x86_64.rpm
    
    # 3.安装RabbitMQ安装包(需要联网)
    	yum install -y rabbitmq-server-3.8.18-1.el7.noarch.rpm
    
    # 4.执行如下命令,启动rabbitmq中的插件管理
    	rabbitmq-plugins enable rabbitmq_management
    	
    	出现如下说明:
    		Enabling plugins on node rabbit@localhost:
        rabbitmq_management
        The following plugins have been configured:
          rabbitmq_management
          rabbitmq_management_agent
          rabbitmq_web_dispatch
        Applying plugin configuration to rabbit@localhost...
        The following plugins have been enabled:
          rabbitmq_management
          rabbitmq_management_agent
          rabbitmq_web_dispatch
    
        set 3 plugins.
        Offline change; changes will take effect at broker restart.
    
    # 5.启动RabbitMQ的服务
    	systemctl start rabbitmq-server
    	systemctl restart rabbitmq-server
    	systemctl stop rabbitmq-server
    	
    
    # 6.查看服务状态(见下图:)
    	systemctl status rabbitmq-server
      ● rabbitmq-server.service - RabbitMQ broker
         Loaded: loaded (/usr/lib/systemd/system/rabbitmq-server.service; disabled; vendor preset: disabled)
         Active: active (running) since 三 2019-09-25 22:26:35 CST; 7s ago
       Main PID: 2904 (beam.smp)
         Status: "Initialized"
         CGroup: /system.slice/rabbitmq-server.service
                 ├─2904 /usr/lib64/erlang/erts-10.4.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -
                 MBlmbcs...
                 ├─3220 erl_child_setup 32768
                 ├─3243 inet_gethost 4
                 └─3244 inet_gethost 4
          .........
    

    在这里插入图片描述

    #7.关闭防火墙服务
    	systemctl disable firewalld  # 需要关闭防火墙,否则访问不了
        Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
        Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
    	systemctl stop firewalld   
    
    # 8.访问web管理界面
    	http://192.168.11.136:15672/
    

    在这里插入图片描述

    #  9.登录管理界面
    	username:  guest
    	password:  guest
    

    在这里插入图片描述

    解决办法:
    rabbitmqctl add_user admin 123 # 账号admin,密码123
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"  # 设置权限
    rabbitmqctl set_user_tags admin administrator  # 设置权限
    
    然后输入账号admin,密码123,则可以成功访问
    
    

    在这里插入图片描述

    5.1.4 集群搭建
    # 0 为了能正常访问,先把三台机器防火墙关了
    # 1 集群规划
    node1: 10.15.0.3  mq1  master 主节点
    node2: 10.15.0.4  mq2  repl1  副本节点
    node3: 10.15.0.5  mq3  repl2  副本节点
       
    # 2 克隆三台机器主机名和ip映射
       	vim /etc/hosts加入:
       		10.15.0.3 mq1
           	10.15.0.4 mq2
           	10.15.0.5 mq3
    # 3 修改主机名      	
       	node1: vim /etc/hostname 加入:  mq1
       	node2: vim /etc/hostname 加入:  mq2
       	node3: vim /etc/hostname 加入:  mq3
       
    # 4 三个机器安装rabbitmq,并同步cookie文件,在node1上执行:
       	scp /var/lib/rabbitmq/.erlang.cookie root@mq2:/var/lib/rabbitmq/
       	scp /var/lib/rabbitmq/.erlang.cookie root@mq3:/var/lib/rabbitmq/
       
    # 5 查看cookie是否一致:
       	node1: cat /var/lib/rabbitmq/.erlang.cookie 
       	node2: cat /var/lib/rabbitmq/.erlang.cookie 
       	node3: cat /var/lib/rabbitmq/.erlang.cookie 
    
    # 6 启动node1服务:systemctl start rabbitmq-server
    # 7 后台启动rabbitmq所有节点执行如下命令,启动成功访问管理界面:
       	rabbitmq-server -detached 
    # 8 在node2和node3执行加入集群命令:
       	1.关闭       rabbitmqctl stop_app
       	2.加入集群    rabbitmqctl join_cluster rabbit@mq1
       	3.启动服务    rabbitmqctl start_app
       
    # 9 查看集群状态,任意节点执行:
       	rabbitmqctl cluster_status
       
    # 10 如果出现如下显示,集群搭建成功:
    

    在这里插入图片描述

    # 11.任意节点添加用户
    rabbitmqctl add_user admin 123 # 账号admin,密码123
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"  # 设置权限
    rabbitmqctl set_user_tags admin administrator  # 设置权限
    
    # 12 登录管理界面
    username:  admin
    password:  123
    

    在这里插入图片描述

    5.1.5 镜像集群
    需要在集群搭建的基础上搭建
    
    # 0.策略说明
    rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
    -p Vhost: 可选参数,针对指定vhost下的queue进行设置
    Name:     policy的名称
    Pattern: queue的匹配模式(正则表达式)
    Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
    all:表示在集群中所有的节点上进行镜像
    exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
    nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
    ha-params:ha-mode模式需要用到的参数
    ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
                  priority:可选参数,policy的优先级
                  
                   
    # 1.查看当前策略
    rabbitmqctl list_policies
    
    # 2.添加策略
    rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}' 
    说明:策略正则表达式为 “^” 表示所有匹配所有队列名称  ^hello:匹配hello开头队列
    
    # 3.删除策略
    rabbitmqctl clear_policy ha-all
    
    # 4.测试集群
    

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    5.2 windows版

    
    

    6 Jmeter

    # 1.下载jmeter
    https://jmeter.apache.org/download_jmeter.cgi
    下载地址:https://mirror.bit.edu.cn/apache//jmeter/binaries/apache-jmeter-5.2.1.tgz
    # 2.解压缩
    backups    ---用来对压力测试进行备份目录
    bin        ---Jmeter核心执行脚本文件
    docs	     ---官方文档和案例
    extras     ---额外的扩展
    lib        ---第三方依赖库
    licenses   ---说明
    printable_docs ---格式化文档
    
    # 3.安装Jmeter
    0.要求: 必须事先安装jdk环境
    1.配置jmeter环境变量
    export JMETER_HOME=/Users/yao/dev/apache-jmeter-5.2
    export PATH=$SCALA_HOME/bin:$JAVA_HOME/bin:$GRADLE_HOME/bin:$PATH:$JMETER_HOME/bin
    2.是配置生效
    source  /etc/profile
    

    7 lombok

    在这里插入图片描述

    7.1 引言

    还记得刚刚接触java,学习面向对象时因为手写
    get,set,hashcode,equals等方法的痛苦吗?
    还记得后来上手了Eclipse|Idea这样工具可以快速生成get,set等
    相关方法的兴奋吗? 好强大..
    后来工作时间长了,这种兴奋渐渐就变成了的苦恼?
    
    很重要一个原因就是因为随着项目业务模块功能不断扩展,项目
    中涉及库表越来越多,导致项目中实体类(Entity)对象越来越多,
    每次写Entity对象最头疼就是生成Get,SET等相关方法,极大影
    响开发效率,如何更好的解决呢? lombok出现仿佛让我们回
    到曾经的那种喜悦!!!
    

    7.2 lombok是什么

    Lombok项目是一个Java库,它会自动插入编辑器和构建工具中,
    Lombok提供了一组有用的注释(注解),用来消除Java类中的大
    量样板代码。仅五个字符(@Data)就可以替换数百行代码从而产
    生干净,简洁且易于维护的Java类 ---百度百科
    
    Project Lombok is a java library that automatically plugs 
    into your editor and build tools, spicing up your java.
    Never write another getter or equals method again, 
    with one annotation your class has a fully featured
    builder, Automate your logging variables, and much more. --摘自官网
    
    通俗解释: lombok快速开发工具,提供了一组java相关注解,
    通过注解用来更快速生成java对象中我们想要的相关
    方法(get,set,toString ....)等一系列方法
    
    

    7.3 lombok第一个环境

    7.3.1 引入依赖
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.12</version>
      <scope>provided</scope>
    </dependency>
    
    7.3.2 使用提供注解
    @Data
    public class User {
        private String id;
        private String name;
        private Integer age;
        private Date bir;
    }
    
    @Data注解: 自动给对象提供 GET SET ToString hashCode equals 等方法
    

    7.4 lombok的原理

    在这里插入图片描述

    7.5 lombok一组注解

    7.5.1 @Data注解
    @Data 用在类上  
    
    用来生成对象中GET SET ToString HashCode equals等相关方法
    具体用法
    
    @Data
    public class User {
        private String id;
        private String name;
        private Integer age;
        private Date bir;
    }
    
    7.5.2 @Getter and @Setter
    用在类上
    用来只生成对应GET SET方法
    具体用法
    
      @Getter
      @Setter
      public class User {
          private String id;
          private String name;
          private Integer age;
          private Date bir;
      }
    
    7.5.3 @ToString
    用在类上
    用来生成toString方法
    
    7.5.4 @AllArgsConstructor And @NoArgsConstructor
    用在类上
    
    用来生成全部参数构造方法 和 无参数构造方法
    
    具体用法
    
      @AllArgsConstructor
      @NoArgsConstructor
      public class User {
          private String id;
          private String name;
          private Integer age;
          private Date bir;
      }
    
    7.5.5 @Accessors
    用在类上
    
    用来给类中set方法开启链式调用 chain属性: 
    用来指定是否开启SET方法链式调用 true 开启 false  不开启
    
    具体用法
    
    @Data
    @Accessors(chain = true)
    public class User {
        private String id;
        private String name;
        private Integer age;
        private Date bir;
    }
      user.setId("21").setName("xiaochen").setAge(23).setBir(new Date());
    
    7.5.6 @Slf4j
    用在类上
    
    用来快速给类中定义一个日志变量
    
    原理
    
    在对应类上加入这个注解相当于在这个类中声明了一个日志对象
    private Logger log = LoggerFactory.getLogger(this.getClass());
    具体用法
    
    @Controller
     @RequestMapping("user")
     @Slf4j
     public class UserController {
         @RequestMapping("findAll")
         public String findAll(){
             log.info("进入findAll方法");
             log.info("姓名:[{}],年龄:[{}]",name,age);
             return "index";
         }
     }
    

    7.6 idea中如何安装lombok

    注意:默认在idea中不支持lombok语法,写上之后没有任何效果,
    需要在idea中额外安装插件才可以继续使用lombok
    
    Preferences | Plugins --> 搜索lombok 下载安装 安装完成
    重启idea即可
    

    在这里插入图片描述

    安装完成之后出现如下问题的解决方案:
    

    在这里插入图片描述

    解决方案:
    

    在这里插入图片描述

    8 jdk

    1 下载并解压jdk1.8
    tar  -zxvf  jdk-8u281-linux-x64.tar.gz
    (检查本机有没有jdk有的话卸载掉。安装上自己的jdk)
    
    2 配上环境变量
    vim /etc/profile
    # 添加一下两行代码
    export JAVA_HOME=jdk的位置
    export PATH=$PATH:$JAVA_HOME/bin
    
    3 使配置生效
    source  /etc/profile
    

    9 git

    # 配置用户名
    git config --global user.name "username"  //(名字,随意写)
    
    # 配置邮箱
    git config --global user.email "55333@qq.com" // 注册账号时使用的邮箱
    
    # 配置ssh免密登录
    ssh-keygen -t rsa -C "55333@qq.com"
    
    三次回车后生成了密钥,也可以查看密钥
    cat ~/.ssh/id_rsa.pub
    
    
    浏览器登录码云后,个人头像上点设置、然后点ssh公钥、随便填个标题,然后赋值
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC6MWhGXSKdRxr1mGPZysDrcwABMTrxc8Va2IWZyIMMRHH9Qn/wy3PN2I9144UUqg65W0CDE/thxbOdn78MygFFsIG4j0wdT9sdjmSfzQikLHFsJ02yr58V6J2zwXcW9AhIlaGr+XIlGKDUy5mXb4OF+6UMXM6HKF7rY9FYh9wL6bun9f1jV4Ydlxftb/xtV8oQXXNJbI6OoqkogPKBYcNdWzMbjJdmbq2bSQugGaPVnHEqAD74Qgkw1G7SIDTXnY55gBlFPVzjLWUu74OWFCx4pFHH6LRZOCLlMaJ9haTwT2DB/sFzOG/Js+cEExx/arJ2rvvdmTMwlv/T+6xhrMS3 894548575@qq.com
    
    # 测试
    ssh -T git@gitee.com
    
    # 测试成功
    Hi unique_perfect! You've successfully authenticated, but GITEE.COM does not provide shell access.
    

    10 nacos

    一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
    
    作为我们的注册中心和配置中心。
    
    先了解一下 Spring Cloud 应用如何接入 Nacos Discovery。
    1 首先,修改 common中的pom.xml 文件,引入 Nacos Discovery Starter。
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    2 在应用的common中的application.yml 配置文件中配置 Nacos Server 地址和微服务名称
    spring:
      application:
        name: gulimall-coupon
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://192.168.1.103:3306/gulimall_sms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
        username: root
        password: root
      cloud:
        nacos:
          discovery:
            server-addr: 192.168.11.1:8848
    
    mybatis-plus:
      mapper-locations: classpath:/mapper/**/*.xml
      global-config:
        db-config:
          id-type: auto
    
    
    
    server:
      port: 7000
    
    3 我们要配置nacos服务器的地址,也就是注册中心地址,但是我们还没
    有nacos服务器,所以我们需要启动nacos server创建nacos服务
    器(软件官方可以下载)
    启动命令windows:startup.cmd -m standalone
    
    4 使用 @EnableDiscoveryClient 注解开启服务注册与发现功能
    package com.yxj.gulimall.coupon;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    
    @SpringBootApplication
    @MapperScan("com.yxj.gulimall.coupon.dao")
    @EnableDiscoveryClient
    public class GulimallCouponApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GulimallCouponApplication.class, args);
        }
    
    }
    
    5 访问http://127.0.0.1:8848/nacos/  账号密码nacos
    出现如下页面,则表示访问成功
    

    11 redis

    Redis默认配置是不需要密码认证的,也就是说只要连接的Redis服务器
    的host和port正确,就可以连接使用。这在安全性上会有一定的问题,
    所以需要启用Redis的认证密码,增加Redis服务器的安全性。
    
    1 修改配置文件
    Redis的配置文件默认在/etc/redis.conf,找到如下行:
    
    #requirepass foobared
    去掉前面的注释,并修改为所需要的密码:
    
    requirepass myPassword (其中myPassword就是要设置的密码)
    
    2 重启Redis
    如果Redis已经配置为service服务,可以通过以下方式重启:
    
    service redis restart
    如果Redis没有配置为service服务,可以通过以下方式重启:
    
    /usr/local/bin/redis-cli shutdown
    /usr/local/bin/redis-server /etc/redis.conf
    
    3 登录验证
    设置Redis认证密码后,客户端登录时需要使用-a参数输入认证密码,不
    添加该参数虽然也可以登录成功,但是没有任何操作权限。如下:
    
    $ ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> keys *
    (error) NOAUTH Authentication required.
    使用密码认证登录,并验证操作权限:
    
    $ ./redis-cli -h 127.0.0.1 -p 6379 -a myPassword
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "myPassword"
    看到类似上面的输出,说明Reids密码认证配置成功。
    
    除了按上面的方式在登录时,使用-a参数输入登录密码外。
    也可以不指定,在连接后进行验证:
    
    $ ./redis-cli -h 127.0.0.1 -p 6379
    127.0.0.1:6379> auth myPassword
    OK
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "myPassword"
    
    4 Redis也可以通命令行客户端配置密码,这种配置方式不用重新启动Redis。配置方式如下:
    
    127.0.0.1:6379> config set requirepass newPassword
    OK
    127.0.0.1:6379> config get requirepass
    1) "requirepass"
    2) "newPassword"
    注意:使用命令行客户端配置密码,重启Redis后仍然会使用redis.conf配置文件中的密码。
    
     
    
    5 如果Redis服务器,使用了集群。除了在master中配置密码外,
    也需要在slave中进行相应配置。在slave的配置文件中找到如下行,
    去掉注释并修改与master相同的密码即可:
    
    # masterauth master-password
    

    11.1 主从复制

    主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据
    
    无法解决: 1.master节点出现故障的自动故障转移
    
    1.准备3台机器并修改配置redis.conf
    master
    port 6377
    bind 0.0.0.0
    如果masterip 为 192.168.42.137,则slaveof masterip masterport 为 slaveof 192.168.42.137 6377
    slave1
    port 6378
    bind 0.0.0.0
    slaveof masterip masterport  (高版本 replicaof  masterip masterport )
    
    slave2
    port 6379
    bind 0.0.0.0
    slaveof masterip masterport (高版本 replicaof  masterip masterport )
    

    在这里插入图片描述

    2.启动3台机器进行测试
    # 这里我把创建了data文件夹并把redis.conf放进了data文件夹中
    ./redis-server data/redis6377.conf
    ./redis-server data/redis6378.conf
    ./redis-server data/redis6379.conf
    

    11.2 Redis哨兵机制

    Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或
    多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服
    务器,以及这些主服务器属下的所有从服务器,并在被监视的
    主服务器进入下线状态时,自动将下线主服务器属下的某个从
    服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转
    移功能的主从架构。
    
    这里我搭配了1主2从,3个哨兵
    我把配置文件放在了conf文件夹下
    redis6377.conf  redis6379.conf       sentinel-26378.conf  
    redis6378.conf  sentinel-26377.conf  sentinel-26379.conf
    
    下面列出的就是要改的地方
    redis6377.conf  (主的配置文件)
    
    bind 0.0.0.0  # 表示任何ip都可以连接,这个要开启来,否则远程连接不起作用
    port 6377  # redis-server端口号
    dir ./data  # 这个文件要自己创建,./表示命令所在的目录,比如redis-server这个命令所在目录为/usr/local/redis6377/bin。则./data表示/usr/local/redis6377/bin/data
    
    redis6378.conf
    
    bind 0.0.0.0
    port 6378
    replicaof 192.168.42.137 6377  # 主的IP地址加端口
    dir ./data 
    
    redis6379.conf  
    
    bind 0.0.0.0
    port 6379
    replicaof 192.168.42.137 6377  # 主的IP地址加端口
    dir ./data 
    
    
    sentinel-26377.conf 
    port 26377 # 哨兵启动端口
    bind: 0.0.0.0 # 开启远程连接
    daemonize no  # 是否以后台启动
    dir  ./data
    sentinel monitor mymaster 192.168.42.137 6377 2  #  mymaster可以随便命令,192.168.42.137 6377 表示主的主机加端口,2表示哨兵选举谁当master时的数量,一般为哨兵数量的一半加1。我这里哨兵为3.所以算出来的值为2,.当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。
    sentinel down-after-milliseconds mymaster 30000  # 多长时间没响应算master挂了,这里为30s
    sentinel parallel-syncs mymaster 1 # 选取新的master时,一次有多少个开始同步数据,值越小,服务器负担越小
    sentinel failover-timeout mymaster 180000 # 同步数据的超时时间,这里为18s
    
    sentinel-26378.conf  
    
    port 26378
    bind: 0.0.0.0 # 开启远程连接
    daemonize no
    pidfile /var/run/redis-sentinel.pid
    logfile ""
    dir ./data
    sentinel monitor mymaster 192.168.42.137 6377 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    
    sentinel-26379.conf
    port 26379
    
    bind: 0.0.0.0 # 开启远程连接
    daemonize no
    pidfile /var/run/redis-sentinel.pid
    logfile ""
    dir ./data
    sentinel monitor mymaster 192.168.42.137 6377 2
    sentinel down-after-milliseconds mymaster 30000
    sentinel parallel-syncs mymaster 1
    sentinel failover-timeout mymaster 180000
    

    12 Linux 系统安装MySQL

    12.1 下载Linux 安装包

    https://dev.mysql.com/downloads/mysql/5.7.html#downloads
    

    在这里插入图片描述

    12.2 安装MySQL

    1) 卸载 centos 中预安装的 mysql
    	
    	rpm -qa | grep -i mysql
    	
    	rpm -e mysql-libs-5.1.71-1.el6.x86_64 --nodeps
    	
    2) 上传 mysql 的安装包
    	
    	alt + p -------> put  E:/test/MySQL-5.6.22-1.el6.i686.rpm-bundle.tar
    
    3) 解压 mysql 的安装包 
    	
    	mkdir mysql
    	
    	tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar -C /root/mysql
    	
    4) 安装依赖包 
    	
    	yum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6 libncurses.so.5 --setopt=protected_multilib=false
    	
    	yum  update libstdc++-4.4.7-4.el6.x86_64
    	
    5) 安装 mysql-client
    	
    	rpm -ivh MySQL-client-5.6.22-1.el6.i686.rpm
    
    6) 安装 mysql-server
    	
    	rpm -ivh MySQL-server-5.6.22-1.el6.i686.rpm	
    

    12.3 启动 MySQL 服务

    service mysql start
    
    service mysql stop
    
    service mysql status
    
    service mysql restart
    

    12.4 登录MySQL

    mysql 安装完成之后, 会自动生成一个随机的密码, 并且保存在一个密码文件中 : /root/.mysql_secret
    
    mysql -u root -p 
    
    登录之后, 修改密码 :
    
    set password = password('cqm');
    
    授权远程访问 : 
    
    grant all privileges on *.* to 'root' @'%' identified by 'cqm';
    flush privileges;
    

    12.5 MySQL主从复制

    在这里插入图片描述

    # 0.架构规划
    	192.168.202.201    master  主节点
    	192.168.202.202    slave   从节点
    
    # 1.修改mysql的配置文件
    	[root@localhost mysql]# vim /etc/my.cnf
    
    # 2.分别在配置文件中加入如下配置
    
    	mysql(master):
    		server-id=1
    		log-bin=mysql-bin
    		log-slave-updates
    		slave-skip-errors=all
    	
    	msyql(slave):
    		server-id=2
    		log-bin=mysql-bin
    		log-slave-updates
    		slave-skip-errors=all
    		
    		注意:两个机器的server-id不能一致
    

    在这里插入图片描述

    # 3.重启mysql服务
    	systemctl restart mysqld
    
    # 4.登录mysql执行如下命令检测配置是否生效
    	SHOW VARIABLES like 'server_id';
    

    在这里插入图片描述

    # 5.登录master节点执行如下命令
    		show master status;
    

    在这里插入图片描述

    # 6.登录从节点执行如下命令:
    		change master to 
    		master_host='10.15.0.9',
    		master_user='root',
    		master_password='root',
    		master_log_file='mysql-bin.000001',
    		master_log_pos=120;
    

    在这里插入图片描述

    # 7.开启从节点
    		start slave; 
    		stop  slave;
    

    在这里插入图片描述

    # 8.查看从节点状态
    		show slave status\G;
    
    		************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.15.0.9
                      Master_User: root
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000001
              Read_Master_Log_Pos: 120
                   Relay_Log_File: mysqld-relay-bin.000002
                    Relay_Log_Pos: 283
            Relay_Master_Log_File: mysql-bin.000001
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
       	
        注意:
        		1.出现 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说名成功,
        		2.如果在搭建过程出现错误,可以查看查看错误日志文件 cat /var/log/mysqld.log
     
    # 9.通过客户端工具进行测试
    	
    # 10.关闭主从复制(在从节点执行)
    	stop slave;
    

    13 安装Mycat

    # 1.下载mycat
    	http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    
    # 2.解压mycat
    	tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    

    在这里插入图片描述

    # 3.查看解压之后目录]
    	[root@localhost mycat]# ls
    	总用量 12
    	drwxr-xr-x. 2 root root  190 10月 14 22:58 bin
    	drwxrwxrwx. 2 root root    6 3月   1 2016 catlet
    	drwxrwxrwx. 4 root root 4096 10月 14 22:58 conf
    	drwxr-xr-x. 2 root root 4096 10月 14 22:58 lib
    	drwxrwxrwx. 2 root root    6 10月 28 2016 logs
    	-rwxrwxrwx. 1 root root  217 10月 28 2016 version.txt
    

    在这里插入图片描述

    # 4.移动到/usr目录
    	mv mycat/ /usr/
    
    # 5.配置mycat中conf下的配置schema.xml
    
    

    在这里插入图片描述

    	<!-- 定义MyCat的逻辑库  -->   
        <schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode"></schema>
        <!-- 定义MyCat的数据节点 -->
        <dataNode name="testNode" dataHost="dtHost" database="test" />
       <dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
                    writeType="0" dbType="mysql" dbDriver="native" switchType="-1"  slaveThreshold="100">
                    <heartbeat>select user()</heartbeat>
                    <!--写节点-->
                    <writeHost host="hostM1" url="192.168.28.128:3306" user="root"
                            password="root">
                      		<!--从节点-->
                    			<readHost host="hostS1" url="192.168.28.129:3306" user="root" password="root" />
                    </writeHost>
       </dataHost>
    
    # 6.配置登陆mycat的权限server.xml
    

    在这里插入图片描述

    <system>
      <!-- 这里配置的都是一些系统属性,可以自己查看mycat文-->
      <property name="defaultSqlParser">druidparser</property>
      <property name="charset">utf8mb4</property>
    </system>
    
    <user name="root">
      <property name="password">root</property>
      <property name="schemas">test_schema</property>
    </user>
    
    # 7.启动mycat
    	 ./mycat console
    
    # 8.查看日志
    	tail -f ../logs/mycat.log
    
    # 9.数据库连接配置,测试
    

    14 Nginx

    # 0.安装必要依赖
    	yum install -y gcc pcre-devel zlib-devel
    
    # 1.下载Nginx
    	http://nginx.org/en/download.html
    
    # 2.将Nginx上传到linux中,并解压缩
    	 tar -zxvf nginx-1.11.1.tar.gz
    
    
    # 3.查看Nginx安装目录
    	[root@localhost nginx-1.11.1]# ls
    	auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src
    
    # 4.在Nginx安装目录中执行如下命令:(指定安装位置)
    	./configure --prefix=/usr/nginx
    
    # 5.执行上述命令后,执行如下命令:
    	make && make install
    
    # 6.编译完成后进入编译安装目录/usr/nginx目录中查看:
    	[root@localhost nginx]# ls -l
    	总用量 4
    	drwxr-xr-x. 2 root root 4096 10月 14 21:17 conf
    	drwxr-xr-x. 2 root root   40 10月 14 21:17 html
    	drwxr-xr-x. 2 root root    6 10月 14 21:17 logs
    	drwxr-xr-x. 2 root root   19 10月 14 21:17 sbin
    
    # 7.启动nginx,进入nginx安装目录的sbin目录中执行:
    	./nginx   
    
    # 8.在windows中浏览器访问,可以看到nginx欢迎页面:
    	http://10.15.0.8:80/
    	
    		注意:关闭网络防火墙
    
    # 9.关闭nginx,进入nginx安装目录的sbin目录中执行:
    	./nginx -s stop
    
    # 10.nginx配置文件在nginx安装目录的conf目录中:
    	[root@localhost conf]# ls -l
    	总用量 60
    	-rw-r--r--. 1 root root 2656 10月 14 21:17 nginx.conf
    	.......
    	注意:nginx.conf为nginx的配置文件,可以在nginx.conf修改nginx默认配置
    

    15 maven私服

    私服是指私有服务器,是架设在局域网的一种特殊的远程仓库,
    目的是代理远程仓库及部署第三方构建。有了私服之后,当 
    Maven 需要下载构件时,直接请求私服,私服上存在则下载
    到本地仓库;否则,私服请求外部的远程仓库,将构件下载到
    私服,再提供给本地仓库下载。Nexus是一个强大的Maven仓
    库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问。
    

    在这里插入图片描述

    安装环境:
    
    1 操作系统:Windows 10 /Windows 7
    
    2 nexus版本:nexus-3.9.0-01-win64(Nexus 专业版是需要付
    费的,这里我们下载开源免费版 Nexus OSS)
    
    下载地址:https://www.sonatype.com/nexus-repository-oss
    

    在这里插入图片描述

    解压过后,进入/nexus-3.9.1-01/bin目录下,以管理员身份打开
    命令行:nexus /install ,该命令将会将Nexus Repository注册成为Windows服务。
    运行nexus  /start 启动私服
    打开浏览器,输出localhost:8081,出现如下界面,安装成功。
    
    补充:
    nexus /install # 安装私服
    nexus  /start # 启动私服
    nexus  /uninstall # 卸载私服
    nexus /stop # 停止私服
    

    在这里插入图片描述

    16 Zookeeper

    16.1 Zookeeper安装

    a)	下载zookeeper的安装包
    

    在这里插入图片描述

    b)	上传至linux系统中 并使用 tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz 解压缩
    tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz
    c)	解压缩zookeeper的tar包 重命名为zk便于操作,(可省略)
    mv apache-zookeeper-3.6.2-bin zk
    d)	修改zk的conf目录下的zoo_simple.cfg,修改完后,重命名为zoo.cfg
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zkData  ----保存snapshot文件的路径
    clientPort=2181
    
    各项参数说明:
    tickTime:配置单元时间。单元时间是ZooKeeper的时间计算单元,
    其他的时间间隔都是使用tickTime的倍数来表示的。
    
    
    initLimit:节点的初始化时间。该参数用于Follower(从节点)的启动,
    并完成与Leader(主节点)进行数据同步的时间。Follower节点在启
    动过程中,会与Leader节点建立连接并完成对数据的同步,从而确
    定自己的起始状态。Leader节点允许Follower节点在initLimit时
    间内完成这项工作。该参数默认值为10,表示是参数tickTime值的10倍。
    
    
    syncLimit:心跳最大延迟周期。该参数用于配置Leader节点和
    Follower节点之间进行心跳检测的最大延时时间。在ZK集群运
    行的过程中,Leader节点会通过心跳检测来确定Follower节点是
    否存活。如果Leader节点在syncLimit时间内无法获取到Follower
    节点的心跳检测响应,那么Leader节点就会认为该Follower节点已
    经脱离了和自己的同步。该参数默认值为5,表示是参数tickTime值
    的5倍。
    
    
    dataDir:是zookeeper持久化数据存放的目录。
    myid文件处于此目录下。
    
    
    dataLogDir:日志目录选项,如果没有设置该参数,
    默认将使用和dataDir相同的设置。
    
    
    clientPort:zookeeper监听客户端连接的端口,默认是2181。
    
    
    e)	启动zk,在zk的bin目录下,运行zkServer.sh
    ./zkServer.sh start /usr/local/zookeeper/conf/zoo.cfg
    ps: ./zkServer.sh help 可以查看服务器端所有可以执行的指令
    
    补充: 
    # 启动服务端
    $ bin/zkServer.sh start
    
    # 查看状态
    $ bin/zkServer.sh status
    
    # 停止
    $ bin/zkServer.sh stop
    
    # 重启
    $ bin/zkServer.sh restart
    f)	使用jps查看启动是否成功
    46193 QuorumPeerMain # 表示成功
    g)	启动客户端连接到zk
    ./zkCli.sh -server 192.168.0.220:2181
    ps:  可以通过 ./zkCli.sh help 查看客户端所有可以执行的指令
    

    16.2 Zookeeper集群搭建

    1、在每台机器zookeeper/conf目录下创建三个zk配置文件,
    为 zoo.cfg(可以将zookeeper里面的zoo_sample.cfg改为zoo.cfg,zookeeper
    会按这个文件进行启动)
    各个内容为(每个文件都是这个内容):
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/usr/local/zookeeper/zkdata
    clientPort=2181
    server.1=192.168.42.129:2888:3888
    server.2=192.168.42.130:2888:3888
    server.3=192.168.42.131:2888:3888
    server.4=192.168.42.132:2888:3888
    server.5=192.168.42.133:2888:3888
    
    
    2、在每台机器上创建数据存放的目录,存放的路径为
    dataDir=/usr/local/zookeeper/zkdata(跟你上面写的内容一样)
    
    3、分别在每台机器上(dataDir=/usr/local/zookeeper/zkdata)
    创建myid文件myid的内容分别是
    server.1=192.168.42.129:2888:3888中的数字1,
    server.2=192.168.42.130:2888:3888中的数字2,
    server.3=192.168.42.131:2888:3888中的数字3,
    server.4=192.168.42.132:2888:3888中的数字4,
    server.5=192.168.42.133:2888:3888中的数字5
    
    
    ps: server.X :x为服务器的唯一标识。
    192.168.42.129:服务器所在的ip地址
    2888:数据同步使用的端口号
    3888:选举使用的端口号
    
    4、分别启动各个zk服务器(进入zookeeper的bin目录)
    ./zkServer.sh  start  /usr/local/zookeeper/conf/zoo.cfg (这里可以省略 /usr/local/zookeeper/conf/zoo.cfg)
    
    5、查看各个zk服务器的角色信息(进入zookeeper的bin目录)
    ./zkServer.sh  status /usr/local/zookeeper/conf/zoo.cfg  (这里可以省略 /usr/local/zookeeper/conf/zoo.cfg)
    
    6、客户端连接任意zk服务器进行节点操作(进入zookeeper的bin目录)
    ./zkCli.sh  -server  192.168.42.129:2181(ip地址加端口)(连接本机则./zkCli.sh也行)
    
    7.停止zk服务器(进入zookeeper的bin目录)
    ./zkServer.sh stop  ./usr/local/zookeeper/conf/zoo.cfg  (这里可以省略 /usr/local/zookeeper/conf/zoo.cfg)
    
    想要获取该该课程markdown笔记(脑图+笔记)。可以扫描以下
    微信公众号二维码。或者搜索微信公众号-Java大世界。回复
    工具即可获取笔记获取方式。
    

    在这里插入图片描述

    展开全文
  • 什么是计算卸载

    万次阅读 多人点赞 2019-09-18 14:23:19
    简言:为了应对终端设备处理能力不足、资源有限等问题,业界在移动边缘计算(MEC)中引入了计算卸载概念 。边缘计算卸载即用户终端(UE)将计算任务卸载到MEC网络中,主要解...
    简言:为了应对终端设备处理能力不足、资源有限等问题,业界在移动边缘计算(MEC)中引入了计算卸载概念 。边缘计算卸载即用户终端(UE)将计算任务卸载到MEC网络中,主要解决设备在资源存储、计算性能以及能效等方面的不足。

    0 1
    背景

    随着科技的快速发展,移动设备流量急剧增长。但是由于自身资源及计算性能有限,智能移动设备在处理计算密集型和时间敏感型应用时可能面临着能力不足的情况。为此,使用网络边缘节点来处理分析数据的边缘计算模式应运而生,并与传统云计算模式形成互补。然而,边缘设备往往具有轻量化的特点,如何合理利用边缘有限的计算资源便成为边缘计算亟需解决的重要问题。

    640?wx_fmt=jpeg

    边缘计算针对传统云计算能力不足,在移动用户附近的无线接入网络边缘提供云计算功能,满足快速交互响应的需求,提供普遍且灵活的计算服务。为使用边缘网络提供的服务,移动设备如何将所承担的任务卸载到边缘服务器,进行高效合理的卸载决策,已经成为目前边缘计算问题的主要研究方向。
    计算卸载是边缘计算的一个关键技术,可以为资源受限设备运行计算密集型应用提供计算资源,加快计算速度,节省能源。更详细的说,边缘计算中的计算卸载是将移动终端的计算任务卸载到边缘云环境中,解决了设备在资源存储、计算性能以及能效等方面存在的不足。

    0 2
     MCC与MEC对比

    计算卸载技术最初在移动云计算(Mobile Cloud Computing,MCC)中提出,移动云计算具有强大的计算能力,设备可以通过计算卸载,将计算任务传输到远端云服务器执行,从而达到缓解计算和存储限制、延长设备电池寿命的目的。在MCC中,用户设备(User Equipment,UE)可以通过核心网访问强大的远程集中式云(Central Cloud ,CC),利用其计算和存储资源,将计算任务卸载到云上。相比于移动终端将计算卸载到云服务器所使用的移动云计算技术可能导致的不可预测时延、传输距离远等问题,边缘计算能够更快速、高效地为移动终端提供计算服务,同时缓解核心网络的压力。表1 移动边缘计算和移动云计算的对比。

    640?wx_fmt=jpeg

    表1 移动边缘计算和移动云计算的对比



    0 3
    计算卸载步骤

    计算卸载一般是指将计算量大的任务合理分配给计算资源充足的代理服务器进行处理,再把运算完成的计算结果从代理服务器取回。计算卸载过程(见图 )大致分为以下 6 个步骤。

    640?wx_fmt=jpeg

    1)节点发现:寻找可用的 MEC 计算节点,用于后续对卸载程序进行计算。这些节点可以是位于远程云计算中心的高性能服务器,也可以是位于网络边缘侧的MEC服务器。
    2)程序切割:将需要进行处理的任务程序进行分割,在分割过程中尽量保持分割后的各部分程序的功能完整性,便于后续进行卸载。
    3)卸载决策:卸载决策是计算卸载中最为核心的一个环节。该环节主要解决两大问题:决定是否将程序进行卸载?以及卸载程序的哪些部分至 MEC 计算节点?
    卸载策略可分为动态卸载及静态卸载两种:在执行卸载前决定好所需卸载的所有程序块的策略为静态卸载策略;在卸载过程中的实际影响因素来动态规划卸载程序的策略为动态卸载策略。
    4)程序传输:当移动终端做出卸载决策以后就可以把划分好的计算程序交到云端执行。程序传输有多种方式,可以通过3G/4G/5G网络进行传输,也可以通过Wi-Fi进行传输。程序传输的目的是将卸载的计算程序传输至 MEC计算节点。
    5)执行计算:执行主要采取的是虚拟机方案。移动终端把计算任务卸载传输到云端后,云端就为该任务启动一个虚拟机,然后该任务就驻留在虚拟机中执行,而用户端感觉不到任何变化。MEC 计算节点对卸载到服务器的程序进行计算。
    6)计算结果回传:计算结果的返回是计算卸载流程中的最后一个环节。将 MEC 计算节点进行计算处理后的结果传回用户的移动设备终端。至此,计算卸载过程结束,移动终端与云端断开连接。

    0 4
    卸载决策


    计算卸载的过程中会受到不同因素的影响,如用户的使用习惯、无线电信道的通信情况、回程连接的质量、移动设备的性能和云服务器的可用性等,因此计算卸载的关键在于指定适合的卸载决策。边缘计算社区按照需要进行计算卸载的任务的性能需求,对计算卸载策略进行了简单介绍。目前,计算卸载的性能通常以时间延迟和能量消耗作为衡量指标。时间延迟和能量消耗的计算具体分为以下两种情况。

    640?wx_fmt=jpeg

    1)在不进行计算卸载时,时间延迟是指在移动设备终端处执行本地计算所花费的时间;能量消耗是指在移动设备终端处执行本地计算所消耗的能量。
    2)在进行计算卸载时,时间延迟是指卸载数据到 MEC 计算节点的传输时间、在 MEC 计算节点处的执行处理时间、接收来自 MEC 计算节点处理的数据结果的传输时间三者之和;能量消耗是指卸载数据到 MEC 计算节点的传输耗能、接收来自MEC 计算节点处理的数据结果的传输耗能两部分之和。
    卸载决策即UE决定是否卸载及卸载多少。UE由代码解析器、系统解析器和决策引擎组成,执行卸载决策需要3个步骤:首先代码解析器根据应用程序类型和代码/数据分区确定那些任务可以协助;然后系统解析器负责监控各种参数,如可用带宽、要卸载的数据大小或执行本地应用程序所耗费的能量等;最后,决策引擎确定是否要卸载。一般来说,关于计算卸载的决策有以下三种方案。
    1. 本地执行(local execution):整个计算在UE本地完成;
    2. 完全卸载( full offloading ):整个计算由MEC卸载和处理;
    3. 部分卸载(partial offloading):计算的一部分在本地处理,而另一部分则卸载到MEC服务器处理。
    做出这3种决策的影响因素主要是UE能量消耗和完成计算任务延时。
    卸载决策需要考虑计算时延因素,因为时延会影响用户的使用体验,并可能会导致耦合程序因为缺少该段计算结果而不能正常运行,因此所有的卸载决策至少都需要满足移动设备端程序所能接受的时间延迟限制。此外,还需考虑能量消耗问题,如果能量消耗过大,会导致移动设备终端的电池快速耗尽。最小化能耗即在满足时延条件的约束下,最小化能量消耗值。对于有些应用程序,若不需要最小化时延或能量的某一个指标,则可以根据程序的具体需要,赋予时延和能耗指标不同的加权值,使二者数值之和最小,即总花费最小,我们称之为最大化收益的卸载决策。
    卸载决策开始以后,接下来就要进行合理的计算资源分配。与计算决策类似,服务器端计算执行地点的选择将受到应用程序是否可以分割进行并行计算的影响。如果应用程序不满足分割性和并行计算性,那么只能给本次计算分配一个物理节点。相反,如果应用程序具有可分割线并支持并行计算,那么卸载程序将可以分布式地在多个虚拟机节点进行计算。

    0 5
    总结

    移动边缘计算中计算卸载技术将移动终端的计算任务卸载到边缘网络,解决了设备在资源存储、计算性能以及能效等方面存在的不足。同时相比于云计算中的计算卸载,MEC解决了网络资源的占用、高时延和额外网络负载等问题。计算卸载算是边缘计算核心技术之一,边缘计算又是5G关键技术之一,关注5G的可以关注一下计算卸载。

    参考文献:
    1. 董思岐、 李海龙、 屈毓锛 、 张钊 、 胡磊;移动边缘计算中的计算卸载策略研究综述; 火箭军工程大学作战保障学院 ;
    2. 廉晓飞、 谢人超、 黄韬;基于安全保障的边缘计算卸载方案; 北京邮电大学未来网络理论与应用实验室;
    3.孟杰;移动边缘计算环境中数据与计算卸载方法研究 ;北京邮电大学   

    smiley_66.png
    转发扩散
    一起促进边缘计算领域知识传播

    推荐阅读
    640?wx_fmt=gif
    展开全文
  • adb命令大全

    千次阅读 多人点赞 2019-06-03 22:19:07
    4.11.7 使用 Monkey 进行压力测试 4.11.8 开启/关闭 WiFi 4.12 刷机相关命令 4.12.1 重启到 Recovery 模式 4.12.2 从 Recovery 重启到 Android 4.12.3 重启到 Fastboot 模式 4.12.4 通过 sideload 更新系统 4.13 ...
  • 测试开发笔记

    万次阅读 多人点赞 2019-11-14 17:11:58
    各阶段输入、输出标准以及入口、出口准则:(测试阶段过程要素) 12 第三章 测试方法 14 测试方法对比 14 测试方法组合 16 第四章 软件质量 19 1.什么是软件质量 19 2.质量要素 19 3. 6大特性27个子特性ISO国际标准...
  • 今天大飞鸽给大家推荐一款电脑软件卸载神器!解决电脑软件卸载残留问题。这款应用就是他,Geek Uninstaller!软件介绍Geek Uninstaller是一个免费的专业的卸载软件,采取深而快的扫描方式,删除你电脑上多余的东西。...
  • 利用有限元方法,探求长期反复堆卸载过程中桩土相互作用的应力应变情况.研究堆卸载过程中被动桩与土体不同时刻的水平位移、变形、沉降、孔隙水压力变化,以及桩身弯矩等对反复荷载下桩土相互作用的规律,通过改变不同的...
  • 应力卸载阶段煤样渗透率随着应力的减小而增加,围压完全卸载后2种煤体的渗透率分别恢复到其初始值的22.6%,47.8%;同样的应力条件下,有效应力的增加对硬煤的影响作用大于煤基质收缩,渗透率随着其内部瓦斯压力的增大而...
  • 因此“需要增加一个层”来给字符设备体系卸载一些压力了,于是就将所有的“一类”设备总结成“一个”设备,然后将这一个设备作为字符设备加入链表,而真正的字符设备需要新设计的“层”来管理了,在重新设计之后,被...
  • 在加卸载运行工况下,利用MATLAB对其运行过程、运行能耗进行仿真,通过仿真证明了存在最优的卸载压力线,使其运行能耗最小化。最后结合螺杆空压机加卸载运行频率和最优卸载压力线,给出了其在加卸载运行工况下最优...
  • Nginx 安装 使用 卸载

    千次阅读 2020-07-08 15:32:37
    至此nginx安装成功 在这里插入图片描述 nginx文件安装完成之后的文件位置: /usr/sbin/nginx:主程序 /etc/nginx:存放配置文件 /usr/share/nginx:存放静态文件 /var/log/nginx:存放日志 卸载nginx 彻底卸载nginx ...
  • PS2020从入门到卸载

    千次阅读 多人点赞 2020-02-25 19:11:12
    PS2019从入门到精通(从安装到卸载)全套 这篇课程博客,是笔者在学习这个课程后根据内容和评论区的大神的评论总结的归纳。本人是零基础,不打广告!!! Ps常用快捷键 复制图层:Ctrl+j 取消选择:Ctrl+D 删除...
  • LoadRunner安装与卸载

    2019-04-19 15:15:15
    突然让我做压力测试 没有接触过的我有点慌~ 首先是请教一波公司大佬 然后由于种种原因我要在我自己的电脑上装一个LoadRunner 关于安装 借花献佛 安装教程1 安装教程2 然后我到后面进行那啥破解...
  • 软件测试入门知识了解

    万次阅读 多人点赞 2018-09-05 14:59:58
    单元测试方法: 单元测试主要采用白盒测试方法,辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序检验之中,而黑盒测试方法则应用于模块、组件等大单元的功能测试之中。 2.黑白盒测试方法: 黑盒测试方法...
  • 程序一直在运行,每次加载进去的jar/class如果过多,对系统会造成很大的压力,而且已经加载进去的jar/class不能覆盖,从而造成得不到想要的结果。此时就需要考虑对加载进去的jar/class进行卸载。 二.思路 我们...
  • StackExchange 网站的一名用户 Matt Goforth 对于 SSL 在负载均衡设备上的处理提出了他的疑惑:\\\对于...为了对数据包进行深入探测,必须在负载均衡这一层(或者是更靠前的阶段)将 SSL 进行卸载。但这样一来,负载...
  • 准确预测超压是制约莺歌海盆地油气资源... 东区主要采用伊顿方法,乐东区主要采用鲍尔斯方法。 可以根据实际钻探条件确定不同模型的经验参数。 实际应用表明,该高压异常预测误差在2%以内,能够满足现场工程的要求。
  •  为了缓解服务器的性能压力,一度较为流行的方法是安装SSL加速卡。但是加速卡对SSL数据的处理还是建立在服务器主机之上,并且过分注重于加速SSL数据处理,而不是完全卸除系统负荷。随着网络应用的日益丰富、数据...
  •  为了缓解服务器的性能压力,一度较为流行的方法是安装SSL加速卡。但是加速卡对SSL数据的处理还是建立在服务器主机之上,并且过分注重于加速SSL数据处理,而不是完全卸除系统负荷。随着网络应用的日益丰富、数据...
  • Mac Pro下卸载安装Mysql

    万次阅读 2016-05-26 16:01:12
    Mac Pro下卸载安装Mysql系统版本:OS X 10.11.5昨天为了修改我的Mysql密码,找了一堆教程在不明所以的情况下各种乱试,终于把我的mysql玩脱了,走上了曲折的mysql重装之路。一、Mac 关于Mysql的卸载:如使用brew安装...
  • 为了缓解CPU的压力,可以把IP数据包的处理工作交给有计算能力的网卡,让网卡IP数据包的封装、卸载、校验及分割等工作。这种技术就叫做网卡卸载技术。 (2)分段卸载 在传统情况下,当上层应用一次传输的IP数据超过...
  • LoadRunner使用教程

    万次阅读 多人点赞 2013-11-12 11:03:17
    如果方法一无效的话那么恭喜你,将不得不使用每二种方法卸载 IE7 还原成 IE6 。 问题 4 :为什么一个场景运行后想要点击 Analysis 进行测试结果分析会出现“ Names Map Not Found ”错误。 答:由于你...
  • 软件测试之软件测试方法

    千次阅读 2019-06-15 15:50:40
    软件测试过程中,最主要的就是要掌握好软件测试的方法,掌握好了软件测试方法,有利于测试技能的大幅度提高。 软件测试方法 软件测试方法是指测试软件的方法。随着软件测试技术的不断发展,测试方法也越来越多样...
  • 我把该卸的都卸载

    2019-02-15 11:02:11
    我把该卸的都卸载了   图片发自简书App 被繁忙的工作压得喘不过气来,想改变却又苦于没时间,只能继续重复着劳累的工作,只能不断地唉声叹气,只能感叹岁月易老。 殊不知还是有时间玩手机,还是有时间看电影...
  • 本文主要是研究金属铁经历冲击一却载到熔化压力区...模型计算所给出的温度历史与观测结果一致,由此可以校对其它测量或者计算熔化温度的方法和模型计算的结果,并能够初步限定出该压力下铁的熔化成核速率和径向长大速率.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,899
精华内容 5,159
关键字:

卸载压力的方法