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

news/2024/5/9 12:18:13/文章来源:https://blog.csdn.net/weixin_34383618/article/details/92682415

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

分布式系统简介

分布式系统有很多节点,且这些节点协同工作。

线程与进程的执行模式

1、线程的执行模式:互不通信的多线程模式;基于共享容器协同的多线程模式,如经典的生产者和消费者模式;通过事件协同的多线程模式,如锁机制,wait,notify。

2、多进程的执行模式。线程是属于进程的,一个进程内可以与很多线程共享了进程的内存空间,而多个进程之间是相互独立的,所有多个进程间的通信,交换数据的方式与多个进程间的方式会有所不同。两点不同:1.1多个进程相对多个进程来说,资源控制方面会比较容易实现。1.2多个进程中的单个进程出现问题,也不会造成整体不可用。多进程间可以共享数据,但是其代价要比多进程要大,会涉及序列化与反序列化的开销。而分布式系统相当于把单机的多进程变成了多机的多进程

网络IO实现方式

BIO,NIO,AIO,其中NIO是采用轮询的方式来监听处理IO请求,而AIO采用时间通知的方式来处理IO请求,可以参考:http://blog.csdn.net/anxpp/article/details/51512200

分布式系统中控制器的种类

控制器中的作用是协调分布式系统中各个节点之间显得动作和行为。 1、硬件负载均衡

2、软件负载均衡(LVS),有时候也叫作透明代理,优点代价低,可控性强,即可以按照之间的需求去增加负载均衡策略。缺点:有延时,要经过中间代理;处于必经路上,如果发生问题,影响较大。 输入图片说明

3、采用名称服务,与透明代理最大的不同是,在请求发起方和请求处理方中,没有代理服务器这样的设备存在,而是请求发起方和请求处理方直接连接。“名称服务”的作用是一是收集提供请求处理的服务器的地址信息;二是提供这些地址信息给请求发起方。名称服务只是起到一个地址交互的作用,在发起请求的机器上,需要根据从名称服务得到的地址进行负载均衡。也即,原来在透明代理上得工作,被拆分到了名称服务和发起请求的机器了。 输入图片说明

4、规则服务。在请求发起的机器上,会有对规则进行处理从而进行请求处理服务机器选择的逻辑。在此,规则服务器并不直接和请求处理机器交互,而只负责把规则提供给请求发起的机器,然后让请求发起机器自行处理。

输入图片说明

5、 Master+Worker 的方式。这种方式更多的是任务的分配和管理。

输入图片说明

运算器的变化

1、使用DNS选择运算器,用户发请求到DNS上,DNS告知服务器地址 输入图片说明

2、负载均衡。DNS统一返回负载均衡的地址,然后负载均衡去请求真正的服务器。 输入图片说明

分布式系统的难点

1、缺乏全局时钟2、面对故障独立性3、处理单点故障(在整个分布式系统中,如果某个角色或者功能只有某台单机在支撑,那么这个节点成为单点,其发生的故障称为单点故障)4、事务的挑战

单机走向集群时,session的处理方案有:1、session sticky,即每台服务器上只保存各自的session,通过负责均衡服务器,保证同一个会话落在同一个服务器上 2、session Replication 。每台服务器搜保持所有的session .(要注意同步session)3、session 数据集中存储。不同的服务器从同一个地方读取session .将session剥离开,单独进行管理。4、Cookie Based ,改方案是通过Cookie 来传递session 数据。目前我们公司就是采取这种方案,但是也有不足,如Cookie长度限制,安全性,带宽消耗(每次请求都要带上session),性能问题(每次Http请求和响应都会带上session,对于web服务器来说,在同样的情况下,响应数据减少了,支持的并发请求减少了)。

引入中间件后的架构图

输入图片说明

服务框架

服务化的好处,首先从结构上来看,系统结构更为清晰了;从稳定性来看,一些散落在多个应用系统中的代码也编程了服务,并由专门的团队进行维护,一方面可以提高代码的质量,另一方面由于核心的相对稳定,修改和发布的次数会少,这也可以提高稳定性。最后更加底层的资源统一由服务管理,结构更加清晰,也更加利于提高效率。

服务调用端

输入图片说明

其中协议适配,协议包括两部分,一是用于通信的数据数据报文的自定义协议(如Http ),一是,远程过程调用本身的协议(如在服务调用中的具体协议,需要自己来订单,可以选择XML作为序列化的方式) 。

网络通信实现,可以有使用NIO,其中有1、OneWay是一种单向的通知 。2、Callback 则是回掉,是一种很被动的方式,Callback的执行不是在原请求线程中3、Future,是一种能够主动控制超时,获取结果的方式,并且它的执行仍然在请求线程中。4、可靠异步传输,一般是通过中间件保证的。

服务提供方

输入图片说明

整个服务化框架的功能分为服务调用方和服务提供方,此外像序列化,协议,通信等是公用的模块,在具体的实现上,是把这些功能放在一起形成一个完成的服务框架,而不是分为服务调用者框架和服务提供者框架 ,因为某个服务调用者的服务提供者,可能是另一个服务提供者的调用者,两者是相对的。

数据访问层

数据库垂直/水平拆分的问题 垂直拆分:分库;水平拆分:分表。 垂直拆分的影响:1、单机的ACID保证被打破了,原来单机的事务被打破。2、一些Join操作会变得困难3、靠外键去进行约束的场景会受影响

水平拆分的影响:1、打破ACID;2、join 3、外键 4、依赖单库的自曾序列生成唯一的ID会受影响 ‘5、针对单个逻辑意义上的表的查询就要跨库了。

分布式事务概念

分布式事务AP/TM/RM关系

输入图片说明

DTP模型

输入图片说明

大型网站的一致性基础理论 CAP。 C:一致性 ;A 可用性;P(分区容忍性),一般大型网站选用AP组合,但会保证最终一致。

多机的Sequence问题与处理

就是id的问题,要考虑:唯一性和连续性问题。

我们把素有的Id集中放在一个地方进行管理,对每个Id序列独立管理,每台机器使用Id时,从这个Id生成器上取。要注意:1、性能问题 2、生产器的稳定问题,3、存储的问题

Join问题解决方案:1、业务层改变,不使用join 2、数据冗余,保证在一个表中差3、使用搜索引擎。

分库分表后的问题:1、排序 2、函数处理 3、求平均值 4、非排序分页 5、排序分页

不同接口数据层结构

输入图片说明

数据层的整理流程

SQL解析->规程处理->SQL改写->数据源选择->SQL执行->数据集返回合并处理。

数据层结构图

输入图片说明

###** 消息中间件**

消息中间件的意义,带来了异步性,对系统进行解耦。

消息中间件中要着重考虑的是消息的顺序保证、扩展性、可靠性、业务操作与消息发送一致,以及多集群订阅者等方面的问题。

消息发送一致性:是指产生消息的业务动作与消息发送的一致,即,如果业务操作成功了,那么由这个操作产生的消息也一定要发出去,否则就是丢失消息;另一方面,如果这个业务行为没有发生或者失败,那么就不应该把消息发出去。 解决方案 输入图片说明 消息一致性补偿 输入图片说明

消息中间件与使用者的强依赖问题。 1、提供消息中间件系统的可靠性,但是没有办法保证百分百可靠2、对于消息中间件系统中影响业务操作进行的部分,使其可靠性与业务自身的可靠性相同(可将业务DB与消息DB放在同一个数据库中,使用事务保证)3、可以提供弱依赖的支持,能够较好地保证一致性。(如:轮询消息,采用本地磁盘存储消息)

消息模型对消息接收的影响 1、JMS Queue模型,该模型中多个应用接收不同的消息;2、JMS Topic 模型,多个应用接收同一份消息,消息会重复被接收。在实际运用中,我们会结合两者用。如:不同的集群中采用topic模式,集群内部采用Queue方式。

保证消息可靠性的做法 输入图片说明

从图看出要保证三方面:消息发送端的可靠性,消息存储的可靠性,消息接收端的可靠性。

订阅者视角的消息重复产生和应对 消息重复产生的原因:1、是发送端重复发消息(如:消息中间件接收了消息,但是发送端并未受到确认,确认超时等) 2、消息中间件重复投递消息给消息接收者应用(消息接受者应用成功处理消息,但消息中间件未得到确认);

解决方案:1、采用分布式事务(比较复杂)2、要求消息接收者来处理,对消息的处理具有幂等性。

保证顺序的消息队列的设计 有些时候,我们需要消息队列消费的时候是被顺序消费的。

输入图片说明 一个消息接收者在每一个它所接收的消息队列上有一个当前消费消息的位置。对于这个接收者来说,这个位置之前消费的消息就已经完全消费了。在同一队列中,不同消费者维持自己的指针,并且可以同指针回溯。

消息的Push和Pull方式

push方式是服务端推送的方式,而pull是消费端主动去获取的方式。

软负载中心与集中配置管理

软负载中心的两个作用:1、聚合地址性 2、生命周期感知。

软负载中心的结构:1、软负载中心的服务端,主要负载感知提供服务的机器是否在线,聚合提供服务的地址信息,并且负载把数据传递给使用数据的应用2、软负载中心的客户端:作为服务提供者,主要把服务的具体信息主动的传给服务端,并且随着提供服务的变化去更新数据;而作为服务使用者,向服务端告知自己所需要的数据并负责更新数据,还要在本地进行缓存数据。 输入图片说明

解决服务上下线的感知 :1、通过客户端与服务端的连接感知。2、通过对于发布数据中提供的地址端口进行连接的检查

集中配置管理中心 软负载中心管理的是非持久化的数据,而集中管理配置中心是管理持久化的数据

构建大型网站的其他配置

1、加速静态内容访问速度的CDN

2、大型网站的存储支持 :1、分布式文件系统 ;2、NoSQL 3、缓存系统 (redis和memcache)

3、搜索系统 1、爬虫问题 2、倒排索引 3、查询预处理 4、相关度计算

4、数据计算支撑 1、在线计算 2、离线计算

5、发布系统6、应用监控系统 7、依赖管理系统8、多机房问题分析 9、系统容量规划 10、内部私有云

转载于:https://my.oschina.net/ouyangtaohong/blog/862682

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

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

相关文章

从零开始用 Flask 搭建一个网站(二)

2019独角兽企业重金招聘Python工程师标准>>> 从零开始用 Flask 搭建一个网站(一) 介绍了如何搭建 Python 环境,以及 Flask 应用基本项目结构。我们要搭建的网站是管理第三方集成的控制台,类似于 Slack。 本篇主要讲解数…

android中文网站

Google Developers中国网站发布 用户评价: / 55 差好 最后更新于 2016年12月09日 点击数:15209 我们很高兴地宣布,Google Developers 中国网站 (developers.google.cn) 正式发布! Google Developers 中国网站是特别为中国开发者…

python获取网站http://www.weather.com.cn 城市 8-15天天气

参考一个前辈的代码,修改了一个案例开始学习beautifulsoup做爬虫获取天气信息,前辈获取的是7日内天气, 我看旁边还有8-15日就模仿修改了下。其实其他都没有变化,只变换了获取标签的部分。但是我碰到 一个span获取的问题&#xff0…

网站静态化处理—前后端分离—上(6)

前文讲到了CSI技术,这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了,而时下web前端技术的前沿之一就是前后端分离技术了,那么在这里网站静态化技术和前后端分离技术产生了交集,所以今天我将讨论下前…

交友网站数据库曝光了150万用户信息

据外媒报道, 近日一个新西兰交友网站对一个包含150多万用户信息的数据库进行了安全性保护。这家网站的运营商C&Z Tech Limited表示, MacKeeper安全研究中心的安全专家在发现这个问题后向该公司发出提醒。 C&Z 在发给MacKeeper的邮件中表示&#…

基于SSM的校园招聘网站

​源码编号:D-E22 项目类型:也属于Java web项目/Java EE项目(非开源) 项目名称:基于SSM的校园招聘网站 [Recruit] 当前版本:V1.0.1版本 难度等级:✩✩ 复杂程度:✩✩✩ 点击查看…

基于Java web的旅游网站(源码+文档)

源码编号:B-E57点击查看(分类规则) 项目类型:Java web项目/Java EE项目(非开源) 项目名称:基于java web的旅游网站 [travel] 当前版本:V1.0.0版本 用户类型:双角色&…

基于JSP的旅游网站系统

源码编号:B-E74点击查看(分类规则) 项目类型:Java web项目/Java EE项目(非开源) 项目名称:基于JSPServlet的旅游景点服务平台(旅游网站) 源码作者:霹雳、逍…

基于JSP+Servlet的宠物养护网站

源码编号:B-E77 项目名称:基于JSPServlet的宠物养护网站 源码作者:逍遥游制作 论文作者:逍遥游撰写 当前版本:V1.0版本 用户类型:三角色(用户、管理员) 项目架构:B…

有图有真相 好图好流量 十个妙招优化网站图片

【51CTO.com快译】对于任何一个电子商务网站来说,图片优化都是必不可少的环节。图片对于消费者和网友的影响妙不可言,优化图片是一门网店里的艺术。图片的清晰度、吸引力和加载时间都将直接影响到你的用户。下面我们就为大家介绍一些优化图片的小技巧&am…

自学Java网站推荐

自学Java可以学会吗? 很多同学问我自学Java能学会吗,我可以很负责任的告诉你完全可以!因为俺当初就是自学Java找到的工作,目前互联网资源丰富,只要你想学肯定能学会!!! 自学Java最…

大型网站技术基石之 OpenStack

我们知道虚拟化能够充分的利用资源,带来各种各样的好处。 当一个网站不大,只需要四五台机器就可以支撑的时候,可以采用手工的方式虚拟机,但是当网站流量很高,需要成千上万台机器的时候,那就非常不方便了。 …

云服务器 ECS 搭建WordPress网站:安装 WordPress

安装 WordPress请先下载最新版的 WordPress,网址: https://cn.wordpress.org/ 。也可直接到阿里云市场选择WordPress镜像完成一键部署,点击查看。 操作步骤 1.将下载的安装包解压缩。 2.打开 Xshell,然后打开 Xftp,将解…

云服务器 ECS 建站教程:部署 LAMP (CentOS 7.2)

部署 LAMP (CentOS 7.2)简介 LAMP指LinuxApacheMysql/MariaDBPerl/PHP/Python是一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共…

​详解SEO优化中所使用的新浪博客站群

SEO优化的过程中网站的权重是关键词排名不可或缺的因素,为了提升网站的权重SEOer通常会利用第三方平台的高权重为SEO所用,今天给大家讲一个关于新浪博客站群的概念以及具体的操作方法。顾名思义新浪博客站群分解开来通俗点来说就是新浪博客的集群&#x…

什么样的自学Java网站才适合学习者?

前言 有很多Java学习者常常问我一些在学习Java过程中遇到的问题,我发现很多问题总是卡在该知识点的概念层面,比如:一个多线程的程序这样加锁对不对?什么是原子性? 这个Lambda表达式为什么编译不通过?这个问…

web设计中那些因素可能影响网站后期优化

开发十年,就只剩下这套Java开发体系了 >>> web设计中那些因素可能影响网站后期优化。 1.网站代码的简洁实用性。网站源文件html代码、js代码、css代码等应尽可能的压缩处理。能用jquery-min.js的最好不要用jquery.js;css里能合在一起的样式尽…

静态网站内容区

1.em与strong,b与i的区别 1.b、i属于修饰标签;strong、em属于内容类标签; 2.b、strong标签表现为加粗样式;em、i表现为倾斜样式; 3.strong、em表强调;strong比em语气更强烈; 4.strong和em真正做…

通过TMG防火墙后网站的GZIP压缩就失效了?

前段时间和一些做网站开发测试的朋友在聊天时,他们提到在做网站测试时发现只要是在公司内走微软TMG访问一些带有GZIP格式的页面时,发现GZIP就失效了,我正好一直在搞ISA/TMG,就想让我帮想想看是哪里出问题了?当时聊时我…

ajax网站拖拽效果

转自:http://hi.baidu.com/yan5201314/blog/item/b69e543d01550bee3c6d9743.html 2006年11月18日 星期六 上午 00:23近日在Syosyumes Blog上的看到GOOGLE的个性化主页拖搁功能的实现方法可以借鉴,他的方法是用Jscript实现,不包含记忆功能&…