fish的猿粪服务器开发

创业初期如何选择APP的云服务器架构

2015-07-08  本文已影响4726人  白洋_Terry

最近正好自己的软件准备推出第一个Demo,需要选择合适的云服务器,作为一名懂点技术的非技术人员,我研究了一下各个云服务大佬的产品,看了一些书籍,也咨询了几位架构牛人,总结了一些心得。记录下来,与大家一起探讨。如果恰好也有像我一样的草根无经验者,可以一起学习提高。大牛们就慎入了。

作为草根创业者,虽然都希望自己的App正式上线后能够迅速扩大影响,收获不断激增的用户,但毕竟那是美好的理想。即便是如Google、Facebook、Twitter这样的互联网里程碑式的公司,也是从微小的状态一步一步发展壮大的。如果你是一个严肃的创业者,一定对自己的idea有过成熟地思考,一定是希望自己的idea能够从一个很小的痛点出发去满足一小部分特定的用户,之后通过不停地获取用户反馈,不断快速迭代进化。相信现如今,没有一个冷静的创业者一上来就信心满满地宣称自己要做一个XX平台,要满足10亿人的需求。因此,就算你内心里想着今后我的软件要有100万的DAU,你也没有必要在一开始就按照那样的规模去设计架构。首先,满足高并发、大流量、高可用、海量数据、能够支持分布广泛的用户来源的系统架构,一定是相对非常复杂的架构。作为创业者,在idea没有真的投放市场,接受用户检验的时候,幻想一步到位去设计完善的架构,绝对不明智,甚至可以说是无用功。因为你并不能完全准确预测未来你的瓶颈到底在哪里,准确信息一定来自于实践。其次,复杂的架构,必定意味着高价格。创业初期,更重要的是验证想法,调整发展方向,寻找真正可持续前进的策略。创业的失败率太高了,弹药粮草的储备,是能否创业成功的非常重要的因素,甚至可以说是最重要的因素。古人打仗,讲究的是大军未至,粮草先行。创业成功的一个重要原则是你得挺到你找到正确前进方向的那一天。绝大部分人都是倒在黎明前的黑暗里。其实我挺反感很多人说什么这是因为毅力和勇气不足,这些都属于风凉话。当大军饥肠辘辘时,如果粮草久久不至,只有一种结果,就是军心涣散。从这个角度来讲,创业开始阶段,钱必须花在刀刃上。可能有人会讲,提前搭好架构,就是为了当用户数量激增时,能够让服务器支撑,以获得良好的用户体验。那我要告诉你,就连Twitter在成长过程中,都经历过无数次宕机,无数次系统崩溃。我们真不应该总去想有了XX万用户之后怎么办,而是应该先踏踏实实地获取1万个用户。

当然,我说这么多,可不是说优秀的架构不重要。我们应该有能力想到长远,但行动上绝不应该超出当下。服务器的架构,是为了满足APP服务客户的需要,只要遵循可复制、可扩充的原理,是可以随着业务量的增加不断进化和优化的。上线初期的架构一定是简单的,也许只是一台云服务器,但软件一定要有可分解分层的潜力。现在的云计算,都能简单的在线扩充计算能力、存储空间、带宽,各种弹性伸缩、分布式计算都越来越成熟,创业者的基础技术环境应该说越来越好。这里给大家推荐一本书《大型网站技术架构_核心原理与案例分析》,这本书语言平实,从基础出发讲解了大型优秀网站所应具备的优秀架构,作者是李智慧,是阿里优秀的架构师。大家都经历过双十一,都知道这淘宝搞出来的购物狂欢是多么的疯狂,也能想象在双十一期间淘宝天猫要经历的是什么样的流量冲击,那就能够知道阿里的架构是非常的优秀的。

下面从这本书里摘取一个网站从小到大的成长过程中,架构的合理变化路径,以作Mark。虽然这是说网站架构进化之路,但是对于APP一样有借鉴意义。

1、小型网站初期很少人访问,应用程序、文件、数据可以都放在一台服务器上。

2、随着业务发展,一台服务器不能满足需求。越来越多的用户导致性能越来越差,这时需要将应用程序、文件和数据库部署在三台服务器上。这三台服务器对性能要求各不相同,应用服务器需要处理大量业务逻辑,因此需要更快更强大的CPU;数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的硬盘和更大的内存;文件服务器需要更大的硬盘和更快的IO。

3、网站访问特点和现实生活一样遵循二八定律,80%的业务访问集中在20%的数据上。如果需要进一步优化架构,就必须把这部分数据建立缓存。缓存分为两种,缓存在应用服务器上的本地缓存和缓存在专门的远程分布式缓存服务器上。

4、单一应用服务器能够处理的请求连接有限,访问高峰期,应用服务器成为瓶颈,这时应采用应用服务器集群。

5、使用缓存后,绝大部分数据库读操作可以通过不访问数据库服务器完成,但少部分读以及所有的写操作,还是需要访问。下一步就是用2台服务器将数据库的读写分离,两台服务器之间采用主从复制机制。在应用服务器端采用专门的数据访问模块。

6、由于中国存在不同地域网络速度和互通的问题,可以采用CDN和反向代理。

7、如果访问量持续增大,可以建立分布式数据库系统和分布式文件系统。

8、为应对越来越复杂的数据检索需求,需要添加NoSQL和搜索引擎服务器。

9、大型网站为了满足复杂的业务需求,通常会将不同的业务应用拆分,分别搭建服务器。

10、当服务器数量越来越庞大,所有的应用服务器都需要和数据库连接,造成极大的阻塞和复杂度,可以将不同业务之间的相同部分提取出来,独立部署。通过分布式调用这些共有业务。

说了这么多,也许都是错的,毕竟我对于技术只是一知半解,如有误导,还请见谅。

上一篇下一篇

猜你喜欢

热点阅读