大家好,我是小轩
今天给大家分享下一个系统都设计到哪些层
不同互联网公司的业务范围有很大差别,但抽象的去看不同公司架构基本大同小异
看下面这张图
架构解决的问题:结构拆分,就是把大的问题拆解成小的系统,然后把小的系统拆分成若干个层去实现。
让开发、运维变得更加容易、方便
咱们从下往上看
详细说的话就会特别特别多,这里就先大概说一下
基础层
也可以称为存储层,涉及到数据、文件的存储。
关系型数据库和非关系型数据库,这两个数据库是互补的,不是非此即彼的。
非关系型数据还包括一些文件:大文件和小文件,大文件有大文件存储的办法,小文件有小文件存储的思路。
开发层
开发框架:开发分前端和后端,现在后端主流的开发框架有Spring、Spring Boot等,如果有大数据分析和机器学习等处理大规模数据和训练模型的话,也会涉及到其它的框架、模型。
服务器:项目部署需要把代码运行在服务器上,服务器的话可以买某某云服务器,还可以自行购买多台服务器物理机,具体配置就根据自己的预算去购买了。
容器:后端开发需要用到的东西挺多的,为了方便部署和管理,会引入容器技术,比如docker等
服务层
配置中心:具体业务就不说了,大型互联网公司都不是一个系统,都是上百个系统,如果每个系统都有自己的配置文件,就不好管理,所以弄一个配置中心,统一配置。
服务中心:用来解决各个系统之间交互问题,不同系统之间互相调用,如果说系统直接连接不仅耦合度高而且出了问题不好解决,通过服务中心去分发、去安排。当某个服务挂了,备用服务只需要去服务中心注册就可以了。
消息队列:能让各个系统之间或者一个系统各个业务之间耦合度降低。消息队列实现是异步的,大批量请求数据可以先放在队列里边,缓解服务器压力,不需要服务器在短时间处理完。还可以根据不同服务器的处理能力去进行请求分发,可以让处理能力强的服务器去处理更大规模的数据。
网络层
负载均衡:为了应付高并发,会将一个系统部署到多个节点上,通过负载均衡把请求均匀的分发到节点之上;
CDN:为了让服务器压力更小,可以把静态的文件或者资源做缓存;
多机房:解决灾备
多中心:即去中心化,解决灾备,一个地区受灾后可以使用另一个地区服务器上的数据进行恢复;
用户层
用户管理:对用户进行统一管理,统一授权;
消息推送:用户不一定使用什么终端进行访问,有可能使用安卓,有可能使用苹果,有一个统一的统筹消息推送的机制;
存储云:根据业务区选择,如果上传的文件比较多和频繁的,通常会购买第三方云,大型互联网公司会自己单独建立一个存储云,不在基础层进行存储;
图片云:图片和普通视频或者文本文件有区别,图片有可能进行打水印、美化等;
业务层
系统业务有很多,不同公司业务也不一样
自动化测试平台
系统运维平台
测试、运维需要做到自动化,集中的测试和集中的运维,如果系统规模小就不需要这两个平台
数据管理平台
会产生很多数据,就需要对数据进行管理,挖掘有用的信息,推动业务继续向前发展
系统管理平台
有这么多系统,系统后台有很多管理员,运维和测试人员也需要登陆,就需要统一对使用人员进行管理