精华内容
下载资源
问答
  • 有时我们会产生需求实时的监控一个文件的数据,一般来说是日志这种信息,这种情况我们可以使用Flume进行解决,我们需要将source端改为exec,它是按照给定指令进行监控,一般监控文件末尾数据就是tail -F /home/file...

    实时监听一个文件末尾产生的数据

    有时我们会产生需求实时的监控一个文件的数据,一般来说是日志这种信息,这种情况我们可以使用Flume进行解决,我们需要将source端改为exec,它是按照给定指令进行监控,一般监控文件末尾数据就是tail -F /home/file,这里的-F有一定的讲究就是,如果我们采用大F,那么如果采集出现问题,我们的程序会不断进行尝试,而小f不会。

    有时候你会发现,还没有对文件进行任何操作,flume控制台会打印一些文件中的数据,其实那不是监听到的,它就是tail -F 命令打印出来的10行信息。
    我们为了简单就监听一个普通文件末尾的数据,我们会不断地向file末尾写入新的数据观察flume会不会监听到,为了测试方便,就将输出结果打印到控制台。

    接下来进行配置flume信息,我们要监控一个文件末尾产生的数据,那么我们的source端应该采用exec命令式,tail -f指定文件,channel会使用内存进行缓冲,sink就选择的是logger日志。

    这里有一点进行说明,其实logger不是控制台,只是将source获得的数据传输的flume/logs/flume.log 日志文件中,为什么会打印到控制台,是因为我们在开启flume的时候,我们添加了一条命令 -Dflume.root.logger=INFO,console这样才会将logger中的数据打印到控制台,开启了该命令后,我们采集的数据就不会进入log文件中了,只是会显示在控制台中,那么存储日志的文件我们可以在conf中的文件中进行配置。

    a1.sources = r1
    a1.sinks = k1
    a1.channels = c1
    
    a1.sources.r1.type = exec
    a1.sources.r1.command=tail -F /home/hadoop/data/file
    
    a1.sinks.k1.type = logger
    
    a1.channels.c1.type = memory
    a1.channels.c1.capacity = 1000
    a1.channels.c1.transactionCapacity = 100
    
    a1.sources.r1.channels = c1
    a1.sinks.k1.channel = c1                               
    

    采用上述配置我们就可以实现我们需要的功能了,看一下结果。
    在这里插入图片描述
    在这里插入图片描述

    我们使用echo命令不断地向file文件中写入数据,然后再flume端就会监控到我们新添的数据。

    展开全文
  • 背景 ...主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费 官方Wiki https://github.com/alibaba/canal/wiki 原理 mysql主备复制 canal的原理和mysql的主备复制原理相似,先提下m

    背景

    阿里巴巴 B2B 公司为解决杭州和美国双机房部署,存在跨机房同步的业务需求 ,从 2010 年开始,开始尝试数据库日志解析,获取增量变更进行同步,由此衍生出了增量订阅和消费业务,从此开启一段新纪元。

    是什么

    canal [kə’næl],译意为水道/管道/沟渠
    主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费

    官方Wiki

    https://github.com/alibaba/canal/wiki

    原理

    mysql主备复制

    canal的原理和mysql的主备复制原理相似,先提下mysql主备复制实现原理
    mysql的主从原理
    从上图来看,mysql主备复制分成三步:
    1.master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
    2.slave将master的binary log events拷贝到它的中继日志(relay log);
    3.slave重做中继日志中的事件,将改变反映它自己的数据。

    mysql的binlog介绍

    在MySql中常用的数据库表结构变更DDL和DML都会产生对应的操作日志,通过这个操作日志一般可以用来进行MySql故障后的数据恢复,以及MySql的主从同步使用;那么这个日志就是我们常说的MySql的binlog日志,binlog日志是一个二进制日志文件,并非是纯粹的文本文件。

    canal原理

    在这里插入图片描述
    1.canal 模拟 MySQL slave 的交互协议,伪装自己为 MySQL slave ,向 MySQL master 发送 dump 协议
    2.MySQL master 收到 dump 请求,开始推送 binary log 给 slave (即 canal )
    3.canal 解析 binary log 对象(原始为 byte 流)

    canal架构图

    在这里插入图片描述
    说明
    1.server代表一个canal的运行实例,对应一个jvm
    2.instance对应一个数据队列(1个server对应n个isntance)
    instance模块
    EventParser (数据源接入,模拟slave协议和master进行交互,协议解析)
    EventSink(parse和store的连接器,进行数据过滤,加工,分发等工作)
    EventStore(数据存储)

    canal项目模块介绍

    在这里插入图片描述
    canal项目是基于maven构建的,将不同的功能模块划分了不同的子模块。
    我们可以简单执行可执行模块deployer,也可以将模块通过maven依赖的方式,将你需要的子模块引入到你自己的项目中进行使用开发。

    核心模块功能:

    deployer模块:独立部署模块,用于canal-server的独立启动,包括本地配置解析、拉取远程配置、启动canal-server。
    server模块:canal-server的实现逻辑,一个canal-server一般是一个jvm进程。重点关注两种canal-server的实现方式,内嵌型的canalServerEmbed和独立使用的canalServerWithNetty。新版本中新增了直接对接mq的canal-server实现。
    instance模块:具体实时订阅任务是由一个个instance组成的,每个canal-server中可以同时运行多个instance。instance由parser、sink、store三个重点模块组成。
    parser模块:数据源接入,模拟slave协议和master进行交互,协议解析。parser模块依赖于dbsync、driver模块。
    sink模块:将parser抓取到的数据,进行过滤,加工,然后发送到store模块进行存储。核心接口为CanalEventSink。
    store模块:数据存储模块,类似内存模式到消息队列,本质上是一个RingBuffer。核心接口为CanalEventStore。
    meta模块:增量订阅&消费信息管理器,核心接口为CanalMetaManager,主要用于记录canal消费到的mysql binlog的位置
    client模块:项目最早的消费客户端,通过将client模块引入自己的项目中,然后直接消费canal-server获取的数据。
    client-adapter模块:1.1.x后新出的模块,可以独立部署为canal-server的消费服务端,是一个springboot项目。通过SPI机制,能够加载不同plugins,将消费信息投递到ES\hbase\rdb等下游。
    admin模块:1.1.x新出的模块,可以独立部署为canal-server的控制台,配置canal-server、instance相关配置,非常好用。

    关联模块

    我们从整体到局部来看一下。
    整体架构关联,包括admin模块、server模块、client-adapter模块
    在这里插入图片描述
    1)server模块是服务端核心模块,用来拉取binlog的实时变更,然后投递到客户端。
    2)server可以通过配置,选择投递到MQ,或者是启动一个netty,让客户端来拉取。
    3)client-adapter就是一个独立部署到服务,可以直接拉取canal-server的消息(或者拉取mq的消息),转发到对应RDS/Redis/HBase,当然,你也可以自己实现一个转发到redis的adapter
    4)admin模块是管理控制台,可以调度canal-server组成一个个集群实现instance的高可用、可以更改server、instance的配置信息。
    Canal-server模块局部关系,包括deployer模块、server模块、instance模块、parser模块、sink模块、store模块、meta模块、client模块。

    在这里插入图片描述
    1)deployer模块是一个启动模块,可以启动canal-server。
    2)一个server是一个独立应用,是一个jvm进程,里面可以有多个instance对象。
    3)instance内包括了parser、sink、store、meta
    4)parser负责获取binlog变更,然后sink将parser获取的binlog变更转换为event,存入store。
    5)meta是元信息管理器
    6)client模块可以内嵌入你的应用,用来消费canal-server的消息事件。

    与Maxwell对比

    Maxwell是一个能实时读取MySQL二进制日志binlog,并生成JSON格式的消息,作为生产者发送给Kafka、RabbitMQ等中间件的应用程序。它的常见应用场景有ETL、缓存构建、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、切库binlog回滚方案等。
    官网:http://maxwells-daemon.io
    Canal由Java开发,分为服务端和客户端,拥有众多的衍生应用,性能稳定,功能强大;Canal需要自己编写客户端来消费Canal解析到的数据。
    Maxwell相对于Canal的优势是部署使用简单,基本不需要复杂的配置。它直接将数据变更输出为json字符串,不需要再编写客户端。对于缺乏基础建设,短时间内需要快速迭代的项目和公司比较合适。
    在这里插入图片描述

    canal的使用场景

    数据库实时备份
    业务cache刷新
    数据增量处理
    跨数据库的备份,例如mysql=》es,mysql=》redis,mysql=》kafka…

    参考资料

    https://www.jianshu.com/p/95fc321c20b2
    https://cloud.tencent.com/developer/article/1728945

    展开全文
  • 什么是 redux? 三大原则? 什么是 redux Redux 是一个基于 js 的全局可预测...Redux 的实现借鉴了 Flux, 如单项数据流。但又有别于 Flux,如全局单例 store redux 三大原则 单一数据源 store 必须是唯一的,全局的

    什么是 redux? 三大原则?

    什么是 redux
    Redux 是一个基于 js 的全局可预测状态容器,主要用于现代前端框架中进行全局状态管理,能够在不同组件之间进行状态共享
    Redux 常与 React 配合使用,但它并非只能用于 React,由于 Vue 官方推出了自己的状态管理库 Vuex,因此 Redux 很少在 Vue 中使用
    Redux 的实现借鉴了 Flux, 如单项数据流。但又有别于 Flux,如全局单例 store

    redux 三大原则

    1. 单一数据源
      store 必须是唯一的,全局的 state 存储在单一 store 中

    2. state 是只读的
      state 只能通过派发 action 来改变

    3. reducer 必须是纯函数
      reducer 只做一件事情,通过累积的 preState 和当前的 action 计算得出新的 state
      相同的输入必须得到相同的结果,因此 reducer 必须是一个纯函数

    reducer 中不应该出现副作用,比如发请求


    为什么要用 redux

    React 的定义是"一个用于构建 UI 界面的 javascript 库",React 关注的点在于如何将状态转换为 UI(UI = fn(state)),在自带的状态管理方案中:

    • state: 适用于管理自身状态,也可联合 this.props.chidren 实现 callback render
    • props: 适用于父子组件传值,但父子组件嵌套过深时这种方式过于繁琐
    • context: 适用于父子组件嵌套过深和兄弟组件共享状态的场景。context 一般是作为局部的状态管理方案而不是全局的,因为 context 一旦更新,Provider 下包裹的所有子组件都会重新渲染,造成性能问题

    在一个复杂的应用中,数据的流向存在跨层、反向的数据流, 在交互上也存在父子、兄弟、跨组件通信, 不利于维护
    而 Redux 只需要在最外层传入 store, 内层组件即可通过 props 与 store 中的状态交互
    在 Redux 中,数据的流动是单向的,store 是全局单一的,reducer 是纯函数,同样的输入得到的输出一定相同,因此状态是可预测的

    什么时候用 redux

    1. 某个组件的状态,需要让其他组件可以随时拿到
    2. 一个组件需要改变另外一个组件的状态
    3. 如果你不确定要不要用 redux,那就一定不需要用 redux

    redux 基本 api

    createStore

    createStore 是 redux 的重要组成部分, 大部分 api 都基于它生成
    以下是 createStore 的形参列表

    1. reducer: 初始化、更新 state
    2. preloadedState: 默认初始化 state,但一般不用它而是 reducer 处理 init action 来初始化一个 state
    3. enhancer: 一般用于 applyMiddleWare 增加中间件,作用是对 createStore 进行增强,覆盖原来的 dispatch 来实现一些功能上的拓展,如异步 action、日志打印、异常监听

    getState

    获取 state 的唯一方式,返回当前最新的 state
    createStore 内部维持了一个变量 currentState,这个变量是私有的,对外部隐藏,只通过唯一接口 getState 对外暴露
    react-redux connect 方法底层也是通过这个 api 拿到 state


    dispatch

    改变 state 的唯一方式,通过 dispatch 将用户的行为以 action 的形式通知给 redux,通知 redux 把计算最新的状态并反馈给用户
    如果你想在 dispatch 的前后做一些拓展功能,比如异步 action,异常收集,日志打印,建议使用中间件来做一些增强


    subscribe

    订阅 store 的状态变化,当且仅当 dispatch 触发状态更新之后执行入参 callback 回调函数,并返回一个取消订阅时执行的回调函数。
    通常我们使用这个 api 来实现 redux 和其他 js 库通信
    react-redux 底层在 Provider 中通过 store.subscribe 发起订阅,在 state 改变时,会检查子组件是否通过 connect 消费了 store 以及子组件的 props 有变化,如果这两个条件都满足,就使用最新的状态更新子组件,从而达到精确的最小粒度的 render,相对于 context 一旦数据更新就渲染所有 Provider 包裹的子组件而言,这种处理方式在性能上显然是更优的


    redux combineReducers 拆分reducer

    随着业务复杂度的增加,把所有状态都放在一个 reducer 中进行处理只会让代码变得更加难以维护
    此时可以利用 combineReducers 拆分多个不同的 reducer,对不同业务模块的状态进行分别管理

    combineReducers 接受一个 reducers obj 作为入参,你可以给不同 reducer 指定 key,这样调用 getState 时拿到的也是对应 key 的 state
    如果多个组件要共享 state,使用相同的 reducer 即可

    import {combineReducers, createStore} from 'redux'
    import countReducer from './reducer'
    import countReducer2 from './count2reducer'
    
    const store = createStore(combineReducers(myCountState:countReducer,myCountState2:countReducer2}))
    // store.getState() {myCountState:{...},myCountState2:{...}}
    
    export default store
    

    redux MiddleWare 中间件

    如果要记录状态的历史变化,你会怎么做?
    我们可能很容易想到只要在 dispatch 前后分别 log 一下就好了
    但是一个复杂的大型项目,调用 dispatch 的地方不计其数,上述实现过于臃肿

    所以我们应当使用中间件

    中间件其实就是对 dispatch 的增强,中间件在 action 到达 store 的前后提供了逻辑插入点,我们可以在上面实现一些异步 action、日志输出、异常检测等功能

    使用中间件
    通过 applyMiddleWare 传入中间件

    const store = createStore(reducer, applyMiddleware(thunk))
    

    redux 数据流向

    1. 初始化 store,此时 redux 会 dispatch 一个 type 为 init,payload 为 undefined 的 action 并从 reducer 拿到最初的 state
    2. 组件引入 store 并通过 getState 消费 store 状态,通过 subscribe 订阅 store 状态变化
    3. 用户动作产生 action,dispatch 派发 action 到 store 并通过 reducer 更新状态。dispatch 的前后如果有中间件会在此时执行中间件相关逻辑
    4. 状态更新发布之后通知订阅者,订阅者执行注册订阅的回调函数,在回调函数中可以调用 render 将最新的状态展现给用户,并等待用户的下一次动作

    展开全文
  • 中间件

    2021-03-17 07:57:51
    中间件(英语:Middleware),又译中间件、中介层,是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。中间件位于客户机服务器的...

    中间件的定义

    中间件(英语:Middleware),又译中间件、中介层,是一类提供系统软件和应用软件之间连接、便于软件各部件之间的沟通的软件,应用软件可以借助中间件在不同的技术架构之间共享信息与资源。中间件位于客户机服务器的操作系统之上,管理着计算资源和网络通信。 – 维基百科

    个人理解:

    将具体业务和底层逻辑解耦的组件,非业务的技术类组件非业务的技术类组件。是一种应用于分布式系统的基础软件,位于应用与操作系统、数据库之间,为上层应用软件提供开发、运行和集成的平台。中间件解决了异构网络环境下软件互联和互操作等共性问题,并提供标准接口、协议,为应用软件间共享资源提供了可复用的“标准件”。

    大致的效果是:

    介于操作系统和应用程序之间的产品,中间件简单解释,你可以理解为面向信息系统交互,集成过程中的通用部分的集合,屏蔽了底层的通讯,交互,连接等复杂又通用化的功能,以产品的形式提供出来,系统在交互时,直接采用中间件进行连接和交互即可,避免了大量的代码开发和人工成本。其实,理论上来讲,中间件所提供的功能通过代码编写都可以实现,只不过开发的周期和需要考虑的问题太多,逐渐的,这些部分,以中间件产品的形式进行了替代。需要利用服务的人(前端写业务的),不需要知道底层逻辑(提供服务的)的具体实现,只要拿着中间件结果来用就好了。
    

    举个例子:

    比如常见的消息中间件,即系统之间的通讯与交互的专用通道,类似于邮局,系统只需要把传输的消息交给中间件,由中间件负责传递,并保证传输过程中的各类问题,如网络问题,协议问题,两端的开发接口问题等均由消息中间件屏蔽了,出现了网络故障时,消息中间件会负责缓存消息,以避免信息丢失。相当于你想给美国发一个邮包,只需要把邮包交给邮局,填写地址和收件人,至于运送过程中的一系列问题你都不需要关心了。再比如我开了一家炸鸡店(业务端),然而周边有太多屠鸡场(底层),为了成本我肯定想一个个比价,再综合质量挑选一家屠鸡场合作(适配不同底层逻辑)。由于市场变化,合作一段时间后,或许性价比最高的屠鸡场就不是我最开始选的了,我又要重新和另一家屠鸡场合作,进货方式、交易方式等等全都要重来一套(重新适配)。然而我只想好好做炸鸡,有性价比高的肉送来就行。于是我找到了一个专门整合屠鸡场资源的第三方代理(中间件),跟他谈好价格和质量后(统一接口),从今天开始,我就只需要给代理钱,然后拿肉就行。代理负责保证肉的质量,至于如何根据实际性价比,选择不同的屠鸡场,那就是代理做的事了。

    链接:https://www.zhihu.com/question/19730582/answer/140527549

    评判关键从定义可以总结出评判的几个地方

    1. 性质:中间件是软件。
    2. 作用层级:系统软件和应用软件之间、软件各部件之间;管理客户机与系统软件之间的计算资源和网络通信。
    3. 服务对象:中间件为应用软件服务,应用软件为最终用户服务,最终用户并不直接使用中间件。
      在这里插入图片描述

    分类

    在这里插入图片描述

    中间件可以分为基础中间件、集成中间件和行业领域应用平台。其中,基础中间件是构建分布式应用的基础,也是集成中间件和行业领域应用平台的基础,包括应用服务器、消息中间件和交易中间件等。
    在这里插入图片描述

    三大基础中间件分别为交易中间件、消息中间件和应用服务器中间件,其中:

    交易中间件是:专门针对联机业务处理系统而设计的

    是所有中间件类型中理论较为成熟、功能和性能界定比较清晰的中间件产品。在联机业务处理系统中,需处理大量并发进程,涉及到操作系统、文件系统、数据通讯、数据库管理、应用软件等,通过交易中间件,可降低联机业务处理系统的开发难度,提高系统运行的安全稳定性。交易中间件主要应用在金融、财税、运输、电力、电信等行业中,如银行业务系统、电信计费系统等。

    消息队列(Message Quequing)是在消息传输过程中保存消息的容器,消息中间件即为消息队列的承载形式。

    消息是两台计算机间传送的数据单位,消息队列在将消息从它的源中继到它的目标时充当中间人,主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它,主要解决传统结构耦合性问题、系统异步性问题以及缓解大数据量并发的问题等。

    消息队列有较多的型号,较为常用的为ActiveMQ、Rabbit MQ、RocketMQ和Kafk a。由于消息队列使用消息将应用程序连接起来,这些消息通过像Rabbit MQ的消息代理服务器在应用程序之间路由。

    应用服务器中间件位于客户浏览器和数据库之间,为应用程序提供业务逻辑的代码。

    应用服务器通过组件的应用程序接口将商业应用逻辑曝露给客户端的程序,同时为应用提供运行平台和系统服务,并管理对数据库的范围。对于高端需求,应用服务器具有高可用性监视、集群化、负载平衡、集成冗余和高性能分布式应用服务,以及对复杂的数据库访问的支持等功能。目前,市场上应用服务器平台中有J2EE,WebLogic,Glassfish,JBoss企业应用平台,以及Apache Tomcat和Apache Geronimo等。
    中间件技术发展的初衷是以适应网络技术应用的复杂性及跨平台特性为基础,是在软件产业不断发展过程中自然产生的。

    云服务

    云计算产业自下而上大体分为基础设施即服务(IaaS)、平台即服务(PaaS)、软件即服务(SaaS)三大部分,对应传统IT架构中的操作系统、中间件和应用软件。传统中间件服务一般使用专有API和专有协议,PaaS服务的特点在于开放开源,基于标准通用的API在异构系统之间实现互通互操作。根据Gartner分类,PaaS分为iPaaS(集成平台即服务)和aPaaS(应用部署和运行平台),前者侧重于PaaS与IaaS之间,实现跨多个云、云与传统应用程序之间以及公共云和私有云之间的缝集成;后者侧重于PaaS与SaaS之间,支持应用程序在云端的开发、部署和运行等。iPaaS和MWaaS成为全球中间件行业热点。根据Gartner于2018年6月发布的报告显示,企业对iPaaS(集成平台即服务)和MWaaS(中间件即服务)的投入将超越传统市场。2017年,传统中间件产品增速仅有个位数增长,而基于云和基于开源的应用集成(iPaaS)产品将继续保持两位数的增长(2017年iPaaS营收首次突破10亿美元,同增72%),是挑战者们角力的重点领域。而iPaaS的成功催生了MwaaS(中间件即服务)业务,MWaaS套件可以视为一组基于云的混合集成服务,包括云集成(iPaaS)、基于云的API平台(提供开发、运行、管理和保护API服务)、基于云的B2B集成(提供除API之外的其他服务,如EDI和MFT集成)、移动后端集成(MBaaS),、物联网集成等。以华为举例,华为重视云中间件市场,将其作为白皮书中重要细分行业。在其《鲲鹏计算产业白皮书》中测算,到2023年,全球中间件市场空间434亿美元,5年复合增长率10.3%。中国中间件市场空间13.6亿美元,5年复合增长率15.7%。且用户对于基于云的分布式应用服务、消息队列等中间件工具的需求不断增长,将会促进中间件市场的快速发展。目前,华为云中间件产品主要包括应用中间件系列产品和分布式数据库中间件(DDM)。其中,应用中间件系列产品主要包括应用管理与运维平台ServiceStage、微服务引擎CSE、分布式缓存服务Redis和Memcached、分布式消息服务(包括DMS、Kafka、RabbitMQ)、API网关APIG和云性能测试服务CPTS等。

    常见种类

    中间件是什么

    中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。

    执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或 OS 环境。

    中间件是介于操作系统和应用软件之间,为应用软件提供服务功能的软件,有消息中间件,交易中间件,应用服务器等。由于介于两种软件之间,所以,称为中间件。

    为什么使用中间件

    具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担。

    中间件带给应用系统的,不只是开发的简便、开发周期的缩短,也减少了系统的维护、运行和管理的工作量,还减少了计算机总体费用的投入。

    主要中间件的分类

    1. Hadoop
      当一个大的任务由一台机器在规定的时间内不能完成时,人们就要采用分布式计算,即很多台机器联合起来共同完成任务。换句话说,就是把大任务拆分成许多个小任务,然后再把这些小任务分配给多台计算机去完成。参与计算的多台计算机组成一个分布式系统,需要运行一系列的分布式基础算法。

    Hadoop 就是一个分布式计算平台,用 Java 语言开发,包含 Common、MapReduce 和 HDFS 三个核心部件(HDFS 和 MapReduce 是最核心的两个部件)。其中:
    Common 为 Hadoop 的其他项目提供了一些常用工具,主要包括系统配置工具 Configuration、远程过程调用 RPC、序列化机制和 Hadoop 抽象文件系统等。
    MapReduce 是处理海量数据的计算模型。
    而 HDFS 用于存储海量数据,它具备高度容错性,能在低成本的通用硬件机器上稳定运行。

    Hadoop 实现了分布式计算中的基础算法(如一致算法、选举算法、故障检测、快照等),同时为用户提供了编程和命令接口。程序员调用这些函数能轻松写出分布式应用程序,我们都知道,如果一切从头开始,要完成一个分布式程序的编写是异常艰难的。

    Hadoop 在海量非结构化数据处理方面能充分展示它的优势,如消费者购买行为分析、商品推荐、关键词检索、信贷风险评估等。

    如图 1 所示,Hadoop 其实就是一个分布式计算平台,它“覆盖”在操作系统之上,向上提供函数调用(API)和命令接口,在水平方向完成分布式系统的基础算法。作为编程人员和用户,只要了解 API 和命令即可。
    在这里插入图片描述
    图 1 Hadoop

    基于 Hadoop 平台衍生出来的开源项目主要有 Yarn、HBase、Hive、ZooKeeper、Avro、Sqoop、Mahout、Crossbow 等。

    以 Hadoop 为基础的生态目前已经成为大数据的标准方案,被广泛用于金融、市场、电信、交通等行业的海量数据分析,在即将到来的大数据时代,它将会发挥更大的作用。

    在中国,很多行业(如银行、电信、移动、电力、石油、交通等)沉淀了大量的业务数据,对这些海量数据进行挖掘和分析,将会带来巨大的价值。

    用 Hadoop 构建的应用实例对于计算资源的消耗具备两个明显的特征:
    资源需求大:表明 Hadoop 需要大量的存储、计算和网络带宽。
    资源需求具备季节性:表明除存储需求是经常性占用外,在运行 Mapreduce 时才需要大量的计算和网络资源,而分析大量数据的工作并不是经常性的——称为季节性

    因此,云计算是大数据天生的计算资源供应途径,云计算的资源弹性很好地满足了大数据的季节性计算资源需求。也就是说,大数据是云计算经典的应用案例。当然,也可以按照大数据对计算资源的波峰需求静态配给计算资源,但是这种方案会造成资源的巨大浪费。
    2. LVS
    LVS 是 Linux Virtual Server 的首字母缩写,意为 Linux 虚拟服务器,即把许多台物理 Linux 计算机逻辑上整合成一台超级计算机,对用户来说感觉只有一台计算能力很强的服务器,如图 2 所示。

    LVS 就是一个由软件实现的负载均衡器,工作在网络 OSI 的第四层(应用层),是中国人章嵩开发的,代码已经并入了 Linux 内核。利用它,再加上一台廉价的计算机,就能构建一台企业级的负载均衡器。而那些外国大公司的负载均衡器,售价都要十几万元,甚至几十万元,便宜的也要几万元,LVS 出来后,这些产品都不得不降价。

    负载均衡器的作用就是把任务分配给最合适的服务器。比如一个大型购物网店,有 100 台同样配置的服务器在运行,如果某一时刻有 10 万用户在线购物,那么通过负载均衡器,每台服务器差不多承担 1000 个在线购物用户。

    LVS 的官网网站是 http://www.linuxvirtualserver.org。另外,两个较为流行的第七层负载均衡器是 Nginx 和 HAProxy,针对应用做均衡,所以能适应的负载种类没有 LVS 多。
    在这里插入图片描述
    LVS原理图

    1. Linux-HA
      也许有读者会问:“负载均衡器本身故障怎么办?”是的,如果负载均衡器出现故障,那么整个系统(如网店)将会瘫痪。所以人们开发了各种集群软件,如 Linux-HA 和 Keepalive 等,而微软干脆就在 Windows 服务器版中集成故障转移集群软件。

    集成故障转移集群软件的核心思想是,实时检测故障机器并及时让好的机器接管工作,对外提供高可用性。Linux-HA 意为 Linux 高可用性项目,此项目具体包含如下几个组件。
    在这里插入图片描述

    通过心跳信号(Heartbeat)检测故障,一台好的计算机会不断向其他计算机发送心跳信号,也会接收其他计算机发送过来的心跳信息。当在规定的时间内没有收到对方计算机的心跳信号时,就启动应急预案,进一步确认故障并准备接管那台计算机的任务。

    例如,我们采用两台 LVS 计算机,并分别安装和配置 Linux-HA,一台 LVS 计算机作为工作机,另一台作为备份机,两台 LVS 计算机互相监督对方的运行状态。当工作机故障时,备份机接管负载均衡任务并报警。相反,当备份机出故障时,只报警,提醒技术员维修备份机。

    两台LVS计算机同时出故障是比较糟糕的情况,不过这种情况发生的概率很小,除非机房断电或者遭到雷击。对于一些非常关键的应用,可以增加参与负载均衡的服务器数量来提高可靠性,如民航飞机上采用 5 台服务器。
    4. 静态网站服务器
    我们浏览一家公司的网站时,很可能就是跟那家公司服务器上的 Apache 程序打交道,网页浏览器与 Apache 成了标准的 C/S 模式,浏览器是客户端,而 Apache 是服务端。Apache 首先把主页对应的文件 index.html 发给我们,我们看到主页内容后,点击主页上的某个链接,它又把该链接对应的文件发给我们,过程如图 3 所示。
    访问静态网页的过程
    在这里插入图片描述

    图 3 访问静态网页的过程

    配合 PHP 引擎,Apache 也支持 PHP 动态网页。过程为:

    1)当 Apache 收到用户要浏览的 PHP 文件后,把这个 PHP 文件发给 PHP 执行引擎。

    2)PHP 执行引擎执行该 PHP 文件,产生一个临时的静态网页文件并发回给 Apache。

    3)最后 Apache 把这个临时的静态网页文件发给用户。

    采用 Perl、Python 和 Ruby 脚本语言编写的动态网页,其工作过程与 PHP 类似。

    Apache 是最流行的开源网站服务器,在世界排名前 100 万的网站中,有 60.6% 的网站采用 Apache;在排名前 1000 的大型网站中,Apache 占到了 34.5%,而 Ngnix 占到了 34.9%,略胜于 Apache。
    5. 动态应用服务器
    开源的动态应用服务器有 JBoss、Tomcat、Geronimo、JOnAS,关于这些项目更详细的介绍,请参考相应的官方网站。

    推荐

    常见的中间件有哪些
    1.一般本地开发的话,小项目,或者是个人开发建议使用tomcat。
    2.linux系统建议使用jetty或apache hpptd
    3.大型的项目就用JBOSS或webloigc

    4.大项目或者商业项目一般采用:weblgoic/webshere,其他的还有jboss、glasshfish等
    5.一些示例项目或者小项目常采用jetty

    6.tomcat , jboss, weblogic, websphere 一般项目tomcat就可以了

    Tomcat是Sun的JSWDK(JavaServer Web Development Kit)中Servlet的运行环境(servlet容器)。Tomcat是Apache Jakarta软件组织的一个子项目,Tomcat是一个JSP/Servlet容器,它是在SUN公司的JSWDK(Java Server Web Development Kit)基础上发展起来的一个JSP和Servlet规范的标准实现,使用Tomcat可以体验JSP和Servlet的最新规范。经过多年的发展,Tomcat不仅是JSP和Servlet规范的标准实现,而且具备了很多商业Java Servlet容器的特性,并被一些企业用于商业用途。

    JBoss是一个运行EJB的J2EE应用服务器。它是开放源代码的项目,遵循最新的J2EE规范。从JBoss项目开始至今,它已经从一个EJB容器发展成为一个基于的J2EE的一个web 操作系统(operating system for web),它体现了J2EE规范中最新的技术

    WebLogic服务器是企业级的应用服务器,支持EJB, 集群以及 ERP(企业资源计划)的连通性 ,开发公司:BEA。

    WebSphere产品系列是IBM公司一套典型的电子商务应用开发工具及运行环境

    Tomcat 介绍 如今,基于Web的应用越来越多,传统的Html已经满足不了如今的需求。我们需要一个交互式的Web,于是便诞生了各种Web语言。
    如Asp,Jsp,Php等。当然,这些语言与传统的语言有着密切的联系,如Php基于C和C++语言,Jsp基于Java语言。Tomcat即是一个Jsp和Servlet
    的运行平台。
    Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发
    而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。Tomcat被JavaWorld杂志的编辑选为2001年度最具创新
    的java产品,可见其在业界的地位。
    Tomcat最新版本是4.0x.4.0x与3.x的架构不同,而是重新设计的。Tomcat4.0x中采用了新的Servlet容器:Catalina,完整的实现了Servlet2.3
    和Jsp1.2规范。Tomcat提供了各种平台的版本供下载,可以从http://jakarta.apache.org上下载其源代码版或者二进制版。由于Java的跨平台
    特性,基于Java的Tomcat也具有跨平台性。
    与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(WebArchive)文件。WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是许
    多文件的一个压缩包。这个包中的文件按一定目录结构来组织:通常其根目录下包含有Html和Jsp文件或者包含这两种文件的目录,另外还会有
    一个WEB-INF目录,这个目录很重要。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而
    classes目录下则包含编译好的Servlet类和Jsp或Servlet所依赖的其它类(如JavaBean)。通常这些所依赖的类也可以打包成JAR放到WEB-INF
    下的lib目录下,当然也可以放到系统的CLASSPATH中,但那样移植和管理起来不方便。
    在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器
    中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。另外Tomcat也提
    供了一个应用:manager,访问这个应用需要用户名和密码,用户名和密码存储在一个xml文件中。通过这个应用,辅助于Ftp,你可以在远程通
    过Web部署和撤销应用。当然本地也可以。
    Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如
    Apache.我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet.这种集成只需要修改一下Apache和
    Tomcat的配置文件即可。
    另外,Tomcat提供Realm支持。Realm类似于Unix里面的group.在Unix中,一个group对应着系统的一定资源,某个group不能访问不属于它的资
    源。Tomcat用Realm来对不同的应用(类似系统资源)赋给不同的用户(类似group)。没有权限的用户则不能访问这个应用。Tomcat提供三种
    Realm,1:JDBCRealm,这个Realm将用户信息存在数据库里,通过JDBC获得用户信息来进行验证。2:JNDIRealm,用户信息存在基于LDAP的服
    务器里,通过JNDI获取用户信息。3:MemoryRealm,用户信息存在一个xml文件里面,上面讲的manager应用验证用户时即使用此种Realm.通过
    Realm我们可以方便地对访问某个应用的客户进行验证。
    在Tomcat4中,你还可以利用Servlet2.3提供的事件监听器功能,来对你的应用或者Session实行监听。Tomcat也提供其它的一些特征,如与SSL
    集成到一块,实现安全传输。还有Tomcat也提供JNDI支持,这与那些J2EE应用服务器提供的是一致的。说到这里我们要介绍一下通常所说的应
    用服务器(如WebLogic)与Tomcat有何区别。应用服务器提供更多的J2EE特征,如EJB,JMS,JAAS等,同时也支持Jsp和Servlet.而Tomcat则功
    能没有那么强大,它不提供EJB等支持。但如果与JBoss(一个开源的应用服务器)集成到一块,则可以实现J2EE的全部功能。既然应用服务器
    具有Tomcat的功能,那么Tomcat有没有存在的必要呢?事实上,我们的很多中小应用不需要采用EJB等技术,Jsp和Servlet已经足够,这时如果
    用应用服务器就有些浪费了。而Tomcat短小精悍,配置方便,能满足我们的需求,这种情况下我们自然会选择Tomcat.
    基于Tomcat的开发其实主要是Jsp和Servlet的开发,开发Jsp和Servlet非常简单,你可以用普通的文本编辑器或者IDE,然后将其打包成WAR即
    可。我们这里要提到另外一个工具Ant,Ant也是Jakarta中的一个子项目,它所实现的功能类似于Unix中的make.你需要写一个build.xml文件,
    然后运行Ant就可以完成xml文件中定义的工作,这个工具对于一个大的应用来说非常好,我们只需在xml中写很少的东西就可以将其编译并打包
    成WAR.事实上,在很多应用服务器的发布中都包含了Ant.另外,在Jsp1.2中,可以利用标签库实现Java代码与Html文件的分离,使Jsp的维护更
    方便。
    Tomcat也可以与其它一些软件集成起来实现更多的功能。如与上面提到的JBoss集成起来开发EJB,与Cocoon(Apache的另外一个项目)集成起
    来开发基于Xml的应用,与OpenJMS
    集成起来开发JMS应用,除了我们提到的这几种,可以与Tomcat集成的软件还有很多。
    Tomcat确实是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性。如今,开源软件越来越收到人们的重视,Linux就是一个成功
    的典型。

    多种中间件(Tomcat, Apache, Nginx, MQ,等)各项性能参数设置、监控及优化;

    特点

    一、中间件是什么?
    中间件(英语:Middleware)顾名思义是系统软件和用户应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑,是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件在客户服务器的操作系统、网络和数据库之上,管理计算资源和网络通信。总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。

    也就是说,关于中间件,我们可以理解为:是一类能够为一种或多种应用程序合作互通、资源共享,同时还能够为该应用程序提供相关的服务的软件。中间件是一类软件统称,而非一种软件;中间件不仅仅实现互连,还要实现应用之间的互操作。
    在这里插入图片描述 中间件示意图

    中间件的特点:

    满足大量应用的需要;
    运行于多种硬件和OS平台;
    支持分布计算,提供跨网络、硬件和OS平台的透明性的应用或服务的交互;
    支持标准的协议;
    支持标准的接口。

    展开全文
  • Spring中间件 - 什么是中间件

    千次阅读 2021-11-19 18:26:29
    一、前言 在互联网应用开发初期,所有用于支撑系统建设的,框架结构、基础工具、业务逻辑、功能服务包括页面展示等,都是在一个系统中开发完成,最终也只是把系统和数据库部署在...在中间件这一层的建设,基本是来自.
  • 【http://cloudate.net/?p=1165】2015/04/25 | 消息队列 | 罗伯特消息队列中间件是互联网行业不可或缺的一项基本技术,在高并发消峰,非关键业务异步化,通知系统,监控数据推送等场景下是必不可少的,下文为转载...
  • web中间件

    千次阅读 2021-01-29 08:55:38
    中间件是什么 中间件(英语:Middleware)是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,...
  • 消息中间件知识点

    2021-03-15 15:34:04
    消息中间件常见知识点一:消息队列的主要作用是什么?1.消息队列的特性:业务无关,一个具有普适性质的消息队列组件不需要考虑上层的业务模型,只做好消息的分发就可以了,上层业务的不同模块反而需要依赖消息队列所...
  • 中间件概述

    2021-01-30 12:14:56
    中间件概述产生背景概念定义基本功能通信支持应用支持公共服务 产生背景 近年来,随着计算机的快速发展,越来越多的应用软件需要在不同的网络协议、不同的硬件生产厂商以及不一样的网络平台和环境上运营。这导致了...
  • java中间件

    2021-02-06 14:31:00
    人们在使用中间件时,往往是一组中间件集成在一起,构成一个平台(包括开发平台和运行平台),但在这组中间件中必须要有一个通信中间件,即中间件=平台+通信,这个定义也限定了只有用于分布式系统中才能称为中间件,...
  • 文章目录前言Redis是单线程吗?Redis 单线程为什么还能这么快?Redis 单线程如何处理那么多的并发客户端连接?其他高级命令 前言 记录redis入门 ...因为它所有的数据都在内存中,所有的运算都是内存级别的
  • 常用中间件

    千次阅读 2021-10-24 22:26:40
    中间件 什么是中间件 中间件(Middleware)顾名思义是系统软件和用户软件之间连接的软件,以便于软件各部分之间的沟通,特别是应用软件对于系统软件的集中逻辑,是一种独立的系统或者服务程序,分布式应用软件借助...
  • 解决的问题数据库相关平台主要解决以下三个...水平扩容 --》代表中间件有(Cobar,Mycat,tddl,drds,ddb)增量数据订阅和消费,用户对数据库操作,比如DML DDL DCL操作,中间件可以监控这些操作所产生的增量数据。典...
  • 中间件的分类

    2021-09-12 22:05:09
    好比一个大型城市的交通系统,将网络看作市区马路,通过交通工具(如汽车)实现通信,每分钟将有数以万辆车在马路上行驶,如果没有相应的交通设施和管理规划,城市将乱成一团,发生各种交通事故,中间件系统就相当...
  • java消息中间件

    2021-02-12 10:00:55
    消息队列什么是消息队列消息队列是消息中间件的一种实现方式。什么是消息中间件?将消息中间件需要理解一下什么是消息和中间件?消息消息是指软件对象之间进行交互作用和通讯利用的一种方式。中间件百度百科的介绍:...
  • 常用中间件 引言 中间件(middleware)一词每天都被不同的人群所提及,中间件的产品也大量出现在软件市场,但中间件的定义却一直比较模糊,导致中间件的分类也不很统一。也许正因为如此,才使人们不断地设计和开发新...
  • 1. 什么是中间件中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或...
  • 中间件基础

    2021-01-06 18:03:09
    中间件 一、定义 中间件是位于平台(硬件和操作系统)和应用之间的通用服务,这些...主要用于异构系统(不同的数据库、业务系统、操作系统等)之间、提供资源整合、以实现互联互通、数据共享、业务流程协调统一功能,构
  • 一 什么是消息中间件?为什么使用消息中间件或者说消息中间件的使用场景? 1.1 什么是消息中间件 消息中间件:就是可以介于两个系统之间,用于存储、交换、路由消息的一个平台或者系统, 1.2 为什么使用消息中间件 ...
  • 中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些...
  • Django中间件

    2021-07-19 14:43:25
    每个中间件组件负责完成某个特定的功能。 一、中间件概念 Django中间件是修改Djangoreuqest 或者response对象的钩子,可理解为是介于HttpRequest与HttpResponse处理之间的一道处理过程。浏览器从请求到响应的...
  • mq是message queue的简写,也就是消息队列的意思,mq的最终目的就是用来通讯的,有些人说是用来解耦的,也有人说是用来做应用程序异步的,但其实异步和解耦只是mq的效果,mq的最终目的就是用来通讯的 有broker的mq...
  • 数据库中间件---详解

    千次阅读 2021-11-15 16:50:45
    1、当一张表进行水平分库分表之后,可能影响已有产品功能,同时想要进行多张分表的搜索结果数据聚合在一起,在sql上比较麻烦(只能不断 join),而且如果不知道分表的表名,业务sql书写上无法做到。 2、数据库...
  • 点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料来源:jianshu.com/p/ed7a263a436c前言什么是中间件开发?中间件开发人员需要哪些素质?如何成为中...
  • 介绍: 定义: 中间件,顾名思义存在于两个系统之间的,起到连接的设备。 (1)为什么是设备? 硬件和软件在一定程度上可以互用,中间件既可以是硬件...文件有时具有不同的格式,表现在应用上显示为拥有不同的ap.
  • 文章目录前言全链路压测文章地址具体流程要点 前言 这几天在面蚂蚁金服的国际支付事业部,刚好有个面试题是:全链路压测怎么设计?(ps:我当时有点闷逼的,因为我们...A:这个可以参考阿里开源中间件sofatrace里面spa
  • redux中间件详解

    2021-07-30 11:33:13
    1、redux中间件简介 ...这种机制可以让我们改变数据流,实现如异步 action ,action 过滤,日志输出,异常报告等功能。 通俗来说,redux中间件就是对dispatch的功能做了扩展。 先来看一下传统的redux执行流程: 图
  • 我们在开发项目的过程中大量的使用中间件。 在ASP.NET Core中,中间件是一个可以处理HTTP请求或响应的软件管道。在ASP.NET Core中,中间件具有非常特定的用途。比如,我们可能需要一个中间件验证用户,一个中间件...
  • 消息中间件简介 消息中间件的使用场景 消息中间件产生背景、特点和常用协议 常用消息中间件介绍(RabbitMQ、Kafka 、RocketMQ、ActiveMQ) 常用消息中间件的对比 常用消息中间件,如何技术选型?
  • 消息中间件选型,看这一篇就够了!!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,326
精华内容 33,730
关键字:

中间件会产生数据