之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想从事互联网行业的同学一点初步的概念,文中的不对之处也请各位多给点建议,让本文真正起到抛砖引玉的效果。
架构演变第一步:物理分离webserver和数据库 最开始,由于某些想法,于是在互联网上搭建了一个网站,这个时候甚至有可能主机都是租借的,但由于这篇文章我们只关注架构的演变历程,因此就假设这个时候 已经是托管了一台主机,并且有一定的带宽了,这个时候由于网站具备了一定的特色,吸引了部分人访问,逐渐你发现系统的压力越来越高,响应速度越来越慢,而这个时候比较明显的是数据库和应用互相影响,应用出问题了,数据库也很容易出现问题,而数据库出问题的时候,应用也容易出问题,于是进入了第一步演变阶段:将应用和数据库从物理上分离,变成了两台机器,这个时候技术上没有什么新的要求,但你发现确实起到效果了,系统又恢复到以前的响应速度了,并且支撑住了更高的流量,并且不会因为数据库和应用形成互相的影响。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
这一步架构演变对技术上的知识体系基本没有要求。
架构演变第二步:增加页面缓存 好景不长,随着访问的人越来越多,你发现响应速度又开始变慢了,查找原因,发现是访问数据库的操作太多,导致数据连接竞争激烈,所以响应变慢,但数据库连 接又不能开太多,否则数据库机器压力会很高,因此考虑采用缓存机制来减少数据库连接资源的竞争和对数据库读的压力,这个时候首先也许会选择采用squid 等类似的机制来将系统中相对静态的页面(例如一两天才会有更新的页面)进行缓存(当然,也可以采用将页面静态化的方案),这样程序上可以不做修改,就能够 很好的减少对webserver的压力以及减少数据库连接资源的竞争,OK,于是开始采用squid来做相对静态的页面的缓存。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
前端页面缓存技术,例如squid,如想用好的话还得深入掌握下squid的实现方式以及缓存的失效算法等。
架构演变第三步:增加页面片段缓存 增加了squid做缓存后,整体系统的速度确实是提升了,webserver的压力也开始下降了,但随着访问量的增加,发现系统又开始变的有些慢了,在尝 到了squid之类的动态缓存带来的好处后,开始想能不能让现在那些动态页面里相对静态的部分也缓存起来呢,因此考虑采用类似ESI之类的页面片段缓存策略,OK,于是开始采用ESI来做动态页面中相对静态的片段部分的缓存。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
页面片段缓存技术,例如ESI等,想用好的话同样需要掌握ESI的实现方式等;
架构演变第四步:数据缓存 在采用ESI之类的技术再次提高了系统的缓存效果后,系统的压力确实进一步降低了,但同样,随着访问量的增加,系统还是开始变慢,经过查找,可能会发现系 统中存在一些重复获取数据信息的地方,像获取用户信息等,这个时候开始考虑是不是可以将这些数据信息也缓存起来呢,于是将这些数据缓存到本地内存,改变完毕后,完全符合预期,系统的响应速度又恢复了,数据库的压力也再度降低了不少。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
缓存技术,包括像Map数据结构、缓存算法、所选用的框架本身的实现机制等。
架构演变第五步: 增加webserver 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver,这也是为了同时解决可用性的问题,避免单台的webserver down机的话就没法使用了,在做了这些考虑后,决定增加一台webserver,增加一台webserver时,会碰到一些问题,典型的有:
1、如何让访问分配到这两台机器上,这个时候通常会考虑的方案是Apache自带的负载均衡方案,或LVS这类的软件负载均衡方案;
2、如何保持状态信息的同步,例如用户session等,这个时候会考虑的方案有写入数据库、写入存储、cookie或同步session信息等机制等;
3、如何保持数据缓存信息的同步,例如之前缓存的用户数据等,这个时候通常会考虑的机制有缓存同步或分布式缓存;
4、如何让上传文件这些类似的功能继续正常,这个时候通常会考虑的机制是使用共享文件系统或存储等;
在解决了这些问题后,终于是把webserver增加为了两台,系统终于是又恢复到了以往的速度。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
负载均衡技术(包括但不限于硬件负载均衡、软件负载均衡、负载算法、linux转发协议、所选用的技术的实现细节等)、主备技术(包括但不限于ARP欺骗、linux heart-beat等)、状态信息或缓存同步技术(包括但不限于Cookie技术、UDP协议、状态信息广播、所选用的缓存同步技术的实现细节等)、共享文件技术(包括但不限于NFS等)、存储技术(包括但不限于存储设备等)。
架构演变第六步:分库 享受了一段时间的系统访问量高速增长的幸福后,发现系统又开始变慢了,这次又是什么状况呢,经过查找,发现数据库写入、更新的这些操作的部分数据库连接的 资源竞争非常激烈,导致了系统变慢,这下怎么办呢,此时可选的方案有数据库集群和分库策略,集群方面像有些数据库支持的并不是很好,因此分库会成为比较普遍的策略,分库也就意味着要对原有程序进行修改,一通修改实现分库后,不错,目标达到了,系统恢复甚至速度比以前还快了。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
这一步更多的是需要从业务上做合理的划分,以实现分库,具体技术细节上没有其他的要求;
但同时随着数据量的增大和分库的进行,在数据库的设计、调优以及维护上需要做的更好,因此对这些方面的技术还是提出了很高的要求的。
架构演变第七步:分表、DAL和分布式缓存( DAL数据访问层 分表--建岛) 随着系统的不断运行,数据量开始大幅度增长,这个时候发现分库后查询仍然会有些慢,于是按照分库的思想开始做分表的工作,当然,这不可避免的会需要对程序 进行一些修改,也许在这个时候就会发现应用自己要关心分库分表的规则等,还是有些复杂的,于是萌生能否增加一个通用的框架来实现分库分表的数据访问,这个在ebay的架构中对应的就是DAL,这个演变的过程相对而言需要花费较长的时间,当然,也有可能这个通用的框架会等到分表做完后才开始做,同时,在这个阶段可 能会发现之前的缓存同步方案出现问题,因为数据量太大,导致现在不太可能将缓存存在本地,然后同步的方式,需要采用分布式缓存方案了,于是,又是一通考察和折磨,终于是将大量的数据缓存转移到分布式缓存上了。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
分表更多的同样是业务上的划分,技术上涉及到的会有动态hash算法、consistent hash算法等;
DAL涉及到比较多的复杂技术,例如数据库连接的管理(超时、异常)、数据库操作的控制(超时、异常)、分库分表规则的封装等;
架构演变第八步:增加更多的webserver 在做完分库分表这些工作后,数据库上的压力已经降到比较低了,又开始过着每天看着访问量暴增的幸福生活了,突然有一天,发现系统的访问又开始有变慢的趋势 了,这个时候首先查看数据库,压力一切正常,之后查看webserver,发现apache阻塞了很多的请求,而应用服务器对每个请求也是比较快的,看来 是请求数太高导致需要排队等待,响应速度变慢,这还好办,一般来说,这个时候也会有些钱了,于是添加一些webserver服务器,在这个添加 webserver服务器的过程,有可能会出现几种挑战:
1、Apache的软负载或LVS软负载等无法承担巨大的web访问量(请求连接数、网络流量等)的调度了,这个时候如果经费允许的话,会采取的方案是购 买硬件负载,例如F5、Netsclar、Athelon之类的,如经费不允许的话,会采取的方案是将应用从逻辑上做一定的分类,然后分散到不同的软负载集群中;
2、原有的一些状态信息同步、文件共享等方案可能会出现瓶颈,需要进行改进,也许这个时候会根据情况编写符合网站业务需求的分布式文件系统等;
在做完这些工作后,开始进入一个看似完美的无限伸缩的时代,当网站流量增加时,应对的解决方案就是不断的添加webserver。
看看这一步完成后系统的图示:
这一步涉及到了这些知识体系:
到了这一步,随着机器数的不断增长、数据量的不断增长和对系统可用性的要求越来越高,这个时候要求对所采用的技术都要有更为深入的理解,并需要根据网站的需求来做更加定制性质的产品。
PS :网站性能优化的几点最佳实践
1.动静分离
动是指网站的动态内容,如jsp文件,这些东西交给tomcat或jboss来处理
静是指静态的html,js,css,image,这些东东交给apache来处理,因为tomcat等web容器来处理静态内容时效果不是很好
2.镜像
对于大型的网站,考虑到那方和北方的用户访问时可以自动切换到相应的网通/电信机房
3.静态内容缓存
如静态的html页面,把他们缓存起来,可以在服务器端做缓存,也可以在客户端缓存,合理设置客户端缓存的时间(Expire Date)
4.js和css文件做压缩操作
我们编码后的css和js一般都是格式良好的文件,里面的换行空白,注释都很完整,但是这样也占用了很多不必要的空间,利用jscompress技 术在系统上线前对其进行压缩操作,去除多余的空行
5.在页面的
中引入css文件,在页面底部引入js文件
6.尽量减少服务器请求的次数
7.页面的html标签要合理关闭,尽量不要使用
,推荐用
8.负载均衡,采用服务器集群来增加网站的吞吐量
9.将应用和数据库相分离
http://blog.csdn.net/cutesource/article/details/5085697
原文出处: http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html
你可能感兴趣的:(服务端-Web架构)
面试宝典
phpdi
1.引用变量考点引用变量定义:用不同的名字访问同一个变量内容cow机制遍历时的引用处理unset只会取消引用,不会销毁内存空间php中对象默认是引用传递,若需要复制,则需要使用clone2.常量及数据类型define,const;php5.6以用const定义常量不支持表达式;7种false情况:0,0.0,'','0',[],null,false;精度丢失;获取客户端,服务端ip;与app交互$
JavaWeb(苍穹外卖)--学习笔记14
哈哈哈哈哈0627
学习 笔记
前言终于开始学习做项目了,本篇文章是学习B站黑马程序员苍穹外卖的学习笔记。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,就进入到了用户端微信小程序的开发,这篇文章是把我觉得JavaWeb的学习中比较重要的内容写一个总结(其实因为学到下单支付太难了我复习复习前面的)Controller层(这里只讲讲几个需要注意的注解)管理服务端的动态资源:SpringFramewo
智能家居平台服务端安装教程——东方仙盟部署
未来之窗软件服务
过去未来疑难破阵录 github linux 运维 仙盟创梦IDE 东方仙盟 智能家居
1.准备工作登录阿里云服务器:使用SSH工具(如ssh命令)登录到你的阿里云Linux服务器。确保服务器已安装并能正常运行,且网络连接正常。更新系统软件包:执行以下命令更新系统软件包到最新版本。bashsudoaptupdatesudoaptupgrade-y2.安装依赖HomeAssistant是基于Python的应用,需要安装Python及其相关依赖。bashsudoaptinstall-yp
Vue3中Axios的使用-附完整代码
【本人】
Vue 前端框架 vue.js
前言首先介绍一下什么是axiosAxios是一个基于promise网络请求库,作用于node.js和浏览器中。它是isomorphic的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.jshttp模块,而在客户端(浏览端)则使用XMLHttpRequests官方网站:Axios中文文档|Axios中文网目前官方最新版本1.8.4一、Axios优势1.简单易用Axio
HTTPS握手解析
少林码僧
网络协议 https 网络协议 http
TLS握手过程HTTP由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。所以安全上存在以下三个风险:窃听风险,比如通信链路上可以获取通信内容,用户号容易没。篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。冒充风险,比如冒充淘宝网站,用户钱容易没。HTTPS在HTTP与TCP层之间加入了TLS协议,来解决上述的风险。TLS协议
程序代码篇---python获取http界面上按钮或者数据输入
Atticus-Orion
程序代码篇 python http 开发语言
在Python中获取HTTP界面上的按钮点击或数据输入,主要有两种场景:作为客户端:模拟用户在网页上输入数据、点击按钮(比如爬虫自动提交表单)。作为服务端:搭建一个网页服务,接收用户在浏览器中输入的数据和按钮点击(比如自己写一个简单的Web应用)。下面分别用通俗易懂的方式讲解这两种场景的实现方法和代码。一、作为客户端:模拟用户操作网页(自动输入和点击)这种场景常用于自动化测试或数据爬取,需要模拟用
IP 证书全面解析:功能、类型与申请指南
Arwen303
tcp/ip php 网络协议
一、IP证书的核心功能身份验证:验证IP地址的所有权,防止非法用户冒充服务端,适用于无域名或域名不可靠的场景。数据加密:通过SSL/TLS协议对传输数据进行加密,支持RSA、ECC及国密算法(如SM2),保障通信机密性。防域名劫持:当域名解析被篡改时,用户可直接通过IP访问安全服务,避免流量重定向风险。动态网络支持:适配负载均衡、云迁移等场景,支持多IP绑定或IP范围证书。二、IP证书与域名证书的
关于FTP协议的简单介绍
编程之升级打怪
其他协议 网络协议
一、FTP协议作用FTP协议用于远距离计算机之间进行文件的传输。二、协议知识(一)FTP协议建立在TCP协议基础上1、通信时双方会建立两个TCP连接:一个用来控制和发送命令,另一个用来传输数据。2、连接的分工发送命令的连接是长久保持的;传输数据的连接是临时建立,传输完毕后就会关闭。(二)端口号1、服务端接受命令的TCP套接字端口号是21。2、服务端数据连接的TCP套接字是随机分配。三、FTP的优缺
JavaWeb(苍穹外卖)--学习笔记11(Filter(过滤器) 和 Interceptor(拦截器))
哈哈哈哈哈0627
JavaWeb(苍穹外卖) 学习 笔记
前言本篇文章是学习B站黑马程序员苍穹外卖的学习笔记。我的学习路线是Java基础语法-JavaWeb-做项目,管理端的功能学习完之后,又进入用户端的登陆界面的开发,我们可以看到在后续的请求当中,都会在请求头中携带能验证身份的凭证到服务端,而服务端需要统一拦截所有的请求,从而判断是否携带的有合法的JWT令牌,下面主要来说说负责拦截的Filter(过滤器)和Interceptor(拦截器)(感觉整个项目
axios+springboot 文件上传
Msr 王
代码块
思路:客户端通过表单方式上传服务端使用@RequestParam接收注意事项:服务端接收所有表单数据时,只能使用@RequestParam,不能使用@RequestBody前端要把文件代码:@PutMapping(path="/app/questions/{id}")@Transactionalpublicvoidupdate(@PathVariableLongid,@RequestParamSt
W5500模块-服务端模式例程
韩微戈
W5500模块-服务端模式例程去发现同类优质开源项目:https://gitcode.com/此压缩文件包含基于W5500网络芯片的开发代码资料。这些代码例程专注于服务端模式的应用,能够帮助开发者快速上手和实现基于W5500的网络通讯功能。资料中涵盖了从基础配置到高级应用的各种示例,适用于需要进行网络功能开发的工程师和爱好者。去发现同类优质开源项目:https://gitcode.com/
Mysql ERROR 1698
小吉快跑呀
之前MySQL服务端本机上使用密码登陆root账号是没有问题的,但是今天不知道是因为动了哪里,登陆失败并有这个错误代码:Enterpassword:ERROR1698(28000):Accessdeniedforuser'root'@'localhost'解决步骤:在登录命令前加上sudo,这样在输入密码时可以直接回车进去,不需要密码sudomysql-uroot-p查看一下user表,错误的起因
svn原理以及windows下的svn可视化服务端管理工具VisualSVN以及可视化客户端tortoisesvn
简介:Subversion(svn)在日常的工作中我们经常会用到,一般在公司里面都是装在linux操作系统上,不过因为我们的操作系统都是windows的,有时候想下载个svn玩玩。这里我提供的就是windows版本的svn。这里只给出个下载吧,关于svn的命令有机会再专门写文章介绍吧。说明:当安装成功之后,就可以为所欲为了。一.使用svn命令创建一个仓库:svnadmin create F:\Pr
高性能反向代理与负载均衡 HAProxy 与 Nginx
程序员乐逍遥
系统架构专题 负载均衡 nginx 运维
在现代高并发Web架构中,HAProxy和Nginx是两个非常重要的工具。它们在反向代理、负载均衡、SSL终止、缓存、限流等方面发挥着关键作用。一、HAProxy与Nginx简介1.HAProxy简介HAProxy(HighAvailabilityProxy)是一个使用C语言编写的高性能TCP/HTTP负载均衡器和代理服务器,广泛用于企业级Web架构中。它专注于提供高可用性、负载均衡和代理服务,尤
云录事件:m3u8和ts下载及解析
Jasper张
AWS WebRTC aws webrtc 云计算
业务中云录事件是通过若干ts文件和一个m3u8文件实现。固件端开始录像时生成m3u8文件,随着录制的进行生成若干ts文件,并上传至s3,事件录制结束后再上传一次m3u8文件覆盖之前的m3u8文件。这种云录事件业务场景属于典型的边录制、边上报、边生成云端播放资源的物联网/视频云业务流。核心流程是:摄像机本地录制→上传封面图/m3u8/ts→MQTT上报事件→服务端汇总处理。设备本地录制TS/M3U8
WebSocket:构建实时交互的 Web 应用
IsPrisoner
websocket 交互 前端 golang 网络
在现代Web开发中,实现实时交互功能是提升用户体验的重要一环。无论是实时聊天、在线游戏、实时协作编辑,还是实时数据监控等场景,都需要一种能够支持客户端与服务器之间双向通信的技术。而WebSocket正是这样一种强大的技术,它突破了传统HTTP协议单向通信的限制,为Web应用的实时交互提供了可能。在众多编程语言中,Go语言以其简洁高效、并发友好等特性,在构建高性能的WebSocket服务端方面具有独
C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(四)
久念祈
模拟消息队列 rabbitmq 分布式
目录队列消息管理proto文件消息的持久化管理消息的管理单个队列消息的管理消息的总体对外管理测试队列消息管理因为消息数据需要在网络中进行传输,因此消息的类型定义使用protobuf进行,因为protobuf中自带了序列化和反序列化功能,因此操作起来会简便一些。需要特别说明的是,消息的存储并没有使用数据库,因为消息长度通常不定,且有些消息可能会非常庞大,因此并不适合存储在数据库中,因此我们的处理方式
PHP语言基础
一.PHP介绍1.什么是PHPPHP是超文本预处理器。是运行在服务端的开源语言,它可以让Web开发人员快速的书写生成动态的页面。--->PHP是服务端语言(后端)语言HTML+JS为前端语言:主要用来对页面的布局,动态美化PHP,JAVA,Python为后端语言:用来实现业务逻辑功能,一般不做美化2.PHP作用(1)PHP可以生成动态页面(2)PHP可以用来接收于发送Cookies值(3)PHP可
测试入门:客户端、服务端与HTTP实战解析
成成成成成成果
http 网络协议 网络
从测试视角理解客户端、服务端及HTTP相关概念大家好,我又来分享啦!,客户端和服务端以及http相关的响应是面试高频考点,快来跟我一起了解一下吧!一、客户端与服务端:就像“顾客”和“餐馆后厨”软件里的客户端和服务端,关系就跟餐馆里顾客和后厨一样——一个提要求,一个来处理。你想想自己去饭馆吃饭的样子,就特好理解。客户端:能直接摸到、能操作的“提要求的”客户端就是咱们能直接碰到、能操作的那些东西,跟餐
SCPSL服务器选配&&无公网ipv4搭建上列表服务器
cjyhdhd
服务器
很多腐竹苦于没有公网ipv4,找宽带供应商要却无功而返,并且不愿意高价购买云服务器,可以根据一下方法:1.注册一个适宜的frp服务的账号,这里解释一下frp。FRP(FastReverseProxy,快速反向代理)是一款专注于内网穿透的开源工具,旨在解决内网设备因缺乏公网IP或受防火墙/NAT限制而无法被外部直接访问的问题。2.在你运行秘密实验室服务端的电脑上启用frp,再打开steam点击浏览本
【LINUX】MySQL 数据迁移指南:使用 LOAD DATA INFILE 高效导入 CSV 数据
百万数据的迁移耗时太久,所以采用服务器端直接加载:绕过客户端-服务端通信,直接由服务器读取。1.开始我就整理好了数据到txt格式,都是insert语句,但是需要csv格式,所以执行了。sed-E's/^INSERTINTO`t_student`VALUES\((.*)\);?/\1/'inserts.txt|sed"s/'//g">your_file.csv检查前几行结果head-n5your_f
Waline评论区设置邮件提醒功能
原文地址:Waline设置邮件提醒功能|Kulafan'sBlog一、进入Vercel项目设置登录Vercel官网进入你的Waline服务端项目点击顶部导航栏的Settings(设置)二、配置环境变量通过网页界面添加在左侧菜单选择EnvironmentVariables(环境变量)你会看到两个选项卡:Production(生产环境)Preview(预览环境,可选)点击AddNew(添加新变量)按钮
鸿蒙ArkTS多环境API管理与安全签名方案实践
苏木与晚风
鸿蒙开发 安全 HarmonyOS ArkTs 签名
在移动应用开发中,多环境API管理和接口安全是两个核心技术挑战。本文基于真实的鸿蒙项目,深入解析如何构建可扩展的多环境API架构和企业级安全签名体系。一、技术背景与挑战业务场景某项目涉及房源、客源、人员等多个业务域,每个域都有独立的微服务API,且需要在开发、测试、预发布、生产四套环境中无缝切换。核心挑战多域名多环境管理:不同业务模块对应不同服务端口,环境切换复杂API安全防护:防止接口被恶意调用
【内网穿透】使用FRP实现内网与公网Linux/Ubuntu服务器穿透&项目部署&多项目穿透方案
宇宙核
服务器 服务器 网络 运维
一、核心原理FRP通过公网服务器(frps)反向代理内网服务器(frpc)的服务,将内网端口映射到公网端口,实现穿透。二、准备工作公网服务器(假设IP:1.1.1.1)开放端口:7000(FRP服务端通信端口)、8080(映射后访问Vue的端口)。内网服务器运行Vue3项目(例如在localhost:3000)。域名(可选,若需域名访问需提前解析到公网IP)。三、具体步骤1.公网服务器部署FRP服
C++ - 仿 RabbitMQ 实现消息队列--服务端核心模块实现(三)
目录队列数据管理代码实现测试代码绑定信息(交换机-队列)管理代码实现测试代码队列数据管理当前队列数据的管理,本质上是队列描述信息的管理,描述当前服务器上有哪些队列。定义队列描述数据类队列名称是否持久化标志是否独占标志是否自动删除标志其他参数定义队列数据持久化类(数据持久化的sqlite3数据库中)创建/删除队列数据表新增队列数据移除队列数据查询所有队列数据定义队列数据管理类创建队列,并添加管理(存
Django-DRF快速入门
不知名-测试开发
django python
DRF快速入门一、DRF框架介绍1、web应用开发模式1.1、前后端不分离1.2、前后端分离2、RESTful介绍RESTful是目前最流行的API设计风格,REST指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful。1、每一个URI代表1种资源;2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源P
ROS2服务实现(python & C++)
small_jimmy
ROS 机器人 c++ 机器人 python c++
1.什么是ROS2服务?1.1服务的基本概念在ROS2中,服务(Service)是一种重要的通信机制,它实现了节点之间的同步请求-响应模式。想象一下你在餐厅点餐的场景:你(客户端)向服务员(服务端)提出点餐请求,服务员处理你的请求并给你回复。这就是服务通信的基本模式。服务通信涉及两个角色:服务端(Server):提供具体服务功能的节点,等待接收请求,处理后返回响应客户端(Client):需要使用服
文件共享服务FTP介绍
文件共享服务FTP介绍FTP(FileTransfetProtocol):文件传输协议基于C/S架构,默认使用20、21号端口端口20(数据端口)用于数据传输端口21(命令端口)用于接收客户端发出的相关FTP命令FTP工作模式主动模式:FTP客户端从本机的非特殊端口(>1023)连接FTP服务器的命令端口21,服务端通过本地的20号端口主动向客户端的随机端口发起连接请求,开始传输数据被动模式:FT
mysql
查询语句执行过程:连接器:在客户端与mysql服务端建立TCP连接之后,连接器会验证用户身份,之后的所有请求全都是按照这个时候验证的身份权限进行的,所以更新用户身份证之后重新连接才会更新权限mysql在执行过程中临时使用的内存是管理在连接对象里的,所以这个连接如果一直没断的话,占用内存就会持续上涨查询缓存:缓存是以k-v的形式缓存的,所以如果执行语句有任何不同的话都是查不到缓存的且如果表发生变化的
【Linux】基于Udp的简易服务端和客户端
正追军梦
计算机网络 Linux c++ linux udp 单片机
目录UDP的概念简单的UDP回声服务器服务端类成员变量构造函数成员函数服务端的启动函数原型函数流程客户端包含的头文件函数原型main函数流程可以传处理方法的简单udp服务器服务端类定义成员变量构造函数成员函数服务端的启动程序结构和功能客户端程序结构和功能程序特点简单的udp聊天室服务器服务端类定义和成员变量构造函数和析构函数成员函数线程安全和并发控制总结服务端的启动包含的头文件全局变量和函数mai
ASM系列五 利用TreeApi 解析生成Class
lijingyao8206
ASM 字节码动态生成 ClassNode TreeAPI
前面CoreApi的介绍部分基本涵盖了ASMCore包下面的主要API及功能,其中还有一部分关于MetaData的解析和生成就不再赘述。这篇开始介绍ASM另一部分主要的Api。TreeApi。这一部分源码是关联的asm-tree-5.0.4的版本。
在介绍前,先要知道一点, Tree工程的接口基本可以完
链表树——复合数据结构应用实例
bardo
数据结构 树型结构 表结构设计 链表 菜单排序
我们清楚:数据库设计中,表结构设计的好坏,直接影响程序的复杂度。所以,本文就无限级分类(目录)树与链表的复合在表设计中的应用进行探讨。当然,什么是树,什么是链表,这里不作介绍。有兴趣可以去看相关的教材。
需求简介:
经常遇到这样的需求,我们希望能将保存在数据库中的树结构能够按确定的顺序读出来。比如,多级菜单、组织结构、商品分类。更具体的,我们希望某个二级菜单在这一级别中就是第一个。虽然它是最后
为啥要用位运算代替取模呢
chenchao051
位运算 哈希 汇编
在hash中查找key的时候,经常会发现用&取代%,先看两段代码吧,
JDK6中的HashMap中的indexFor方法:
/**
* Returns index for hash code h.
*/
static int indexFor(int h, int length) {
最近的情况
麦田的设计者
生活 感悟 计划 软考 想
今天是2015年4月27号
整理一下最近的思绪以及要完成的任务
1、最近在驾校科目二练车,每周四天,练三周。其实做什么都要用心,追求合理的途径解决。为
PHP去掉字符串中最后一个字符的方法
IT独行者
PHP 字符串
今天在PHP项目开发中遇到一个需求,去掉字符串中的最后一个字符 原字符串1,2,3,4,5,6, 去掉最后一个字符",",最终结果为1,2,3,4,5,6 代码如下:
$str = "1,2,3,4,5,6,";
$newstr = substr($str,0,strlen($str)-1);
echo $newstr;
hadoop在linux上单机安装过程
_wy_
linux hadoop
1、安装JDK
jdk版本最好是1.6以上,可以使用执行命令java -version查看当前JAVA版本号,如果报命令不存在或版本比较低,则需要安装一个高版本的JDK,并在/etc/profile的文件末尾,根据本机JDK实际的安装位置加上以下几行:
export JAVA_HOME=/usr/java/jdk1.7.0_25  
JAVA进阶----分布式事务的一种简单处理方法
无量
多系统交互 分布式 事务
每个方法都是原子操作:
提供第三方服务的系统,要同时提供执行方法和对应的回滚方法
A系统调用B,C,D系统完成分布式事务
=========执行开始========
A.aa();
try {
B.bb();
} catch(Exception e) {
A.rollbackAa();
}
try {
C.cc();
} catch(Excep
安墨移动广 告:移动DSP厚积薄发 引领未来广 告业发展命脉
矮蛋蛋
hadoop 互联网
“谁掌握了强大的DSP技术,谁将引领未来的广 告行业发展命脉。”2014年,移动广 告行业的热点非移动DSP莫属。各个圈子都在纷纷谈论,认为移动DSP是行业突破点,一时间许多移动广 告联盟风起云涌,竞相推出专属移动DSP产品。
到底什么是移动DSP呢?
DSP(Demand-SidePlatform),就是需求方平台,为解决广 告主投放的各种需求,真正实现人群定位的精准广
myelipse设置
alafqq
IP
在一个项目的完整的生命周期中,其维护费用,往往是其开发费用的数倍。因此项目的可维护性、可复用性是衡量一个项目好坏的关键。而注释则是可维护性中必不可少的一环。
注释模板导入步骤
安装方法:
打开eclipse/myeclipse
选择 window-->Preferences-->JAVA-->Code-->Code
java数组
百合不是茶
java数组
java数组的 声明 创建 初始化; java支持C语言
数组中的每个数都有唯一的一个下标
一维数组的定义 声明: int[] a = new int[3];声明数组中有三个数int[3]
int[] a 中有三个数,下标从0开始,可以同过for来遍历数组中的数
javascript读取表单数据
bijian1013
JavaScript
利用javascript读取表单数据,可以利用以下三种方法获取:
1、通过表单ID属性:var a = document.getElementByIdx_x_x("id");
2、通过表单名称属性:var b = document.getElementsByName("name");
3、直接通过表单名字获取:var c = form.content.
探索JUnit4扩展:使用Theory
bijian1013
java JUnit Theory
理论机制(Theory)
一.为什么要引用理论机制(Theory)
当今软件开发中,测试驱动开发(TDD — Test-driven development)越发流行。为什么 TDD 会如此流行呢?因为它确实拥有很多优点,它允许开发人员通过简单的例子来指定和表明他们代码的行为意图。
TDD 的优点:
&nb
[Spring Data Mongo一]Spring Mongo Template操作MongoDB
bit1129
template
什么是Spring Data Mongo
Spring Data MongoDB项目对访问MongoDB的Java客户端API进行了封装,这种封装类似于Spring封装Hibernate和JDBC而提供的HibernateTemplate和JDBCTemplate,主要能力包括
1. 封装客户端跟MongoDB的链接管理
2. 文档-对象映射,通过注解:@Document(collectio
【Kafka八】Zookeeper上关于Kafka的配置信息
bit1129
zookeeper
问题:
1. Kafka的哪些信息记录在Zookeeper中 2. Consumer Group消费的每个Partition的Offset信息存放在什么位置
3. Topic的每个Partition存放在哪个Broker上的信息存放在哪里
4. Producer跟Zookeeper究竟有没有关系?没有关系!!!
//consumers、config、brokers、cont
java OOM内存异常的四种类型及异常与解决方案
ronin47
java OOM 内存异常
OOM异常的四种类型:
一: StackOverflowError :通常因为递归函数引起(死递归,递归太深)。-Xss 128k 一般够用。
二: out Of memory: PermGen Space:通常是动态类大多,比如web 服务器自动更新部署时引起。-Xmx
java-实现链表反转-递归和非递归实现
bylijinnan
java
20120422更新:
对链表中部分节点进行反转操作,这些节点相隔k个:
0->1->2->3->4->5->6->7->8->9
k=2
8->1->6->3->4->5->2->7->0->9
注意1 3 5 7 9 位置是不变的。
解法:
将链表拆成两部分:
a.0-&
Netty源码学习-DelimiterBasedFrameDecoder
bylijinnan
java netty
看DelimiterBasedFrameDecoder的API,有举例:
接收到的ChannelBuffer如下:
+--------------+
| ABC\nDEF\r\n |
+--------------+
经过DelimiterBasedFrameDecoder(Delimiters.lineDelimiter())之后,得到:
+-----+----
linux的一些命令 -查看cc攻击-网口ip统计等
hotsunshine
linux
Linux判断CC攻击命令详解
2011年12月23日 ⁄ 安全 ⁄ 暂无评论
查看所有80端口的连接数
netstat -nat|grep -i '80'|wc -l
对连接的IP按连接数量进行排序
netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n
查看TCP连接状态
n
Spring获取SessionFactory
ctrain
sessionFactory
String sql = "select sysdate from dual";
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
String[] names = wac.getBeanDefinitionNames();
for(int i=0; i&
Hive几种导出数据方式
daizj
hive 数据导出
Hive几种导出数据方式
1.拷贝文件
如果数据文件恰好是用户需要的格式,那么只需要拷贝文件或文件夹就可以。
hadoop fs –cp source_path target_path
2.导出到本地文件系统
--不能使用insert into local directory来导出数据,会报错
--只能使用
编程之美
dcj3sjt126com
编程 PHP 重构
我个人的 PHP 编程经验中,递归调用常常与静态变量使用。静态变量的含义可以参考 PHP 手册。希望下面的代码,会更有利于对递归以及静态变量的理解
header("Content-type: text/plain");
function static_function () {
static $i = 0;
if ($i++ < 1
Android保存用户名和密码
dcj3sjt126com
android
转自:http://www.2cto.com/kf/201401/272336.html
我们不管在开发一个项目或者使用别人的项目,都有用户登录功能,为了让用户的体验效果更好,我们通常会做一个功能,叫做保存用户,这样做的目地就是为了让用户下一次再使用该程序不会重新输入用户名和密码,这里我使用3种方式来存储用户名和密码
1、通过普通 的txt文本存储
2、通过properties属性文件进行存
Oracle 复习笔记之同义词
eksliang
Oracle 同义词 Oracle synonym
转载请出自出处:http://eksliang.iteye.com/blog/2098861
1.什么是同义词
同义词是现有模式对象的一个别名。
概念性的东西,什么是模式呢?创建一个用户,就相应的创建了 一个模式。模式是指数据库对象,是对用户所创建的数据对象的总称。模式对象包括表、视图、索引、同义词、序列、过
Ajax案例
gongmeitao
Ajax jsp
数据库采用Sql Server2005
项目名称为:Ajax_Demo
1.com.demo.conn包
package com.demo.conn;
import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;
//获取数据库连接的类public class DBConnec
ASP.NET中Request.RawUrl、Request.Url的区别
hvt
.net Web C# asp.net hovertree
如果访问的地址是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree%3C&n=myslider#zonemenu那么Request.Url.ToString() 的值是:http://h.keleyi.com/guestbook/addmessage.aspx?key=hovertree<&
SVG 教程 (七)SVG 实例,SVG 参考手册
天梯梦
svg
SVG 实例 在线实例
下面的例子是把SVG代码直接嵌入到HTML代码中。
谷歌Chrome,火狐,Internet Explorer9,和Safari都支持。
注意:下面的例子将不会在Opera运行,即使Opera支持SVG - 它也不支持SVG在HTML代码中直接使用。 SVG 实例
SVG基本形状
一个圆
矩形
不透明矩形
一个矩形不透明2
一个带圆角矩
事务管理
luyulong
java spring 编程 事务
事物管理
spring事物的好处
为不同的事物API提供了一致的编程模型
支持声明式事务管理
提供比大多数事务API更简单更易于使用的编程式事务管理API
整合spring的各种数据访问抽象
TransactionDefinition
定义了事务策略
int getIsolationLevel()得到当前事务的隔离级别
READ_COMMITTED
基础数据结构和算法十一:Red-black binary search tree
sunwinner
Algorithm Red-black
The insertion algorithm for 2-3 trees just described is not difficult to understand; now, we will see that it is also not difficult to implement. We will consider a simple representation known
centos同步时间
stunizhengjia
linux 集群同步时间
做了集群,时间的同步就显得非常必要了。 以下是查到的如何做时间同步。 在CentOS 5不再区分客户端和服务器,只要配置了NTP,它就会提供NTP服务。 1)确认已经ntp程序包: # yum install ntp 2)配置时间源(默认就行,不需要修改) # vi /etc/ntp.conf server pool.ntp.o
ITeye 9月技术图书有奖试读获奖名单公布
ITeye管理员
ITeye
ITeye携手博文视点举办的9月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。 9月试读活动回顾:http://webmaster.iteye.com/blog/2118112本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀):
《NFC:Arduino、Andro