我是谁我在哪我在干嘛

PaaS、IaaS、SaaS

谷歌随便找了一张图,感觉三者的区别还是很明显的↓

Traditional、Colocation、Hosting、IaaS、PaaS、SaaS

图上IaaS和PaaS的区别在于Operating System和Database,不过实际上感觉通常被我们认为是IaaS的AWS还有GCP等都有提供OS级别的管理。不过OS的创建是用户自行选择的,认为平台本身不提供似乎也合理?

我想干嘛

最近对由于对网络的特♂殊♂需♂求升级(国内旁友们应该都懂哈),再加上没钱(其实是为了省钱买糖),开始钻研起了歪门邪道,经过对各种方案的对比整理、原理用法钻研、踩坑跳坑出坑,终于将技术上的需求明确下来了:

  • 自带基础设施的云平台(Platform as a Service)
  • 有至少一个免费、不限时的配额
  • 支持基于docker/nodejs部署app
  • 操作流程可理解、相对简洁

要求自带基础设施是因为在找的过程中发现有的平台虽然自称是PaaS,但实际上可以认为是只提供一套基于IaaS的部署工具——或者说应用管理方案。这种平台他们自己的部署工具大多有一套架构、对应的CLI,但基础设施还是别人的。具体表现在看doc你会发现他们要求你有Digitalocean、GCP或者AWS等IaaS才能部署

……emmmm这要都有一台自己的VPS了还要你们何用,参照上一条的定义,这样的平台并不能算作PaaS

我在干嘛

晚上吃饭的时候一时兴起翻到了一个free for dev列表,理所当然就顺着列表的PaaS、IaaS还有Docker related项翻了起来,最后翻来覆去的试了十几个,加上前几天的浏览整合了下,感觉大概符合要求能用的也就几个:

  • Bluemix:乍看上去不复杂,有自己的CLI工具也有配合Pivotal Cloud Foundry的CLI插件,列入考虑
  • Openshift:因为是基于Kubernetes架构,一个pod一个app过程极其简单,然而用了不到两天就被ban了……
  • Hasura:微服务同样基于Kubernetes架构,本回的主角
  • Pivotal Cloud Foundry:流程复杂了点(要部署docker app要设置diego_docker项,设置该项要admin用户,admin用户要自己创建,自己创建admin又要通过自行部署他们的UAA服务来创建,而这个服务无论是本地还是线上都部署失败),在Github提了issue,后面有空再慢慢跟进吧
  • Arukas:还没试就在当晚被告知注册要排队很久,还要绑定银行卡,而且部署的非法app很快就会被ban,遂放弃

综上所述,当晚摸鱼就决定试试hasura了!

Let's debug this together

大致过程

先总结下印度工程师朋友的debug思路:

  • hasura setup确保工程整体初始化
  • 怀疑git状态,确认git statusgit remote正常,
  • 确认他们的CLI版本最新
  • 打开hasura debug,后台源代码查看错误
  • 中途我怀疑可能是墙还是user的问题所以擅自切到了root账号上了代理
    • root账号多报了个credentials的错误,hasura cluster get-credentials -c hasura执行也有返回错误
    • 被发现切了账号,hasura user-info确认了原本的user正常工作后切回了普通用户
  • 发现我是在VM里操作的,怀疑我弄混了VM和本机设置(……)
  • 进一步确认git status正常
  • 确认$HOME变量正常
  • 后台发现错误是在 git library 里抛出来的,怀疑到 git版本 问题上了
  • 检查发现我还在使用古老的1.8.xx版本,遂试试升级git
  • It works!That's awesome!

报错细节

参照doc,安装CLI,注册好账号,建好project和cluster以及microservice节点,到了git push hasura master这一步的时候出现了问题

The authenticity of host 'xx.hasura-app.io (xx.xx.58.177)' can't be established.
ECDSA key fingerprint is b5:xx:09:72:xx:xx:1e:67:d4:e6:e7:xx:76:xx:0f:xx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xx.hasura-app.io,xx.xx.58.177' (ECDSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

起初以为是网络的问题,挂了代理试了一下,还是报错

ssh_exchange_identification: Connection closed by remote host
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

束手无策,点击了右下角的webim图标将自己的问题发了过去,没期待能得到回复

发送问题

意外的是很快就有人回复了我,看了下信息,似乎是个在印度的工程师朋友(妈呀还是k8s相关开发)

Works on K8S and Cloud Infrastructure

根据指示设置好其他一切漏的设置后接下来git push hasura master基本上都固定报一个错了

$ git push hasura master
× Pushing project failed error=reference not found
error: failed to push some refs to 'ssh://hasura@xxx.hasura-app.io:22/~/git/xxx'

于是开始一起debug……

因为习惯Linux敲命令行了哈哈哈

git版本太老

为什么是ssh不是常规git协议

为什么用虚拟机操作

通过他们的Gateway设置http准备好自动跳转https

为什么是ssh不是常规git协议

为什么用虚拟机操作

通过他们的Gateway设置http准备好自动跳转https

问题分析

普通Github工程remote显示如下:

$ git remote -v
origin	git@github.com:youusername/yourreponame.git (fetch)
origin	git@github.com:youusername/yourreponame.git (push)

该工程的remote显示如下

$ git remote -v
hasura	ssh://hasura@xxx.hasura-app.io:22/~/git/xxx (fetch)
hasura	ssh://hasura@xxx.hasura-app.io:22/~/git/xxx (push)

通过remote可以明显看出他们的服务器不是一般的git server,问了下了解到他们确实是用的ssh server代替常规的git server,而低版本的git在解析ssh的时候似乎会出现问题,所以才一直报的error

实话说这个问题确实不好发现,如果没有后台查代码辅助,我应该是无论如何不会想到git的问题上的,云平台连接报错我总是会怀疑到国内神奇的网络环境上……

思维还是局限了点,也不知道是受限于经验还是知识了,不过这锅还是甩到墙上吧哈哈哈╮(╯▽╰)╭


后(fei)记(hua)

为何如此高兴

最近沉迷云平台,到处试用,用过的大部分平台虽说有人工求助接口,但很少能回复,更别说是及时回复,更更不用说一直跟着你手把手debug指导问题解决了。当然相信这里面原因复杂,时差、平台规模、bug本身都是阻碍,也不能一味的就说平台的服务不好吧

不管是时差正好对上了,还是他们的服务就是如此及时,快速的响应、耐心的帮助总是很让人感动的。

从他们的CLI版本还在0.15.x来看,估计平台建好还不久,用户群体没那么庞大,所以人工服务才如此及时吧,不知道将来规模大了还能不能如此快准稳哈哈哈

这次debug体验就像一次远程的结对编程,解决问题的那一瞬间非常开心,还顺便加了他们的discord讨论群,顺便问了下why not slack,顺便一起作为扩展阅读参考吧

英语表达与知识体系

记得以前看过一篇公众号文章,大意是我们获得的大部分知识都停留在某个浅薄的级别上,没有深入理解,不能实际应用,更无法举一反三

从自己的英文水平上深刻的感受到了这一点

平常也会看小说,看技术文章,阅读量能勉强维持住,读到复杂颠倒的语句也能理解其意思,但真到了说的时候蹦出来的还是那几句小学英语(I wil、Can I、I should、how...),语序也基本还是中文思考的语序。大概就是只能说出I really feel disappointed而说不出It clearly a bummer的水平吧。

扎心了,好几次交流途中都感觉无法完整表达出自己的意思,只能拐个弯。句式词汇单一反倒不是最难过的,毕竟交流只要能传达出意思就是胜利,然而事实上就是传达不出自己原本想表达的意思……╮(╯_╰)╭很难过了

慢慢来吧,希望工作后还能有时间精力加强英文水平

最后

Let's debug this together!

Written with StackEdit.