一个B/S架构的系统在设计时要考虑哪些要点?

  宋人苏轼写过这么一首关于琴的诗:

  若言琴上有琴声,放在匣中何不鸣。

  若言声在指头上,何不于君指上听。

    什么意思呢?就是说琴要发出美妙的声音,是由于人的指头拨弄琴弦,发生振动才发出动听的琴声,琴放在那里肯定不会响,所以说人的指头和琴这两种因素是琴发声的基础,两者是相辅相成的,老苏在这里虽说用了反问,但是已经肯定了这种关系。

    那么,对于互联网时代的应用系统来说,也是一样。

    一个庞大的互联网系统在初期设计的时候会有方方面面的点要考虑(数据层面,后台层面,存储层面,应用层面,前端层面,安全层面,数据采集及监控层面等),只有在设计层面考虑清楚要建设的系统的种种因素,然后在实施阶段才能清晰的去完成开发建设工作,后期的投产才能达到想琴声一样美妙的效果。

《一个B/S架构的系统在设计时要考虑哪些要点?》 (图1)

    其实,在做了几年基于互联网开发的工作之后,你会发现,大多数基于B/S架构的平台大体上都是图1所示的结构,可能存在的不同是每一层所用的具体的技术点不太一样,比如在数据存储中缓存的处理,有些人用的是Redis,有些人用的是Memcached,又比如在消息异步处理方面,有些人喜欢用RocketMq,有些人喜欢用ActiveMq,这些都没有太大关系,具体的技术本身都存在优缺点,关键点是你用的这个技术在你系统中确实是解决了你的实际问题。

今天我想从图1的上面往下面谈一谈B/S架构的系统设计时注意要点,也是我在实际项目中遇到的坑,填了之后的一些总结,为啥从上面往下讲,有些朋友可能比较纳闷,一个系统不是应该从对底层的数据层设计开始吗?对,没错。正常的想法都是从最底层往上想,我这人有些怪,喜欢先想简单的,然后慢慢的往复杂了想,越是接近用户一层的越是简单,比如前端展示层。

要点 一:前端架构

    前端是通常是指用户的请求到达应用服务器之前经历的环节,一般不包括业务逻辑,不处理动态数据。

    1.浏览器优化技术

    并不是优化浏览器,而是通过优化响应页面,加快浏览器页面的加载和显示,常用的有页面缓存、合并HTTP减少请求次数、使用页面压缩等。

    2.CDN

    内容分发网络,部署在网络运营商机房,通过将静态页面内容分发到离用户最近最近的CDN服务器,使用户可以通过最短路径获取内容。

    3.动静分离,静态资源独立部署

    静态资源,如JS、CSS等文件部署在专门的服务器集群上,和Web应用动态内容服务分离,并使用专门的(二级)域名。

    4.图片服务

    图片不是指网站Logo、按钮图标等,这些文件属于上面提到的静态资源,应该和JS、CSS部署在一起。这里的图片指用户上传的图片,如产品图片、用户头像等,图片服务同样适用独立部署的图片服务器集群,并使用独立(二级)域名。

  5.反向代理

    部署在网站机房,在应用服务器、静态资源服务器、图片服务器之前,提供页面缓存服务。

    6.DNS

    域名服务,将域名解析成IP地址,利用DNS可以实现DNS负载均衡,配置CDN也需要修改DNS,使域名解析后指向CDN服务器。

要点二:应用层架构

    应用层处理主要业务逻辑的地方。

    1.开发框架

    系统业务是多变的,系统的大部分软件工程师都是在加班加点开发网站业务,一个好的开发框架至关重要。一个好的开发框架应该能够分离关注面,使美工、开发工程师可以各司其事,易于协作。同时还应该内置一些安全策略,防护Web用攻击。比如前后端分离技术,vue.js+微服务的方式。

    2.页面渲染

    将分别开发维护的动态内容和静态页面模板集成起来,组合成最终显示给用户的完整页面。

    3.负载均衡

    将多台应用服务器组成一个集群,通过负载均衡技术将用户请求分发到不同的服务器上,以应对大量用户同时访问时产生的高并发负载压力。可采取软件负载(nginx)或者硬件负载(F5)

4.Session管理

    为了实现高可用的应用服务器集群,应用服务器通常设计为无状态,不保存用户请求上下文信息,但是网站业务通常需要保持用户会话信息,需要专门的机制管理Session,使集群内甚至跨集群的应用服务器可以共享Session。

    5.动态页面静态化

    对于访问量特别大而更新又不很频繁的动态页面,可以将其静态化,即生成一个静态页面,利用静态页面的优化手段加速用户访问,如反向代理、CDN、浏览器缓存等。

    6.业务拆分

    将复杂而庞大的业务拆分开来,形成多个规模较小的产品,独立开发、部署、维护,除了降低系统耦合度,也便于数据库业务分库。按业务对关系数据库进行拆分,技术难度相对较小,而效果又相对较好。

  7.虚拟化服务器

    将一台物理服务器虚拟化成多态虚拟服务器,对于并发访问较低的业务,更容易用较少的资源构架高可用的应用服务器集群。

要点三:服务层架构

    提供基础服务,供应用层调用,完成网站业务。

  1.分布式消息

    利用消息队列机制,实现业务和业务、业务和服务之间的异步消息发送及低耦合的业务关系。

  2.微服务

    提供高性能、低耦合、易复用、易管理的分布式服务,在网站实现面向微服务架构(可采用SpringCloud,Dubbo)。

  3.分布式缓存

通过可伸缩的服务器集群提供大规模热点数据的缓存服务,是网站性能优化的重要手段。(比如Redis,Memcached)

4.分布式配置

    系统运行需要配置许多参数,如果这些参数需要修改,比如分布式缓存集群加入新的缓存服务器,需要修改应用程序客户端的缓存服务器列表配置,并重启应用程序服务器。分布式配置在系统运行期提供配置动态推送服务,将配置修改实时推送到应用系统,无需重启服务器。

要点四:存储层架构

    提供数据、文件的持久化存储访问与管理服务。

    1.分布式文件

    网站在线业务需要存储的文件大部分都是图片、网页、视频等比较小的文件,但是这些文件的数量非常庞大,而且通常都在持续增加,需要伸缩性设计比较好的分布式文件系统。

  2.关系数据库

    大部分万丈的主要业务是基于关系数据库开发的,但是关系数据库对集群伸缩性的支持表较差。通过在应用程序的数据访问层增加数据库访问的路由功能,根据业务配置将数据库访问路由到不同的物理数据库上,可实现关系数据库的分布式访问。

    3.NoSQL数据库

目前各种NoSQL数据库层出不穷,在内存管理、数据模型、集群分布式管理等方面各有优势,不过从社区活动性角度看,HBase无疑是目前最好的。

    4.数据同步

    在支持全球范围内数据共享的分布式数据库技术成熟之前,拥有多个数据中心的网站必须在多个数据中心之间进行数据同步,以保证每个数据中心都拥有完整的数据。在实践中,为了减轻数据库压力,将数据库的事物日志(或者NoSQL的写操作Log)同步到其他数据中心,根据Log进行数据重演,实现数据同步。

要点五:后台架构

    B/S架构应用中,除了要处理用户的实时访问请求外,还有一些后台非实时数据分析要处理。

  1.搜索引擎

即使是网站内部的搜索引擎,也需要进行数据增量更新及全量更新、构建索引等。这些操作通过后台系统定时执行。

  2.数据仓库

根据离线数据,提供数据分析与数据挖掘服务。

    3.推荐系统

    社交网站及购物网站通过挖掘人与人之间的关系,人和商品之间的关系,发展潜在的人际关系和购物兴趣,为用户提供个性化推荐服务。

要点六:数据采集与监控

    监控系统访问情况与系统运行情况,为业务运营决策和运维管理提供支持保障。

1.浏览器数据采集

    通过在网站页面中嵌入JS脚本采集用户浏览器环境与操作记录,分析用户行为。

2.服务器业务数据采集

    服务器业务数据包括两种,一种是采集在服务器端记录的用户请求操作日志;一种是采集应用程序运行期业务数据,比如待处理消息数目等。

    3.服务器性能数据采集

    采集服务器性能数据,如系统负载、内存使用率、网卡流量等。

    4.系统监控

    将前述采集的数据以图表的方式展示,以便运营和运维人员监控网站运行状况,做到这一步仅仅是系统监视。更先进的做法是根据采集的数据进行自动化运维,自动处理系统异常状况,是吸纳自动化控制。

    5.系统报警

    如果采集来的数据超过预设的正常情况的阀值,比如系统负载过高,就通过邮件、短信、语音电话等方式发出警报信号,等待工程师干预。

要点七:安全架构

    保护互联网网站免遭攻击及敏感信息泄露。

1.Web攻击

    以HTTP请求的方式发起的攻击,危害最大的就是XSS和SQL注入攻击。但是只要措施得当,这两种攻击都是比较容易防范的。

2.数据保护

    敏感信息加密传输与存储(比如用户的四要素信息),保护系统和用户资产。这个在系统安全等级保护评定中有相应的要求。

3.防护设备

    根据业务应用的性质和公司的实际情况,必要时可以用一些安全设备比如WAF,比如数据库审计设备,运维审计设备等。

4.安全证书

  无论内部系统之间的调用还是与第三方的系统的服务调用都尽量采用https方式。

5.安全认证

接口设计要考虑签名认证机制;

要点八:数据中心机房架构

    大型网站需要的服务器规模数以十万计,机房物理架构也需要关注。

    1.机房架构

    对于一个拥有十万台服务器的大型网站,每台服务器耗电(包括服务器本身耗电及空调耗电)都是很惊人的,Google、Facebook选择数据中心地理位置的时候趋向选择散热良好,供电充裕的地方。

  2.机柜架构

    包括机柜大小,网线布局、指示灯规格、不间断电源、电压规格(是48V直流电还是220V民用交流电)等一系列问题。

    3.虚拟化

    奔着服务器资源的最大化利用的原则,虚拟化是不得不考虑的一个问题(可以用VmWare),当然这个要根据公司实际情况来看(有些公司就是财大气粗)。

    这八项注意要点基本就说完了,说得也比较浅,只是针对平时系统设计时容易忽略的一些 key point做了一些归纳,具体技术我基本是提了一下,有兴趣的朋友可以去研究,要特别说明一下,我今天说的仅仅是“注意要点”,不是说就按照这八点来建设系统了,你如果这样理解,那就有些偏激了,一个大型的互联网系统,比如电商平台,互联网金融平台是非常庞大的业务系统,里面涉及到的点要远远大于今天提到这几点,要根据自己的系统规模选择合适的一些点进行参考。

《一个B/S架构的系统在设计时要考虑哪些要点?》

  一开头我提到了苏轼的那首关于琴的诗,琴声纵使美妙,但做到珠落玉盘,高山流水的境界也需要一番功夫。

  其实老苏还有一首诗:

  横看成岭侧成峰,远近高低各不同。

  不识庐山真面目,只缘身在此山中。

  大家不妨闭目体会一下。

    原文作者:编程的厨子
    原文地址: https://www.jianshu.com/p/06cddff93565
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞