GAE vs GCE

转载: http://stackoverflow.com/questions/22697049/what-is-the-difference-between-google-app-engine-and-google-compute-engine

App Engine is a Platform-as-a-Service. It means that you simply deploy your code, and the platform does everything else for you. For example, if you app becomes very successful, App Engine will automatically create more instances to handle the increased volume.

Read more about App Engine

Compute Engine is an Infrastructure-as-a-Service. You have to create and configure your own instances. It gives you more flexibility and generally costs much less than App Engine. The drawback is that you have to manage your deployment yourself.

Read more about Compute Engine

You can mix both App Engine and Compute Engine, if necessary. They both work well with the other parts of the Google Cloud Platform.

 

To put it simply: compute engine gives you a server which you have full control/responsibility for. You have direct access to the operating system, and you install all the software that you want, which is usually a web server, database, etc…

In app engine you don’t manage the operating system of any of the underlying software. You only upload code (Java, PHP, Python, or Go) and voila – it just runs…

App engine saves tons of headache, especially for inexperienced people but it has 2 significant drawbacks: 1. more expensive (but it does have a free quota which compute engine doesn’t) 2. you have less control, thus certain things are just not possible, or only possible in one specific way (for example saving and writing files).

 

Basic difference is that Google App Engine (GAE) is a Platform as a Service (PaaS) whereas Google Compute Engine (GCE) is an Infrastructure as a Service (IaaS).

To run your application in GAE you just need to write your code and deploy it into GAE, no other headache. Since GAE is fully sclable, it will automatically acquire more instances in case the traffic goes higher and decrease the instances when traffic decreases. You will be charged for the resources you really use, I mean, the Instance-Hours, Transferred Data, Storage etc. But the restriction is, you can create your application in only Python, PHP, Java and Go

On the other hand, GCE provides you full infrastructure in the form of Virtual Machine. You can write or install any program in GAE virtual machine. Actually GAE is the way to use Google Data Centers virtually. In GAE you have to manually configure your infrastructure to handle scalability by usingLoad Balancer.

 

google-cloud 探索

google-cloud: https://cloud.google.com

docs: https://cloud.google.com/docs/

gcloud工具: https://cloud.google.com/sdk/gcloud/

What is the difference between Google App Engine and Google Compute Engine? http://stackoverflow.com/questions/22697049/what-is-the-difference-between-google-app-engine-and-google-compute-engine

 

GCE- faq: https://cloud.google.com/compute/docs/faq

 

开发者控制台帮助文档: https://developers.google.com/console/help/new   (先看看这个会为后续使用节省不少时间)

可能遇到的问题

  1. 无法访问: 请设置代理; 当执行: gcloud auth login 时,不设置代理可能会不行
  2. 执行完  GoogleCloudSDKInstaller.exe 后,似乎还是没有gcloud命令,需要手动执行 Google\Cloud SDK\google-cloud-sdk\install.bat

 

学习进度:

  1. 2015-02-03 : 部署了一个gitlab到 git.phpor.net
  2. 查看运行的实例:
  3. 修改默认的project,这样的话后续就不总需要使用 –project 选项了
  4. 添加ssh-key 为了方便ssh; 注意: 这里的登录名和google账户没有关系
    可以通过web页面直接添加: https://cloud.google.com/compute/docs/console#sshkeys
  5. 关于: C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\goapp.bat
  6. appengine 文档中的application 其实就是 project,曾经叫 application,现在叫 project
  7. 配置app.yaml 时写的是project id,如:
  8. 上传完通过: https://appengine.google.com/ 来访问部署好的project显得更加直观和方便,新的console中一定也能方便使用,只是还不太熟悉:
  9. C:\Program Files\Google\Cloud SDK\google-cloud-sdk\bin\appcfg.py 在windows上访问起来总不那么方便,于是在旁边添加了一个 appcfg.cmd , 从goapp.cmd 修改过来的,如下(注意: CLOUDSDK_ROOT_DIR 我给写死了):

     
  10. go的开发、部署和php差别有些多,需要看文档哦
  11. go开发、部署:
    goapp serve dir_of_app
    goapp deploy dir_of_app
  12. php开发、部署:
    appcfg update dir_of_app
    下载曾经部署过的代码: appcfg.py download_app -A root-micron-847 myphp    (注意: -A 后面的project id 不能写成title哦)

为Google-cloud-sdk设置http代理

 缘起

在使用google的hg和Google-cloud-sdk时都会遇到需要设置http代理的问题;

方式1: export http_proxy=10.xx.xx.xx:8888      // 无效

方式2: export http_proxy=http://10.xx.xx.xx:8888     // 无效

方式3: export https_proxy=http://10.xx.xx.xx:8888   // 无效

为什么?

分析

通过下面对使用的python的httplib2的代码分析发现:

  1.  http_proxy 或https_proxy  大小写不敏感,也可以写作: HTTP_PROXY   HTTPS_PROXY  (当然,别大小写同时存在)
  2. 代理的形式必须是url形式,如: http://host:port
  3. 对于http请求只参考 HTTP_PROXY , 对于 https 请求只参考 HTTPS_PROXY
  4. 可以通过 no_proxy (大小写不敏感)环境变量使得部分指定的域名不走代理,多个域名用“逗号”分隔,“*”代表所有

 

其他:

对于Go写的程序来讲,对于https请求来讲,优先参考 https_proxy,然后参考http_proxy; 参考: net/http/transport.go

所以,如果有类似错误如下:

Get https://code.google.com/p/snappy-go/source/checkout?repo=: x509: certificate has expired or is not yet valid

请检查是否需要设置 http_proxy

 

关于 no_proxy 的进一步说明:

在玩docker的时候,由于docker是不欢迎 http_proxy https_proxy 这些环境变量的,于是添加 no_proxy 环境变量绕过,如下:

看起来似乎没啥问题,但是问题还是出现了,由于no_proxy 原本是 空的,于是现在的no_proxy 就成了:

似乎也没啥问题呀,但是cloud sdk的httplib2 不小心把 空 匹配了所有域名了,代码如下: (坑爹不?)

 

 

 

各种代理

缘起

万里长城坚不可摧,GFW坚也得摧

ssh + polipo 配置http代理

步骤

首先,你得有一个国外的sshd服务

  1. 用ssh搭建一个socks代理
    ssh -qTNf -D 127.0.0.1:9050 username@sshd.server
  2. 安装 polipo : http://www.pps.univ-paris-diderot.fr/~jch/software/polipo/
  3. 配置polipo: /etc/polipo/polipo.conf

     
  4. 启动polipo
    polipo -c /etc/polipo/polipo.conf

其他

tinyproxy也是支持上游的socks代理设置的,但是,没有配成(可能是我用的tinyproxy版本不够新): https://banu.com/tinyproxy/

 

更多参考: http://library.zenlogic.com/ss/2014/05/10/shadowsocks-polipo-squid/

golang 中接口类型的参数

缘起

有些时候为了避免参数的copy,会尽可能将参数定义为指针类型;如果参数是一个接口,那么是不是要定义为接口的指针呢?如果不定一为指针是不是会导致“值传递”呢?

测试

 

http://play.golang.org/p/sw7ejPVV1t

结论

永远不要把接口参数前面添加一个星号

vim 插件机制

VIM中有一个rtp变量,可以通过set rtp 来查看,这个变量写的可能是多个目录,如果要加载一个filetype=go 的文件,则vim会搜索rtp中指定的路径,在这些路径(权且用xxx标识)下,搜索xxx/syntax/go.vim 来加载语法文件,搜索 xxx/indent/go.vim 来查找缩进方式文件,等等

outlook 如何更新密码

如果你使用的是outlook,如果邮箱密码变更了,一般情况下outlook会提示你重新输入密码,但是有时候不会(可能已转为脱机工作模式),这时候,想找到那个修改邮箱密码的地方是很难的,下面是我发现的一种方法,点击下图中的“脱机工作”图标,就会染出重新输入密码的对话框,输入新密码就OK了