网站系统的架构设计
2020-10-27焦花花
焦花花
摘 要:一个网站系统在需求确定后,就可以开始架构设计了。架构设计不同于编写代码,需要遵循严格的语法和编程规范。它没有规范可遵循,存在即合理,适合网站系统开发和运行的架构就是最合理的系统架构。
关键词:网站;系统;架构;部署
对于一网站系统,根据数据量或者逻辑的复杂性会有不同的架构上的设计。也可以根据用户量的多少来对不同系统采取不同的设计。对于一个系统,根据用户的使用情况,可以分为几个常见的用户级别系统。分别是万级用户的系统、十万级的用户系统和百万级别的用户系统。这三种级别的用户量在系统的设计和应用的部署上会有不同的方式。接下来,我们分别介绍这三种级别系统在设计上和部署方式上的不同。
1一万用户量的系统
用户量不超过一万的系统应该是最简单的系统了,对于这种简单的系统应用程序的部署包、文件的存放、还有数据的安装都可以放在一台服务器上即可,不会影响系统的功能使用和性能。
在应用程序上,基本上使用一套java的SSM/SSH框架就可以完成相应的业务功能了。一些复杂的统计需要sql语句即可。然后在数据库连接池的配置上修改下参数。因为用户量使用的少,只要能实现需求的功能。用户量较少一般产生的数据也比较少。因此数据的存放和应用可以放在同一个服务器上。
2十万用户网站架构
用户使用量不超过十万的系统结构,用户量较多,一般会产生较多的数据。如果数据存放和应用公用一台服务器,随着数据量的增多,会占用服务器的更多的资源。因此需要将部署应用程序的服务器、存放文件的服务器、存放数据的服务器独立出来。
实现应用程序和数据的分离,不仅在逻辑上的分离,在物理上也实现了分离。
2.1服务器的合理选择
对于应用程序的服务器,主要用来处理业务逻辑,对硬件的要求是需要好点的cpu。对于存储文件的服务器,需要较大的硬盘,对于存放数据的数据库服务器,它的任务是做了大量的数据缓存和对磁盘进行检索,因此需要硬盘读写速度比较快的,另外需要大的内存。
2.2程序的设计与优化
在应用程序的设计上,主要对业务中的数据的批量处理和统计上的改进。Hibernate框架写的速度每分钟两千条,如果需要处理10w条数据,使用java语言,提交批处理的sql语句,每秒可以处理5万条数据。Oracle数据库每秒可以修改5w条数据的状态。简单的业务可以用批处理sql语句来解决问题,复杂的需要批量操作的业务,就无法通过简单的批处理的sql来解决。需要使用消息队列机制,它是解决批量数据、大数据的通用方案。MQ实现了批量数据处理与业务的分离,实现对程序的解耦。
Tomcat支持的线程数是200到300之间,十万级用户,如果每个用户一天请求50次,按照十小时算的话,每秒需要请求服务数是139次,如果峰值翻倍的话,也在tomcat的最大并发数承受范围内。因此应用服务器选用tomcat即可。
3百万用户网站架构
现实中绝大多数的系统的用户量是达不到百万级用户的,这种级别的系统业务是比较复杂的,使用分布式技术、缓存技术和负载均衡技术等。因此系统架构也比较复杂些。
3.1应用服务器的设计
负载均衡服务器统一管理着系统的入口和出口。百万级别用户的系统,负载均衡服务器选用nginx。它可以最高支持5万的并发数。虽然是百万级别的用户数,但在某一时刻的并发量可能就是几万。因此,一台nginx完全可以支撑百万级别用户的负载均衡。相比于apache和tomcat服务器,ngnix做负载服务器是较好的选择。
应用服务器上主要部署的是应用程序、本地的一些数据缓存、还有数据的访问模块功能。应用程序可选用tomcat即可,因为应用程序可做集群,保持与其他模块的耦合性。本地的缓存可以存储一些数据量不大的数据,但经常需要访问当的数据即可,像session这种,因为百万级别的用户量,虽然每一个的session占用空间不大,但是百万个seeeion就需要很大的空间,因此seesion建议存储在远程分布式缓存中,目前常用的远程分布式缓存有Redis和Memcached。Redis可以支持的数据结构更多些,而memchached只是支持key-value的结构。而且redis可以处理简单的业务逻辑,做消息队列代理等。因此远程缓存服务器选redis。
数据库访问的模块,因为数据量比较大,而且传统的关系型数据库对表数据是行级锁的,即读一张表或写一张表数据,会形成阻塞的。因此建议,数据库做主从备份,将数据的读和写分开。Spring框架和中间件都可以做对数据库的读写分离。
3.2文件服务器
常用的存储文件的有HDFS和FDHS,这两种在网上的资料都比较多,是比较成熟的存储系统了。关于文件系统的使用基本上都是一样的,用户将文件上传到应用服务器上,经过程序的处理,将文件存在文件系上,文件系统给应用服务器回一个存储的路径。应用服务器将路径告诉客户端,客户端就可以直接去文件系统上读取处理过的文件了。相对独立,和其它服务器上的耦合度较低。
3.3数据库服务器
在系统设计上采用缓存技术,可以减少程序直接读取数据库,可以减少数据访问的压力。不需要实时的数据可以先缓存在缓存中,然后使用批量提交技术同步到数据库中。除非是一些需要实时更新的信息,需要立即访问数据库。缓存技术可以带来系统性能上很大的改善。百万级别的数据需要对数据库的操作进行读写分离。
目前的市面上的关系型数据库都是采用行级锁的,当同时对同一张表的数据进行写入操作和查询操作时,是会有线程阻塞的,当严重阻塞时,会使降低系统的性能,甚至让系统挂掉的;对数据采用读写分离后,主库主要用来写,减少查询的系数,降低阻塞。而从库只有查询操作,不存在阻塞的。这样将主从数据库服务器的性能发挥到最大,而且也比较的稳定。另外对数据的安全也有所保证了。因此,百万级别的系统相比十万级别的系统主要上的改变就是对数据库的設计做读写分离,实现数据库的主从库设计。
随着系统在设计上的逻辑越来越复杂,使用的技术也会越来越多。对于后期的维护成本也会增加。一个好的系统,除了在满足需求的功能上,还需要比较好的代码质量。好的代码的编程会减少系统出问题的几率。另外在框架的选型上也是比较重要的。不同的框架能够实现不同需求的功能。但是在最初选型上有前瞻性,对于后期系统的维护成本也会减低。因此设计一个针对不同用户量的系统,需要考虑的因素是多方面的。并且随着技术在不断的更新,可以选择的选择项就比较多。目前的springboot框架,springcloud技术,微服务等等。应用开发的前后端分离技术等等,让开发变得越来越简单。微服务的使用也让系统功能可以部署在不同的服务器上。一个功能的开发部署不会影响其他功能的使用。这样对于大型系统的维护会简单些。包括前端技术,从之前的html、css、js技术发展到jquery框架。到目前前端比较流行的vue.js框架。以及还可以做后端开发的node.js的前端技术。这些新框架技术的出现会使程序应用的开发变得容易。因此未来的系统设计也会在不停的变化中。
参考文献:
[1] 李智慧.大型网站技术架构[M].电子工业出版社.2013.
[2] 唐文.海量运维、运营规划之道[M].电子工业出版社.2014.