架构师训练营 -week04- 作业

用户头像
大刘
关注
发布于: 2020 年 10 月 11 日
架构师训练营 -week04-作业

作业:

一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。

因为目前所在的企业不能算是标准的互联网企业,我们的生产系统规模大概在千级别的TPS,百台虚拟机,数据量在T级别,使用Oracle RAC的架构,后续随着业务量的增加,也在往分布式系统的方向进行重构,包括微服务架构、分布式数据。所以下面的总结一部分是基于老师的讲解,一部分是基于自己的一些思考。



业务和技术关系一定是相辅相成的,业务推动着技术的发展,当业务的规模越来越大的时候,就会逼迫业务往更快更好更稳定的方向进行发展;反过来技术的进步又会推动业务模式的创新,例如移动设备的出现带来大量业务模式的创新,从而改变一代人的生活方式。

没有什么系统使用的技术是一步到位的,都是随着业务规模的不断增加,然后进行不断的迭代。适合自己业务的系统架构,才是好的架构。以一个典型的互联网应用系统的发展架构为例,应该会经历如下几个阶段:

  1. 第一步,快速上线,快速试错。这个时候不需要考虑太大的业务量,要看业务模式是否符合市场预期,所以可以采用单体架构,快速上线即可。例如可以在github上找一些高星开源的项目,在此基础上编写自己公司的业务逻辑,然后打包,再在阿里云上购买几台服务器,包括应用服务器和数据库服务器,实现基础的应用和数据分离即可,就可以上线推进了。

  2. 第二步,为了保证系统的高可用性,可以对系统进行集群。例如对应用系统进行集群部署,前端增加统一的Nginx反向代理;对数据库进行主从备份。

  3. 第三步,为了进一步提高系统的访问性能,考虑增加缓存机制。例如增加Redis缓存数据库,把热点数据缓存在redis里,减少数据库的压力。这个时候要做好redis的相关配置,例如集群、持久化机制等。智慧老师讲到在这之前可以考虑增加本地缓存或者集中式缓存,例如ehcache、caffeine等,但是因为没有这方面的实践经验,不太能确定什么场景下或者系统性能达到了什么瓶颈的时候考虑使用,留作一个待学知识点的TODOList吧。

  4. 第四部,做文件和应用的分离,当文件存储越来越多的时候,需要把文件系统分离出来,为了高可用,还需要做成集群形式,或者简单一点,采用可靠的第三方文件存储服务也行,但是对于大型互联网系统,应该是有自己的文件存储服务器了;然后对于数据库,当容量达到瓶颈的时候,也需要进行数据的拆分。可以考虑直接使用分布式数据库,例如TiDB、OceanBase等,或者使用mysql进行分库分表。

  5. 第五步,为了进一步的缓解后台服务的访问压力,可以使用CDN加速网站响应,在CDN上做动静分离,把一些静态不经常更新的内容缓存在CDN上。例如对于秒杀系统,可以把大部分的请求挡在后端服务器之前。

  6. 第六步,把与应用无关的业务独立的拆分出来,例如使用MQ做系统间的解耦和削峰填谷,使用ELK做搜索引擎,使用Prometheus做监控等。

  7. 第七步,拆分成微服务架构,把业务进行拆分、沉淀,形成业务中台,供前端应用去快速的组装成自己需要的业务模式,也有做成双中台的概念(业务中台和数据中台);同时配合之前的MQ、ELK、形成了一套比较完善的微服务架构了。同时在这一步,也要伴随着组织架构的变化。现在比较推荐的做法就是:谁开发谁运维。一个微服务就是对应着一个团队。

  8. 第八步,根据大数据进行智能化分析和处理,实现“千人前面”。还有一些“不正经”的做法,例如现在被诟病的大数据杀熟。

上面这些步骤也并非是一定要顺序性的,或者一定要有的。例如基于目前微服务框架发展的比较成熟,也有很多初创公司开始的时候就使用了云原生的架构,采用微服务进行业务系统的研发。所以还是要根据公司业务的特点,结合公司技术团队的能力和技术栈,挑选最适合的系统架构。以上就是对一个大型互联网系统发展历程的个人理解,还请老师多多指正。



用户头像

大刘

关注

大道至简,知易行难 2017.12.27 加入

想成为合格架构师的架构师

评论

发布
暂无评论
架构师训练营 -week04-作业