大型网站系统与Java中间件实践~初识分布式系统

news/2024/5/18 13:06:32/文章来源:https://blog.csdn.net/zhengchao1991/article/details/54646493

1、为什么要有分布式系统?

答:单机处理能力存在瓶颈;

       分布式系统的稳定性和可用性强。


2、基础知识:ConcurrentHashMap是完全线程安全的吗?

答:总体上,读不加锁,写加锁,所有造成ConcurrentHashMap并非绝对的线程安全。

ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。ConcurrentHashMap的内部结构:ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构。一个Segment其实就是一个类Hash Table的结构,Segment内部维护了一个链表数组,我们用下面这一幅图来

看下ConcurrentHashMap的内部结构:


从上面的结构我们可以了解到,ConcurrentHashMap定位一个元素的过程需要进行两次Hash操作,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部,因此,这一种结构的带来的副作用是Hash的过程要比普通的HashMap要长,但是带来的好处是写操作的时候可以只对元素所在的Segment进行加锁即可,不会影响到其他的Segment,这样,在最理想的情况下,ConcurrentHashMap可以最高同时支持Segment数量大小的写操作(刚好这些写操作都非常平均地分布在所有的Segment上),所以,通过这一种结构,ConcurrentHashMap的并发能力可以大大的提高。

3、基础知识:网络IO实现方式,分布式系统肯定涉及到数据的远程传输

bio :阻塞io,一个线程只处理一个socket;

nio :非阻塞io,一个线程可以处理多个socket,基于事件驱动思想,采用的是Reactor模式。如下图所示:


Reactor:负责响应事件,分发给绑定了该事件的 handler执行 task

Handler:绑定了某类事件,负责执行该事件对应的 task。

Acceptor : Handler 的一种,绑定了 connect 事件。它在系统启动的时候就已经绑定了 connnect 事件,并注册到 reactor 中。当有客户端发起 connect 请求时, reactor 会收到

 accept 事件,然后分发给 acceptor 。 acceptor 首先会 accept 新的连接,然后新建一个 handler ,将其与该连接上得 read 事件绑定,并注册到 reactor 中。

通过Reactor对所有客户端的Socket套接字的事件做处理,然后派发到不同的线程中。

aio:异步io,采用Proactor模式。java7才引入的。


4、如何把应用从单机扩展到分布式

输入设备的变化:传统的人机交互的输入设备------->网络连接的多个节点,一个节点接受其他节点传来的信息时,这个其他节点可以看作为输入设备。

输出设备的变化:同输入设备的变化一样。

控制器的变化:单机系统中,控制器指的是cpu中的控制器;我们知道分布式系统是由多个节点通过网络连接在一起并通过消息的传递进行协调的系统。控制器的主要作用是协调

                         或控制节点之间的动作和行为。例如:硬件负载均衡的请求调用、lvs(Linux Virtual Server)的请求调用、采用名称服务的直连方式的请求调用、规则服务器控制

                         路由的请求直连调用、Master+Worker的方式。

      关于名称服务需要简单的再说明下:“名称服务”的作用:

           1、收集提供请求处理的服务器的地址信息;

           2、提供这些地址信息给请求发起方。即:原来在透明代理上做的工作被拆分到名称服务和发起请求的机器上了。

          图示:第一张图是采用软件的负载均衡,第二张是名称服务/规则服务。

         名称服务与规则服务很类似,区别在于,名称服务会与处理请求的机器进行交互,而规则服务则不会。


运算器的变化:由多个节点共同组成(多个服务器),关于若有多个服务器,用户应该去访问哪个服务器?

    方法一:通过DNS服务器进行调度和控制

    方法二:通过DNS服务器和负载均衡设备,共同进行调度和控制。DNS返回的永远只是负载均衡的地址,

                  用户的访问通过负载均衡到达后面的网站服务器。

存储器的变化:多机。


5、分布式系统的难点

缺乏全局时钟;

面对故障独立性;

处理单点故障:分布式系统中,某个角色或者功能只有某台单机在支撑,这个节点称为单点,其发生的故障称为单点故障;

事务的挑战。



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

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

相关文章

主题狗themes.dog-精选上百种优秀开源网站主题、博客主题、商城模板

说明 主题狗themes.dog 精选上百种优秀开源网站主题、博客主题、商城模板。 类型包含 hexo 、jekyll 、hugo 、next 、vuepress 、gatsby 、wordpress 等等 主题狗- themes.dog 支持 PWA ,欢迎添加至手机桌面 为什么做此项目 现在很少有逛到纯网站主题分享的网站…

做海外必备的网站

做海外必备的网站!包括共享软件营销、软件注册商比较、下载站、虚拟主机、搜索引擎等共享软件论坛Association of Shareware Professionals 国外最大的共享软件组织,PAD标准的制订者 http://www.asp-shareware.org Trialware Professional Association …

Building a Personal Portfolio with Django 使用Django构建个人网站 Lynda课程中文字幕

Building a Personal Portfolio with Django 中文字幕 使用Django构建个人网站 中文字幕Building a Personal Portfolio with Django Django是一个基于Python设计的开源Web框架,可以帮助您快速实现网站创意 在本课程中,通过构建自己的网站 - 个人投资组…

SEO Foundations SEO基础 Lynda课程中文字幕

SEO Foundations 中文字幕 SEO基础 中文字幕SEO Foundations 现代消费者通过搜索引导世界 从笔记本电脑,智能手机,虚拟助手,平板电脑等,他们在野外和奇妙的互联网上搜索他们需要的产品和服务 通过利用搜索引擎优化(SE…

使用BeautifulSoup爬取“0daydown”网站的信息(1)

最近发现一个很好的网站,0daydown,资源真的是无时无刻的更新着。资源有哪些呢: windows,mac下的各种工具和软件。各种电子书,包含科技,小说,杂志(居然还有类似花花公子那种),可以看多…

使用BeautifulSoup爬取“0daydown”网站的信息(2)——字符编码问题解决

上篇中的程序实现了抓取0daydown最新的10页信息,输出是直接输出到控制台里面。再次改进代码时我准备把它们写入到一个TXT文档中。这是问题就出来了。 最初我的代码如下: #-*- coding: utf-8 -*- #------------------------------------- #version: 0.1 …

Building a Website with Node.js and Express.js 使用Node.js和Express.js构建网站 Lynda课程中文字幕

Building a Website with Node.js and Express.js 中文字幕 使用Node.js和Express.js构建网站 中文字幕Building a Website with Node.js and Express.js 虽然Node.js是一个用于构建Web服务的流行平台,但它并不是为简单的网站开发而设计的 Express.js是一个快速&am…

WordPress: Building a Paid Membership Site WordPress:建立付费会员网站 Lynda课程中文字幕

WordPress: Building a Paid Membership Site 中文字幕 WordPress:建立付费会员网站 中文字幕WordPress: Building a Paid Membership Site 想开始从您的WordPress网站赚取收入? 尝试付费会员 本课程涵盖了使用WordPress销售付费会员的两大优秀解决方案…

Nginx HTTPS 网站优化篇

摘要: 从 2015 年 5 月 14 日 HTTP/2 协议正式版的发布到现在已经快有一年了,越来越多的网站部署了 HTTP2,HTTP2 的广泛应用带来了更好的浏览体验,只要是 Modern 浏览器都支持,所以部署 HTTP2 并不会带来太多困扰。最近…

各种大型网站技术架构

引言近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&#…

使用电容器将您的网站转换为安卓应用程序

根据阿特伍德定律,“任何可以用 JavaScript 编写的应用程序,最终都会用 JavaScript 编写。” 在本文中,我们将学习如何使用 Ionic 的一个名为电容器的库将网站或 Web 应用程序转换为可以部署在 Android Play 商店或安装在移动设备上的 Andro…

(转) 将VB.NET网站转换成C#的全过程

在学习URL重写过程中碰到个是VB写的源码,看起来总是不爽的就GOOLE了下 感觉这个文章写的不错 原文地址 http://www.cnblogs.com/cngunner/archive/2006/01/16/318309.html 前两天看到一个比较不错的网站,可惜是用vb.net写的,俺弄不大明白&…

网站发布

转载于:https://www.cnblogs.com/bin521/p/6839639.html

在windows 2008R2上部署.net framework 3.5网站的故障处理解决方法

1、IIS7.0 检测到在集成的托管管道模式下不适用的ASP.NET设置 的解决方法 故障如下图: 解决办法: 在IIS中选择网站的“基本设置”: 然后选择: 如下图: 2、win2008R2(64)未在本地计算机上注册 Microsoft.Jet.OLEDB.4.…

VS2010+Windows 2008部署网站及asp.net业务系统问题收集

VS2010Windows 2008部署网站及asp.net业务系统问题收集 Windows 2008部署asp.net,问题真多,不如windows 2003用起来爽。 1、关于CuteEditor不能上传文件名中有中文的问题: 解决办法: 编辑CuteSoft_Client\CuteEditor\Configur…

ubuntu-18.04.3与.net Core 2.2之旅(2)- Ubuntu 18.04 部署Asp.net Core 2.2网站后通过supervisor进程守护,实现网站托管

上次学习了 Windows 7 X64VMwareubuntu-18.04.3Visual Studio 2017部署.Net Core 2.2过程详细图解 说明: 1、网上很多文章按顺序操作仍不能正常进行,为方便和我一样的菜鸟学习,本人原创的文章均通过自己亲自操作的截图。 2、本文的操作均是…

关于Ubuntu18.04环境下修改部署的asp.net Core网站的端口的几个测试

asp.net Core的端口是在launchSettings.json文件中配置的。该文件是用于调试的时候使用的,在发布后,并没有该文件 。launchSettings.json中默认的端口是5000,部署到Ubuntu后,也能通过5000端口可以正常访问。 测试1、将launchSetti…

知名互联网公司网站架构图

引言 近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图。除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服。个人这两天一直在搜集各大型网站的架构设计图&…

大型互联网网站架构心得

我们知道,对于一个大型网站来说,可伸缩性是非常重要的,怎么样在纵向和横向有良好的可伸缩性,就需要在做架构设计的时候考虑到一个分的原则,我想在多个方面说一下怎么分: 首先是横向的分: 1. 大的…

如何用PHPstudy建站

要求 环境 : phpapachemysql(建议PHP study一键式建站) 形式 : 在浏览器上输入自己的姓名,以post形式提交到后台,并存储到数据库中 步骤: 1.在PHP study目录下的WWW目录下新建一个网页2.html 2.打开MySQL,…