Apache Thrift系列详解(一) - 概述与入门

Thrift,这个由Facebook操刀后来归入Apache开源阵营的框架,是个专门用来让不同编程语言之间轻松对话的轻量级远程服务调用工具。
它通过IDL(接口描述语言)和代码生成器这一套组合拳,能帮你搞定多种主流编程语言的服务端和客户端代码。
这篇文章将把焦点放在Java上,手把手教你如何配置和使用Thrift。
Thrift的架构设计得明明白白,分成传输层、协议层、处理层和服务层,这样各个部分之间的耦合度就低了很多,你可以根据不同的应用需求来灵活搭建服务。
Thrift的优点有不少,比如开发快、接口好维护、学起来不费劲、支持多种语言、用得稳等等。
说到底,Thrift的IDL文件语法简单易懂,得益于其源代码来自Google的Protobuf团队,初学者只要花点时间在thrift.apache.org上溜达溜达,一个小时左右就能摸门道。
支持的语言五花八门,像C++、Java、Python、PHP、Ruby这些都是小菜一碟,就连iOS的Objective-C(Cocoa)也基本覆盖,虽然可能稍微差点意思,但绝大多数情况下都能派上用场。
在多个开源项目里得到验证,在Facebook、百度、美团、小米、饿了么这些大厂中也随处可见。
Thrift的数据类型库相当丰富,基本类型、结构体、枚举、列表、字典等等,应有尽有。
在协议层面,它提供了文本和二进制两种传输方式,二进制那套在省带宽和提高传输效率上更胜一筹。
传输层协议常见的有TCP、UDP、TLS,服务端类型则有同步、异步和无状态这几种。
文章里会给你举个Thrift入门的栗子,从写IDL文件、用Thrift生成器生成Java代码,到建Maven项目、写服务端和客户端代码,再到怎么跑起来,一步步带你过。
看完这个栗子,你应该就能比较深入地理解怎么在Java环境里用Thrift搞远程服务调用了。
总而言之,Thrift靠着支持跨语言、开发效率高、维护简单、应用广泛这些优点,成了搭建分布式系统和远程服务调用的得力干将。
这篇文章就是想给初学者铺条明路,让大家能快速掌握Thrift的基本用法和核心概念。

1、Apache Kudu介绍及架构、工作原理、两种部署方式、使用限制详解

一、Apache Kudu概述 Cloudera开发的Apache Kudu是一款针对现代大数据环境打造的高效能存储解决方案。
它以其对随机读写操作和大规模数据分析的高效处理而著称,同时作为HDFS和HBase的补充,提供了创新的数据存储策略。

二、架构与运作机制 Kudu的基础架构由一个Master节点和多个TabletServer组成。
Master节点掌控集群运作和元数据管理,每个TabletServer则专注于数据的存储和处理。
数据以表的形态存储,每个表由Schema界定,主键确保数据的全局顺序。
读写操作中,Master节点指导数据写入特定的Tablet,而B树索引帮助定位读取数据。
MemRowSets和DiskRowSets的协同使用提升了数据访问的效率。

三、部署策略 Kudu的理想部署平台是CDH,这有助于简化时间同步和集群管理。
部署方式包括:
安装包部署:下载并安装Kudu安装包来完成部署。

文件部署:直接下载Kudu文件,随后进行配置和启动。
配置需求:部署时需确保Master和TabletServer地址的正确配置,并完成相应的权限设置。

四、使用约束 在Kudu中,主键一旦确定便无法更改,列类型在创建表时固定,后续不可修改。
此外,Kudu对单元大小和分片有特定要求,需在设计阶段予以考虑。
该引擎主要针对数据分析场景,不支持事务处理和部分关系数据库功能。
总结来说,Apache Kudu是一款为大数据而生的性能卓越的存储引擎,尽管在部署时推荐使用CDH环境并注意配置细节,但其使用上存在一些限制,需在设计阶段充分考虑。

Apache HttpClient 详解

ApacheHttpClient这个工具包在处理HTTP协议请求方面表现得相当给力,功能也挺全面的。
下面咱们来具体聊聊它:
1 . 项目背景和它的角色
它是ApacheJakartaCommon这个大项目下的一个小分支。

它专门负责提供HTTP客户端编程的解决方案,并且紧跟HTTP协议的最新动态和推荐做法。

2 . 对比Java自带的URLConnection
相比起来,HttpClient更方便开发者使用,上手更快。

它提供了更多的可配置选项,可以应对各种不同的需求。

使用HttpClient可以让开发过程更高效,而且代码也会更稳定。

3 . 使用ApacheHttpClient的步骤
首先要在项目中引入HttpClient的相关库。

然后根据需要获取HttpClient对象。

接下来可以配置一些参数,既可以全局配置也可以针对单个请求进行配置。

4 . 设置请求
可以在请求中设置自定义的请求头信息,也可以更改ContentType的值。

支持常见的GET和POST请求方式,使用起来也很直观。

5 . 文件上传和下载
文件上传可以通过构建MultipartEntity来实现。

文件下载的话,就是发送请求后读取输入流,然后保存到指定的路径。

6 . 处理响应
HttpClient把响应封装成了CloseableHttpResponse。

可以通过EntityUtils这个工具类,把HttpEntity转换成字节数组或者字符串。

还支持自定义响应处理器,可以返回特定的数据类型。

7 . 会话保持
通过HttpClientContext类可以实现会话保持,这样在需要登录访问其他接口的时候,可以保持会话状态。

总的来说,ApacheHttpClient功能很强大,是进行HTTP客户端编程的一个得力工具。
合理使用HttpClient,可以让开发者在处理HTTP协议相关功能时更加高效和灵活。

apache配置文件详解(apache设置的基本配置)

Apache的配置指令分为两大类:核心指令和第三方指令。
每个指令对应一个模块,其中核心的模块包括core_module、so_module、http_module和mpm_module,而so_module外的模块不可被禁用。
以下是httpd.conf主服务器配置的要点:
1 . ServerName:设定Apache的默认主机名,可以是域名或IP地址。
2 . ServerRoot:指定服务器所在目录,配置时通常以“-”作为前缀。
3 . DocumentRoot:定义Apache提供页面服务的根目录,路径需为绝对路径,如有空格需用引号括起。
4 . ServerAdmin:错误发生时,服务器向该邮箱地址发送错误通知。
5 . ServerAlias和Alias:两者均用于目录映射,ServerAlias将映射目录识别为CGI脚本目录,而Alias仅映射普通目录。
6 . 用户和组:定义运行Apache子进程的用户和用户组。
7 . Listen:指定Apache监听的端口号。
8 . LoadModule:用于加载模块或目标文件。
9 . 错误文档:定义不同错误状态下的文档,如5 00错误和4 04 错误。
1 0. 选项:决定在哪些目录中启用特定功能,如Exec、Include、NoExec、索引等。

关于容器部分:
1 . IfModule:根据模块是否加载来决定是否执行容器内的指令。
2 . IfDefine:封装只在条件为真时生效的指令。
3 . 目录匹配容器:指定指令在特定目录或子目录下生效。
4 . 文件匹配容器:针对文件进行匹配,可使用通配符和正则表达式。
5 . 位置匹配容器:处理位置相关的配置,覆盖之前的目录配置。

在配置容器时,Apache会首先处理目录容器,然后是位置容器,以覆盖之前的配置。
如果容器相同,将按字典顺序从短到长处理。