网站的架构

时间: 2019-05-28阅读: 77标签: 架构

有人说过,大型网站是根据业务需求逐步演化而来的,而不是设计出来的,下面就是一个大型网站的进化过程。


1.初始阶段的网站架构


在初始阶段,访问量并不大,所以应用程序、数据库、文件等所有的资源都在一台服务器上。


2 应用服务和数据服务分离


随着业务的发展,就会发现一台服务器抗不过来了,所以将应用服务器与数据(文件、数据库)服务器分离。三台服务器对硬件资源的要求各不相同:应用服务器需要更快的CPU,文件服务器需要更大的磁盘和带宽,数据库服务器需要更快速的磁盘和更大的内存。分离之后,三个服务器各司其职,也方便针对性的优化。


3.使用缓存改善网站性能


缓存的使用无处不在,缓存的根本目的是加快访问速度。当数据库的访问压力过大的时候,就可以考虑使用缓存了。网站使用的缓存可以分为两种: 缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。


4.使用应用服务器集群改善网站的并发处理能力


随着业务的发展,单个应用服务器一定会成为瓶颈,应用服务器实现集群是网站可伸缩集群架构设计中较为简单成熟的一种。后面也会提到,将应用服务器设计为无状态的(没有需要保存的上下文信息),就可以通过增加机器,使用负载均衡来scale out。


5.数据库读写分离


即使使用了缓存,但在缓存未命中、或者缓存服务时效的情况下,还是需要访问数据库,这个时候就需要数据库的读写分离:主库提供写操作,从库提供读服务。注意,在上图中增加了一个数据访问模块,可以对应用层透明数据库的主从分离信息。


6.使用反向代理和CDN 加速网站晌应

CDN和反向代理其实都是缓存,区别在于CDN 部署在网络提供商的机房;而反向代理则部署在网站的中心机房。使用CDN 和反向代理的目的都是尽旱返回数据给用户, 一方面加快用户访问速度,另一方面也减轻后端服务器的负载压力。


7.使用分布式文件系统和分布式数据库系统

单个物理机的磁盘是有限的,单个关系数据库的处理能力也是有上限的,所以需要分布式文件存储与分布式数据库。当然,也需要”统一数据访问模块“,使得应用层不用关心文件、数据的具体位置。值得一提的事,关系型数据库自身并没有很好的水平扩展方案,因此一般都需要一个数据库代理层,如cobar、mycat。


8.业务拆分

将一个网站拆分成许多不同的应用, 每个应用独立部署维护。应用之间可以通过一个超链接建立关系(在首页上的导航链接每个都指向不同的应用地址) ,也可以通过消息队列进行数据分发, 当然最多的还是通过访问同一个数据存储系统来构成一个关联的完整系统


9.分布式服务

既然每一个应用系统都需要执行许多相同的业务操作, 比如用户管理、商品管理等,那么可以将这些共用的业务提取出来,独立部署。
通过服务的分布式,各个应用能更好的独立发展,实现了从依赖模块到依赖服务的过渡。将通用的公共服务独立出来,也方便做服务管控,比如对各个应用的服务请求进行监控,在高峰时期限制、关闭某些应用的访问等。


10网站架构模式

① 分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责, 然后通过上层对下层的依赖和调用组成一个完整的系统。
在大型网站架构中也采用分层结构,将网主占软件系统分为应用层、服务层、数据层。
分层的好处在于:解耦合,独立发展,伸缩性,可扩展性。上面网站的进化史也凸出了分层的重要性。
但是分层架构也有一些挑战, 就是必须合理规划层次边界和接口,在开发过程中,严格遵循分层架构的约束, 禁止跨层次的调用( 应用层直接调用数据层)及逆向调用(数据层调用服务层, 或者服务层调用应用层)。
② 分割
分层强调的是横向切分,而分割是纵向切分, 上面网站进化史部分的业务拆分就包含了分割。
分割的目标是高内聚、低耦合的模块单元
③ 分布式
分层和分割的一个主要目的是分布式部署,但分布式也有自己的问题:网络通信带来的性能问题,可用性,一致性与分布式事务,系统维护管理复杂度。
④ 集群
一个机器解决不了的问题,就用几个机器来解决,当服务无状态的时候,通过往集群增加机器就能解决大部分问题。对应网站进化史中“使用应用服务器集群改善网站的并发处理能力”
⑤ 缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度,同时大大减轻了数据提供者的压力
大型网站架构设计在很多方面都使用了缓存设计:CDN、反向代理、本地缓存、分布式缓存
⑥ 异步
异步是解耦合的一个重要手段,常见的生产者-消费者模型就是一个异步模式。
出了解耦合,异步还能提高系统可用性、加快响应速度、流量削峰。


前端架构师对于框架的技术选型

前端技术发展日新月异,互联网上出现的新型框架也比较多,如何让新招聘的人员能够直接上手接替项目,或者有相关人员请假,替补人员的接替工作,如何做到不同前端工程师的开发的差异性更小

vue/react/angular开发的css架构思考

前端开发现在已经从传统的后端web多页面开发模式转向前端单页SPA开发模式,而vuejs/react/angular则是开发SPA非常优秀的前端框架。组件化开发由react最早提出,vuejs后发优势,将组件化开发贯彻到了极致

千万级用户的大型网站,应该如何设计其高并发架构?

本文将会从一个大型的网站发展历程出发,一步一步的探索这个网站的架构是如何从单体架构,演化到分布式架构,然后演化到高并发架构的。大型网站架构中共涉及的技术远远不止这些,还包括了MQ、CDN、静态化、分库分表、NoSQL、搜索、分布式文件系统、反向代理

大型网站的可伸缩性架构如何设计?

不同功能进行物理分离实现伸缩:纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。

Vue实战_从目录结构谈可扩展项目架构设计

很多人都会用项目脚手架,也会跑hello world,然后再写写简单的todolist。但是再往下深入就难了。比如很多教程和老师都会说,大家要多问一个为什么。其实我想说多问你妹啊。我都不知道问为什么怎么多问?

架构师能力模型,架构师应该掌握那些东西?

架构师在很多人眼中是一个非常高大上的职业, 就像武侠小说中的绝世高手一样, 关键时刻可以起到扭转乾坤的作用, 是团队中的灵魂人物. 回想我自己做一线架构师的过程中

微服务五种开源API网关实现组件对比

微服务架构是当下比较流行的一种架构风格,它是一种以业务功能组织的服务集合,可以持续交付、快速部署、更好的可扩展性和容错能力,而且还使组织更容易去尝试新技术栈。微服务具有几个关键特征:

大型网站系统架构的演化

一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构

大型网站技术架构 构建高可用的网站 高可用的服务

本章介绍如何去构建高可用的服务,关键词:服务分级,超时设置,异步调用,服务降级,幂等性设计,一些架构设计中的常用方案,但是需要结合实际业务场景进行设计,没有一套方案能解决所有问题

大型网站核心架构要素

一般来说,除了当前的系统功能需求外,软件架构还需要关注性能、可用性、伸缩性、扩展性和安全性这5个架构要素。性能是网站的一个重要指标,任何软件架构设计档案都必须考虑可能会带来的性能问题。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全