当你有了一个创业的想法,一个团队,你铆足了劲想开始创业的时候,你首先会遇到的问题往往是,“好了,那我们应该用什么样的技术?”(当然,希望你已经找到了“我们要解决什么问题,以及如何解决这个问题”这个问题的答案,不然你不应开始创业)。
这个问题的关键是,在那些能让你更快速地发展的新技术和那些经过前人的试验并验证可行的成熟技术之间找到平衡,后者显然具有更好的性能和可靠性。我在这里给出选择技术时要考虑几个因素,以供大家参考:
不要迷恋潜在的性能
在创业初期,你很难确定用户是否真的会使用的服务,即使他们使用了你的服务,他们的行为模式也很难确定。早期过度的优化就是一个错误,而且我已经看到了好几个犯这个错的初创公司。我记得有一个创始人曾经问我,他应该选择哪种二进制序列化格式来与他的iOS应用程序通信,其实只需一个简单的JSON API就能很好的做好这件事。
如果你的服务吸引了很多用户,那么你的团队很可能会重写你的应用中的很多部分的代码。因此,你应该在最大程度上确保你的最初测试者能有一个快速的体验,而不是浪费精力去考虑你的应用是否能够处理成千上万的并发用户。
另外,我还想给大家一个忠告:如果你正在准备举行一个大型的新闻发布会,并期望以此吸引一大波新用户,那么你就要想想哪些是新用户最有可能做的事情(比如,注册、查看关于页面等等),并确保这些页面和功能有一个很好的解决方案,并有能力应对大量用户的请求。
善用开源项目,不要重新发明轮子
开源社区已经有数百个其它公司在发展壮大的过程中实现的解决方案,这些优秀的开源项目都经过了实践的验证,尤其是在基础设施和监控方面的方案。比如Sensu,Graphite等。另外就是服务托管解决方案,这些都是可以为你节省大量时间,让你能够专注于构建你的产品。
如果你在解决一个特定的问题,或者是在选择工具的时候遇到了问题,可以去StackOverflowQ&A搜索一下,看看别人是如何解决类似的问题的。
你的核心数据不是试验场
Quora的联合创始人亚当·德安杰洛(AdamD’Angelo)在Quora上的一个回答中有如下精妙言论,他说:“一个应用的核心数据是最不应该拿来冒险的,因此,不要在这方面使用新技术。”虽然新的数据存储技术已经出现并趋于成熟,但这些新技术的性能还是很难和诸如PostgreSQL之类的成熟技术的稳定性相媲美的。
不仅如此,对于那些你关心的用户数据,都应该定期备份,那些成熟的项目通常都有非常坚实可靠的备份工作流程。最后,如果你需要额外的支持,你应该和咨询公司建立良好的关系,有时它可以派上用场。
缓存层+非规格化数据是试验新技术的好地方
在Instagram早期的时候,我们决定试试采用当时相当新的Redis技术,我们用Redis存储一些用户的信息流和其他非规范化的数据。后来,实践证明它是我们所采用的伟大工具之一。但是,即使它当时出了问题,我们也可以从我们的核心数据存储中重新恢复我们的数据。同样,对于像Memcached或Redis这样的缓存层,你可以逐步将流量过渡到新的系统,看看他们的表现如何,如果新的系统表现不错,再逐步淘汰初始的系统。
使用现有组件的新功能,还是采用新的组件?
像PostgreSQL这样经营良好的大型项目,一般推出新功能的时候,都会经过社区的严格审核和测试,因此每一个版本都是相当稳定的。在你的应用中使用这些项目的最新稳定版本,并使用新的功能,往往会比试图使用类似(或许有时甚至是更前沿的)但不够成熟项目的功能,要来得稳定得多,也不用那么折腾。
归根结底,最重要的一点是要记住,你的技术不应该限制你。尽管,有一些工程师会被吸引到使用尖端技术公司的工作,但这不应该成为你早期的技术决策的原动力。相反,建立成熟的数据存储机制,打好坚实的基础,专注于更令人兴奋的项目本身,这些才是你可以进一步增加价值的地方,这也将让你的团队更加专注于解决你最初着手解决的问题,即你创业的初衷。
原文:http://tech2ipo.com/59511