thrift

Elasticsearch整理笔记(一)

别来无恙 提交于 2020-09-28 00:11:46
Elasticsearch定义 elastic(弹性、灵活)+search(搜索) Elasticsearch 是一个支持分布式、高扩展、高实时的高效搜索与数据分析引擎。 支持分布式实时文件存储。 支持将字段值都编入索引,使其可以被搜索。 实时分析的分布式搜索引擎。 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。 Elasticsearch 的实现原理主要分为以下几个步骤 用户将数据提交到Elasticsearch 数据库中。 es通过分词控制器去将对应的语句分词。(这里如需更高级的策略优化,后期可以替换分词器)。 将其权重和分词结果一并存入数据库。 当用户搜索数据时候,根据权重将结果排名,打分(相关度)。 将返回结果呈现给用户。 有关概念 cluster:代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 shards:代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 replicas:代表索引副本

Flink序列化器

↘锁芯ラ 提交于 2020-08-18 23:20:05
如果应用使用的google protobuf 或 apache thrift序列器工具, 你是需要注册自已的序列化工具的。以protobuf和thrift为例,示例如下: 譬如 google protobuf 样例: 注册ProtobufSerializer序列化器: final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.getConfig().registerTypeWithKryoSerializer(PbSdkStat.DataRecords.class, ProtobufSerializer.class); 添加maven依赖 <dependency>   <groupId>com.twitter</groupId>   <artifactId>chill-protobuf</artifactId>   <version>0.7.6</version>   <!-- exclusions for dependency conversion -->   <exclusions>   <exclusion>    <groupId>com.esotericsoftware.kryo</groupId>    <artifactId>kryo

微服务理论与实践(六)-服务注册与发现

依然范特西╮ 提交于 2020-08-18 13:53:56
1.背景 l 服务的客户端(包括API网关或者其他服务)如何获取服务端实例的位置 l 每个服务端实例都会在特定的位置(主机及端口)通过HTTP/REST或者Thrift等方式发布一个远程API l 服务端实例的具体数量和位置会发生动态变化 l 虚拟机与容器通常会被分配动态IP地址 2.方案 (了解源码可+求求: 1791743380) 2.1 客户端服务发现 向某一服务发送请求时,客户端会通过查询Servcie Registry,即服务注册表来回去该服务的具体位置/该注册表包含全部服务的位置。 2.2 客户端服务发现的优缺点 (1)优点 l 相比服务端发现,客户端服务发现的活动部件与网络中转数量更少。 (2)缺点 l 需要为应用程序中使用的每种语言建立客户端发现逻辑 2.3 服务端服务发现 向某一服务发送请求时,客户端会通知在已知位置的路由器(或者负载均衡器)发送请求。路由器会访问服务注册表,并向可用的服务实例转发该请求。服务注册表也可能被内建于路由器之中。 2.4 服务端发现的优缺点 (1)优点 l 相较客户端发现,其客户端代码无需实现服务发现功能,只需要向路由机制发送请求即可。 (2)缺点 l 除非成为云环境的一部分,否则该路由机制必须作为另一个系统组件进行安装与配置。为实现可用性和一定的接入能力,还需要为其配置一定数量的副本。 l 相较于客户端发现

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

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

eShopOnContainers 知多少[11]:服务间通信之gRPC

删除回忆录丶 提交于 2020-08-15 11:32:04
引言 最近翻看最新3.0 eShopOncontainers源码,发现其在架构选型中补充了 gRPC 进行服务间通信。那就索性也写一篇,作为系列的补充。 gRPC 老规矩,先来理一下gRPC的基本概念。gRPC是Google开源的RPC框架,比肩dubbo、thrift、brpc。其优势在于: 1. 基于proto buffer:二进制协议,具有高性能的序列化机制。相较于JSON(文本协议)而言,首先从数据包上就有60%-80%的减小,其次其解包速度仅需要简单的数学运算完成,无需复杂的词法语法分析,具有8倍以上的性能提升。 2. 支持数据流。 3. 基于proto 文件:可以更方便的在客户端和服务端之间进行交互。 4. gRPC语言无关性: 所有服务都是使用原型文件定义的。这些文件基于protobuffer语言,并定义服务的接口。基于原型文件,可以为每种语言生成用于创建服务端和客户端的代码。其中protoc编译工具就支持将其生成C #代码。从.NET Core 3 中,gRPC在工具和框架中深度集成,开发者会有更好的开发体验。 gRPC 在 eShopOncontainers 的应用 首先来理一下eShopOncontainers 中服务间同步通信的技术选型,主要还是是基于HTTP/REST,gRPC作为补充。 在eShopOncontainers中Ordering API

REST和RPC简介和区别

血红的双手。 提交于 2020-08-15 06:26:54
参考文章: REST和RPC是什么东东?两者有什么区别 【架构师】微服务架构--REST与RPC Rest和RPC接口区别 1 REST与RPC概念 什么是REST REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。 REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。 HTTP动词与REST风格CRUD对应关系: 什么是RPC 远程方法调用,就是像调用本地方法一样调用远程方法。常见RPC框架结构图: RPC框架要做到的最基本的三件事: 1、服务端如何确定客户端要调用的函数; 在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。 2、如何进行序列化和反序列化; 客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化

.net hbase client--终于浮出水面的轮子

时光怂恿深爱的人放手 提交于 2020-08-15 06:26:39
一、开篇 1.背景 在大数据时代,HBase 数据库是个绕不开的热门话题。 由于其使用 Java 作为主要开发语言,并且依赖大量的 Java 组件(如 Hadoop、zooKeep),使得其他技术栈想要有一个对应的 hbase 客户端变得有一定难度。在 .net 的世界中,一直缺乏能够直接访问 hbase 的客户端。 2.历程 Apache Thrift 作为社区内比较有名的支持多语言的 Api 服务,可以解决跨语言访问 HBase 数据库的痛点。在以往的文章中业也介绍过 C#如何使用 thrift 访问 hbase,但在真正的生产环境中,该方式的访问效率和原生 Java 客户端比起来真着实让人心灰意冷。此外,thrift 也要求服务端和客户端版本一致。 Protocol Buffers HBase 提供基于 Protocol 的数据访问,这以一种相对高效紧凑的数据交换规则。基于此,我们能够造出属于 .net 的 hbase 客户端。 这是一个造轮子的过程,中间虽有着许多难点就不再赘述。下面直接介绍该项目的使用。 二、HBaseNet 使用 1.HBase 数据库准备 作为项目使用演示,我们就不讨论如何搭建 HBase 集群了,一切以简单便捷为前提,直接使用别人构建好的 docker 镜像就可以轻松获取 HBase 数据库的使用。 在 dockerhub 中搜索 hbase

爬虫数据库存储之关系型与非关系型

柔情痞子 提交于 2020-08-12 07:32:35
对于爬虫来说这些东西都是一些比较基础常识的东西,但为了记录自己的学习之路,所以简略的写下本文。 什么是数据库? 数据库是存放数据的仓库。它的存储空间很大,可以存放大量数据。用户可以对文件中的数据进行新增、查询、更新、删除等操作。 分为关系型数据库、非关系型数据库,如 MySQL、MongoDB、HBase 等,常用的库有 pymysql、pymssql、redis-py、pymongo、py2neo、thrift。 什么是关系型数据库? 关系型数据库是基于关系模型的数据库,而关系模型是通过二维表保存的,所以它的存储方式就是行列组成的表。 每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,就需要表与表之间的关联关系来体现。关系型数据可以很好地存储一些关系模型的数据,比如一个老师对应多个学生的数据(“多对多”),一本书对应多个作者(“一对多”),一本书对应一个出版日期(“一对一”) 关系型数据库的优势: 1. 复杂查询 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。 什么是非关系型数据库? 非关系型数据库主要是基于“非关系模型”的数据库(由于关系型太大,所以一般用“非关系型”来表示其他类型的数据库 关系型数据库的优势: 1. 复杂查询 可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。 2. 事务支持