常见BS系统架构设计
要点 ⼀:前端架构
前端是通常是指⽤户的请求到达应⽤服务器之前经历的环节,⼀般不包括业务逻辑,不处理动态数据。
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.安全认证
接⼝设计要考虑签名认证机制;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论