大型网站技术架构

news/2024/5/14 1:59:14/文章来源:https://blog.csdn.net/huaidan1469/article/details/79652389

初始搭建

最开始,就是各种框架一搭,然后扔到 Tomcat 容器中跑,这时候我们的文件、数据库、应用都在一个服务器上。


服务分离

随着系统的上线,用户量也会逐步上升,很快一台服务器已经满足不了系统的负载,这时我们就要在服务器还没有超载时,提前做好准备。

由于我们是单体架构,优化架构在短时间内是不现实的,增加机器是一个不错的选择。这时,我们可能要把应用和数据库服务单独部署,如果有条件也可以把文件服务器单独部署。


反向代理

为了提升服务处理能力,我们在 Tomcat 容器前加一个代理服务器,一般使用 Nginx,当然你如果更熟悉 Apache 也未尝不可。

用户的请求发送给反向代理,然后反向代理把请求转发到后端的服务器。

从严格意义上说,Nginx 是属于 Web 服务器,一般处理静态 HTML、CSS、JS 请求;而 Tomcat 属于 Web 容器,专门处理 JSP 请求,当然 Tomcat 也是支持 Html 的,只是效果没 Nginx 好而已。

反向代理的优势,如下所示:

  • 隐藏真实后端服务。

  • 负载均衡集群。

  • 高可用集群。

  • 缓存静态内容实现动静分离。

  • 安全限流。

  • 静态文件压缩。

  • 解决多个服务跨域问题。

  • 合并静态请求(HTTP/2.0后已经被弱化)。

  • 防火墙。

  • SSL 以及 http2。


动静分离

基于以上 Nginx 反向代理,我们还可以实现动静分离,静态请求如 HTML、CSS、JS 等请求交给 Nginx 处理,动态请求分发给后端 Tomcat 处理。

Nginx 升级到 1.9.5+ 可以开启 HTTP/2.0 时代,加速网站访问。当然,如果公司不差钱,CDN 也是一个不错的选择。


服务拆分

在这分布式微服务已经普遍流行的年代,我们没必要踩过多的坑,就很容易进行拆分。

市面上已经有相对比较成熟的技术,比如阿里开源的 Dubbo(官方明确表示已经开始维护了),Spring 家族的 Spring Cloud,当然具体如何去实施,无论是技术还是业务方面都要有很好的把控。

01 Dubbo

02 SpringCloud

  • 服务发现——Netflix Eureka

  • 客服端负载均衡——Netflix Ribbon

  • 断路器——Netflix Hystrix

  • 服务网关——Netflix Zuul

  • 分布式配置——Spring Cloud Config

03 微服务与轻量级通信

  • 同步通信和异步通信

  • 远程调用 RPC

  • REST

  • 消息队列


持续集成部署

服务拆分以后,随之而来的就是持续集成部署,你可能会用到以下工具:Docker、Jenkins、Git、Maven。

基本拓扑结构如下所示:

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


服务集群

Linux 集群主要分成三大类:

  • 高可用集群。

  • 负载均衡集群。

  • 科学计算集群。

我们最常见的也是生产中最常接触到的就是负载均衡集群。

01 负载均衡实现

负载均衡实现的三种方法:

  • DNS 负载均衡,一般域名注册商的 DNS 服务器不支持,但我用的阿里云解析已经支持。

  • 四层负载均衡(F5、LVS),工作在 TCP 协议下。

  • 七层负载均衡(Nginx、haproxy),工作在 HTTP 协议下。

02 分布式 Session

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

分布式 Session 的几种实现方式:

  • 基于数据库的 Session 共享。

  • 基于 resin/tomcat web 容器本身的 Session 复制机制。

  • 基于 oscache/Redis/memcached 进行 Session 共享。

  • 基于 cookie 进行 Session 共享。

分布式 Session 的几种管理方式:

  • Session Replication 方式管理 (即 Session 复制)。
    简介:将一台机器上的 Session 数据广播复制到集群中其余机器上。
    使用场景:机器较少,网络流量较小。
    优点:实现简单、配置较少、当网络中有机器 Down 掉时不影响用户访问。
    缺点:广播式复制到其余机器有一定延时,带来一定网络开销。

  • Session Sticky 方式管理。
    简介:即粘性 Session、当用户访问集群中某台机器后,强制指定后续所有请求均落到此机器上。
    使用场景:机器数适中、对稳定性要求不是非常苛刻。
    优点:实现简单、配置方便、没有额外网络开销。
    缺点:网络中有机器 Down 掉时,用户 Session 会丢失、容易造成单点故障。

  • 缓存集中式管理。
    简介:将 Session 存入分布式缓存集群中的某台机器上,当用户访问不同节点时先从缓存中拿 Session 信息。
    使用场景:集群中机器数多、网络环境复杂。
    优点:可靠性好。
    缺点:实现复杂,稳定性依赖于缓存的稳定性、Session 信息放入缓存时要有合理的策略写入。

目前生产中使用到的:

  • 基于 Tomcat 配置实现的 Mem Cache 缓存管理 Session 实现(麻烦)。

  • 基于 Os Cache 和 shiro 组播的方式实现(网络影响)。

  • 基于 Spring-Session+Redis 的方式实现(最适合)。

03 负载均衡策略

负载均衡策略的优劣及其实现的难易程度有两个关键因素:负载均衡算法,对网络系统状况的检测方式和能力。

rr 轮询调度算法

顾名思义,轮询分发请求。优点是实现简单,缺点是不考虑每台服务器的处理能力。

wrr 加权调度算法

我们给每个服务器设置权值 weight,负载均衡调度器根据权值调度服务器,服务器被调用的次数跟权值成正比。优点是考虑了服务器处理能力的不同。

sh 原地址散列

提取用户 IP,根据散列函数得出一个 key,再根据静态映射表,查出对应的 value,即目标服务器 IP。一单目标机器超负荷,则返回空。

dh 目标地址散列

同上,只是现在提取的是目标地址的 IP 来做哈希。优点是以上两种算法都能实现同一个用户访问同一个服务器。

lc 最少连接

优先把请求转发给连接数少的服务器。优点是使得集群中各个服务器的负载更加均匀。

wlc 加权最少连接

在 lc 的基础上,为每台服务器加上权值。算法为:(活动连接数*256+非活动连接数)÷权重 ,计算出来的值小的服务器优先被选择。优点是可以根据服务器的能力分配请求。

sed 最短期望延迟

sed 跟 wlc 类似,区别是不考虑非活动连接数。算法为:(活动连接数+1)*256÷权重,同样计算出来的值小的服务器优先被选择。

nq 永不排队

改进的 sed 算法,我们想一下什么情况下才能“永不排队”,那就是服务器的连接数为 0 的时候,那么假如有服务器连接数为 0,均衡器直接把请求转发给它,无需经过 sed 的计算。

LBLC 基于局部性的最少连接

均衡器根据请求的目的 IP 地址,找出该 IP 地址最近被使用的服务器,把请求转发之,若该服务器超载,则采用最少连接数算法。

LBLCR 带复制的基于局部性的最少连接

均衡器根据请求的目的 IP 地址,找出该 IP 地址最近使用的“服务器组”,注意,这里不是具体某个服务器,然后采用最少连接数算法,从该组中挑出具体的某台服务器出来,把请求转发之。

若该服务器超载,那么根据最少连接数算法,从在集群的非本服务器组的服务器中,找出一台服务器出来,加入本服务器组,然后把请求转发之。


读写分离

MySQL 主从配置,读写分离并引入中间件,开源的 MyCat,阿里的 DRDS 都是不错的选择。

如果是对高可用要求比较高,但是又没有相应的技术保障,建议使用阿里云的 RDS 或者 Redis 相关数据库,省事省力又省钱。


全文检索

如果有搜索业务需求,引入 solr 或者 elasticsearch 也是一个不错的选择,不要什么都塞进关系型数据库。


缓存优化

引入缓存无非是为了减轻后端数据库服务的压力,防止其"罢工"。

常见的缓存服务有:Ehcache、OsCache、MemCache、Redis,它们都是主流经得起考验的缓存技术实现,特别是 Redis 已大规模运用于分布式集群服务中,并证明了自己优越的性能。


消息队列

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

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

日志处理:系统中的日志是必不可少的,但是如何去处理高并发下的日志却是一个技术活,一不小心可能会压垮整个服务。

工作中我们常用到的开源日志 ELK,为嘛中间会加一个 Kafka 或者 Redis 就是这么一个道理(一群人涌入和排队进的区别)。

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


日志服务

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


安全优化

以上种种,没有安全做保证,一切都会归于零:

  • 阿里云的 VPN 虚拟专有网络以及安全组配置。

  • 自建机房的话,要自行配置防火墙安全策略。

  • 相关服务访问,比如 MySQL、Redis、Solr 等如果没有特殊需求尽量使用内网访问并设置鉴权。

  • 尽量使用代理服务器,不要对外开放过多的端口。

  • HTTPS 配合 HTTP/2.0 也是个不错的选择。


架构师必备词汇

01 高可用

  • 负载均衡(负载均衡算法)

  • 反向代理

  • 服务隔离

  • 服务限流

  • 服务降级(自动优雅降级)

  • 失效转移

  • 超时重试(代理超时、容器超时、前端超时、中间件超时、数据库超时、NoSql超时)

  • 回滚机制(上线回滚、数据库版本回滚、事务回滚)

  • 02 高并发

  • 应用缓存

  • HTTP 缓存

  • 多级缓存

  • 分布式缓存

  • 连接池

  • 异步并发

03 分布式事务

  • 二阶段提交(强一致)

  • 三阶段提交(强一致)

  • 消息中间件(最终一致性),推荐阿里的 RocketMQ。

04 队列

  • 任务队列

  • 消息队列

  • 请求队列

05

  • 扩容

  • 单体垂直扩容

  • 单体水平扩容

  • 应用拆分

  • 数据库拆分

  • 数据库分库分表

  • 数据异构

  • 分布式任务

06 网络安全

  • SQL 注入

  • XSS 攻击

  • CSRF 攻击

  • 拒绝服务(DoS,Denial of Service)攻击


架构师必备工具

01 操作系统

Linux(必备)、某软的

02 负载均衡

DNS、F5、LVS、Nginx、OpenResty、HAproxy、负载均衡SLB

03 分布式框架

Dubbo、Motan、Spring-Could

04 数据库中间件

DRDS 、Mycat、360 Atlas、Cobar (不维护了)

05 消息队列

RabbitMQ、ZeroMQ、Redis、ActiveMQ、Kafka

06 注册中心

Zookeeper、Redis

07 缓存

Redis、Oscache、Memcache、Ehcache

08 集成部署

Docker、Jenkins、Git、Maven

09 存储

OSS、NFS、FastDFS、MogileFS

10 数据库

MySQL、Redis、MongoDB、PostgreSQL、Memcache、HBase

11 网络

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


作者:张志朋
来源:https://blog.52itstyle.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_771185.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于大型网站技术演进的思考(十八)--网站静态化处理—反向代理(10)

反向代理也是一种可以帮助实现网站静态化的重要技术,今天我就来讲讲反向代理这个主题。那么首先我们要了解下什么是反向代理。和反向代理相对应的是正向代理,正向代理也就是我们常说的代理服务,正向代理是非常常见的,例如在某些公…

安装PIWIK网站监控

1.piwik介绍 Piwik是一个PHP和MySQL的开放源代码的Web统计软件,它给你一些关于你的网站的实用统计报告,比如网页浏览人数,访问最多的页面,搜索引擎关键词等等。 Piwik拥有众多不同功能的插件,你可以添加新的功能或是移…

网站高并发高性能必不可少的九种核心技术

要建成一个具有高并发高可用的一个网站必不可少的九种核心技术转载于:https://blog.51cto.com/983865387/2045994

图书资源下载网站推荐

为什么80%的码农都做不了架构师?>>> Kindle 电子书下载不用愁,一页精品解您忧。网上流传着很多 Kindle 电子书资源网站汇总,但是有很多都是以讹传讹,有相当多的网站要么打不开,要么质量无法保证&#xff0…

众筹网站Kickstarter不准备上市:转型公益企业

众筹网站Kickstarter刚刚获得了“公益企业”的身份,表明该公司希望“对社会产生积极影响”。 需要强调的是,Kickstarter仍是一家盈利性企业,但该公司现在将会定期发布社会影响报告,其董事会也必须在制定决策时充分权衡公益因素。该…

大型网站技术架构(八)网站的安全架构

2019独角兽企业重金招聘Python工程师标准>>> 从互联网诞生起,安全威胁就一直伴随着网站的发展,各种Web攻击和信息泄露也从未停止。常见的攻击手段有XSS攻击、SQL注入、CSRF、Session劫持等。 1、XSS攻击 XSS攻击即跨站点脚本攻击(…

Mysql在大型网站的应用架构演变

写在最前: 本文主要描述在网站的不同的并发访问量级下,Mysql架构的演变 可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下,常用的扩展手段…

github Issues解决博客网站typecho的主题lanstar报错显示你选择的风格不存在和syntax error, unexpected ‘else‘ (T_ELSE)问题

背景 最近看到小伙伴使用网站typecho搭建自己的个人博客,所以就尝试了一下。虽然是PHP写的,但感觉还不多,对比Java的个人博客Haro,最重要的一点就是有很多的主题可以供选择。 于是乎就搭建了一波,几经选择&#xff0…

安利一些电子图书下载网站

作者:duktig 博客(文章首发):https://duktig.cn 优秀还努力。愿你付出甘之如饴,所得归于欢喜。 什么事情不仅香,还能提升自己的幸福感? 对于大多数人来说,有一点应该毋庸置疑——白嫖…

Vue3项目中 Ant Design Vue全局配置项使用及 网站标题、图标修改

1、Ant Design Vue全局配置项 Ant Design Vue官网:https://www.antdv.com/components/overview-cn antdv的全局配置一般用于 参数说明类型默认值版本autoInsertSpaceInButton设置为 false 时,移除按钮中 2 个汉字之间的空格booleantruecomponentSize设置…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

超全的选品资源网站分享

从劳工节、万圣节到黑色星期五、圣诞节,所有卖家都将迎来不可错过的电商旺季。而备战旺季的第一步么就是赢在选品。把握商机符合市场潮流的选品能够让卖家事半功倍,快速爆单。 本篇文章小编不是提供最新的选品信息,小编提供的是选品网站和选…

亚马逊A9算法解析,seo 的思维做亚马逊排名

如何将站内搜索排名做到前列,一直都是大部分卖家比较关心的问题。很多亚马逊卖家都听说过平台内的搜索引擎中有A9算法,虽然官方没有正式提出SEO这个概念,但是SEO玩法却是在这个平台中真实存在的。 Amazon搜索引擎和常规搜索引擎有什么不同&a…

亚马逊关键词工具网站梳理

在跨境电商平台中,流量最大的还是属于搜索流量。所以如何设置搜索词,如何抓取到最优价值的搜索词,成为困扰大家的难题。 随着物联网的发展,云计算、大数据已经蓬勃发展,离我们最近的就是淘宝、抖音等平台的推荐机制&a…

亚马逊 SEO 的排名因素

了解亚马逊平台上的两个基本排名因素 作为一名新的亚马逊企业家,您的产品拥有更高的排名会让您的流量更多。但是您将面临的是激烈的竞争和不断发展的 A10 搜索引擎算法,所以大多数公司聘请亚马逊 SEO 顾问寻求帮助。虽然目前没有确切的方法来确定 Amazo…

用 IIS 7、ARR 與 Velocity 建设高性能的大型网站

本帖是研讨会中的一些杂记,搭配一些官方的文档,经整合归纳后,介绍 IIS 7 如何搭配新一代的 ARR (Application Request Routing),建置 Server Farm 并达到比过去 NLB 更优的 Load Balancing 功能,此外还介绍微软新一代的…

想学网站建设与设计的书籍_网站建设中关于网站设计的重要性

原标题:网站建设中关于网站设计的重要性网络的不断发展促使着众多企业开始在网络上开辟一席之地,网站搭建、网站设计、网站优化等等一系列的需要随之而来。当大家都在做网站时,网站建设的更优秀、排名更靠前的企业往往会脱颖而出,…

python中data.find_all爬取网站为空列表_抓取1400篇Python文章后的故事(内附高质量Python文章推荐)...

如何写好一篇技术文章呢?或者说如何写好一篇Python的技术文章?这应该是技术人都会思考的问题,带着这个问题,我抓取了技术网站伯乐在线的关于Python文章的一些信息,来做一些简单的分析。考虑到每一种语言每一项技术的不…

c++builder 运行网站的api_从0开始构建你的api网关Spring Cloud Gateway网关实战及原理解析...

API 网关API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题:客户端会多次请…