为了解决高并发访问、海量数据处理、高可靠运行等一系列问题,实现高性易伸缩、可扩展、安全。可以使用以下各种方式进行架构网站。
1、 分层
分层是一种常见的架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层的依赖和调用组成的一个完整系统。
分层结构无处不在,比如网络的7蹭通信协议等。我们可以将网站分为应用层、服务层、数据层。
- 应用层:负责具体业务和视图展示。如网站首页、商品详情页等。
- 服务层:为应用层提供服务支持。如用户管理服务、购物车服务、支付服务等。
- 数据层:提供数据存储访问服务。如数据库、缓存、文件、搜索引擎等。
通过分层,可以将一个网站切分不同的部分,便于分工合作开发维护,职责清晰。每层之间具有一定的独立性,他们之间也需要严格遵循一定官则,如禁止跨层访问、逆向调用。
在具体开发中,大的分层基础上还可以继续分层。如应用层可以在细分为视图层和业务逻辑层;服务层也可以分为数据接口层和逻辑处理层等。
2、 分割
分层是对系统进行横向切分,那么分割就是将系统进行竖向切分。
网站越大,功能越复杂,服务和数据处理的种类也越多,将不同的功能和服务分割开来,包装成高内聚低耦合的模块,便于分布式部署,提高网站并发处理能力和功能扩展能力。
在应用层,将不同的业务进行分割。比如将购物、论坛、搜索、广告分成不同的模块,由独立的团队负责。
同分层一样,在大的分割基础上还可以继续进行分割。比如购物模块可以进一步分割为机票酒店业务、3C业务等更细小的颗粒度。这些模块不管在逻辑上还是物理部署上都是独立的,相应的服务层也可以更具需要将服务分割成适合的模块。
3、 分布式
分层和分割的主要目的就是为了切分后的模块便于分布式部署。分布式之后就意味着拥有更多的cpu、内存、磁盘存储资源,也就是能够更好的处理高并发和大数据。
但是相对的也会带来其他问题。首先,分布式意味着服务之间调用必须使用网络,这就可能会对性能造成一定影响。其次,服务器越多,服务器宕机概率也就越大。另外,数据在分布式环境中保持一致性也越困难,分布式事务也难以保证,对网站业务的正确性和业务流程有可能造成很大的影响。最后,分布式还导致网站依赖错综复杂,开发管理维护困难性提高。
因此分布式设计要根据具体的情况量力而行,切莫为了分布式而分布式,但是对于大型网站来说,分布式是必须走的路。
常用的分布式方案有以下几种:
- 分布式应用和服务
- 分布式静态资源
- 分布式数据和存储
- 分布式计算
- 当然还有分布式配置、分布式锁、分布式文件系统等。
4、 缓存
缓存是改善系统性能的第一手段,在现代网站架构中缓存无处不在,下面介绍几种常用的缓存手段。
-
CDN
即内容分发网络,将某些资源(如静态资源)部署在距离终端用户最近的网络服务商,当用户请求到达网络服务商这里时,这些资源就会立刻返回给用户,减去了大量长距离网络传输的性能消耗。 -
反向代理
反向代理属于网站前端架构的一部分,部署在网站的前端,当用户请求到达反向代理服务器时,这里缓存的静态资源可以直接返回给用户。当然反向代理不仅仅是这点功能而已。 -
本地缓存
不多说了这个,本地访问的数据~~~~ -
分布式缓存
大型网站数据量非常庞大,及时是一小部分的缓存,也不是单机能够承受的。
使用缓存有2个条件,一个是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放到缓存中。
第二个是某段时间内不会过期的数据。
5、 异步
大型网站中系统解耦的手段除了分层、分割,还有一个重要的手段 —— 异步。异步架构是典型的生产者消费者模式,两者间不存在直接调用,只要保持数据结构不变化,彼此功能实现可以随意变化而互不影响,这对网站扩展非常便利。
异步消息有几点很重要好的特性:
- 提高系统可用性
消费者服务器发生故障,数据仍旧会保存在消息队列服务用,生产者服务器依旧可以处理业务请求,只需要等待消费者服务器正常后继续工作。 - 加快网站相应速度
某些业务可以延时处理,减少生产者响应时间 - 消除并发访问高峰
消息队列可以消峰填谷这点非常重要,比如网站出小活动,造成网站并发陡增,这可能造成玩网站负载过重,响应延迟,甚至宕机。消息队列可以将数据保存在队列中,等待消费者服务器依次处理,就不会对网站造成太大压力。
需要注意的是,异步方式会对业务处理造成影响,需要网站产品设计方面支持。
6、 冗余
现在互联网公司都是7×24小时连续运行,但是服务器随时可能出现故障,特别是服务器规模较大时,出现某台服务器宕机是必然的事情。如果我们对服务器进行了冗余,那么就可以不受宕机影响,网站依然可以运行,不丢失数据。
冗余可以实现高可用。
数据库除了定期备份,存档保存,实现冷备份外、为了业务高可用,还需要对数据库进行主从分离,实时同步热备份。甚至为了抵御地震、海啸等不可抗力,需要在全球范围部署容灾数据中心。
7、 自动化
- 自动化部署 不对说了
- 自动化监控 对服务进行心跳检测,并监控其各项性能指标和应用程序的关键数据指标
- 自动化报警 通过自动话监控发现异常,就需要向相关人员发送警报信息
- 自动化失效转移 将失效服务器从集群中移除
- 自动化失效恢复 故障消除后,将服务器自动添加入集群,同步数据保证一致性
- 自动化降级 当网站遇到访问高峰时,超出网站最大处理能力,为了保证整个网站的可用性,拒绝或关闭部分无关紧要的服务,保证网站主要流程能够运行流畅,将系统负载降至安全水平。
- 自动化分配资源 当网站遇到访问高峰时,已经自动化降级的同时,必要时,可以通过将空闲资源分配给重要服务,扩大其部署规模
8、 安全
互联网的开放特性,使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式:
- 通过密码和手机校验码进行身份认证
- 登录、交易等操作需要对网络进行加密,其他敏感信息也需要进行加密
- 为了防止机器人滥用网络资源攻击,网站使用验证码识别
- 对于常见的攻击手段xss攻击、sql注入,对表单提交做相应的编码转换处理
- 对垃圾信息、敏感信息做相应的屏蔽
- 对交易转账等重要操作,根据交易模式和交易信息进行风险控制