最后更新是 4 年前,和最新的 sha3 标准不兼容。
吐槽一下 PostgREST 的查询语法设计:
目前 kaola 支持的 and/or 嵌套查询是这种的 比如
s:{
'f1,f2':v1,
'f3':v2
}
表示 (f1=v1 or f2=v1) and (f3=v2), and/or 逻辑都是隐含的。如果要最外层用 or,也许更方便的是调用两次 api?
实现不难,关键是要有一个好的查询表达规范,符合前端程序员的直觉。你能用嵌套的 json 合理表达出你的需求,就可以实现这个功能。说实话,我认为 PostgREST 的查询语法很丑陋。
在目前几个内部项目中,kaola 都是配合其它 api 一起使用的。比如老白的供应链系统,需要对接京东/网易/顺丰等外部接口,这部分是一个独立部署的项目。
所以 url 鉴权是在更高一层的网关实现的,基于 Netflix/zuul。而细粒度的权限控制,则每个项目都是自行实现的。
权限确实是个麻烦的东西。 看了 PostgREST,它是直接利用数据库的角色进行权限控制,太死板。 目前还在构思一个优雅的内置解决方案。
谢谢提醒,kaola 2016 技术分享 链接已修复
测试的时候,mysql 和 oracle 都试过,没问题。其它 rails 支持的数据库,使用 kaola 应该问题也不大。 生产环境目前都是 mysql 数据库
去年开始写 kaola 的时候还真不知道 PostgREST,看来也是一种趋势。 不过用 rails 实现的好处是多种数据库都支持。
👍
赞!期待...
#8 楼 @nameofhsw Celluloid 是基于 fiber 的 actor 编程模型,方便写高并发的程序
EventMachine 已经好久没更新了,建议看看 Celluloid
好,支持,威武,有希望了!
#2 楼 @ming_relax 如果想做到“想根据 redis 消息清掉当前 web process 里的某一块数据结构”,那么这个数据结构为什么不放在 redis 里。
技术上看有点意思,不过现在都搞 app 开发了,win32 桌面程序没什么吸引力啦
#1 楼 @flowerwrong 看一些 gem 的源代码,要有目的性。我一般不会为了读源代码而读源代码。比如在使用 gem 的过程中碰到了 bug,那么会追踪到 gem 的源码中去。这个时候因为带着目的,就会有主线,不会因为很多方法跳来跳去而迷茫了。至于调试,和普通的代码调试一样啊。至于查找源代码的关键点,有一些小方法,一个是用 grep/ack 等搜索关键字,还有就是 ruby 提供的 source_location 方法,在查找第三方 gem 的某个方法的实现时很有用。比如想要知道 rails 里面 1.days.ago 是怎么实现的,可以执行 1.method(:days).source_location,就可以知道实现的代码在哪里了。 ["/mnt/.rvm/gems/ruby-2.1.2/gems/activesupport-4.0.9/lib/active_support/core_ext/numeric/time.rb", 49]
def days ActiveSupport::Duration.new(self * 24.hours, [[:days, self]]) end
#5 楼 @est 是的,fork 的时候子进程直接继承了父进程打开的网络端口。比如 puma 运行在 9291 端口,运行 lsof -i :9291 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME ruby 10634 lian 7u IPv4 1521102 0t0 TCP *:9291 (LISTEN) ruby 10637 lian 7u IPv4 1521102 0t0 TCP *:9291 (LISTEN) ruby 10639 lian 7u IPv4 1521102 0t0 TCP *:9291 (LISTEN) 可以看到 3 个进程都打开了这个端口。
#1 楼 @flowerwrong Web 集群的搭建都还算简单的吧。接入层自己搭 LVS 或者用云服务如阿里云的 SLB,然后 web 服务器有几个核就给 puma 配几个 worker,web 服务器本身无状态,使用集中式的后端存储 memcache/redis/mysql 保存状态,整个 web 集群就搭建起来了。