之前也有一些介绍大型网站架构演变的文章,例如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架构)
Python自动化测试web常见框架汇总
自动化测试薰儿
软件测试 技术分享 python 前端 开发语言
1、前言目前,有非常多的Python框架,用来帮助你更轻松的创建web应用。这些框架把相应的模块组织起来,使得构建应用的时候可以更快捷,也不用去关注一些细节(例如socket和协议),所以需要的都在框架里了。接下来我们会介绍不同的选项。经过初期的不起眼,Python已经成为互联网最流行的服务端编程语言之一。根据W3Techs的统计,它被用于很多的大流量的站点很多的大流量的站点很多的大流量的站点,超
分布式应用下登录检验解决方案
敲键盘的小夜猫
分布式 java
优缺点JWT是一个开放标准,它定义了一种用于简洁,自包含的用于通信双方之间以JSON对象的形式安全传递信息的方法。可以使用HMAC算法或者是RSA的公钥密钥对进行签名。说白了就是通过一定规范来生成token,然后可以通过解密算法逆向解密token,这样就可以获取用户信息。生产的token可以包含基本信息,比如id、用户昵称、头像等信息,避免再次查库,可以存储在客户端,不占用服务端的内存资源,在前后
GB28181 —— 4、C++编写GB28181设备端,完成将.h264文件读取转发至GB28181服务并可播放(附源码)
信必诺
GB28181 GB28181 eXosip2 Qt h264
效果 源码说明 主要功能模拟设备端,完成注册、注销、心跳等,完成读取.h264文件实时转ps格式后封包rtp进行推送给服务端播放。 源码/****@remark:ps头的封装,里面的具体数据的填写已经占位,可以参考标准*@param:pData[in]填充ps头数据的地址*s64Src[in]时间戳*@return:0success,othersfailed*/intgb28181_mak
春招面试高频题目总结
小杰312
面试笔试 面试 c++ 职场和发展 学习
面试问题redis可以用于进程间通信吗?Why?How?--->延展一下有哪些进程间通信技术,优劣如何?有大量的插入sql语句,一条条的插入性能很差,如何通过事务进行优化?保证线程安全的策略有哪些?你知道哪些设计模式?有什么理解?单例、工厂方法、责任链、模板方法、策略模式都是基类抽象固定方法。子类提供具体实现。如何实现服务端与客户端的即时通讯?消息队列如何保证这个消息一定执行?不会丢失?持久化消息
centos7挂载nas存储_CentOS7搭建NAS文件共享存储
weixin_39612023
centos7挂载nas存储
概述:NFS是一种基于TCP/IP传输的网络文件系统协议,最初由SUN公司开发。通过NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。NFS得到了如NAS等网络存储的设备极好支持。也是LVS共享存储的首选。环境:CentOS7.8x64一、安装服务端安装nfs-utils、rcpbind软件包;yum-yinstallnfs-utilsrpcbind二、通过nfs协议配置nas1
客户端渲染与服务端渲染(2)
程序员榕叔
javascript react.js 前端
客户端渲染即普通的React项目渲染方式。客户端渲染流程:浏览器发送请求服务器返回HTML浏览器发送bundle.js请求服务器返回bundle.js浏览器执行bundle.js中的React代码CSR带来的问题:首屏加载时间过长SEO不友好因为时间在往返的几次网络请求中就耽搁了,而且因为CSR返回到页面的HTML中没有内容,就只有一个root空元素,页面内容是靠js渲染出来的,爬虫在读取网页时就
Ts中WebSocket连接管理与维护教程
大阳光男孩
websocket 网络协议 网络
一、WebSocket基础WebSocket是一种在单个TCP连接上进行全双工通信的协议,允许服务端主动向客户端推送数据。在JavaScript中,可以通过WebSocket对象创建并维护WebSocket连接。letwebSocket:WebSocket;webSocket=newWebSocket(url);二、初始化WebSocket连接(InitWS函数)检查浏览器是否支持WebSocke
基于Linux和C++的socket编程示例(TCP)
码到程攻
linux c++ tcp/ip
原文地址:https://www.geeksforgeeks.org/socket-programming-cc/服务端://ServersideCprogramtodemonstrateSocket//programming#include#include#include#include#include#include#definePORT8080intmain(intargc,charcons
客户端向服务端传参5个方式
xh的世界
chrome 前端 http 后端 安全
/***get:parmas方式例子:/:id*get:query方式例子:/home?name=xxx&age=xxx*get:json方式例子:{"name":"xxx","age":"xxx"}*post:x-www-form-urlencoded方式例子:name=xxx&age=xxx*post:from-data方式*/告知编码方式后,服务器再进行解码HTTP数据编码方式HTTP数据编
Nginx和Ribbon实现负载均衡的区别
GreyDawn
Java java nginx ribbon 负载均衡
网上有很多写的很好的文章,这里参考他人的文章给出自己的理解。首先给出结论,有两种说法,是基于不同角度来说的:1、Nginx是服务端的负载均衡,Ribbon是客户端的负载均衡2、Nginx是集中式的负载均衡,Ribbon是消费者内部线程实现的负载均衡对于nginx服务器,所有请求到达nginx服务器后,由nginx服务器进行请求路由的分发,实现负载均衡。对于Ribbon,是是由客户端主动拉取注册中心
【分布式websocket】聊天系统消息加密如何做
呆呆呆呆梦
分布式 websocket 网络协议
前言先介绍一下对称加密算法,在介绍一下加密流程,然后是介绍一下查询加密消息的策略。然后结合现有技术架构然后去选型。决定采用客户端解密。简而言之就是采用对称服务端加密。然后将加密内容存储到消息表的content字段。然后客户拉取content字段然后解密。拉取到消息解密后进行展示。客户存储的时候进行加密。目前已经写的文章有。并且有对应视频版本。git项目地址【IM即时通信系统(企聊聊)】点击可跳转s
总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析
ideal-cs
总结 spring boot 后端 java 集合 数组参数传递 前后端集合数组参数交互 后端接收数组集合参数
总结:前后端集合、数组类型数据交互底层原理,SpringBoot框架解析一·前后端信息交互本质:1.两台电脑可以通过收发电磁波、控制网线电路开关等基础物理设施,就可以进行物理层面的电信号交互,电信号又可以通过各种传感设备转为对应的显示数据2.前后端通信一般默认使用的都是http协议,该协议本质就是一个文本协议。二·前后端一次请求应答的基本流程如下:概述1.客户端发送请求2.服务端接收请求3.服务端
8个示例展示Async/Await
ozil_oo
首先安装依赖"dependencies":{"bluebird":"^3.5.0","node-fetch":"^1.7.2"}bluebird是把回调方式改写成Promise方式使用方法为constPromise=require('bluebird')constreadFile=Promise.promisify(require("fs").readFile)node-fetch是服务端使用的基
cookie 和 ses sion 的区别
花木难
首先我们来确认一下:session是存储在服务端也就是服务器,而cookie则是存在在本地也就是用户机上。Cookie与Session都可以进行会话跟踪,但是实现的原理不太一样。一般情况下二者均可以满足需求,但有时候不可以使用Cookie,有时候不可以使用Session。下面通过比较说明二者的特点以及适用的场合。5.3.1从存取方式上比较Cookie中只能保存ASCII字符串,如果需要存取Unic
什么是B+树,和B树有什么不同?
激流丶
日常 b树 数据结构 B+树 java
博主介绍:博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO专家博主⛪️个人社区:个人社区个人主页:个人主页专栏地址:✅Java中级八股文专题:剑指大厂,手撕Java八股文文章目录1.什么是B+树2.什么是B树3.B+和B树有什么区别4.B+树有什么应用5.用java实现一个B+树1.什么是B+树B+树是一种常用
Qt+libhv实现各类网络通信方式(TCP-UDP-HTTP-WebSocket)
码农飞飞
QT+QML qt tcp/ip udp libhv http websocket
文章目录TCP通信服务端客户端UDP通信服务端客户端HTTP通信服务端客户端WebSocket通信服务端客户端参考项目下载为了实现程序的跨进程和跨主机通信,我们通常会采用网络通信进行数据传输。常用的通信方式包括TCP/UDP、HTTP、WebSocket等,这些网络通信方式各有优劣有的是短连接有的是长连接,应用场景也有差异。在实际开发中我们需要掌握各种通信方式的实现方式来应对不同的场景,这里我们介
go-zero官网
小诸葛的博客
golang 开发语言 后端
go-zero是一个集成了各种工程实践的web和rpc框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero官网:go-zero缩短从需求到上线的距离
websocket在java中的使用教程
cah黎明就在眼前
java websocket java
本文从websocket服务端和客户端两个方面简单介绍下websocket在java中的使用。一、websocket服务端(WebSocketServer)websocket服务端是以本机作为消息的接受端,用于接受客户端websocket发送过来的消息,并可以通过客户端的websocket对象来反馈消息给websocket客户端,以下为websocket服务端创建步骤。创建myWebSocketS
网络-httpclient调用https服务端绕过证书的方法
开着拖拉机寻找春天
网络 https python
httpclient调用https服务端绕过证书的方法在日常开发或者测试中,通常会遇到需要用httpclient客户端调用对方http是服务器的场景,由于没有证书,所以直接是无法调用的。采用下面的方法可以绕过证书验证:TrustManager[]trustAllCerts=newTrustManager[]{newX509TrustManager(){publicjava.security.cer
day49(vueJS)vue3的生命周期钩子 服务端渲染概念 vue3的组建通信 vue3的ref属性应用 vue3(vuex和pinia的使用)
李中豪前端大佬
vue.js 前端 javascript 前端框架
vue3的生命周期钩子服务端渲染概念vue3的组建通信vue3的ref属性应用vue3(vuex和pinia的使用)vue3的生命周期钩子常规要点、总结代码演示补充要点、总结服务端渲染概念要点总结vue3的组建通信要点总结父对子传值子对父传值跨层级组件传值vue3的ref属性应用获取DOM节点要点总结代码演示获取组件实例要点总结代码演示vue3(vuex和pinia的使用)vue3中的vuex要点
Centos系统(Linux)配置ntp服务端和客户端及常见问题汇总
头上插花萌萌哒
centos linux 运维 ntpdate ntpd 时间同步
部署ntp服务端:使用ntpdate客户端:常见问题:在启动ntpd服务端后,无法使用ntpdate手动同步时间,可通过以下方式进行同步时间:解决办法1:使用ntpd的自动同步时间服务,此方法适用于已经部署时钟同步服务器(北斗设备等)或者有上一级时钟同步节点,在ntpd服务端配置文件中配置上级时钟同步节点,即可自动同步时间,但需要注意!!!一旦上级时钟同步节点宕机,ntpd服务端下游的其他节点将无
【Linux】frp内网穿透详细教程(简单易懂)
科研达人
Linux linux 运维 服务器
frp内网穿透详细教程(简单易懂)文章目录frp内网穿透详细教程(简单易懂)frp是什么?工作原理准备工作frp工具的使用第一步:下载安装包第二步:公网部署frps第三步:内网部署frpc第四步:启动frps和frpc第五步:通过ssh访问内网服务器使用systemd安装systemd(一般都有,可忽略)创建服务端frps.service文件创建客户端frpc.service文件使用systemd
oracle 数据库连接错误:ORA-12154,ORA-12523
_*大米*_
oracle 数据库 连接
起由:在本机启动两个数据库,orcl和HIS,在服务端连接没有问题。采用客户端模式连接时,在PL/SQL连接数据库时,经常会报以下两个错误。ORA-12154:TNS:couldnotresolvetheconnectidentifierspecifiedORA-12523:TNS:listenercouldnotfindinstanceappropriatefortheclientconnect
Zabbix HA高可用集群搭建
KK小草莓
zabbix
ZabbixHA高可用集群搭建ZabbixHA高可用集群搭建一、Zabbix高可用集群(ZabbixHA)二、部署Zabbix高可用集群1、两个服务端配置1.1主节点ZabbixServer配置1.2备节点ZabbixServer配置1.3主备节点添加监控主机1.4查看高可用集群状态2、两个客户端配置2.1修改agent01和agent02的配置文件2.2查看web页面3、故障模拟和效果测试3.1
SSH教程
Qpeterqiufengyi
windows
ssh是远程连接的利器,可以说凡是涉及到linux服务器,ssh就是一个绕不开的话题.本文作为一个教程,尽可能详细的帮助读者设置ssh,并给出一些常用的ssh配置方法(主要用于linux系统的远程登录和文件传输).1.简介ssh分为两个部分,sshd服务端和ssh客户端.sshd通常在服务器上已经建好并处于可用状态,因此本文只讨论ssh客户端,即用户通过ssh客户端远程连接到服务器上进行操作.ss
求生之路寻找延迟服务器,用centos搭建一个简单的求生之路2服务器(用于好友联机降低延迟,不包含插件)...
weixin_39550587
求生之路寻找延迟服务器
由于和好友联机玩求生之路2时经常出现mod兼容性问题和高ping值问题,游戏体验非常差,而且官方服务器并不能支持第三方地图,所以我们决定自己搭建一个服务器。不过不知道什么原因,网上关于搭建l4d2服务端的细节方面的文章很多不完全或者被很统一的删除了,所以摸索起来特别头疼,目前还有一些奇怪的问题没有解决,不过最初目的(和好友第三方地图联机)倒是能办到。下面是经验。首先关于服务器的配置系统,我分别使用
docker搭建git服务器
一只勤奋爱思考的猪
docker git 服务器
1、docker搭建git服务器总体思路:服务端通过docker搭建git服务器,客户端创建git的账户及公钥密钥;1)服务端#创建容器#--privileged获得完整的root权限#/usr/sbin/init启动容器执行的第一个命令以便可以使用systemctl命令#将容器的ssh服务22端口映射到宿主的65002端口dockerrun-itd--privileged=true--namem
C++ 网络编程学习二
cliu1_16
C++ Linux c++
C++网络编程学习二asio异步写操作asio异步读操作asio异步echo服务端asio异步服务器中存在的隐患asio异步写操作async_write_some是异步写的函数:传入buffer和回调函数以及参数以后,发送后会调用回调函数。voidSession::WriteToSocketErr(conststd::string&buf){//make_shared延长_send_node的生命
工作中SQL优化实例1
换煤气哥哥
CREATETABLE`c_done_code`(`done_code`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'业务流水号',`login_sn`bigint(20)DEFAULTNULLCOMMENT'登陆流水号(从服务端session信息中提取)',`busi_code`int(11)DEFAULTNULLCOMMENT'业务编号',`user_id`in
netty的TCP服务端和客户端实现
nanshaws
tcp/ip udp 网络 netty 后端 服务器
第一步:引入依赖io.nettynetty-all4.1.90.Final第二步:实现TCP服务端packageorg.cyl.tcputils;importio.netty.bootstrap.ServerBootstrap;importio.netty.channel.ChannelFuture;importio.netty.channel.ChannelInitializer;importi
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