【大型网站技术架构】读书笔记之网站架构模式

分层

分层是最常见的一种架构模式,将系统在横向维度上切分为几个部分,每个部分负责单一职责,通过上层对下层的依赖和调用组成一个完整的系统,便于分工合作开发和维护,各层之前具有一定的独立性;开发中,需严格遵循分层架构的约束,禁止跨层次调用或逆向调用

采用分层结构,将网站软件系统分为应用层、服务层、数据层

应用层:负责具体业务和视图展示

服务层:为应用层提供服务支持

数据层:提供数据存储访问服务

分割

分割是在纵向方面对软件进行切分,把不同的功能和服务分割开来,有助于软件的开发和维护,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。

分布式

分层和分割的一个主要目的是为了切分后的模块便于分布式部署,通过远程调用协同工作,使用分布式有更多的CPU、内存和存储资源,能够处理的并发访问和数据量就会变大,进而能为更多的用户提供服务;可能带来的问题,分布式意味着服务必须通过网络,可能会对性能造成比较严重的影响,还有服务器宕机的概率会增加,导致很多应用不可访问,使网站可用性降低,另外,保持数据一致性也很困难,分布式事务难以保证,这对网站业务正确性和业务流程有可能造成很大影响,还导致网站依赖错综复杂,开发管理维护困难。

常用的分布式方案:

1.分布式应用和服务:将分层和分割后的应用和服务分布式部署,可以改善网站性能和并发性,加快开发和发布速度,减少数据库连接资源消耗,还可以使不同应用复用共同的服务,便于业务功能扩展

2.分布式静态资源:可以减轻应用服务器的负载压力,通过使用独立域名加快浏览器并发加载的速度,由负责用户体验的团队进行开发维护有利于网站分工合作,使不同技术工种术业有专攻

3.分布式数据和存储:对数据进行分布式存储

4.分布式计算:目前网站普遍使用Hadoop及MapReduce分布式计算框架进行批处理计算,特点是移动计算而不是移动数据,将计算程序分发到数据所在的位置以加速计算和分布式计算

5.分布式配置:支持网站线上服务器配置实时更新

6.分布式锁:分布式环境下实现并发和协同

7.分布式文件系统:支持云存储

集群 

对于用户访问集中的模块,需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务,服务器集群有更多服务器提供相同服务,因此可以提供更好的并发特性,负载均衡设备的失效转移机制使服务器故障不影响用户使用。在网站应用中,即使是访问量很小的分布式应用和服务,也至少要部署两台服务器构成一个小的集群,目的是提高系统的可用性

缓存

缓存是改善软件性能的第一手段,就是将数据存放在距离计算最近的位置以加快处理速度。使用缓存有两个前提,一是数据访问热点不均衡,某些数据会被频繁访问,二是数据在某个时间段内有效,不会很快过期。缓存可以加快数据访问速度,还可以减轻后端应用和数据存储的负载压力

1.CDN:内容分发网络,部署在距离终端用户最近的网路服务商,用户的网络请求总是先到达他的网络服务商那,在这里缓存网站的一些静态资源,可以就近以最快速度返回给用户

2.反向代理:属于网站前端架构的一部分,部署在网站的前端,当用户请求到达网站的数据中心,最先访问到的就是反向代理服务器,这里缓存网站的静态资源,无需将请求继续转发给应用服务器就能返回给用户

3.本地缓存:在应用服务器本地缓存着热点数据,应用程序可以在本机内存中直接访问数据,而无需访问数据库

4.分布式缓存:将数据缓存在一个专门的分布式缓存集群中,应用程序通过网络通信访问缓存数据

异步 

事物之间直接关系越少,就越少被彼此影响,越可以独立发展,系统解耦合的方法除了分层、分割、分布式。还有一个重要手段是异步,将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行进行协作。在单一服务器内部可通过多线程共享内存队列的方式实现异步,处在业务操作前面的线程将输出写入到队列,后面的线程从队列中读取数据进行处理;在分布式系统中,多个服务器集群通过分布式消息队列实现异步,分布式消息队列可以看做内存队列的分布式部署。异步消息队列特性:

1.独立性:典型的生产者消费者模式,两者不存在直接调用,只要保持数据结构不变,彼此功能实现可以随意变化而不互相影响,对网站扩展新功能非常便利

2.提高系统可用性:服务器发生故障,另一服务器可以继续处理业务请求,系统整体表现无故障,恢复正常后,继续处理消息队列中的数据

3.加快网站响应速度:处在业务处理前端的生产者服务器在处理完业务请求后,将数据写入消息队列,不需要等待消费者服务器处理就可以返回,响应延迟减少

4.消除并发访问高峰:使用消息队列将突然增加的访问请求数据放入消息队列中,等待消费者服务器依次处理,就不会对整个网站负载造成太大压力

 

冗杂

要想保证在服务器宕机的情况下网站依然可以继续服务,不丢失数据,就需要一定程度的服务器冗余运行,数据冗余备份,这样当某台服务器宕机,可以把服务和数据转移到其他机器上。访问和负载很小的服务也必须部署至少两台服务器构成一个集群,其目的就是通过冗余实现服务高可用,数据库除了定期备份,存档保存,实现冷备份外,为了保证在线业务高可用,还需要对数据库进行主从分离,实时同步实现热备份

自动化

1.发布过程自动化:通过减少人为干预,可有效减少故障

2.自动化代码管理:代码版本控制,代码分支创建合并等过程自动化

3.自动化测试:提交测试后,系统自动将代码部署到测试环境,启动自动化测试用例进行测试,向相关人员发送测试报告,向系统反馈测试结果

4.自动化安全检测:安全检测工具通过对代码进行静态安全扫描及部署到安全测试环境进行安全攻击测试,评估其安全性

5.自动化部署:将工程代码自动部署到线上生产环境

6.自动化监控:网站在运行过程中可能遇到服务器宕机、程序bug、存储空间不足、突然爆发的访问高峰,网站需要对线上生产环境进行自动化监控,对服务器进行心跳检测,并监控其各项性能指标和应用程序的关键数据指标

7.自动化报警:服务器如果发现异常,超出预设的值,就进行自动化报警,向相关人员发送报警信息,警告故障可能会发生

8.自动化失效转移:自动化报警后,在检测到故障发生后,系统会将失效的服务器从集群中隔离出去,不再处理系统中的应用请求

9.自动化失效恢复:故障消除后,系统会重新启动服务,,同步数据保证数据的一致性

10.自动化降级:在网站遇到访问高峰,超出网站最大处理能力时,为了保证整个网站的安全可用,会通过拒绝部分请求及关闭部分不重要的服务将系统负载降至一个安全的水平

11.自动化分配资源:必要时,会将空闲资源分配给重要的服务,扩大部署规模

安全

 互联网的开发意味着巨大的安全挑战,有以下几种安全架构模式

1.通过密码和手机校验码进行身份认证

2.登录、交易等操作需要对网络通信进行加密,网站服务器上存储的敏感数据也进行加密处理

3.为了防止机器人程序滥用网络资源攻击网站,网站使用验证码进行识别

4.对于常见的XSS攻击,SQL注入进行编码转换等相应处理

5.对于垃圾信息、敏感信息进行过滤

6.对交易转账等重要操作根据交易模式和交易信息进行风险控制

posted @ 2020-03-12 13:53  不知所云的朵  阅读(155)  评论(0编辑  收藏  举报