互联网架构总结
互联网应用的特点
系统7*24小时,不间断服务
用户分别广泛
安全环境恶略
需求快速变更,发布频繁,有的时候一天会发布十几次
渐进式发展,好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。
设计目标
高可用 7*24调试不间断
高性能 程序快速相应,可以达到业务的预期
结果(高并发)
多用户高并发、大流量的访问系统,它是一个业务产生的反应在系统上的结果。
应对
应对高并发的两大技术方向
垂直伸缩
根据业务发展的特点,在通过可承受的范围内适当使用性能更强大的机器来应对高并发
优点: 时间成本低,适应业务快速发展
缺点: 物理极限,操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩
水平伸缩是指通过增加服务器提升计算能力的一类架构方法。它被认为是伸缩性的圣杯,水平伸缩可以克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题。
另外,水平伸缩总是可以增加更多的服务器,这样,就不会像垂直伸缩那样遭遇到单台服务器的极限。
互联网架构模式
每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复工作。
模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
互联网架构模式就是试图去描述那些为解决互联网系统高性能,高可用,易扩展,可伸缩,安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网软件系统的重要组成部分。
1.分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统,就是在横向维度上把系统切分成几层。就像下图所示,最上面一层是网关层,下面一层是微服务层,再下面是基础设施层(缓存,消息队列,数据库)
总结: 按职责(网关,服务,DAO)分层,每层职责相对单一。
2.分割
如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护,另一方面,便于不同模块儿的分布式部署,提高网站的并发处理能力和功能扩展能力。
总结: 根据业务将原有一个应用拆分成多个应用。
3.分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。
分布式意味着解决同样的问题可以使用更多的计算机,计算机越多, CPU、内存、存储资源也就越多,能够处理的并发访问和数据量也就越大。
特点:分布式应用和服务,分布式静态资源,分布式数据和存储,分布式计算
4.集群
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
5.异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性,事物之间越少直接关系,那么就越少被彼此影响,越可以独立发展。
大型网站架构中,系统解耦合的手段除了前面提到的分层,分割,分布等手段,还有一个重要手段是异步,就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
效果:提供系统的可用性,加快网站的响应速度,消除并发访问高峰。
6.冗余
互联网应用需要7*24小时连续运行,但是服务器总有可能出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可继续服务,数据不会丢失,就需要一定程序的服务器冗余运行,数据冗余备份。
7.自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网自动化架构设计主要集中在运维方面。
8.安全
互联网的开放特性使得其从诞生起就面对具大的安全挑战
网站在安全架构方面也积累了许多模式:
1.通过密码和手机校验码进行身份认证;
2.登录,交易等操作需要对网络通讯进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理;
3.为了防止机器人程序滥用网络资源供给网站,网站使用验证码进行识别;
4.对于常见的用于攻击网站的XSS攻击,SQL注入,进行编码转换等相应处理;
5.对于垃圾信息,敏感信息进行过滤;对转账交易等重要操作根据交易模式和交易信息进行风险控制。
互联网架构技术
1.前端架构
一般来说,在我们的数据中心的应用服务器的负载均衡之前都算前端。
它包括如下技术:
1.App及Web开发技术 2.浏览器及HTTP优化技术 3.CDN
4.动静分离 5.图片服务 6.反向代理 7.DNS
2.网关及应用层架构
网关(云服务gateway),负载均衡(elb,nginx),动态页面静态化(将页面整体html缓存入redis),业务拆分(根据产品的实际功能,从代码到团队,功能相对独立的高内聚形成模块,然后各个模块直接可以通过mq关联起来)
3.服务层架构
微服务架构,分布式消息队列,分布式缓存,分布式一致性(锁)服务
4.存储层
分布式文件(图片放到oss, s3等),分布式关系数据库,NoSQL数据库(Mongodb)
5.后台架构
大数据平台,搜索引擎,推荐引擎,数据仓库
6.运维与安全
数据采集与展示,数据监控与报警,攻击与防护,数据加密与解密
评论