读书笔记:《大型网站系统与Java中间件实践》

news/2024/5/20 18:57:29/文章来源:https://blog.csdn.net/thewindkee/article/details/103551866

文章目录

    • 大型网站演进
    • 数据库
        • 读问题
        • 写问题
    • 应用应对的挑战
      • 引入服务层框架:
        • 多机房问题
        • 序列化与反序列化问题
        • 异步调用
        • 线程池隔离
        • 服务请求合并
    • 数据访问层
        • 一致性的基础理论--CAP/BASE
        • 多机的Sequence问题
    • 消息中间件
        • 功能
        • 消息一致性
        • 避免对消息中间件的强依赖
        • 级联、嵌套topic/queue
        • 消息发送到中间件的可靠性保证(发送可靠)
        • 消息投递的可靠性保证(消费可靠)
        • 消息者重复消费
        • 避免投递线程被阻塞

大型网站演进

在这里插入图片描述

  1. 单机扛不住 , 上集群
  2. 集群session问题
    1.hash(key)到固定的单机节点上,让其保持session
    如果一台web服务器故障,则会话丢失。需要登录。
    2.session复制
    将session复制到其他节点上。
    a.同步session增加网络带宽。
    b.增加内存消耗。
    3.session集中存储
    redis存储。
    好处:web之间没了session复制,也不保存在本机了。
    坏处:
    a.读写session引入了网络操作。
    不过一般是Redis在内网, 还好。
    b.存储session的机器有问题,则影响应用。
    4.Cookie Based
    相当于每次 都自带碗筷。
    a.cookie长度。
    b.安全性。
    不能信赖前端传来的数据,所以有加密解密。但是仍不安全。
    c.带宽消耗。

数据库

读问题

数据库压力变大,读写分离
 1.数据库作为读库
 2.搜索引擎作为读库

加速数据读取–缓存
 1.数据缓存
 2.页面缓存

考虑局部热点的问题。
扩容/缩容尽量平滑(一致性hash)
定时失效、变更时失效、变更时更新

写问题

读写分离不能解决写(主库)问题
 1.专库专用,数据库垂直拆分
  交易、商品、用户数据分开。
  问题:引入了 分布式事务的问题。
2.水平拆分
 数据水平拆分就是把同一个表的数据,拆分到多个数据库/表。
 问题:
  a.访问数据 引入路由(到不同库/表)
  b.主键处理,不能简单自增。
  c.分页出现问题。

应用应对的挑战

跟数据库拆分类似
 a.从业务垂直拆分
  订单、物流、商品、用户
 b.也可以水平扩容
  多台订单机器构建集群,抗下单压力

引入服务层(service)
引入消息中间件

引入服务层框架:

问题:网站规模扩大,开发人员增多,应用复杂、臃肿。
  解决方案:应用拆小。

仍存在的问题:
  数据库连接数压力还在。
  系统之间存在重复代码。

引入服务层:应用存在的问题 ,就继续抽象一层。
  将应用和底层数据库、缓存系统、文件系统等系统之间增加了服务层。可以理解成服务层处理简单、通用逻辑,并持久化到文件、数据库中。

服务层的代表:dubbo
  应用直接调用有网络。
  利用动态代理+反射生成代理对象,帮助序列化,网络发送数据调用远程应用,并反序列化结果。隐藏细节。
问题:
  服务者集群、调用者集群,如何路由。
最初的路由寻址–找服务提供者
  1.透明代理:lvs,eureka
  2.从注册中心找地址,再直连

基于服务提供者、接口、方法、参数来路由
  避免负载不均衡。

多机房问题

其他机房也被当做同一集群
 
解决:
  1.根据调用者提供不同的服务者。
  2.框架内部进行地址过滤,识别机房。

序列化与反序列化问题

尽量短小(节省带宽)
  压缩与短小之间的平衡(cpu,网络)

异步调用

1.拆分没有前后依赖的服务,多线程异步调用。
  2.不需要结果的,异步调用。
  3.批量调用(类似mget)
  4.fork/join

线程池隔离

避免某个接口阻塞后,影响应用内其他接口。

服务请求合并

服务提供者避免重复计算。
  计算的时候加锁,其他线程再次访问则得到一个Future供之后获取结果。

数据访问层

数据拆分带来的影响:
ACID
路由
join
分页
自增ID
查询跨库

一致性的基础理论–CAP/BASE

希望强一致,但是代价太大,最终一致就好了。
 p:分区容忍性,系统部分有问题仍能运行。
 放弃C,保留AP。最终一致。

如果强一致,单机。
 或者类似于ZK写入的时候,只要一半及以上同意就算写入成功。
 类似于MongoDB写入的时候,一半及以上replication接收即可。

集群内数据一致性算法
 W+R>N 能保证强一致性
 W+R<=N可以保证最终一致性

分布式事务,考虑最终一致即可。
 实现上来说通过补偿不断重试,而不是回滚。
 或者TCC 应用层自行做抵消操作。
 两者可以合并
  TCC+人工补偿

多机的Sequence问题

水平分库后,自增ID还是要保证:
唯一性
连续性

唯一性:
uuid
连续性:
 1.单独做一个id自增的管理器。
  性能降低。
  需要灾备保证稳定。
 2.应用指定ID段

扩库join
 1.多次查询。
 2.数据冗余到单表上,避免join.

排序后分页
 1.考虑到所有数据可能都来自 一个数据源,所以分页的时候在一个源中取足(size条)数据。
 2.将所有数据源的数据组合排序,再取前size条。

消息中间件

功能

削峰削谷:
  平滑处理消息。
异步:
  快速返回。
解耦:
  应用直接没有直接联系,方便接入

消息一致性

jms通过XA解决

分阶段-多次消息投递
 业务先发送到消息中间件标记为待处理。
 之后处理完业务后再发送到消息中间件,标记为成功。(消息投递)
不断补偿-最终一致

避免对消息中间件的强依赖

避免消息中间件挂掉后影响业务:
 1.业务应用 将操作和需要入队的消息 作为一个事务,保证消息写到【本地消息表】中。–一个事务保证完成。
 2. 消息中间件/应用 轮询 本地消息表去获取消息,投递到消息中间件中即可。–最终可靠

级联、嵌套topic/queue

消息发送到中间件的可靠性保证(发送可靠)

持久订阅、非持久订阅
 
 消息中间件返回成功才认为 可靠消息到达中间件了,否则重发。
 
 消息持久化到数据库、文件。

消息投递的可靠性保证(消费可靠)

得到消息,并处理成功才向 消息中间件 返回成功
 业务没处理完不能去确认消息(ack)
可能业务处理成功,但ack发送失败,导致以为失败
 业务继续补偿,但是幂等。直接ack,删除消息中间件的消息。

消息者重复消费

1.重复发送到消息中心。
 消息标记ID,同一ID无法重复发送。
2.应用端重复接收消息中心的消息。
 应用端进行幂等操作。

避免投递线程被阻塞

1.接受消息与处理消息分开。(类似于select+handler的boss线程与worker线程)
2.线程池。

《大型网站系统与Java中间件实践》

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

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

相关文章

密评必备网站汇总

1、国密SSL实验室 网址&#xff1a;https://gmssl.cn/gmssl/index.jsp 推荐理由&#xff1a;提供很多密码相关工具 2、商用密码认证业务网 网址&#xff1a;http://service.scctc.org.cn/cer/cerall/list-c38.html 推荐理由&#xff1a;提供很多密码产品认证查询&#xff0…

乞讨网站,要饭网,个人要饭网,在线要饭网站;含socket 通信;双端支付源码 ;源码

展示站点&#xff1a;www.gaodc.site&#xff1b; 样式动态控制&#xff0c;因为快过年了所以是过年主题&#xff1b; 主要技术 springmvc websocket bootstrap jq 阿里支付 微信支付 &#xff1b;源码请邮件&#xff1b;仅供交流&#xff1b; 截图

配置静态地址转换------发布公司内网网站到互联网上

拓扑图如下&#xff1a; 第1步&#xff1a;配置路由器R1启用的端口信息 Router>en Router#conf t Enter configuration commands, one per line. End with CNTL/Z. Router(config)#host R1 R1(config)#int fa0/0 R1(config-if)#ip add 192.168.10.1 255.255.255.0 R1(confi…

web网站添加ico图标

上线的网站都会配置ico&#xff0c;红框位置的图标 配置方法&#xff1a; 1、选择一张正方形的图片 2、打开ico在线制作网站&#xff0c;我推荐 https://www.bitbug.net/ 3、上传图片&#xff0c;并选择ico大小 4、生成好的图片浏览器会自动下载到本地&#xff0c;将图片命…

关于某些网站的图片盗链功能,相关http 请求的解决方法

其实 关键就是 header中 的 Referer 属性&#xff0c;可以通过firebug 查看头信息 并获得Referer&#xff0c;但有些情况下可能不能获取&#xff0c;就只能通过抓包的方法来获得了。 [java] view plaincopy print?import java.io.BufferedInputStream; import java.io.Buffer…

技术网站

联合主办 IT168&#xff08;http://www.it168.com/&#xff09; 中国最具影响力和权威的IT导购、应用资讯专业网站。创立于1999年&#xff0c;为个人和企业进行IT产品购买及应用提供服务&#xff0c;在用户群体中拥有极高知信度和忠诚度。 旗下支持媒体&#xff1a;China Unix…

技术网站

联合主办 IT168&#xff08;http://www.it168.com/&#xff09; 中国最具影响力和权威的IT导购、应用资讯专业网站。创立于1999年&#xff0c;为个人和企业进行IT产品购买及应用提供服务&#xff0c;在用户群体中拥有极高知信度和忠诚度。 旗下支持媒体&#xff1a;China Unix…

新建 SharePoint 网站集

进入管理中心&#xff0c;主菜单选择“服务设置”选项卡&#xff0c;此菜单选择SharePoint Online 点击网站集的“新建”按钮&#xff0c;看到新建ShartPoint Online网站集对话框 填写一些信息 然后点击“创建” 创建完成将得到以后界面提示 然后将在网站集列表中看到网站集列…

《大型网站技术架构:核心原理与案例分析》

大型网站架构演化大型网站软件系统的特点大网站架构演化发展历程初始阶段的网站架构应用服务和数据服务分离使用缓存改善网站性能使用应用服务器集群改善网站的并发处理能力数据库读写分离使用反向代理和CDN加速网站响应使用分布式文件系统和分布式数据库系统使用NoSQL和搜索引…

零基础网站建设 wordpress建站 wordpress安装(图文详解)

一、安装wordpress前的装备工作&#xff1a; 1、腾讯购买域名&#xff1b;进入域名控制台&#xff0c;进行域名实名认证&#xff1b; 2、购买服务器&#xff0c;提交备案申请。本文以百度云服务器为例。 二、安装wordpress&#xff1a; 1、下载FTP工具并安装&#xff1a;Fi…

那些堪称软件神器的工具或网站

转载&#xff1a;http://blog.sina.com.cn/s/blog_7f5571aa0102vvvs.html 那些堪称软件神器的工具或网站维棠 - 全新的视频体验&#xff1a;秒杀各类视频网站&#xff08;去找第三方做的绿色版吧……官方广告太多了&#xff09;。 Internet Download Manager: the fastest down…

6款强大的jQuery插件 创建和加强网站布局

Javascript打开了web设计的大门&#xff0c;给了Html和CSS更宽广的舞台。HTML5和CSS3又比从前进步了一大截。神奇的根源来自 JavaScript&#xff0c;它可以向你的网站布局中加入交互元素。以jQuery Masonry为例&#xff0c;它转换常规的布局&#xff0c;到一个真正的动态布局&a…

为你的网站介绍10个非常有用的jQuery插件

本文介绍的插件涉及图像、paypal支付、分页、导航等方面的内容。 1.AJAX-ZOOM 图像缩放 & Pan Gallery, 360 对象旋转 (Spin), 全屏视图. 在线演示 here . 2.(mb) verticalSlider 显示长列表的绝佳方式&#xff0c;在线演示 here . 3.More plugin 该插件主要用于评论…

漫谈网站开发规范

任何一个项目或者系统开发之前都需要定制一个开发约定和规则&#xff0c;这样有利于项目的整体风格统一、代码维护和扩展。由于Web项目开发的分散性、独立性、整合 的交互性等&#xff0c;所以定制一套完整的约定和规则显得尤为重要。本文档将定制一系列约定和规则&#xff0c;…

21个为您的网站和博客提供的免费视频播放器

很多设计师在都会在他们的网站使用视频播放器 。在线视频播放器无需为简单的用户和Web开发人员提供过多的介绍&#xff0c;它简单易用&#xff0c;为您建站时提供了灵活性和创造性&#xff0c;您可以添加无限数量的视频&#xff0c;并根据你的想法安排它们的专辑标题、艺术家的…

国外15个免费网页模板下载的集合网站

一个优秀且免费的网页模板对设计者的意义不用多说&#xff0c;不但可以节约我们大量的时间提高我们的设计效率&#xff0c;更为我们省下一些模板费用&#xff0c;更进一步我们还可以通过这些网页模板源文件提高我们的设计水平。下面与大家分享的是精选国外15个免费网页模板下载…

为Web前端开发者准备的免费PSD资源网站

是不是你也同样有过这样的经历&#xff0c;需要免费PSD的时候找不到&#xff0c;不需要的时候又常常能够看到&#xff0c;今天我们将要分享一堆免费下载PSD文件的资源性网站&#xff0c;相信一定能够帮助你加快你的设计和开发。 1. Dribbble PSD Search Dribbble毫无疑问是最大…

用网站(WebSite而不是WebProject)项目构建ASP.NET MVC网站

从ASP.NET MVC第一个版本开始到现在&#xff0c;创建ASP.NET MVC项目的官方方法只有一个&#xff0c;“文件”->“新建”->“项目”&#xff0c;然后选择ASP.NET MVC X Web应用程序。 这种方式当然有其好处&#xff0c;但是很多时候&#xff0c;网站项目&#xff08;WebS…

VS发布网站时,报错提示:“未能将文件xxx复制到xxx,未能找到文件xx”三种解决方案!

发布网站时候大家可能会遇到这样的情况&#xff0c;就是报错提示说&#xff1a;“未能将文件xxx复制到xxx&#xff0c;未能找到文件xx”&#xff0c;这个问题一般来说有三种解决方案&#xff0c;个人倾向第三种&#xff0c;如图&#xff1a; 解决方案如下&#xff1a; 方案一、…

网站伪静态化教程:利用ISAPI_Rewrite或URLRewrite组件

SEO中&#xff0c;网站静态化或伪静态化是肯定有大大的好处的。因为搜索引擎虽然目前对于?id这类的参数支持已经很好。但是实际中我们发现&#xff0c;带参数的URL形式依然在收录和索引量中体现为收录较少。 如果你的网站页面原创质量为100%&#xff0c;权重非常之高&#xff…