Google 对新品牌的迷恋

品牌效应,有时候比产品的质量本身更重要。品牌常常给人带来一些心理暗示,比如 iPhone 总是高大上的,而安卓就是烂大街的地摊货,尽管 iPhone 也有低端产品,安卓也有旗舰。当一个牌子做坍了之后,更换一个新品牌可能会有意想不到的改观。比如微软在 2009 年的时候把 Live 品牌强行换成了 Bing,虽然换汤不换药,但市场占有率从最初的不到 10% 到现在稳稳站上 20%,Bing 的品牌效应功不可没。

有成功的案例,自然也有失败的案例,比如 Google 在社交领域的数次尝试,Orkut、Google Buzz、Google Friend Connect、Google Wave 和最终的 Google Plus,没有一个成功的。而 Google 在聊天工具方面,也有着同样的困境。

最初的一款产品叫 Google Talk,简称 GTalk。一开始的想法很宏大,兼容 XMPP 协议,可以和其它的聊天工具互通。做了几年之后发现没什么起色,于是扔掉了 XMPP 协议,并且改名为 Hangouts,开始自己和自己玩。

Hangouts 做得很大,它兼并了 Google Voice 可以像普通手机一样打电话,在 Android 手机上还成为了默认的短信应用,更不用说在 Google+ 和 Gmail 中的集成了。几乎任何地方任何时候,想用 Hangouts 的时候就可以用到。

不知哪根筋抽住了,Google 后来又推出一个短信应用叫作“Messenger”,这是一个 Android 手机独享的应用,也可以发短信,打电话,群聊 -_- 在手机上和 Hangouts 除了图标不同之外几乎一模一样。不用说 Android 的用户了,就连公司员工,看到这个消息的时候也是一脸懵逼。

事情还没有结束,上周的 Google I/O 大会上,通信部门的老板(对,我们还成立了一个专门的通信部门)激动地宣布,我们又做了两款应用,Allo 和 Duo,一款用来发短信,一款用来打电话……好吧,Google 自家的聊天应用快占到一屏了。

如一开始所说,不同的品牌可以带来不同的客户群。比如 QQ 和微信,在 QQ 越来越臃肿,自己都不堪重负地出了 QQ 精简版的时候,腾讯果断抛出了微信。最初也有很多人不理解,但事后被证明微信是一个成功的典范。究其原因,微信最初主打的精简,速度快(当然现在也不精简了,大概可以改名为巨信),并且当时还有大量的 MSN 用户不屑与非主流为伍,不肯入 QQ 的门,微信正是看准了这部分用户群,站稳了立足之地。

但是 Hangouts 不一样,虽然它也是一个大而全的应用,但终究没有跳出聊天工具的范畴,你不能用 Hangouts 购物,也不能用它来看朋友的时间线。如果这些基本功能都要细分,那我们的手机上至少得有几百个应用,才能满足日常所需。

现在好了,Google 有了四个聊天应用(算上新出的 Space 的话有五个),正好占满了手机屏幕最下面的快速启动栏,视觉效果很震撼,真要用的时候还得想半天,到底开哪一个。

当然对于墙内的用户来说,这些都不是个事,这些应用根本不存在。就连 Hangouts 现在都没在中国区上架,更别说其它的应用了。眼不见为净,你们爱怎么玩就怎么玩吧,我们继续用微信。

Google Cloud CDN

Google 终于推出了自己的 CDN 服务了。去年 12 月份发布了 Alpha 版本,只接受申请试用;而这个月正式升级为 Beta,大伙都可以用了。于是我就又做了一回小白鼠。

之前一直在用 KeyCDN,但是 KeyCDN 的一个弱点是它依然使用 CNAME 来转发流量,而 CNAME 很容易被屏蔽。而 Google 的 CDN 用的是 AnyCast,只需要解析一次 DNS 即可访问,这可比 CNAME 要强壮多了。

除此之外,CDN 的抓取走的是 Google 的内部网络。这个网络有多快呢?据 Google 博客介绍,单机的网速可以达到 10Gb/s 以上。这样的 CDN 性能要远好于任何外部的 CDN。

于是我毫不犹豫地切换了过来。有兴趣的朋友可以对本站测个速。

把 Google Cloud Storage 加载到文件系统

主机移到 Google Cloud 之后,博客的图片都存放于 Google Cloud Storage (GCS) 中。

GCS 是一个独立的储存系统,可以通过 HTTP 访问,用来当作 CDN 使用。但问题是,GCS 无法绑定一个 SSL 的域名,HTTPS 访问成问题,并且经常被墙。于是我采用的方法是定期把 GCS 的文件用 GSUtil 同步到主机上,这个方法很灵活,不必开放整个 GCS 的 Bucket,而且可以限制文件一定要从博客中访问。唯一一点不爽的是,我设置的同步周期是五分钟,也就是在 GCS 上添加一个新文件之后,要等五分钟才可以从博客中看到,有时候等得比较累。而且我也不经常向 GCS 传文件,每五分钟都同步一下,80% 的同步是浪费掉的。

后来我就看到了 GCSFuse 这个工具。

Fuse (Filesystem in Userspace)是 Linux 中的一个概念,它向用户提供了一种虚拟磁盘的访问方式,即把一个不在本地的磁盘,当成本地磁盘一样来访问。这一技术经常被用来映射网络磁盘。

GCSFuse 是 Google Cloud 的一个 Fuse 实现,它可以把 GCS 的 Bucket 映射到本地,然后就可以通过文件系统的方式来访问 GCS 上的文件。

安装 GCSFuse 的方法用下(Ubuntu):

然后就可以通过以下命令行映射一个 Bucket(其中路径和 Bucket 名称按需修改):

GCSFuse 暂时还处于 Beta 状态,没有提供后台运行的方式,如果要在后台运行,还需要依赖 daemon 工具,完整的命令行大概是这个样子的:

这样运行了之后,/path/to/mount/point 就会成为 my-bucket 的映射,可以直接进行文件操作。其中 -o allow_other 表示允许所有用户访问,GCSFuse 默认只允许运行该命令行的用户访问映射的文件(比如 root),要给其它用户开放权限,我发现 -o allow_other 是最简简单的方法,另外你还可以通过 --uid $UID 和 --gid $GID 指定用户,但我尝试了没有成功。

daemon 不会在开机的时候自动运行,如果要在开机的时候就创建映射,需要添加一个 systemd 或者 upstart 的启动项,代码还在调试中,稍后放出。另外 GCSFuse 来提供了一种 mount 的方式加载,但我死活没有成功运行出来,还搞挂了主机,如果你成功了,请知会一声。

恢复 GCE 上无法启动的 Instance

两年前我搞坏过一台 EC2 的机器,而今天一早,我又搞坏了一台 GCE 的机器。这次的起因是 gcsfuse 和 fstab。

先吐槽一下 Ubuntu,在 fstab 加载不成功的时候,居然没有任何恢复的方法,它也不会自己把无法加载的项给禁用了。在 GCE 中,Ubuntu 的表现是无法连上 SSH,没有任何错误信息,连日志文件都看不到。

于是和上次一样,我能做的便是:

  1. 对当前磁盘创建一个 Snapshot;
  2. 创建一台新的临时机器,以 Additional Disk 的方式加载之前创建的 Snapshot;
  3. 修改磁盘上的内容;
  4. 删除临时机器,再创建一台新机器,以 Boot Disk 方式加载修复的磁盘。

GCE 上的 Addition Disk 会出现在 /dev/disk/by-id/ 下,可以使用以下命令查看:

我发现我的磁盘有两个分区,即:

  • /dev/disk/by-id/google-leonax-1
  • /dev/disk/by-id/google-leonax-1-part1

part1 中存放的是主要内容,通过下列命令把它加载出来:

然后在 /leonax-1 中修改相应文件即可。

顺便说一句,GCE 提供了一个 safe_format_and_mount 工具,不知道什么原因,这个工具在这种情况下没有效果,它不认为我的磁盘是一个有效磁盘,拒绝加载。于是我只好用了 Linux 自带的 mount。

在 Google Cloud 架设博客的费用

说说目前博客的费用,给想用 Google Cloud 的同学们一个参考。

Google Cloud 的计费方式和 AWS 有点不太一样,AWS 想要便宜,需要事先买一个套餐,套餐价比常规价格便宜,但必须用上个一年或三年,如果一年内终止使用,套餐的费用是不退的。之前发生过买了三年的套餐,结果 AWS 推出新机型并且降价了,导致老的套餐性能又差又不合算的局面。

而 Google Cloud 则没有这个限制,它只需要你使用一种机型达到一个月,即可以享受优惠价格,比 AWS 要灵活很多。刚搬过来的时候,进行过几次调整,导致没有用满完整的自然月,于是一直没法发这个统计,总算现在有完整一个月的纪录了。

总共使用 45.06 美元,包括三台主机,博客放在亚洲的主机,兼当 DNS 服务器,另外还有两台从属 DNS,分别在欧洲和美国地区。目前这样的配置应该超过90% 的博客了,所以新建博客的费用只会比这个少。

以下是明细,单位为美元,已减掉用满一个月带来的优惠:

  • 博客主机,总计 28.99
    • A(Small / 亚洲):17.29
    • B(Micro / 欧洲):6.11
    • C(Micro / 美国):5.59
  • 流量,总计(58.9 GB) 12.19
    • 中国地区(46 GB):10.63
    • 亚洲其它地区(5.5 GB):0.68
    • 欧洲地区(2.4 GB):0.28
    • 美国地区(5 GB):0.6
  • 硬盘,总计(30 GB)3.85
  • Google Cloud Storage,863 GB * 小时,0.03

需要指出的是,Small 主机的配置是 1.7G 内存,外加我用了 10G 的硬盘,这样的配置比大多数 VPS 是要好的,比如 Linode 和 Digital Ocean 上 2G 内存的 VPS 都要 20 美元一个月。

而这个月 Google Cloud 又进行了一次降价,降完之后应该属于超合算的云主机了。

增强型 Google Drive 文件夹复制工具

大概一年前我做一个工具来复制 Google Drive 中的文件夹,当时是用 App Script 写的,后来觉得它的效率太差了,而且难用,就花了点时间用 Google Drive SDK 重写了一遍。

复述一下这个工具的背景,我需要在 Google Drive 中复制一些文件夹,而 Google Drive 没有提到原生的方法来做到这件事。而我又不高兴把那个文件夹下载下来,本地复制一遍再上传上去,这样做太麻烦了。于是就利用现有的 API,自己写一个工具来在线复制文件夹。由于 Google Drive 统计帐号容量的时候,是按文件的拥有者(Owner)来计算的,所以在迁移帐号的时候,并不是直接把文件夹移动过去就可以了,要复制一下才可以改变文件的拥有者。

上一版本的问题是效率比较差,在一次运行的时限(6 分钟)内,只能复制约 50 个文件;并且不支持子文件夹的复制。网上有一个工具,Drive Migrator,实现了子文件夹的复制,并且突破了 6 分钟的限制,但依然由于效率太差,一天只能复制 5000 个文件。

而新的版本,在网络通畅的情况下,平均 1.5 秒可以完成一个文件的复制,也就是 6 分钟可以复制超过 200 个文件,5000 个文件最多只需要 2 小时即可完成,效率提高了不少。唯一的不足之处是,Drive Migrator 在复制的过程中,不需要把浏览器一直开着,它是完全在 Google 服务器上进行的;而我这个新版本,则是运行在每个用户自己的浏览器上,页面关闭,或者机器休眠了,都被导致复制中断。

新版工具入口:https://leonax.net/tool/google-drive-enhance/

使用方法在新页面中有详细说明。

Google 的面试流程

在 Google 工作有一段时间了,是时候和大家分享一下 Google 的面试流程,以方便广大求职的同学参考,也顺便给 Google 打个广告。

Google 有一个全球统一的招聘网站:Google Careers。里面不仅有空缺职位的介绍,还有 Google 在世界各地的办公室的介绍,比如这个是我所在的苏黎世办公室

前期准备

在申请 Google 的工作之前,最好对自己想做的工作和对未来的团队有一个期望。比如自己想从事哪个方面的工作,前端还是后端,网络服务还是客户端软件,团队在美国、欧洲或是中国。尽管不论你的目标团队是什么,面试的难度和流程都是统一的,但毕竟将来你要和你的团队长期协同工作,选一个自己喜欢的产品和团队,何乐而不为呢,对吧。

除了选职位之外,面试的基本工也不可少,去 LeetCode 温习一下算法题吧。

递交申请

你可以通过上述的招聘网站递交你的简历,也可以找正在 Google 工作的朋友帮你递交。当然,后者是有好处的,下面会提到。对于应届的同学,也可以留意一下各大高校的招聘活动,应届招聘的人数较多,多数会有统一的线下安排,效率比较高。

面试

面试分为三种:笔试、电话面试和现场面试。

笔试通常是针对应届毕业生,由于人数多,HR 没有办法一个个打电话来面试,只好统一进行笔试。

电话面试,如果你不慎错过了笔试,并且 HR 又看中了你的简历,或是对于社招的求职者,那么你将接到至少一轮的电话面试。电话面试通常需要写代码,如果条件可行,可以通过 Google Docs 实时交流代码;最不济的情况,则是在电话中口述。这个阶段中,HR 也会打电话过来了解一下你的背景,咨询一下你中意的产品和团队,以及你在 Google 有没有认识的朋友。

现场面试,电话面试(或笔试)通过之后,你将会收到现场面试的邀请,地点一般会选在离你最近的办公室。现场面试至少有四轮,每轮一小时,几乎全是技术面试,要求在白板或者纸上写代码。由于内部规定,这些代码会被记录下来交由招聘委员会审阅,所以在白板上写代码的时候,你可能会注意到面试官在积(mang)极(lu)地抄写你的代码。如果面试期间碰到中饭时间,会有面试官带你去吃中饭,顺便感受一下传说中的免费午餐 :P

面试结束之后不会立即知道结果,即使主动询问面试官或者 HR,得到的回复一般都是“等通知”。

审核

所有的面试结果会交给招聘委员会(Hiring Commitee)进行审核。与此同时,HR 会发信给 Google 内部可能是你以前同学或同事的员工,要求他们写评价。这些人的评价也会一起交给招聘委员会作为参考。这时就能体现出之前提到过的内部推荐的好处了,至少有一个人帮你写了评价,聊胜于无。

招聘委员会审核通过之后,结果会交由 Larry Page (和他的团队)过目。是的,你没有看错,CEO 会亲自审阅你的资料。

讨论合同

上述的审核通过之后,HR 就会开始准备发 Offer。它实际是一个套餐(Package),套餐中注明了基础工资,奖金的比例,入职时的股票奖励等。你可以多多少少谈点条件,当然,大公司有着成熟的等级体系,可商量的余地不大。如果你需要搬家(Relocation),Offer 中会包含搬家的补贴,或许会有一个中介(Agent)来协助你完成搬家的过程。

签订合同和入职

最终会有一堆的文件寄给你,一份一份签名之后再寄回(或交予 HR)。

签完合同之后就等着入职吧。这段时间里,你可能需要办签证、搬家等一些琐碎的事情。由于美国签证名额的限制,H1B 签证现在实行的抽签制度,约有三分之一的概率签不出。如果发生这种情况,你可能需要重新签一份合同,并前往另一个地区的办公室,等待最长可能有一年半的时间,再去美国。这个过程称为 Parking。Parking 的地点可以和 HR 商量,比如瑞士、加拿大或者其它地方。为了避免这种尴尬的情况,你也可以不选择美国的职位,其它地区也有很好的办公室和职位。

试用期

和多数公司一样,入职之后的三个月是试用期,试用期内可能会因为能力不行而被解雇。当然这是小概率事件,大多数新员工都可以顺利度过试用期。在试用期满之后,推荐你入职的同学/朋友,可以得到一笔奖金,金额视你的职位高低不同而略有差异。到时候就找他/她请客吧。

完成整个流程之后,恭喜你,你已成为一名 Googler。如有什么问题或者想加入 Google,可以私下联系我。