一个运行在OpenResty上的基于Lua编写的Web框架Lor Framework

Lor是一个运行在OpenResty上的基于Lua编写的Web框架.

Github: https://github.com/sumory/lor

特性

  • 路由采用Sinatra风格,Sinatra是Ruby小而精的web框架.
  • API基本采用了Express的思路和设计,Node.js跨界开发者可以很快上手.
  • 支持插件(middleware),路由可分组,路由匹配支持string/正则模式.
  • lor以后会保持核心足够精简,扩展功能依赖middleware来实现. lor本身也是基于middleware构建的.
  • 推荐使用lor作为HTTP API Server,lor也已支持session/cookie/html template等功能.
  • 框架文档在这里,官方插件lorlabs.
  • 框架示例项目lor-example

快速开始

在使用lor之前请首先确保OpenResty和luajit已安装.

一个简单示例,更复杂的示例或项目模板请使用lord命令生成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
local lor = require("lor.index")
local app = lor()

app:get("/", function(req, res, next)
res:send("hello world!")
end)

-- 路由示例: 匹配/query/123?foo=bar
app:get("/query/:id", function(req, res, next)
local foo = req.query.foo -- 从url queryString取值:"bar"
local path_id = req.params.id -- 从path取值:"123"
res:json({
foo = foo,
id = path_id
})
end)

-- 404 error
app:use(function(req, res, next)
if req:isFound() ~= true then
res:status(404):send("sorry, not found.")
end
end)

-- 错误处理插件,可根据需要定义多个
app:erroruse(function(err, req, res, next)
-- err是错误对象
res:status(500):send("服务器内发生未知错误")
end)

安装

使用install.sh安装lor框架

1
2
#如把lor安装到/opt/lua/lor目录下
sh install.sh /opt/lua/lor #不加路径参数则默认安装到/usr/local/lor

执行以上命令后lor的命令行工具lord就被安装在了/usr/local/bin下, 通过which lord查看:

1
2
$ which lord
/usr/local/bin/lord

lor的运行时包安装在了/opt/lua/lor下, 通过ll /opt/lua/lor查看:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ ll /opt/lua/lor
total 56
drwxr-xr-x 14 root wheel 476B 1 22 01:18 .
drwxrwxrwt 14 root wheel 476B 1 22 01:18 ..
-rw-r--r-- 1 root wheel 0B 1 19 23:48 CHANGELOG.md
-rw-r--r-- 1 root wheel 1.0K 1 19 23:48 LICENSE
-rw-r--r-- 1 root wheel 0B 1 19 23:48 Makefile
-rw-r--r-- 1 root wheel 1.9K 1 21 20:59 README-zh.md
-rw-r--r-- 1 root wheel 870B 1 21 20:59 README.md
drwxr-xr-x 4 root wheel 136B 1 22 00:06 bin
-rw-r--r-- 1 root wheel 1.6K 1 19 23:48 install.md
-rw-r--r-- 1 root wheel 1.0K 1 21 22:37 install.sh
drwxr-xr-x 4 root wheel 136B 1 21 22:40 lor
drwxr-xr-x 13 root wheel 442B 1 22 01:17 test

至此, lor框架已经安装完毕,接下来使用lord命令行工具快速开始一个项目.

使用

1
2
3
4
5
6
7
8
9
10
11
12
$ lord -h
lor ${version}, a Lua web framework based on OpenResty.

Usage: lor COMMAND [OPTIONS]

Commands:
new [name] Create a new application
start Starts the server
stop Stops the server
restart Restart the server
version Show version of lor
help Show help tips

执行lord new lor_demo,则会生成一个名为lor_demo的示例项目,然后执行:

1
2
cd lor_demo
lord start

之后访问http://localhost:8888/,即可。

更多使用方法,请参考test测试用例。

讨论交流

目前有一个QQ群用于在线讨论:522410959

License

MIT

一个统一配置管理工具-confd

confd是一个统一配置管理工具,目前仍在开发中,基于本地文件存储的部署方式已经可以用于生产环境中。

Features
  • [x] 基础解析:配置文件使用toml格式,模板数据分离
  • [x] 多种存储支持:local file、redis、zookeeper
  • [x] 两种运行模式:Debug或Daemon
  • [x] cli工具:修改store,批量更新配置
  • [ ] 更友好的交互方式,比如通过web界面
  • [ ] 分离server和client,提供客户端cli或API供拉取指定配置
  • [ ] 加密支持:store中存储的配置可加密,防止泄露
Usage

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
#假设安装路径为/data/server/confd
#go get获取依赖的第三方库

sh build.sh linux /data/server/confd
#执行以上构建脚本后,在docs目录下生成了安装所需的文件
#若build.sh增加了参数$2,则默认加载$2/data/config.toml作为confd运行所需的配置文件

cd docs
sh install.sh /data/server/confd
cd /data/server/confd
#注意修改${path}/data/config.toml里的ConfDir和ConnectAddr,前缀为/data/server/confd

#然后使用confd、confd-cli即可

使用

1
2
3
4
5
6
7
8
9
10
11
.
├── confd
├── confd-cli
├── data
│   ├── config.toml
│   └── filestore.toml
├── meta
│   ├── example_1.toml
│   └── example_2.toml
└── templates
└── example.tmpl

confd的使用:

  • 首先了解:
    • confd的配置可参看config.toml, config.toml里的配置均可通过运行时指定flag来覆盖默认配置。
    • confd.toml中指定的配置数据存储为“file”形式,即数据存储在同目录下filestore.toml文件中。
    • 根据需要编辑模板,参考example.tmpl,模板中使用的变量目前只支持k/v形式。
    • 根据需要编辑meta文件,参考example_1.toml,meta文件指定了生成最终配置文件时需要的模板文件、数据、最终文件地址等。
  • 命令
    • ./confd, 在各个meta文件指定的目的地址生成了需要的配置文件
    • ./confd --debug=false, 默认confd在后台运行,每10分钟重新生成一次全部的配置文件

confd-cli的使用:

  • confd-cli是操作confd的命令行程序
  • 目前支持的子命令

    ./confd-cli getall 获取当前所有配置需要的数据
    ./confd-cli get key1 获取key1现在的值
    ./confd-cli set key1 value1 设置key1值为value1
    ./confd-cli delete key1 删除key1

【Moklr】一个HTTP API测试和监控工具

Moklr

moklr定位于http请求代码生成,自动化测试,API status服务等test/development辅助功能,此外还可能集成文档服务,目前仍在持续开发中。

Github

https://github.com/sumory/moklr

Demo

heroku moklr, 账号:test/123456

Screenshots

Features

  • [X] postman替代品,支持postaman数据(collection级别)直接导入
  • [X] http请求代码生成,支持常见的多种语言(js/java/go/python/shell/ruby等等)
  • [X] API status检查(需runbot支持)
  • [ ] 批量测试case
  • [ ] 测试文档和API文档生成

Usage

  1. 依赖于mongodb,需提前安装
  2. 运行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    git clone https://github.com/sumory/moklr.git
    cd moklr
    npm install .

    #根据具体情况修改config配置,配置位于config目录下

    #选择config目录下的test.js这个配置启动
    NODE_ENV=test node index.js

    #访问http://localhost:8001

写一个Q

起因

最近一个项目中使用mq做多节点间消息的路由和转发,要求实时性比较强,包括pull和push两种模式,并且同一个topic需要支持多个业务线或者子功能调用。当前的选型和问题如下:

  • 希望对这个模块有完全的掌控力,不懂erlang,所以直接排除了目前生产使用的rabbitmq
  • 目前项目中使用的是rocketmq,对于使用项目和团队来说的优缺点:
    • 优点:
      • 基于java,方面随时查看源代码
      • 接口定义清晰
      • 消息堆积能力很强
      • 社区较活跃,有官方开发者长期维护和答疑
    • 缺点:
      • rocketmq对于这个应用来说占用资源太多,谁用谁知道
      • 管理和运维都比较重,比如rocketmq严重依赖文件系统,需要配置vm参数(比如由于一个参数忘记打开导致压力测试的时候频繁崩溃),相关的监控工具也只有rocket-console,而且不够好用。
      • 基于rocketmq二次开发或者定制一套工具类更重,而且由于是非广泛通用需求,多半不会被官方合并。

Read More

Btrace简单使用

介绍

Btrace是什么,能做什么,这里不予介绍,网上一搜一大片。本文只介绍Btrace的基本用法和示例,用作备忘。

目前最新的版本为1.2.5.1,除了单独使用(支持mac、windows和linux)之外,还可以在jvisualvm上安装插件,通过GUI使用。

下载linux版本,解压后,主要目录如下,bin是命令目录,build中是实现btrace的jara包,samples目录下有大量脚本示例可供参考:

Read More

Redis的sentinel使用及spring集成

1. senital.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

port 26379

#sentinel监控的redis的名字、IP和端口,最后一个数字是sentinel做决策的时候需要投赞同票的最少的sentinel的数量。
sentinel monitor mymaster 127.0.0.1 6379 1

#如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态。
sentinel down-after-milliseconds mymaster 10000

#可选的安全连接密码
#sentinel auth-pass mymaster xxx

#failover(提升一个slave成为master)过期时间,如果超过这个时间没触发成功failover,sentinel会认为failover失败。
sentinel failover-timeout mymaster 30000

#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
sentinel config-epoch mymaster 2

#当failover时,可以指定一个“通知”脚本用来告知当前集群的情况。
#脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)
#sentinel notification-script mymaster /var/redis/notify.sh

#failover之后重配置客户端
# sentinel client-reconfig-script <master-name> <script-path>
# Generated by CONFIG REWRITE

Read More

OSX 10.9使用cocoapods遇到的问题

cocoapods用于管理iOS项目库依赖,类似于nodejs的npm、java的maven、python的pip等工具,它基于ruby(ruby的配置和库管理向来让我很头痛)。

修改ruby源

要使用ruby,第一件事是更改ruby源,在国内,rubygems.org镜像基本处于不可用状态。这里改为淘宝提供的免费ruby镜像:

1
2
3
4
5
6
$ gem sources --remove https://rubygems.org/
$ gem sources -a https://ruby.taobao.org/
$ gem sources -l
*** CURRENT SOURCES ***

https://ruby.taobao.org

安装cocoapods

1
gem install cocoapods

Read More

NAT穿透的详细讲解及分析

前几天在做一个网络视频应用的原型,选来选去,决定采用WebRTC作为临时方案先顶着,优点是连接建立后不需要服务端转发流量,方案实现相对简单。缺点是该技术还不成熟,表现在浏览器API完善程度、浏览器版本支持、硬件资源支持等方面有较多限制。期间遇到了NATSTUN相关的问题,这里转载了一篇对NAT详细通俗介绍的一篇文章。

以下内容转自NAT穿透的详细讲解及分析,这里只做了重新排版,让易读性更好一点。

Read More

LoopBack

LoopBackStrongloop推出的可在远端和本地部署的用于手机后端开发的node.js框架。

它包含:

  • 一个node.js库,用于连接web或是手机端到数据源,比如REST APIs和数据库。
  • 一个cli工具,用于建立和管理LoopBack应用。
  • 客户端SDK,原生或是基于web的手机客户端。

每个LoopBack应用包含三个组件:

  • 呈现业务数据和场景的models。
  • 数据源和连接器。数据源比如数据库或者后端服务(REST APIs, SOAP web services, 或是其他存储服务),连接器指的是企业级的数据源如Oracle、MySQL、MongoDB。
  • 使用LoopBack客户端SDK的手机端。

云计算初探

云计算概念

技术领域的”云“发展到现在已经是人云亦云,网上充斥着大量的或偏概念或偏实用或标准或偏激的各种关于”云“的论调。笔者个人观点是,云并没有想象中的那么遥远那么神秘,需要我们用多么专业装逼的词汇去描述,其实我们生活中或多或少的都在享受”云“的服务,它的本质就是”按需供给“、”弹性扩展“。

云计算分类及典型代表

云计算发展到目前,已涌现大量的国内外公司,他们提供的产品不一而足、种类繁多。甚至不能简单的将其归为IaaS/PaaS/SaaS中的一种,往往是各种服务有所交杂,各有优势。这里我调研了几个比较典型的服务提供商,略作总结。

1. IaaS

Infrastructure-as-a-Service, 即基础设施即服务。IaaS提供服务器,存储和网络硬件、带宽等等基础设施。可以在这之上构建操作系统、运行时、中间件等等,对这些基础设施的使用可按需实现弹性扩展。

这个领域比较大的国外公司有Amazon, Microsoft, VMWare, Rackspace和Red Hat等、国内诸如阿里云、百度云等。整体层面上可以认为它处于云的最底层,提供云计算基石,再形象简陋一点,可以把它理解为一台台机器、一条条网线等这些硬件或虚拟设施。

我试用过的:

  • 阿里云 IO性能偏弱(据说有在改善),半夜三更网络会瞬断,优点是各种周边服务齐全
  • 美团云 便宜、网速好,缺点是还不够成熟,简陋

2. PaaS

Platform-as-a-Service, 即平台即服务。关注于开发而不是基础设施管理层面。这一层为开发者提供了具体的操作系统、运行时环境、各种中间件,使用者只需要关注具体应用的设计实现部署即可。典型代表有老牌的GAE,Azure,国内有BAE、新浪云、京东云计算等。

收集的几个小而美的PaaS服务:

3. SaaS

software as a service,即软件即服务。

4. 其它

前面提到很多云计算服务提供商提供的服务往往不止一种模式,如大而全的阿里云、专注存储和CDN的又拍云,这再推荐几个国内外做的不错的:

  • ucloud 涉及计算、存储、CDN、小部分SaaS
  • 青云 计算、存储、网络
  • 迅达云 设备租赁、云主机、存储、应用商店
  • koding 提供基于浏览器的开发环境,PaaS/Saas

云计算解决方案

  • Openstack 社区庞大、开源
  • Cloudstack Apache开源
  • Cloudfoundry
  • VMWare 商业成熟