lex&yacc 学习笔记

    前一段时间在项目中要使用一个规则表达式计算的功能,而且想可以任意扩展计算功能,比如计算AUB,A和B都表示一个号码包,计算并集,当然实际使用的公式会更为复杂,这里举例说明。在计算时候要判断如果A包已经计算ok了就可以使用A包,如果没有计算成功就需要发起计算并且等待计算成功,B包也是要同样的处理过程,最后再计算并集。当然这样一个功能自己定义写肯定是没问题的,但是还要想到后面的扩展性和程序代码可移交等问题,还是想有一个通用的方法来解决,所以在最后想到了使用yacc和lex来组织解决。实际上后来发现用yacc和lex非常方便的可以解决这类问题,而且在扩展性上非常好。所以想这里先总结一下yac[……]

Read more

如何使用Swagger编写API文档

    最近在梳理内部系统的架构设计,而且前端时间也在kindle上看了一些国外开发在API的架构设计上的一些思考。所以就想着我们内部系统的api也应该梳理梳理了。
    目前内部使用golang开发是重头,基本上的服务和调度都是使用golang来开发,而且内部模块之间的调用都是http的接口。而且目前golang1.8已经默认支持了http2的协议,在效率上以前顾虑的问题,现在都有所缓解,所以把这块的梳理重点放在了http接口的梳理上。
    重点看了soap,json-rpc,restfull。在梳理中发现一个比较有意思的东东,叫 Swagger,中文名字也比较有意思:丝袜哥,[……]

Read more

ElasticSearch5.2.2安装坑记录

部署完成ES之后,如果我们不修改配置,那么默认只有本机可以访问ES的api接口,如果需要给外部机器访问,那么就需要修改ES的配置了。

在默认情况下,ES只允许本地访问api接口,如果我们希望在另外一台机器上访问ES的接口的话,需要配置主机地址:
/data/elasticsearch-5.2.2> vim config/elasticsearch.yml

#network.host: 192.168.0.1
network.host: 10.140.7.12

保存退出,重新启动es,一般都会报错,无法启动

[2017-03-16T10:51:23,168][I[……]

Read more

为游戏分析设计的分布式数据存储系统

本文是今年5月在中国云计算大会中的分享内容,主要是介绍腾讯游戏数据分析平台的一些后台架构设计和游戏分析思路。

在“大数据”相对泛滥的今天,我们看到很多讨论各种大数据架构、存储、工具、算法等等。但是大数据工具在具体应用场景中的计算各有不同之处,那在游戏数据分析中我们腾讯是怎么做的呢?本话题将简单介绍腾讯游戏数据分析系统的后台架构,并且主要介绍一个为游戏分析这类场景设计开发的的小型数据存储系统。

使用Spark分析网站日志

郁闷从昨天开始个人网站不断的发出告警504错误,登录机器看了一下是php-fpm报错,这个错误重启php-fpm后,几个小时就告警,快一年了都没什么问题,奇怪
[28-Sep-2016 11:53:19] NOTICE: ready to handle connections
[28-Sep-2016 11:53:19] NOTICE: systemd monitor interval set to 10000ms
[28-Sep-2016 11:53:26] WARNING: [pool www] server reached pm.max_children setting (5),[……]

Read more

Spark分区器HashPartitioner详解和扩展

在Spark中,存在两类分区函数:HashPartitioner和RangePartitioner,它们都是继承自Partitioner,主要提供了每个RDD有几个分区(numPartitions)以及对于给定的值返回一个分区ID(0~numPartitions-1),也就是决定这个值是属于那个分区的。

1 HashPartitioner分区

HashPartitioner分区的原理很简单,对于给定的key,计算其hashCode,并除于分区的个数取余,如果余数小于0,则用余数+分区的个数,最后返回的值就是这个key所属的分区ID。实现如下:

class HashPartitione[......]

Read more

分布式系统的Raft算法(转)

过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑。

来自Stanford的新的分布式协议研究称为Raft,它是一个为真实世界应用建立的协议,主要注重协议的落地性和可理解性。

在了解Raft之前,我们先了解Consensus一致性这个概念,它是指多个服务器在状态达成一致,但是在一个分布式系统中,因为各种意外可能,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态。这样就需要一种Consensus协议,一致性协议是为了确保容错性,也就是即使系统中有一两个服务器当机,也不[……]

Read more

【转载】从Hadoop到Spark的架构实践

当下,Spark已经在国内得到了广泛的认可和支持:2014年,Spark Summit China在北京召开,场面火爆;同年,Spark Meetup在北京、上海、深圳和杭州四个城市举办,其中仅北京就成功举办了5次,内容更涵盖Spark Core、Spark Streaming、Spark MLlib、Spark SQL等众多领域。而作为较早关注和引入Spark的移动互联网大数据综合服务公司,TalkingData也积极地参与到国内Spark社区的各种活动,并多次在Meetup中分享公司的Spark使用经验。本文则主要介绍TalkingData在大数据平台建设过程中,逐渐引入Spark,并且以[……]

Read more

ubuntu中编译安装protobuf记录

1.下载protobuf
下载地址:https://github.com/google/protobuf/releases

2.编译protobuf
解压下载的tar.gz包,cd到protobuf的目录下,执行以下指令:
./configure
make
make check
make install

3.检查安装是否成功
protoc –version
如果成功,则会输出版本号信息,例如:libprotoc 2.6.1
如果有问题,则会输出错误内容。

4.错误及解决方法
protoc: error while loading shared libra[……]

Read more

Java通过swig调用C++接口

记录一下过程
c++代码: swigshape.h
#ifndef TEST_CODE_SWIG_TEST_SHAPE_H
#define TEST_CODE_SWIG_TEST_SHAPE_H
#pragma once

class Shape {
public:
Shape() {
nshapes++;
}
virtual ~Shape() {
nshapes–;
};
double x, y;
void move(double dx, double dy);
virtual double area() = 0;
virtual double perim[……]

Read more