thrift

Flume简介与详细安装教程

孤人 提交于 2020-08-11 14:47:04
Flume简介 Flume是Cloudera提供的日志收集系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。 Flume是一个分布式、可靠和高可用的海量日志采集、聚合和传输的系统。 Flume拥有基于数据流上的简单灵活架构,支持容错、故障转移与恢复。 Flume具有 Reliability、Scalability、Manageability和Extensibility 特点: 1.Reliability :Flume提供3中数据可靠性选项,包括End-to-end、Store on failure和Best effort。其中End-to-end使用了磁盘日志和接受端Ack的方式,保证Flume接受到的数据会最终到达目的。Store on failure在目的不可用的时候,数据会保持在本地硬盘。和End-to-end不同的是,如果是进程出现问题,Store on failure可能会丢失部分数据。Best effort不做任何QoS保证。 2.Scalability :Flume的3大组件:collector、master和storage tier都是可伸缩的。需要注意的是,Flume中对事件的处理不需要带状态,它的Scalability可以很容易实现。 3.Manageability

Java架构师面试之Netty面试专题及答案(共10题,含详细解答)

对着背影说爱祢 提交于 2020-08-11 14:46:22
【 Java架构师面试网 】收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号: Java架构师面试网 ,关注回复“ 资料 ”即可领取精美整理的面试资料一份哦~ 1.BIO、 NIO 和 AIO 的区别? BIO :一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO :将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO :一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO :一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理, BIO是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而NIO是非阻塞的;BIO的 Stream 是单向的,而NIO的channel 是双向的。 NIO 的特点:事件驱动模型、单线程处理多任务、非阻塞 I/O, I/O 读写不再阻塞,而是返回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、 IO 多路复用大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。 在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生

OSGi 系列(三)之 bundle 详解

一笑奈何 提交于 2020-08-11 03:12:33
OSGi 系列(三)之 bundle 详解 1. 什么是 bundle bundle 是以 jar 包形式存在的一个模块化物理单元,里面包含了代码,资源文件和元数据(metadata),并且 jar 包的物理边界也同时是运行时逻辑模块的封装边界。 2. MANIFEST.MF 规范 位置:META-NF/MANIFEST.MF 文件格式 属性声明的一般格式是 name: value 一行不超过 72 个字符,下一行则由单个空格字符开始 3. bundle 常用标识符 标识符 说明 Bundle-Category 描述用逗号分隔的分类名称 Bundle-Activator 启动和停止 bundle 的类名称 Bundle-Classpath 定义用逗号分隔的路径,包含的内容有 JAR 文件和包含类和资源的目录(bundle内部) .点号代表 JAR 文件的根目录,同时也是默认的 Bundle-Copyright 描述 bundle 的版权信息 Bundle-Description 对 bundle 的描述信息 Bundle-Localization 描述 bundle 的本地文件地址,默认值是 OSGI-INF/l10n/bundle Bundle-ManifestVers on Bundle-Name 定义了一个具有可读性的名字来标识 bundle。应该是一个简短易读没有空格的名

非常接地气的架构和分层方法,值得学习!

不打扰是莪最后的温柔 提交于 2020-08-10 17:59:28
作者:咖啡拿铁 https://juejin.im/post/5b44e62e6fb9a04fc030f216 1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。 看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签。 有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。 所以一个好的应用分层需要具备以下几点: 方便后续代码进行维护扩展; 分层的效果需要让整个团队都接受; 各个层职责边界清晰。 2、如何进行分层 2.1、阿里规范

27 道阿里巴巴 Java 常见面试题,你会几道?

耗尽温柔 提交于 2020-08-09 16:33:32
做技术的有一种资历,叫做通过了阿里的面试。 这些阿里Java相关问题,都是之前通过不断优秀人才的铺垫总结的,先自己弄懂了再去阿里面试,不然就是去丢脸,被虐。 希望对大家帮助,祝面试成功,有个更好的职业规划。 1面试常见问题 1、微信红包怎么实现。 2、海量数据分析。 3、测试职位问的线程安全和非线程安全。 4、HTTP2.0、thrift。 5、面试电话沟通可能先让自我介绍。 6、分布式事务一致性。 7、nio的底层实现。 8、jvm基础是必问的,jvm GC原理,JVM怎么回收内存。 9、Java是什么。 10、API接口与SDI接口的区别(API是提供给别人的接口)。 11、dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。 12、用过哪些中间件。 13、做过工作流引擎没有。 14、以前的工作经历,自己觉得出彩的地方(钉钉) 15、线程池的一些原理,锁的机制升降级(天猫、蚂蚁) 16、从系统层面考虑,分布式从哪些纬度考虑(天猫) 17、Hadoop底层怎么实现(天猫) 18、threadLocal,线程池, hashMap/hashTable/coccurentHashMap等(天猫) 19、秒杀系统的设计(天猫) 20、虚拟机,IO相关知识点(天猫) 21、Linux的命令(天猫) 22、一个整形数组,给定一个数,在数组中找出两个数的和等于这个数

Window下 分布式框架 thrift的安装

痞子三分冷 提交于 2020-08-09 11:00:28
一、Thrift介绍 Thrift最初由Facebook开发,后来提交给了Apache基金会将Thrift作为一个开源项目。facebook开发使用为了解决系统中各个系统间大数据量的传输通信以及系统之间语言环境不同需要夸平台特性,支持C++,Java,Python,PHP, Ruby,Erlang,Perl, Haskell,C#,JavaScript,Node.js,Smalltalk and OCaml都支持。Thrift是一个典型的CS结构,客户端和服务端使用不同的语言开发。既然客户端和服务端使用不同的语言开发,那么一定要有一种中间语言来关联客户端和服务端语言,这种语言就是IDL(Interface Description Language) 二、Window下Thrift环境安装 1、下载thrift,版本为0.13.0 http://archive.apache.org/dist/thrift/0.13.0/ 在D盘新建一个文件夹thrift,然后将thrift-0.13.0.exe重命名为thrift.exe,在D:\thrift文件夹下 2、修改环境变量 系统变量Path中增加D:\thrift 3、在命令行中查看thrift的版本 thrift -version 来源: oschina 链接: https://my.oschina.net/u/4344048

优秀的 Java 项目代码都是如何分层的?

自闭症网瘾萝莉.ら 提交于 2020-08-08 12:44:24
1、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无法复用,层级关系混乱,对后续代码的维护非常麻烦。 的确在这些人眼中分层只是一个形式,前辈们的代码这么写的,其他项目代码这么写的,那么我也这么跟着写。但是在真正的团队开发中每个人的习惯都不同,写出来的代码必然带着自己的标签,有的人习惯controller写大量的业务逻辑,有的人习惯在service中之间调用远程服务,这样就导致了每个人的开发代码风格完全不同,后续其他人修改的时候,一看,我靠这个人写的代码和我平常的习惯完全不同,修改的时候到底是按着自己以前的习惯改,还是跟着前辈们走,这又是个艰难的选择,选择一旦有偏差,你的后辈又维护你的代码的时候,恐怕就要骂人了。 所以一个好的应用分层需要具备以下几点: 方便后续代码进行维护扩展; 分层的效果需要让整个团队都接受; 各个层职责边界清晰。 2、如何进行分层 2.1、阿里规范 在阿里的编码规范中约束的分层如下: **开放接口层:**可直接封装 Service 方法暴露成 RPC 接口;通过

微服务架构的前世今生(六):微服务架构带来的问题

你。 提交于 2020-07-29 05:32:02
上次讲了微服务的前世今生(五):CAP 原则与 BASE 理论,这次我们再说微服务架构的前世今生(六):微服务架构带来的问题。 一、客户端如何访问服务? 传统的开发方式,所有的服务都是本地的,客户端可以直接调用,现在按功能拆分成独立的服务,客户端如何访问? 后台有 N 个服务,前台就需要管理 N 个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不符合我们拆分的理念,另外,N 个服务的调用也是一个不小的网络开销。还有一般微服务在系统内部,通常是无状态的,用户登录信息和权限管理最好有一个统一的地方维护管理(OAuth2)。 所以,一般在后台 N 个服务和客户端之间一般会一个代理(API Gateway),作用如下: - 提供统一服务入口,聚合接口使得服务对调用者透明,客户端与后端的耦合度降低 - 聚合后台服务,节省流量,提高性能,提升用户体验 - 提供安全、流控、过滤、缓存、计费、监控等 API 管理功能 二、服务之间如何通信? 因为服务都是独立部署的,所以通信也就成了问题,不过好在业界已经有很多成熟的解决方案,比如: **同步通信:** - REST(JAX-RS,Spring Boot) - RPC(Dubbo,Thrift) **异步通信:** - RabbitMQ,Kafka 三、这么多服务如何查找? 在微服务架构中,为了高可用,普遍采用集群方式构建服务

你不知道的java对象序列化的秘密

故事扮演 提交于 2020-07-27 03:48:18
简介 你知道序列化可以使用代理吗?你知道序列化的安全性吗?每个java程序员都听说过序列化,要存储对象需要序列化,要在网络上传输对象要序列化,看起来很简单的序列化其实里面还隐藏着很多小秘密,今天本文将会为大家一一揭秘。 更多精彩内容且看: 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新 Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新 Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新 java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程 更多内容请访问 www.flydean.com 什么是序列化 序列化就是将java对象按照一定的顺序组织起来,用于在网络上传输或者写入存储中。而反序列化就是从网络中或者存储中读取存储的对象,将其转换成为真正的java对象。 所以序列化的目的就是为了传输对象,对于一些复杂的对象,我们可以使用第三方的优秀框架,比如Thrift,Protocol Buffer等,使用起来非常的方便。 JDK本身也提供了序列化的功能。要让一个对象可序列化,则可以实现java.io.Serializable接口。 java.io.Serializable是从JDK1.1开始就有的接口,它实际上是一个marker interface,因为java