网站架构模式
为了使网站在高访问量、处理海量数据时可以稳定并以高效率运行,需要对网站架构进行系统的设计,从而实现网站高性能、易伸缩、可扩展、安全等各种技术目标。网站的架构模式是大型网站在小型网站演变时期总结的一些对于相同问题的解决办法、称之为架构模式。
下方主要是概念性的理解,具体操作在对各技术详细解释文档中。
(总共9点)
1.软件结构分层
概念:将系统在横向维度上切分为几个部分,每个部分负责一部分相对单一的职责,然后通过上层对下层的调用构成一个完整的系统。
具体:
1.应用层:负责具体业务和视图展示,如:网站首页、搜索结果展示等
2.服务层:为应用层提供服务支持,如:用户管理、购物车等
3.数据层:提供数据存储,如:数据库、缓存、文件、搜索引擎等
优点:对于程序员软件系统拆分成不同部分可以便于开发维护。对于网站本身在网站初期采用分层能使网站在后期易于扩展,对网站支持高并发并向分布式发展至关重要。
2.具体应用分割
概念:对软件在纵向方面进行切分,对分层后的结构再进行具体业务的拆分
具体:对于一个业务比较多的网站,可以将不同业务分割成不同的应用并分配给独立的团队负责,部署在不同服务器上,各应用与各应用之间相互调用,提高了应用的扩展性。对于具体的业务还可以继续拆分成不同的应用,但是遵循一个原则:分割必须在本应用层中拆分。
优点:与分层的优势相似,但是它更加提升了软件的扩展性、与开发维护难易程度。
3.分布式
概念:将切分后的模块部署在不同的服务器上,通过远程调用协同工作。
具体:
1.分布式应用和服务:改善网站性能和并发性,让不同应用重复使用共同服务,便于业务功能的扩展,减少了数据库连接资源的消耗。
2.分布式静态资源:让静态资源单独存储于静态资源服务器上,单独域名调用js/css/images/
3.分布式数据和存储:对数据库分布式部署
4.分布式计算:大量的后台业务处理如:搜索引擎索引的创建,数据仓库的数据分析统计、会造成庞大的计算,使用Hadoop以及Mapreduce分布式计算框架进行批处理计算,特点是将计算程序分发到数据所在位置以加速计算和分布式计算。
优点:提升软件处理并发的能力。
缺点:
1.分布式是通过网络调用各个应用,所以对性能造成严重影响
2.分布服务器越多宕机概率就越大,由于所有应用相互串联,所以当一台服务器宕机会造成整个业务流程出现错误,降低了网站的可用性。
3.数据库的分布式数据保持一致性非常困难,分布式执行事务难以保证
缺点虽有但是这是网站架构的必经之路,解决缺点办法在之后。
4.服务器集群
概念:对于访问集中的模块(首页),将该模块服务器集群,通过负载均衡设备分发请求提供服务。
优点:可以根据实际情况灵活的增减服务器数量,并且负载均衡设备的使用当某个服务器宕机时自动分配请求给其他服务器,提高了系统的可用性
5.缓存
概念:将数据存放在离请求最近的位置加快处理速度,是提高系统性能的有效手段。
具体:
1.CDN:内容分发网络,部署在离终端用户最近的地方,用于存放变化不频繁的内容,请求不用到达实际网址位置而可以直接返回数据。如:视频资源,腾讯新闻
2.反向代理:与CDN作用相似,但是请求会到达数据中心的反向代理服务器返回数据
3.本地缓存:存储在应用服务器中,主要缓存热点数据,如:memcache缓存
4.分布式缓存:如同部署分布式memcache服务器一样,让更多的数据缓存进服务器,根据业务需求增减缓存服务器,减轻数据库压力
缓存使用条件:
1.被频繁调用的数据
2.一段时间内有效,不会很快过期的数据
6.异步
概念:为了提高应用与应用的独立发展,业务与业务之间不同步调用,将一个业务操作分成多个阶段,每个阶段通过共享数据的方式写作,采用异步降低软件耦合性。
具体:采用分布式消息队列服务器,将请求置于其中,直接返回相对应的执行结果,然后由应用服务器从中读取依次处理
其优点:
1.提高系统可用性:当服务器发生故障,请求会在消息队列服务器中堆积,交予其他正常的服务器处理请求。
2.加快网站响应速度:使用消息队列服务器可以直接返回相应操作的结果然后交予后台程序慢慢处理(适用于对结果有确定性的操作)
3.消除并发高峰:将骤增的请求放置于消息队列服务器中,然后依次交予服务器处理,不会对网站造成负载压力
优点:软件开发的一个重点就是降低软件耦合性,模块与模块之间的联系越少影响就越少,使程序更加健壮,同时加快了网站的响应速度,使用户体验更好。
实例:memcacheq消息队列服务器
7.冗余
为了让服务器在连续工作中保持服务与数据的安全和稳定,就需要对服务器做数据冗余备份,来应对可能发生的服务器宕机以及其他意外造成的数据丢失,当某台服务器出现意外便可以将其上的服务和数据转移至其他服务器做处理,对于访问量较小的网站也应做服务器集群并且让数据冗余来提高系统的高可用。
8.软件的自动化
概念:一般用于大型网站的管理,系统维护,程序管理而开发出的一套程序,总共分为8点,其应用在阿里云个人服务器上都有体现。
1.自动化代码管理:程序开发过程中的版本控制
2.自动化测试:开发完成的程序,自动部署到测试环境,自动测试后返回测试结果
3.自动化安全检测:通过安全检测工具评估在该环境该程序的安全性,并进行安全攻击测试
4.自动化部署:将代码自动部署到相应的地方
5.自动化监控:程序在运行过程中会出现各种情况:服务器宕机,程序错误,存储空间不足,访问量急剧增加,这些情况会随时造成网站服务出现问题,所以监控与自动化报警尤为重要。
6.自动化失效转移:当一个服务器出现故障导致不可用时,自动化程序会自动将其从集群中隔离,待修复后自动加入集群,不影响网站运行。
7.自动化升级:当网站访问量超出额定时,系统自动拒绝请求以及关闭不重要服务使负载处于一个安全水平。
8.自动化分配资源:将空闲资源分配给重要的服务
9.网站安全
对网站进行安全加固是非常重要的一个工作,比如:XSS攻击,SQL注入,对用户输入进行过滤、编码的转换。以及防止恶意攻击,交易中的风险控制
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。