WEB架构设计过程

目录

一、架构演变

二、设计原则

三、必备工具


一、架构演变

1、初始搭建

基于框架,运行在Tomcat容器中。文件、数据库、应用程序在一个服务器上。

2、服务分离

随着用户量上升,单台服务器无法满足系统的负载,可以把应用服务器和数据服务器单独部署,如果有条件也可以把文件服务器单独部署。

3、反向代理

为了提升服务处理能力,我们在Tomcat容器前加一个代理服务器,比如Nginx、apache也。用户的请求发送给反向代理,然后反向代理把请求转发到后端的服务器。严格意义上来说,Nginx属于web服务器,一般处理静态html、css、js请求,而Tomcat属于web容器,专门处理JSP请求,当然Tomcat也是支持html的,只是效果没有Nginx好而已。

4、动静分离

基于以上Nginx反向代理,我们还可以实现 动静分离,静态请求如html、css、js等请求交给Nginx处理,动态请求分发给后端Tomcat处理。Nginx 升级到1.9.5+可以开启HTTP/2.0时代,加速网站访问。当然,如果公司不差钱, CDN也是一个不错的选择。 

5、服务拆分

在这分布式微服务已经普遍流行的年代,其实我们没必要踩过多的坑,就很容易进行拆分。市面上已经有相对比较成熟的技术,比如阿里开源的Dubbo(官方明确表示已经开始维护了),Spring家族的SpringCloud,当然具体如何去实施,无论是技术还是业务方面都要有很好的把控。

微服务与轻量级通信:

  • 同步通信和异步通信
  • 远程调用RPC
  • REST
  • 消息队列

6、持续集成部署

服务拆分以后,随着而来的就是持续集成部署,你可能会用到以下工具:Docker、Jenkins、Git、Maven。基本拓扑结构如下所示:

 

整个持续集成平台架构演进到如下图所示:

 

7、服务集群

Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)。其实,我们最常见的也是生产中最常接触到的就是负载均衡集群。

(1)负载均衡实现

  • DNS负载均衡,一般域名注册商的dns服务器不支持
  • 四层负载均衡(F5、LVS),工作在TCP协议下
  • 七层负载均衡(Nginx、haproxy),工作在Http协议下

(2)分布式session

大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。

8、读写分离

MySql主从配置,读写分离并引入中间件,开源的MyCat,阿里的DRDS都是不错的选择。如果是对高可用要求比较高,但是又没有相应的技术保障,建议使用阿里云的RDS或者Redis相关数据库,省事省力又省钱。

9、缓存优化

引入缓存无非是为了减轻后端数据库服务的压力,防止其"罢工"。常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然这些都是主流经得起考验的缓存技术实现,特别是Redis已大规模运用于分布式集群服务中,并证明了自己优越的性能。

10、消息队列

1、异步通知:比如短信验证,邮件验证这些非实时反馈性的逻辑操作。

 

2、流量削锋:应该是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。

3、日志处理:系统中日志是必不可少的,但是如何去处理高并发下的日志确是一个技术活,一不小心可能会压垮整个服务。工作中我们常用到的开源日志ELK,为什么中间会加一个Kafka或者redis就是这么一个道理(一群人涌入和排队进的区别)。

4、消息通讯:点对点通信(个人对个人)或发布订阅模式(聊天室)。

11、日志服务

消息队列中提到的ELK开源日志组件对于中小型创业供公司是一个不错的选择。

12、安全优化

以上种种,没有安全做保证可能都会归于零。

  • 阿里云的VPN虚拟专有网络以及安全组配置
  • 自建机房的话,要自行配置防火墙安全策略
  • 相关服务访问,比如Mysql、Redis、Solr等如果没有特殊需求尽量使用内网访问并设置鉴权
  • 尽量使用代理服务器,不要对外开放过多的端口
  • https配合HTTP/2.0也是个不错的选择

二、设计原则

1、高可用

  • 负载均衡(负载均衡算法)
  • 反向代理
  • 服务隔离
  • 服务限流
  • 服务降级(自动优雅降级)
  • 失效转移
  • 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)
  • 回滚机制(上线回滚、数据库版本回滚、事务回滚)

2、高并发

  • 客户端缓存(减少网络带宽、降低服务器压力、减少网络延迟)
  • HTTP缓存
  • 多级缓存
  • 分布式缓存
  • 连接池
  • 异步并发

3、分布式事务

  • 二阶段提交(强一致)
  • 三阶段提交(强一致)
  • 消息中间件(最终一致性),推荐阿里的RocketMQ

4、队列

  • 任务队列
  • 消息队列
  • 请求队列

5、数据库技术

  • 主从复制(易于扩展、可用备份)
  • 读写分离(提高查询速度、减少IO瓶颈、高扩展)
  • 单体垂直扩容(业务分离、高扩展、高性能)
  • 单体水平扩容(高扩展、高性能)
  • 数据异构

6、网络安全

  • SQL注入
  • XSS攻击
  • CSRF攻击
  • 拒绝服务(DoS,Denial of Service)攻击

7、负载均衡

  • 网络(全局负载均衡,DNS轮询、CDN网络分发)
  • 硬件(本地负载均衡,负载均衡器、地址转换网关,效率高但价格贵)
  • 软件(本地负载均衡,Linux Virtual Server、Nginx、HAProxy)

 

三、必备工具

1、操作系统

Linux(必备)、微软

2、负载均衡

DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB(阿里云)

3、分布式框架

Dubbo、Motan、Spring Cloud

4、数据库中间件

DRDS (阿里云)、Mycat、360Atlas

5、消息队列

RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka

6、注册中心

Zookeeper、Redis

7、缓存

Redis、Oscache、Memcache、Ehcache

8、集成部署

Docker、Jenkins、Git、Maven

9、存储

OSS、NFS、FastDFS、MogileFS

11、数据库

MySql、Redis、MongoDB、PostgreSQL、Memcache、HBase

12、网络

专用网络VPC、弹性公网IP、CDN

转载:

WEB架构设计概述 - 百里浅暮 - 博客园

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于Docker的Web系统架构设计是一种将应用程序和依赖项打包在容器中的方法,使其能够在不同的环境中快速部署和运行的系统架构。 首先,我们需要将Web系统拆分为多个模块,每个模块负责不同的功能。这些模块可以是前端、后端、数据库等。 接下来,我们使用Docker将每个模块打包为一个独立的容器。每个容器包含该模块所需的所有依赖项,例如软件库、环境变量等。 为了实现容器之间的通信以及对外部的访问,我们需要使用Docker网络或者Docker Compose进行配置。通过网络,不同容器可以进行通信,例如前端容器可以向后端容器发送请求。 此外,我们可以使用Docker Swarm或Kubernetes等容器编排工具进行管理和部署。它们可以实现容器的自动化扩展、负载均衡和故障恢复,确保Web系统的高可用性和稳定性。 最后,可以通过使用Docker镜像仓库来存储和管理容器镜像,方便团队成员共享和更新。 基于Docker的Web系统架构设计带来了很多好处。首先,它提供了一种轻量级、可移植的部署方式,可以简化系统的部署和迁移。其次,它允许我们使用容器隔离技术,将应用程序与底层操作系统解耦,提高了系统的安全性和可靠性。另外,通过使用容器编排工具,我们可以更好地管理和扩展系统,提高系统的可伸缩性和性能。 总而言之,基于Docker的Web系统架构设计使得系统的部署和运维更加灵活和高效,同时提供了更好的安全性和可扩展性。 ### 回答2: 基于Docker的Web系统架构设计是一种将应用程序及其依赖项打包为容器的集中管理方式。以下是具体的架构设计: 1. 容器化应用程序:将Web应用程序和其依赖项(例如数据库、消息队列等)打包为容器镜像。可以使用Dockerfile定义容器的运行环境和依赖项。 2. 容器编排:使用容器编排工具(如Docker Compose、Kubernetes)组织和管理多个容器。可以定义容器的数量、环境变量、网络设置等。 3. 高可用和负载均衡:使用容器编排工具的负载均衡功能,在多个容器之间均衡地分发用户请求。当某个容器出现故障时,负载均衡会将请求转发到其他正常的容器上。 4. 持久化数据:将容器与数据分离,使用外部存储服务(如数据库)存储应用程序的持久化数据。这样即使容器重启或被替换,数据仍然存在。 5. 安全性:通过在容器中限制权限和访问控制,加强系统的安全性。可以使用Docker提供的安全功能,如命名空间隔离、应用程序沙箱等。 6. 监控和日志:使用容器日志和监控工具来监控系统的性能和状态。可以使用ELK(Elasticsearch, Logstash, Kibana)等工具来收集和分析日志。 7. 部署和扩展:使用容器编排工具实现无缝的部署和扩展。可以通过简单地添加或删除容器实例来调整系统的规模,从而满足用户需求。 基于Docker的Web系统架构设计可以提供更高的可扩展性、灵活性和易管理性。容器化的应用程序能够快速部署、隔离和迁移,同时通过自动化的容器编排和负载均衡,可以实现高可用和负载均衡的架构。此外,容器化的架构还可以简化开发团队的协作,提高开发效率。 ### 回答3: 基于Docker的Web系统架构设计是一种基于容器化技术的系统设计方法。它将Web应用程序的不同组件打包成独立的容器,每个容器都包含了应用程序所需的所有依赖,包括操作系统、库文件和配置文件等。 首先,Docker容器可以根据不同的功能划分为多个微服务。每个微服务负责处理特定的业务功能,如用户管理、订单管理等。因为每个微服务都是独立运行在容器中的,因此它们可以并行处理多个请求,提高系统的效率和稳定性。 其次,容器之间可以通过Docker网络进行通信。在架构设计中,可以使用容器编排工具如Docker Compose或Kubernetes来协调和管理不同容器之间的通信和调度。通过容器网络,微服务之间的通信可以通过容器名称来实现,而无需关心具体的IP地址和端口。 另外,针对系统的数据存储,可以使用Docker卷来实现持久化存储。通过将数据卷挂载到容器中,可以确保数据不会随着容器的销毁而丢失。可以使用诸如Docker Volume、Docker NFS等技术来实现数据卷的管理和共享。 最后,通过持续集成和持续部署(CI/CD)的工作流程,可以实现对Web系统的自动化构建、测试和部署。可以使用持续集成工具如Jenkins或GitLab CI来自动构建和测试Docker镜像,然后通过容器编排工具将镜像部署到生产环境中。 总之,基于Docker的Web系统架构设计通过容器化技术的应用,实现了系统组件的隔离部署、灵活扩展和资源的高效利用。它提供了一种可靠、可伸缩和易于管理的系统架构,使得Web应用程序更加稳定和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值