Reddit CTO: 创业初期不要放弃成熟技术

Reddit CTO:  创业初期不要放弃成熟技术

当你有个伟大想法准备去创业时,你会考虑什么样的技术和流程,使得创业初期能平稳度过呢?更重要的是,当事业腾飞时,你如何让系统可迅速扩展呢?有些技术能帮助系统迅速扩张,有些技术虽然扩展性不好,但易于部署,因而能让业务快速开展.

Reddit的CTO Martin Weiner建议也许两种都需要。Weiner曾是Pinterest服务发布的技术专家之一。在本月Texas Austin举行的SXSW Interactive大会上,他在演讲中给出许多操作性很强的建议。

任何初创企业的第一年都会感受到所谓的“扩展性的地狱”,他说,“这是每个初创企业都会遇到的问题。”许多设计师可能采取的方法是使用所有最近流行的技术。设计师们非常了解技术,因此为什么不抢在技术应用的潮头呢?Weiner警告说,考虑到新技术的数量,甚至其中有些还不成熟,这种方法是个错误。

事实上,一个新初创公司的需求可能并不会与前两年建立的初创公司有什么不同,因而,多用成熟产品也许是最佳选择。那如何知道一个软件是否成熟了呢?作为一个极客,他给出了下面这个公式:

Reddit CTO: 创业初期不要放弃成熟技术_第1张图片

技术成熟度= (心血+汗水) / 复杂度

就是说,我们可以通过软件开发人员为软件所付出的劳动,除以软件带来的复杂度来判断软件的成熟度。例如,像Redis这样的缓存系统,是个非常简单的单线程软件,并由大量来自像Twitter和Pinterest这样公司的代码贡献者去完善,而HBase同样有很多代码贡献者,但它基于相当复杂的想法,很难维护,因而在软件成熟度上,Redis的排名极可能要高于HBase。

基本上,如果可行,我们都会使用成熟技术,这样会让运行尽可能平稳。如果业务没有达到Pinterest规模,(也许任何技术都差不多),但如果用户量达到Pinterest规模时,有些技术就会是个问题。

成熟技术都会大量懂行的人才和支持。比如,MySQL,“假如凌晨3点,你的网站down了,任何有关MySQL的问题,你都可以在Google上找到答案。不仅如此,它还会被上传到Stack Overflow网站上,这时也许会有人称你为菜鸟。但,这也许测试软件成熟度的一个好办法”,Weiner说。

性能和稳定性,和Weiner所说的 “期望的可预见性”也是不成熟技术的常见问题。一个不成熟软件开始时可能会工作很完美,但突然有一天,因为某种原因,延迟会直冲房顶,但那时也许既没有文档或debugging工具可以依赖。他说,“大多数情况下,我们不会真正长期需要一个不成熟的技术。”

成熟技术带来的另一个好处是让业务运转简单,可以(让我们)专注于有效的运营方面。“很多工具很难随业务发展而扩展,但能让我们快速开展业务,”他说。(可以考虑)选取一些常见的(成熟)技术,像NGINX, Ubuntu, GitHub和Python。“Python是非常成熟的技术。每个人都知道怎么用它,而且你可以找到懂的人,”他说。

对于大多数数据捕捉任务,比如存储用户评论或登入凭证,MySQL是个很好的选择。AWS通过RDS提供了托管MySQL服务。AWS提供管理服务,并提供自动恢复和配置等功能。随着公司成长,这些工作还可以转移给自己员工去做。“这(几乎)是毫无新意的技术革新”他说。不必顾虑优化查询,“除非必要,不要优化后台任何东西”

事实上,AWS是初创企业的一个极好资源。“它运行良好,而且随着你的业务成长,它也可演进和扩展,”他说。它的定价非常有竞争力,并且有许多工具支撑。基本搜索服务可由AWS CloudSearch提供;存储可用AWS S3,“它超级可靠,”Weiner说,“可靠性达到4个9。”另一个(常用)AWS服务,Route53,则提供域名服务。

另一个你无需担心的工具是Apache Zookeeper,非常适于管理大量服务,而对于一个刚刚起步的公司,只用AWS Config就够了。

所有事都会出错

如果你的出创公司业务腾飞了,就不得不开始考虑如何扩展运维了。这时,你可能需要替换一些基本技术了,因为有更多IT人员可以打理这些工作。

首先监控很重要。“如果你开始成长,你也就开始出错了,”他说。(需要)监控所有的东西。Weiner推荐Statsd,一个由Etsy开发的Node.js程序。它能通过接口点,如,数据库调用,API,对其它服务的调用,甚至像备份这样的底层调用等,定期ping各个组件。

Reddit CTO: 创业初期不要放弃成熟技术_第2张图片

并且,做好日志。服务调用,页面访问,用户注册,任何以后需要查看的信息,都要日志下来。“某天你可能不小心不可恢复地破坏了数据库,这样的事总会发生,日志将会拯救你。”他说

只要工作负载增加,你才需要考虑优化。如果使用RDS,扩展数据库应该非常简单。这时,需要整理SQL查询,并且优化它们,使得更多的查询可以缓存。标准化数据,去掉连接和增加索引。“这事实上是去掉了跟MySQL相关的概念,”他说。

并且查找哪些缓存可以帮忙的地方,这些通常称为静态材料(static materials),如:Redis, Memcache,AWS Elasticache 和Varnish.

随着时间的发展,一个CTO应该从服务的角度而不技术角度考虑问题。Weiner把服务比作乐高积木,能构建更大对象的塑料块。“乐高不是原始塑料,也不是成品汽车,而介于两者之间,"Weiner说, “像乐高这样的伟大服务,能推动创新力。” 只要接口在同样结构下,服务使得开发人员可以用他们喜欢的语言工作。比如,一个游戏公司可以从一些像操纵杆控制软件这样预建服务中选择(现成的服务),迅速建立新游戏。

ZooKeeper在服务发现方面非常好用,“Zookeeper是一个迷人的工具,(使用它)会有点痛苦,但是值得。”每次引入一个新服务时,就可以把它放入ZooKeeper中。这样,服务可以在多个产品中重用,诸如邮件服务,并且能方便地增强为新功能。.

Weiner说,“现在工程师对他们的服务负责,就像他们的孩子。如果它在午夜出错,他们会立刻爬起修复它。”


【译后记】

这边文章是原作者根据MartinWeiner在大会上的演讲整理而成,基本围绕初创公司技术选择的一些最佳实践和考虑。从中可以看到,对于一个初创公司而言,让业务迅速开展是第一位的,让业务稳定运行也是考虑的重要出发点。只有业务达到一定规模,才需要考虑技术优化和调整。下面附了Weiner的演讲稿链接,供参考。

 

原文: http://thenewstack.io/reddit-cto-sxsw-stick-boring-tech-building-start/

Marty WeinerSXSWInteractive大会的演讲稿全文:

http://www.slideshare.net/dianachow/marty-weiner-reddit-cto-sxswi-2016-everythings-harder-at-scale?qid=246b0bfb-6f99-4156-8f09-4042d054733f&v=&b=&from_search=1

你可能感兴趣的:(初创公司,技术选型,架构设计,reddit,创业)