• Postico +1

  • 为什么用 RPC at 2016年07月26日

    Coding 已经在生产环境大量使用 grpc + protobuf 作为内部通信的框架和协议,我们最初的 rpc 实现也是构建在 protobuf 上的,但只支持 java,后面发现项目越大使用的语言越多,跨语言通信成了一个问题,刚好那时候 grpc 也开源了,我们就慢慢的从一些小的服务开始切换到 grpc 上,目前大部分内部组件通信已经是通过 grpc 进行了。

    我们最初采用 grpc 的目的就是为了规范接口代码和多语言支持,还有它的社区和开发也比较活跃。

    简单列举一些优缺点和对比:

    • 使用 protobuf 作为序列化库,专门的 IDL 语法也使得接口定义更加简洁规范了,protobuf 内置支持兼容性处理,proto3 支持 json 序列化,更容易和其它系统交互;
    • 原生支持各种编程语言,加上自动生成 rpc 的服务器端和客户端代码框架,省去了自己编写的麻烦,把更多精力放到业务逻辑实现上;
    • 底层数据传输基于 HTTP/2,所以也会带来 flow control, header compression 等 HTTP/2 特性,数据传输还支持压缩、加密、重试(支持 Backoff)等,性能相应该会有一定提升(没有做测试);
    • 原生的 负载均衡 支持,更加方便扩容(此功能目前已设计完毕,并不是所有语言都已完全实现,所以我们目前使用的还是是自己的实现);
    • 开发调试就不像 REST 接口那样有很多现成的命令行或图形界面工具可以使用,grpc 的数据通信传输的是二进制的 protobuf 数据,不利于调试,而且 grpc 的 cli 还不够完善,所以我们测试基本上都是通过写代码进行的;
    • 作为吃螃蟹的人,肯定是会踩到一些坑的,我们在使用过程中也遇到了一些问题,但没有特别严重的。

    grpc 目前还处于 Beta 阶段,但对外的 API 已经稳定,而且已经有很多知名项目在采用了,比如 etcd v3 和 docker containerd

  • 看到有对 Coding 的经验感兴趣的,我也来分享一下(图片来自 coding blog):

    这里主要对一些图上可能不太清楚的部分展开一些介绍:

    • 通过 NFS 共享仓库的存储到不同的 git worker 上(分担 CPU 和 IO),每个 worker 上运行 rpc server(GitD)和 RepoManager
    • Git Server 是 http/ssh/git 协议的 router,负责认证和转发请求给 rpc server(GitD),也是多实例的
    • Git 服务 完全不依赖 web 服务,即使网站挂了也只会影响到网页上的代码浏览,而不会影响到 git 客户端的操作
    • RepoManager 主要是给 web 端对 git 仓库的操作提供 rpc 服务的,比如网页上的代码浏览和 MR 功能都是它的使用者
    • 同样的,因为使用了网络存储,必然会导致性能有所下降,我们也做了大量的缓存以提升 web 端服务的响应速度

    Coding 后端主要的开发语言是 java 和 go,当然也有少量的 ruby 组件,基本上所有组件都是以微服务的方式运行,相互之间使用 rpc 来通信。Git Server 和 GitD 组件完全使用 go 语言编写,相信大家通过 ssh 客户端的调试信息也可以看到,ssh 协议的路由是通过 golang 的 crypto/ssh 库实现的(公钥存储也是在数据库里的),RepoManager 和 web 后端采用 java 语言编写。

    更详细的介绍可以看 coding blog 里这篇关于代码托管架构的文章:CODING 代码托管架构升级之路

  • CDN 是不是有问题?经常连接超时。

    Gem::RemoteFetcher::FetchError: Errno::ETIMEDOUT: Operation timed out - SSL_connect (https://gems.ruby-china.org/gems/fog-vmfusion-0.1.0.gem)
    Installing fog-atmos 0.1.0
    Installing fog-ecloud 0.3.0
    Installing fog-profitbricks 0.0.3
    Installing fog-terremark 0.1.0
    Installing fog-voxel 0.1.0
    Installing fog-aws 0.1.1
    Installing fog-brightbox 0.8.0
    Installing fog-radosgw 0.0.4
    Installing fog-sakuracloud 1.0.1
    Installing fog-serverlove 0.1.2
    Installing fog-softlayer 0.4.7
    
    Gem::RemoteFetcher::FetchError: Errno::ETIMEDOUT: Operation timed out - SSL_connect (https://gems.ruby-china.org/gems/fog-storm_on_demand-0.1.1.gem)
    An error occurred while installing fog-vmfusion (0.1.0), and Bundler cannot continue.
    Make sure that `gem install fog-vmfusion -v '0.1.0'` succeeds before bundling.
    

    dig 了下,貌似解析回来的是个加拿大的 IP 地址:

     ~ dig @114.114.114.114 gems.ruby-china.org
    
    ; <<>> DiG 9.10.3-P4 <<>> @114.114.114.114 gems.ruby-china.org
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53557
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
    
    ;; QUESTION SECTION:
    ;gems.ruby-china.org.       IN  A
    
    ;; ANSWER SECTION:
    gems.ruby-china.org.    553 IN  CNAME   12f7b4-0.ca.1251971244.clb.myqcloud.com.
    12f7b4-0.ca.1251971244.clb.myqcloud.com. 553 IN A 45.113.69.41
    
    ;; Query time: 51 msec
    ;; SERVER: 114.114.114.114#53(114.114.114.114)
    ;; WHEN: Wed Apr 06 11:05:44 CST 2016
    ;; MSG SIZE  rcvd: 106
    
  • 好像不支持 iPad?

  • 感觉这个页面好危险的样子,没做限制?https://ruby-china.org/?pp=help

  • #25 楼 @lgn21st 多谢理解,此事到此为止了 😄

  • #22 楼 @nouse 你好像又说远了,我只是个开发,其他的事情还平时还真不管。以下纯粹是个人观点:人家都已经认错了,你们就不能给个机会?我今早才看到这里的帖子,可能不是非常了解事情始末。请问哪里在博同情了,人家道歉了,你们要求公司号道歉人家也照做了,非得闹到把人送到监狱你才满意?虽然大家的出发点都是好的,但也要静下心来好好交流才能解决问题,不要一味的批判,给人留点余地,谢谢。

  • #20 楼 @luikore 谢谢你的相信。虽然知道会有人来说洗地,但还是来了,站在公司角度可能更多是大事化小,站在个人角度,实在看不下去一个还不能算很入行的市场妹子这么被。。

  • 这个问题明显被盖上“性别歧视”的帽子来上纲上线和扩大了,文章或许有些偏离活动主旨,但也只是宣传的角度不是很好,绝没有某些人认为的恶意,都适可而止吧。

  • 在 coding.net 上部署问题 at 2015年08月04日

    #7 楼 @uynil这里 发讨论把你的问题描述清楚。

  • #15 楼 @roclv 具体什么问题,有错误提示吗?

  • Ruby China iOS App 发布! at 2015年07月08日

    #46 楼 @swordray 大概猜到了这个原因,这样不是很好,非 https 在传输密码时会有安全隐患,而且客户端可用性太依赖你那边的服务可用性了,我这边就经常无法刷出内容,但网站是可以访问的。客户端 OAuth2 的问题应该可以联系 @huacnlee 解决吧。

  • Ruby China iOS App 发布! at 2015年07月08日
    class var baseURL: NSURL {
        get { return NSURL(string: "http://ruby-china.secipin.com")! }
    }
    

    楼主代码里请求的 ruby-china 接口域名用 ruby-china.secipin.com 是什么意思?好没安全感啊。。

  • 在 coding.net 上部署问题 at 2015年06月24日

    已经在 coding 的网站上回答。

  • 深圳的活动,有空的话,我也来支持下 :plus1:

  • 一直在用,还有 Atom 插件能实施检查,非常不错!

  • 在用 Mjolnir:https://github.com/sdegutis/mjolnir,提供 Lua 的 API,配置文件可编程,很不错。

  • 参考 openwrt 上用的 LuCI:http://luci.subsignal.org/

  • Alfred 党表示 Spotlight 可以关 😃

  • #15 楼 @Martin91 我们在用,Coding HK 的演示平台就是搭建在 Rackspace 上的。

    最低配置和价格:

    机械硬盘:

    CPU 1 vCPU
    RAM 512 MB
    System Disk 20 GB
    Network 80 Mb / s
    Disk I/O    Good
    Price$  $0.022 / hr
    

    SSD:

    CPU 1 vCPU
    RAM 1 GB
    Boot Source Local
    System Disk 20 GB
    Network 200 Mb / s
    Disk I/O    Better
    Price$  
    $0.04 / hr server
    $0.005 / hr service
    $0.045 / hr total
    
  • #17 楼 @moliliang 重启解决 99% 问题,重装系统解决 100% 问题!

  • #5 楼 @moliliang 没事干多重启重启系统就好了 😄

  • #17 楼 @chenge 我回答下你演示相关的几个问题吧:

    演示文档问题: 你在我们的反馈那里也提过,部分文档已经做了修改,我们一直在改进。你如果对文档某些地方有好的修改建议可以给我们发 pull request (项目地址),文档项目也是运行在演示平台上的。

    流行应用提供案例: 官方提供的案例已经不算少了,每种支持的语言都有案例,不少语言还有 2 - 3 个,只是可能案例上使用的框架版本不是最新的,但是也足够说明问题了。http://docs.coding.io/ 上的例子只是一部分,在 demo 用户下还有更多的例子可以查看,或者可以在网站上搜索查看别人已经部署成功的公开项目代码。

    网站上只有 node 的案例: 你说的应该是服务的 JSON 解析例子那里吧,这里我觉得用 Node.js 可能更容易接受点,Coding 演示平台主要针对 Web 项目,做 Web 开发的应该都看得懂 JavaScript 吧,这里给出代码的目的是说明使用方法,而不是给用户 Copy 来用,而且 JSON 结构也已经给出了。很抱歉,我们人手有限,无法做到总有时间手把手教用户或者每种语言框架都给出示例代码 😢

  • 工作需求

  • AngularJS 2.0 正在路上.. at 2014年11月10日

    #17 楼 @lawrence 我是 coding 的,简单介绍下:coding 后端主要是 java,部分组件和服务也使用了其它语言:Ruby、Go、C++ 我们也在用 😄

  • #21 楼 @xieyunzi 正在努力支持 ing,ruby 环境已经更新到最新的版本,rails4 的支持还在测试中。有问题可以直接 @ 我,我是 Coding 演示的开发者,也是 ruby 粉,咱演示平台的后端就是 Ruby 开发的 😄

    另外,演示平台刚上线了文档站点:http://docs.coding.io ,有问题可以先到这里找答案。

  • Atom Editor 有 deb 包了 at 2014年10月15日

    #19 楼 @Rei Atom 安装个 Minimap 插件后右边也可以预览代码,就更像 Sublime Text 了 😄

  • Atom Editor 有 deb 包了 at 2014年10月14日

    #7 楼 @Kabie 现在的 Atom 性能已经很好了,自从切换到 react 之后。Bug 也少了很多,完全可以用作日常编辑器,用来写 Ruby/Rails 那是再适合不过了 😄

  • 看看这个是不是你想要的效果?https://github.com/jwilder/nginx-proxy