袁华辉
武汉市城投停车场投资建设管理有限公司 湖北武汉 430015
摘要:城市级智慧服务(管理)平台对于提升城市智能化水平、提高政府城市管理效率,方便市民具有较大意义。好的城市智慧平台必须具有较强的安全性、稳定性以及应对高并发的能力。本文从实用的角度介绍城市级平台在架构设计中的技巧和策略,侧重提供了适应高并发的系统架构设计解决方案。
关键词:高并发、智慧系统、架构设计
一、QPS是城市智慧系统架构设计的重要因素
搭建城市级的智慧应用系统,必须考虑大量用户同时使用客户端访问系统平台的极端情况。除了考虑系统的安全性、稳定性等因素外,系统架构的设计依据必须基于QPS(每秒请求数),以提高系统应对突然的高并发性可能性。不同的QPS对系统架构设计等技术要求原则如下:
50QPS以下——小网站
服务器性能稳定即可。
50~100QPS——DB极限型
须加强数据访问设计、代码优化,读写必须分离。
300~800QPS——带宽极限型
采取上缓存,多机负载均衡措施等。
500~1000QPS——内网带宽极限+Memcache极限型
采取数据分离、服务器集群、NOSQL措施。
1000~2000QPS——锁模式极限型
锁的问题会成为最大的瓶颈。要求系统中不能存在中央节点,所有的数据都必须分布存储、分布处理。
2000QPS以上——C10K极限
必须业务分离、分散QPS。
二、系统架构设计
(一)根据QPS选定架构模式
对于城市级应用系统而已必将免得大量的访问量、按照一般二线城市600万人口来计算,使用率每日可能达到1200万次。平均每日请求为每分钟8000次请求。安装业务进行估算:比如城市级智慧停车应用,高峰集中在上午7点30到9点半。下午的5点到7点这几个时间段。高峰期内平均每分钟请求约为10w次。QPS=1667,属于锁模式极限型,须采用分布式架构。
(二)应用服务器集群改善并发处理能力
单一的服务器由于系统、硬件等约束出来处理能力是非常有限的,所以我们需要我们应用能够横向扩展,向外扩展,也就就是Scale Out。
这是一个常规的分布式架构。通过负载代理到不同的服务器中,同时将文件、数据进行了分开部署。实测时,我们发现文件服务器和数据服务器压力还是非常大,需要进一步优化。
(三)使用缓存改善性能
随着对数据请求增多、用户量增多,数据库压力会慢慢凸显出来,访问延迟也就浮显出来。通常就简单的做法是采用缓存技术。
其中在日常数据运用上,大部分的业务访问都集中小部分的数据上。可以将经常访问的数据缓存在内存中,这样可以减少数据库的访问压力。
\
目前,我们的措施很大程度上提高了数据的响应时间。有了这些基本保障,下面就要着重解决锁的问题。锁主要有2类来源,一个文件读取和写入,一个数据库的读取和写入。解决锁的问题,也就是解决文件和数据问题。
(四)数据库读写分离
即使有缓存的支持,但若缓存过期、或者没有读取到缓存数据以及所有写操作还是需要访问数据库。为减轻数据库压力,故可将读、写操作分开,设计主数据库和从数据库。主数据库进行写的操作,从数据库响应所有的查询操作。主数据库每次完成了新的操作后,将数据同步到从数据库中(同步方法很多,在这里就不详细叙述了)。
通过读写分离、缓存的方式减少数据锁产生的几率。如果表中数据少、读取时间快;如果表的数据量很大,如使用了一年后,核心业务表达到几亿条甚至跟多的时候,会发现读写分离伸缩性有限。因此我们可将某些业务进一步分离。
(五)业务分离
将系统中不同的业务,分离出来并独立部署,如订单、用户、工单等业务。在通过消息队列的方式进行请求的分发;同样根据业务对数据进行分库处理。
至此,能适用与高并发的城市级智慧系统架构基本完成。主要采取分布式集群的方式来解决用户的访问请求,适用数据库技术、缓存技术、以及业务分离等措施,以保障本系统的健壮性、安全性、稳定性。
三、系统优化
为强化系统性能,优化资源配置,最后还需对系统整体进行优化,主要包括:
(一)前端优化
先对浏览器访问进行技术优化。
1. 减少HTTP请求:合并CSS、合并JavaScript、合并图片。
2. 使用浏览器缓存:CSS、JavaScript、Logo、图标等静态资源文件更新频率较低,通过HTTP头Cache-Control和Expires设置缓存数天,甚至几个月。更新此类文件时,不更新内容,而是修改文件名,生成新文件并更新HTML引用。当有一批此类文件要更新时,不宜一次全部更新,而是逐个更新,并有时间间隔,以免浏览器大量缓存失效,集中更新缓存,服务器负载剧增。
3. 启用压缩:文本文件(如HTML、CSS、JavaScript)GZip压缩率可达80%以上,有效减少通信传输数据量。但服务器、浏览器压力上升,应用本策略时需要综合权衡。
4. CSS放在页面最上面,JavaScript放在页面最下面:浏览器下载全部CSS后才渲染页面,而在加载JavaScript后立即执行,可能会阻塞页面,渲染缓慢。
5. 减少Cookie传输:每次请求和响应都会包含Cookie,影响数据传输;静态资源访问(如CSS、JavaScript)发送Cookie无意义。可静态资源使用独立域名,避免请求静态资源时发送Cookie。
(二)应用服务器性能优化
1、优化分布式缓存。
①网站性能优化第一定律:优先考虑使用缓存优化性能。
②缓存有点:缓存访问速度快,减少数据访问时间;如果缓存的数据是经过计算得到的,则此类数据无需重复计算可直接使用。
③缓存本质:以一对Key、Value形式存储在内存的Hash表。
2、使用缓存时,需注意以下几点
①频繁修改的数据:如果缓存频繁修改的数据,会造成写入缓存后来不及读取已失效。一般数据读写比应在2:1以上,甚至更高。
②没有热点的访问:缓存使用内存,资源宝贵,应遵循二八定律,即缓存20%热点数据。
③数据不一致与脏读:一般设置缓存失效时间,失效后从数据库加载,因此要容忍一定时间的数据不一致。也可数据更新时立即更新缓存,但会带来更多系统开销和事务一致性问题。
④缓存可用性:为避免缓存雪崩(缓存不可用造成数据库无法承受压力而宕机),可将缓存数据分布到集群多台服务器,宕机时只有部分缓存数据丢失。
⑤缓存预热(warn up):热点数据是通过LRU(最近最久未用算法)淘汰生成的,需较长时间。
⑥缓存穿透:缓存不存在的数据(其值为null),避免不恰当业务或恶意攻击高并发请求某个不存在数据,造成数据库压力而崩溃。
四、小结
实施城市级智慧系统架构设计时一定要明确主要目标,以目标导向进行系统的分析,以满足设计需求来搭建基本架构。高并发和稳定性要求其实是相辅相成的,需要统一的进行分析和设计。最好的系统架构其实就是最合适的架构。
对于城市级应用平台,还需特别注意解决锁的问题。对锁的产生来源进行逐层的析,寻求解决办法。本例中,我们通过对数据、应用服务进行合理分类从而降低锁的产出几率;同时借助负载代理技术合理分流,从而缓解系统硬件、网络速度等方面的瓶颈束缚,从而优化和提升智慧系统的整体性能。
参考文献
[1]刘先林.“互联网+”时代GIS 的智能特征及展望[J].测绘科学,2017,42( 2) :1-4.
[2]董玉安.我国智能停车管理系统现状与发展[J]. 智能建筑,2014( 4):38-39.
论文作者:袁华辉
论文发表刊物:《防护工程》2018年第13期
论文发表时间:2018/10/15
标签:缓存论文; 数据论文; 系统论文; 架构论文; 数据库论文; 城市论文; 业务论文; 《防护工程》2018年第13期论文;