云服务器 1-2台(ECS ),独立数据库一台(RDS),ssl证书
按照以上资源成本来计算,前端500/月基本可以支撑业务的正常启动。采购 2台 ECS的原因是考虑测试与正式环境的分离。避免安全及业务隐患。
单台云服务器配置无需太高,可按最低配置采购,后期可以根据实际情况进行平滑升级。数据库等服务同样如此,阿里云云组件中,平滑升级是特色之一,基本可以达到无感体验。
Ps:阿里云的 SLB服务问题,一旦挂 ssl证书后,访问速度会慢许多,尽量不要单独购买 SLB服务做为网站主入口。如果有好的技术人员或架构师,可以考虑先期规划一些必要点,规避一些后期维护相对比较麻烦的问题。
可能有的相关问题:
服务器的负载均衡,ssl证书问题,数据库扩展问题。
内部项目支撑工具:
Wiki:文档管理工具(一期需要,可根据情况部署在内网)
禅道:任务管理工具(前端可以使用免费版本)
GIT:代码管理工具(可以考虑使用国内git)
Jenkins:代码发布工具(初期可以不需要)
JumpServer:跳板机(初期可以不需要)
企业项目发展期(一般100<并发<1000)
当业务正常上线后,随着线上业务的成长,初期的架构到达一定的瓶颈,应用产生越来越多的访问量、并发慢慢增加,服务器的 CPU、磁盘存储空间压力都会随之增加,这个时候我们就会考虑做一些服务器扩容的工作。
对于网站的入口压力最大的问题就是并发量的负载均衡,通常的 QPS的计算方式为二八定律,这个定律适用于一般的所有的业务场景,但实际业务中会有一定出入。例如在股票行业中,每天 9:30左右前后 15分钟是访问最高点,电商类行业在爆品活动抢购,或者广告高投入时为最高点,而 12306在春运时放票特定时间时也是最高点。
当然,如果在业务能力达到春运火车票的体量时,本文也就不再适用了。
先上系统结构图,再进行说明吧!如下图所示:
在负载部分,前文简单提到过 ssl证书绑定阿里云 SLB服务时会产生访问低效问题,本文建议使用 Nginx 进行负载和反向代理的处理,对于负载服务器的要求是满足并发要求,CPU 和内存较为重要。初期可以将负载均衡部署在主应用服务器,减少服务器成本。https 是现有网站的标准配置,在前期可以使用阿里云的免费证书,无费用增加项,如何配置证书现在网上资料较多,本文中不再叙述。
结构图中涉及到的一些组件我将一一进行说明:
日志服务,阿里云的日志服务是相当强大的,同步的方式也有很多,一般的日志存放会习惯性放于日志文件或者缓存当中。曾经在12年时做过一个项目,当初为了做一个广告数据分析系统,采用 lua 进行日志收集,并存放到 redis 当中,再按分钟级进行数据读取写入到 db 中,这样对硬件资源配置非常之高,而且效率其实并不高。
在 Elasticsearch 应用更广之后,大家开始习惯将日志推送到其中,一是便于保存,二是便于查询。并可以搭配 Kibana 进行日志的查询搜索和二次分析,有兴趣的可进行研究一下。但是在云服务中更推荐使用阿里云的日志服务,成熟的控件,强大的分析机制,数据保存机制,其实都会比 elk更加强大和稳定。并且在大数据分析上,日志存放到 OSS 中后,更是可以接入 MaxComputer 进行二次分析。
OSS 作为日志存放,比传统的云磁盘储存在费用和访问速度上更快,相比于一般的图片服务器,我较为推荐。在后期配合 CDN 加速上也是神器之一。
MaxCompute 是一项大数据计算服务,它能提供快速、完全托管的PB级数据仓库解决方案,使您可以经济并高效的分析处理海量数据。这块内容相当多,如果有兴趣可以去阿里云产品官网查询,后面如果有时间我可以考虑出一套此类的学习教程。
在业务应用最大的压力来源于数据库的读取,这也是服务压力的主因之一,拿 PHP 开发语言来说,查询 mysql 的瓶颈尤为严重,并发数一旦过高数据量过大时,查询效率就不能再得到保证。按二八原则,80%应用的业务的访问集中在 20%的数据上。
比如淘宝买家浏览的商品集中在少部分成交多、评价良好的商品上;百度搜索关键词集中在少部分热门词汇上。既然大部分的业务访问集中在一小部分的数据上,那么如果把这小部分数据缓存在内存中,是不是就可以减少数据库的访问压力了,提升整个网站的数据访问速度,改善数据库的读写性能了呢?答案肯定是的!
网站使用缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在分布式缓存服务器上的远程缓存。本地缓存的访问速度更快一些但是受应用服务器的内存限制,其缓存的数据量有限,而且会出现和应用程序挣用内存的现象,影响应用程序运行速度,甚至造成服务器死机。远程分布式缓存可以使用集群的方式,
阿里云 Redis 中其实已经包含了各种节点,主从集群等等。这一步的升级只用将原来云服务器中的 redis 进行迁移切换到阿里云 Redis 中,再根据实际储存大小进行选取配置就可以了,所以阿里云 Redis 适用于远程集群缓存。
如果涉及本地化数据缓存其实也可以在应用服务器搭建应用服务器中搭建本地化缓存,加快缓存读取速度,减小集群缓存压力。
Ps:阿里云多节点会在使用 PHP-laravel-Queue 中出现问题,请注意避免,原因应该是数据同步的问题。
常见的 NoSql 缓存有 memcache,redis 等。PHP 的缓存也有 Cpcode 等等。其它缓存可以根据实际需求开启。
数据库这一部分只用根据应用场景升级配置就行了,可选多节点、集群、储存服务器 CPU 和硬件,这里就不再啰嗦。
最后也许有些人会问,为什么在初发展阶段将业务结构设计得如此复杂?
项目在初始阶段是最干净简单的阶段,很多公司在业务后期进行架构规划,包含数据维护,数据迁移,服务运维,后期如果进行大调整的话所要付出的代价将会非常之大。
图中所演示的内容是只提供了一个思路,在实际应用中,只用做到应用与业务分离,组件与组件分离,功能上解耦就能大大降低后期重构或者扩展的成本。