架构师训练 第四周 作业
一个典型的大型网站应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举
1. 前端架构
1.1 CDN加速
内容分发网络,部署在网络运营商机房,通过将静态页面内容分发到离用户最近的CDN服务器,使用户可以通过最短路径获取内容。
动静分离,静态资源独立部署静态资源,如JS、CSS等文件部署在专门的服务器集群上,和Web应用动态内容服务分离,并使用专门的(二级)域名。
1.2 反向代理
部署在网站机房,在应用服务器、静态资源服务器、图片服务器之前,提供页面缓存服务,也可提供负载均衡的功能。
代表工具: Nginx
1.3 DNS
域名服务,将域名解析成IP地址,利用DNS可以实现DNS负载均衡,配置CDN也需要修改DNS,使域名解析后指向CDN服务器
2. 应用层架构
2.1 开发框架
站业务是多变的,网站的大部分软件工程师都是在加班加点开发网站业务,一个好的开发框架至关重要。一个好的开发框架应该能够分离关注面,使美工、开发工程师可以各司其事,易于协作。同时还应该内置一些安全策略,防护Web应用攻击。
代表工具: Spring 全家桶
2.2 页面渲染
将分别开发维护的动态内容和静态页面模板集成起来,组合成最终显示给用户的完整页面。
代表工具: Thymeleaf, Vue
2.3 负载均衡
在网站高并发访问的场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。
代表工具: LVS
2.4 Session管理
为了实现高可用的应用服务器集群,应用服务器通常设计为无状态,不保存用户请求上下文信息,但是网站业务通常需要保持用户会话信息,需要专门的机制管理Session,使集群内甚至跨集群的应用服务器可以共享Session。
代表工具: Spring Session, Redis
2.5 业务拆分
将复杂而又庞大的业务拆分开来,形成多个规模较小的产品,独立开发、部署、维护,除了降低系统耦合度,也便于数据库业务分库。按业务对关系数据库进行拆分,技术难度相对较小,而效果又相对较好。
3. 服务层架构
3.1 消息队列
使用消息队列将调用异步化,可改善网站的扩展性,改善用户的响应延迟。消息队列具有很好的削峰作用——即通过异步处理,将短时间高并发产生的事务消息存储在消息队列中,从而削平高峰期的并发事务。
代表工具: kafka, RabbitMQ
3.2 分布式服务
提供高性能、低耦合、易复用、易管理的分布式服务,在网站实现面向服务架构(SOA) 。
代表工具: Dubbo, Spring cloud
3.3 分布式缓存
通过可伸缩的服务器集群提供大规模热点数据的缓存服务,是网站性能优化的重要手段。
代表工具: Ehcache, Redis
4. 存储层架构
4.1 分布式文件
网站在线业务需要存储的文件大部分都是图片、网页、视频等比较小的文件,但是这些文件的数量非常庞大,而且通常都在持续增加,需要伸缩性设计比较好的分布式文件系统。
代表工具: HDFS
4.2 关系数据库
大部分网站的主要业务是基于关系数据库开发的,但是关系数据库对集群伸缩性的支持比较差。通过在应用程序的数据访问层增加数据库访问路由功能,根据业务配置将数据库访问路由到不同的物理数据库上,可实现关系数据库的分布式访问。
代表工具: ShardingSphere, TDDL
NoSQL数据库
在内存管理、数据模型、集群分布式管理等方面各有优势。
代表工具: Hbase, Mongodb, Redis
5. 后台架构
5.1 搜索引擎
即使是网站内部的搜索引擎,也需要进行数据增量更新及全量更新、构建索引等。这些操作通过后台系统定时执行。
代表工具: Elasticsearch
5.2 数据仓库
根据离线数据,提供数据分析与数据挖掘服务。
5.3 推荐系统
社交网站及购物网站通过挖掘人和人之间的关系,人和商品之间的关系,发掘潜在的人际关系和购物兴趣,为用户提供个性化推荐服务。
6. 数据监控
6.1 服务器业务数据采集
服务器业务数据包括两种,一种是采集在服务器端记录的用户请求操作日志;一种是采集应用程序运行期业务数据,比如待处理消息数目等。
6.2 服务器性能数据采集
采集服务器性能数据,如系统负载、内存使用率、网卡流量等。系统监控将前述采集的数据以图表的方式展示,以便运营和运维人员监控网站运行状况,做到这一步仅仅是系统监视。更先进的做法是根据采集的数据进行自动化运维,自动处理系统异常状况,实现自动化控制。
6.3 系统报警
如果采集来的数据超过预设的正常情况的阈值,比如系统负载过高,就通过邮件、短信、语音电话等方式发出报警信号,等待工程师干预。
7.安全架构
7.1 Web攻击
HTTP请求的方式发起的攻击,危害最大的就是XSS和SQL注入攻击。但是只要措施得当,这两种攻击都是比较容易防范的。
7.2 数据保护
敏感信息加密传输与存储,保护网站和用户资产。
版权声明: 本文为 InfoQ 作者【李君】的原创文章。
原文链接:【http://xie.infoq.cn/article/2c96ead68f2adbd31677c67ed】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论