Apache Zookeeper入门_zgmzyr的博客-CSDN博客


本站和网页 https://blog.csdn.net/zgmzyr/article/details/7026718 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Apache Zookeeper入门_zgmzyr的博客-CSDN博客
Apache Zookeeper入门
zgmzyr
于 2011-11-30 12:46:15 发布
17796
收藏
分类专栏:
Apache
文章标签:
apache
服务器
分布式应用
server
socket
集群
Apache
专栏收录该内容
6 篇文章
0 订阅
订阅专栏
转载于:http://www.javabloger.com/article/apache-zookeeper-hadoop.html
口水:Zookeeper是我目前接触过Apache开源系统中比较复杂的一个产品,要搞清楚这个东东里面的运作关系还真不是一时半会可以搞定的事,本人目前只略知皮毛之术。
ZooKeeper 是什么?
  ZooKeeper 顾名思义 动物园管理员,他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 、 小猪(Pig)  的管理员, Apache Hbase和 Apache Solr 以及LinkedIn sensei  等项目中都采用到了 Zookeeper。ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,ZooKeeper是以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。  
ZooKeeper 如何工作?
  ZooKeeper是作为分布式应用建立更高层次的同步(synchronization)、配置管理 (configuration maintenance)、群组(groups)以及名称服务(naming)。在编程上,ZooKeeper设计很简单,所使用的数据模型风格很像文件系统的目录树结构,简单来说,有点类似windows中注册表的结构,有名称,有树节点,有Key(键)/Value(值)对的关系,可以看做一个树形结构的数据库,分布在不同的机器上做名称管理。
   Zookeeper分为2个部分:服务器端和客户端,客户端只连接到整个ZooKeeper服务的某个服务器上。客户端使用并维护一个TCP连接,通过这个连接发送请求、接受响应、获取观察的事件以及发送心跳。如果这个TCP连接中断,客户端将尝试连接到另外的ZooKeeper服务器。客户端第一次连接到ZooKeeper服务时,接受这个连接的 ZooKeeper服务器会为这个客户端建立一个会话。当这个客户端连接到另外的服务器时,这个会话会被新的服务器重新建立。
   启动Zookeeper服务器集群环境后,多个Zookeeper服务器在工作前会选举出一个Leader,在接下来的工作中这个被选举出来的Leader死了,而剩下的Zookeeper服务器会知道这个Leader死掉了,在活着的Zookeeper集群中会继续选出一个Leader,选举出leader的目的是为了可以在分布式的环境中保证数据的一致性。如图所示:
  另外,ZooKeeper 支持watch(观察)的概念。客户端可以在每个znode结点上设置一个观察。如果被观察服务端的znode结点有变更,那么watch就会被触发,这个watch所属的客户端将接收到一个通知包被告知结点已经发生变化。若客户端和所连接的ZooKeeper服务器断开连接时,其他客户端也会收到一个通知,也就说一个Zookeeper服务器端可以对于多个客户端,当然也可以多个Zookeeper服务器端可以对于多个客户端,如图所示:
你还可以通过命令查看出,当前那个Zookeeper服务端的节点是Leader,哪个是Follower,如图所示:
我通过试验观察到 Zookeeper的集群环境最好有3台以上的节点,如果只有2台,那么2台当中不管那台机器down掉,将只会剩下一个leader,那么如果有再有客户端连接上来,将无法工作,并且剩下的leader服务器会不断的抛出异常。内容如下: java.net.ConnectException: Connection refused         at sun.nio.ch.Net.connect(Native Method)         at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:507)         at java.nio.channels.SocketChannel.open(SocketChannel.java:146)         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:347)         at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:381)         at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:674)         at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:611) 2010-11-15 00:31:52,031 – INFO  [QuorumPeer:/0:0:0:0:0:0:0:0:2181:FastLeaderElection@683] – Notification time out: 12800
并且客户端连接时还会抛出这样的异常,说明连接被拒绝,并且等待一个socket连接新的连接,这里socket新的连接指的是zookeeper中的一个Follower。 org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1000) Opening socket connection to server 192.168.50.211/192.168.50.211:2181  org.apache.zookeeper.ClientCnxn$SendThread.primeConnection(ClientCnxn.java:908) Socket connection established to 192.168.50.211/192.168.50.211:2181, initiating session  org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1118) Unable to read additional data from server sessionid 0×0, likely server has closed socket, closing socket connection and attempting reconnect  org.apache.zookeeper.ClientCnxn$SendThread.startConnect(ClientCnxn.java:1000) Opening socket connection to server localhost/127.0.0.1:2181   2010-11-15 13:31:56,626 WARN   org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1120) Session 0×0 for server null, unexpected error, closing socket connection and attempting reconnect   
 先写到这里,全面了解Zookeeper不太容易,光看Apache Zookeeper官方的wiki和文档还不能对其有深入的了解,想阅读Zookeeper中的部分源代码。另外,本人目前正在学习和了解ing,欢迎大家与我交流,谢谢。
==================
记得在大约在2006年的时候Google出了Chubby来解决分布一致性的问题(distributed consensus problem),所有集群中的服务器通过Chubby最终选出一个Master Server ,最后这个Master Server来协调工作。简单来说其原理就是:在一个分布式系统中,有一组服务器在运行同样的程序,它们需要确定一个Value,以那个服务器提供的信息为主/为准,当这个服务器经过n/2+1的方式被选出来后,所有的机器上的Process都会被通知到这个服务器就是主服务器 Master服务器,大家以他提供的信息为准。很想知道Google Chubby中的奥妙,可惜人家Google不开源,自家用。
  但是在2009年3年以后沉默已久的Yahoo在Apache上推出了类似的产品ZooKeeper,并且在Google原有Chubby的设计思想上做了一些改进,因为ZooKeeper并不是完全遵循Paxos协议,而是基于自身设计并优化的一个2 phase commit的协议,如图所示:
  ZooKeeper跟Chubby一样用来存放一些相互协作的信息(Coordination),这些信息比较小一般不会超过1M,在zookeeper中是以一种hierarchical tree的形式来存放,这些具体的Key/Value信息就store在tree node中,如图所示:
当有事件导致node数据,例如:变更,增加,删除时,Zookeeper就会调用 triggerWatch方法,判断当前的path来是否有对应的监听者(watcher),如果有watcher,会触发其process方法,执行process方法中的业务逻辑,如图所示:  
应用实例    ZooKeeper有了上述的这些用途,让我们设想一下,在一个分布式系统中有这这样的一个应用:      2个任务工厂(Task Factory)一主一从,如果从的发现主的死了以后,从的就开始工作,他的工作就是向下面很多台代理(Agent)发送指令,让每台代理(Agent)获得不同的账户进行分布式并行计算,而每台代理(Agent)中将分配很多帐号,如果其中一台代理(Agent)死掉了,那么这台死掉的代理上的账户就不会继续工作了。 上述,出现了3个最主要的问题:     1.Task Factory 主/从一致性的问题     2.Task Factory 主/从心跳如何用简单+稳定 或者2者折中的方式实现。     3.一台代理(Agent)死掉了以后,一部分的账户就无法继续工作,需要通知所有在线的代理(Agent)重新分配一次帐号。
怕文字阐述的不够清楚,画了系统中的Task Factory和Agent的大概系统关系,如图所示:  
OK,让我们想想ZooKeeper是不是能帮助我们去解决目前遇到的这3个最主要的问题呢? 解决思路 1. 任务工厂Task Factory都连接到ZooKeeper上,创建节点,设置对这个节点进行监控,监控方法例如:     event= new WatchedEvent(EventType.NodeDeleted, KeeperState.SyncConnected, "/TaskFactory");    这个方法的意思就是只要Task Factory与zookeeper断开连接后,这个节点就会被自动删除。
2.原来主的任务工厂断开了TCP连接,这个被创建的/TaskFactory节点就不存在了,而且另外一个连接在上面的Task Factory可以立刻收到这个事件(Event),知道这个节点不存在了,也就是说主TaskFactory死了。
3.接下来另外一个活着的TaskFactory会再次创建/TaskFactory节点,并且写入自己的ip到znode里面,作为新的标记。
4.此时Agents也会知道主的TaskFactory不工作了,为了防止系统中大量的抛出异常,他们将会先把自己手上的事情做完,然后挂起,等待收到Zookeeper上重新创建一个/TaskFactory节点,收到 EventType.NodeCreated 类型的事件将会继续工作。
5.原来从的TaskFactory 将自己变成一个主TaskFactory,当系统管理员启动原来死掉的主的TaskFactory,世界又恢复平静了。
6.如果一台代理死掉,其他代理他们将会先把自己手上的事情做完,然后挂起,向TaskFactory发送请求,TaskFactory会重新分配(sharding)帐户到每个Agent上了,继续工作。
上述内容,大致如图所示:
口水: 1.以上内容说的还不够好,希望能和有经验的同学们交流一下,说说你们在大规模计算中是如何解决分布式一致性的问题,谢谢
2.大量了很多文章,最后的确是看了Hbase部分和zookeeper的源代码 有了点启发。 http://hbase.apache.org/docs/r0.89.20100726/xref/org/apache/hadoop/hbase/master/ZKMasterAddressWatcher.html
=========================
开场白:   在上一篇关于介绍Zookeeper的文章中有同学给我留言,说到Zookeeper/Hbase/Hadoop三者之间的关系,在此我把三者之间的关系画在一张图上希望能表达的清楚一些。
Zookeeper用来同步Hbase服务状态、监控集群防止单点失效 HDFS是Hadoop中最核心的一部分,用来对Hbase的数据进行存储
1、Zookeeper客户端与服务端的大致结构    服务端     Zookeeper还是属于一个C/S的架构的应用服务,Zookeeper的服务器端分为2种运行模式:单台和集群多台的运行模式,通过conf/zoo.cfg中的配置判定你启用的运行模式,以及在群集模式中数据同步和心跳的频率等等。    Zookeeper集群中的Leader和Follower之间的选举通过Paxos算法来实现的,它是一个基于消息传递的一致性算法,这里讲述了http://zh.wikipedia.org/zh-cn/Paxos算法,传说中Paxos算法是分布式一致性算法中最有效的一种算法。 口水:在源代码中的通讯部分看见了大量采用NIO和concurrent的代码(例如:LinkedBlockingQueue/AtomicLong)。
  客户端 ZooKeeper的Client由三个主要模块组成: Zookeeper     Zookeeper是最主要的类,可以写入一个或者多个Zookeeper的服务器地址,例如:"127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002" ,当你new Zookeeper( ….)的时候会有两个线程被创建:SendThread和EventThread,会在Server端创建大量的Session。 WatcherManager     在Zookeeper类中还有一个WatcherManager,用来管理Watcher的,Watcher是ZK的一大特色功能,允许多个Client对一个或多个 ZNode进行监控,当ZNode有变化时能够通知到监控这个ZNode的各个Client,管理了ZK Client绑定的所有Watcher。 ClientCnxn     在Zookeeper类中还包含了对ClientCnxn类的调用,ClientCnxn这个类管理所有对Zookeeper服务器端的网络通讯,服务端和客户端所有交互的数据都要调用这个类,包括给ZK Server发送Request,从ZK Server接受Response,以及从ZK Server接受Watcher Event。
2、服务端运行模式 服务端单机模式     zoo.cfg文件配置参数详解     # 这个时间是被用来做服务器之间或客户端与服务器心跳和最低会话超时时间的基数。     tickTime=2000     # 存储在内存中数据快照的目录。     dataDir=d:/zookeeperdata/1     # 服务器端开启的监听端口,用来接受客户端访问请求的端口。     clientPort=2181
服务端集群模式     配置参数详解      #Zookeeper服务器集群中连接到Leader与Follower 服务器少次心跳时间间隔数,以及最大通讯的超时时间,总时间为 5(initLimit)*2000(tickTime)=10 秒。      initLimit=5      #Leader与Follower间请求/应答时间长度,这里总时间长度就是 2(syncLimit)*2000(tickTime)=4 秒。      syncLimit=2      #server是固定配置,1和2表示这个是第几号服务器,2888:3888表示服务器与集群中的 Leader 服务器的通讯端口。      server.1=192.168.1.1:2888:3888      server.2=192.168.1.2:2888:3888
另外,集群模式下还要在 dataDir 目录下创建一个myid文件,这个文件中写入的内容就是一个数字,这个数字就是和server.x中的x这个数字对应,Zookeeper 启动时会读取这个文件判定自己是谁,myid文件的编码格式是ANSI。
zgmzyr
关注
关注
点赞
收藏
评论
Apache Zookeeper入门
转载于:http://www.javabloger.com/article/apache-zookeeper-hadoop.html  口水:Zookeeper是我目前接触过Apache开源系统中比较复杂的一个产品,要搞清楚这个东东里面的运作关系还真不是一时半会可以搞定的事,本人目前只略知皮毛之术。ZooKeeper 是什么?  ZooKeeper 顾名思义 动物园管理员,他是
复制链接
扫一扫
专栏目录
OneR算法简单应用
04-12
python 数据挖掘入门,熟悉OneR算法实现分类,了解OneR算法的基本操作
Zookeeper ---- Zookeeper入门
在人间负债^
10-29
224
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。工作机制Zookeeper 从设计模式来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上的那些观察者做出相应的反应。
评论 2
您还未登录,请先
登录
后发表或查看评论
Zookeeper客户端使用总结(一)
weixin_30294709的博客
05-16
54
一、简介
Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。
ZooKeeper提供的常见服务如下 :
命名服务- 按名称标识集群中的节点。它类似于DNS,但仅对于节点。
配置管理- 加入节点的最近的和最新的系统配置信息。
...
zk报错:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain|Error contacting service
最新发布
血煞长虹 的专栏
11-13
631
报错原因,3.5.5开始。带有bin名称的包才是我们想要的下载可以直接使用的。里面有编泽后的二进制的包。
之前版本tar.gz包里面是只是源码包。无法直核使用。
重新下载bin压缩包后,重新解压配置即可。
坑爹的ZooKeeper的错误
RAYFUXK的专栏
02-29
2769
第一天的时候,Zookeeper的安装是成功的,也启动成功,但是第二天不知道就怎么了,突然就一直启动不起来。在‘#’后面的是注释:
# 目前所在的位置:
[scidb@localhost bin]$ pwd
/home/scidb/zookeeper/zookeeper-3.4.8/bin
# 在bin的文件下有这些文件:
[...
Zookeeper的错误(启动成功,客服端报错)
血龙的博客
12-20
3528
# 接下来启动 zkServer.sh
# 接下来启动 zkServer.sh
[scidb@localhost bin]$ zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/scidb/zookeeper/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting...
zookeeper的项目怎样部署到服务器,apache-zookeeper
weixin_39930144的博客
08-11
129
我将Curator用于newClient,并设置了重试策略,但如果连接字符串错误,重试连接将始终运行直到内存不足,但我希望程序退出一次,重试3次。RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);CuratorFrameworkFactory.newClient(zkAddress,retryPolicy);Curator...
zookeeper拒绝连接java.net.ConnecteException
befroe_You的博客
03-15
3500
场景描述:在搭建springboot+dubbo+zookeeper 时,项目启动报错如下图:
java.net.ConnectException: 拒绝连接
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConn...
Apache Zookeeper入门1
weixin_33919950的博客
12-18
40
2019独角兽企业重金招聘Python工程师标准>>>
...
ZooKeeper官方文档学习笔记02-ZooKeeper入门指南
墨浅
04-27
180
zookeeper官方文档翻译
独立运行
1 选择一个合适的目录,然后用winzip解压即可
2 创建zoo.cfg
3 创建空的数据和日志存放地址并修改zoo.cfg
4 尝试启动(服务器)(单机版)
5 看一下是否启动成功
管理ZooKeeper存储
连接到ZooKeeper(客户端)(单机版)
一些指令
ZooKeeper编程
集群模式下运行ZooKeeper
Note
在一台计算机上搭建伪集群
1 复制
2 修改zoo.cg
3 创建myid文件
4 启动
5 如何判断好没有呢?
其他优化
hbase依赖zk集群
大JAVA解决方案
02-11
686
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081)2018-02-11 09:35:15,973 INFO [main-SendThread(centoshostnameKL1:2181)] zookeeper.ClientCnxn: Opening socket connection to serve...
格式化zookeeper时报错:拒绝连接
咕噜君的博客
04-10
1万+
首先启动zookeeper集群:在每个节点的Zookeeper安装目录的bin目录下执行命令:
sh zkServer.sh start
zookeeper集群启动后,在zk的leader节点上执行:这个指令的作用是在zookeeper集群上生成ha节点(ns节点)
hdfs zkfc -formatZK
报如下错误:
20/04/10 14:58:47 WARN zookeeper....
zookeeper--ClientCnxn
热门推荐
徐进
02-06
1万+
之前完成的项目作用zookeeper用作服务发现,抽象出注册和监听功能,供其他项目使用。对zookeeper的一些细节作个记录吧。我们知道通过Zookeeper对象实例实现对zookeeper服务的调用。首先的问题就是消息的发送和接受,以及事件的回调。这里我们把目光转向ClientCnxn创建实例
public ClientCnxn(String chrootPath, HostProvider h
tomcat 启动zookeeper 报错
jinchenglin1313的博客
08-09
164
[DT=20220809182902] [PN=RMI TCP Connection(2)-127.0.0.1] [TI=] [TN=] [ID=]- Retry-able exception received
java.lang.IllegalStateException
牛栏山矿泉水
04-12
108
1、错误描述
四月 12, 2015 2:17:54 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring FrameworkServlet 'appServlet'
四月 12, 2015 2:17:56 下午 org.apache.catalina.core.StandardContext r...
spring boot + dubbo开发遇到过的异常
hellofriends699的专栏
10-24
59
异常信息
NoClassDefFoundErrororg.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1162)
Session 0x35e929e94120196 for server 172.16.0.239/172.16.0.239:2182, unexpected error, closing sock...
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:大白
设计师:CSDN官方博客
返回首页
zgmzyr
CSDN认证博客专家
CSDN认证企业博客
码龄16年
暂无认证
29
原创
9万+
周排名
90万+
总排名
234万+
访问
等级
2万+
积分
386
粉丝
130
获赞
167
评论
177
收藏
私信
关注
热门文章
深入学习微框架:Spring Boot
144769
Spring整合MyBatis错误:Mapped Statements collection does not contain value for
111341
JBoss Web和 Tomcat的区别
72855
日志组件logback的介绍及配置使用方法
69314
sshd re-exec requires execution with an absolute path
48147
分类专栏
Android
6篇
Apache
6篇
cms
2篇
ConcurrencyProgram
5篇
compass
2篇
CSS
5篇
database
18篇
Eclipse
42篇
Excel
2篇
FCKeditor
8篇
FreeMarker
1篇
Hibernate
51篇
html
17篇
java
116篇
JAVA
25篇
JavaEE
10篇
joram
2篇
JQuery
5篇
js
49篇
JSON
2篇
junit
8篇
JVM
20篇
Linux
30篇
log
7篇
oracle
100篇
optimize
12篇
php
4篇
POI
3篇
RSS
3篇
Spring
16篇
spring security
2篇
SQL
10篇
encrypt
3篇
SQL Server
2篇
SSO (Single Sign On)
1篇
Struts2
18篇
SVN
31篇
specialty common sense
17篇
Tool
18篇
Tomcat
34篇
webservice
11篇
encoding
13篇
open source
3篇
regular expression
8篇
browser
20篇
live common sense
4篇
decryption
1篇
design
9篇
software architecture
7篇
文章
30篇
学习方法
17篇
在线文档
6篇
伪静态
4篇
security
4篇
面试
10篇
项目管理
2篇
VMware
2篇
vim
5篇
ubuntu
9篇
server
4篇
iBatis
7篇
maven
15篇
JBoss
7篇
proxy
1篇
Hudson
1篇
Hadoop
4篇
design pattern
3篇
网站建设
6篇
Test
3篇
cache
4篇
Emacs
1篇
Debug
2篇
Bash
2篇
Algorithms
1篇
UML
1篇
MyBatis
1篇
Shell
2篇
FastJSON
3篇
Hessian
1篇
REST
1篇
API
1篇
web
2篇
http
2篇
SOA
1篇
mq
1篇
git
1篇
最新评论
解决spring中不同配置文件中存在name或者id相同的bean可能引起的问题
666-LBJ-666:
真是个人才
firefox,ie,chrome禁止浏览器缓存
昨日的明天:
network.http.use-cache这个选项找不到啊,是更新了吗
sshd re-exec requires execution with an absolute path
qinghuangshan:
up, 第二行应该是#vi /etc/ssh/sshd_config
Eclipse+Maven快速生成Web项目,解决部署时Maven lib依赖问题
Tisfy:
我唯一能做的,就只有把这个帖子顶上去这件事了。
高效SQL语句必杀技
Tisfy:
Nice!,古人云:壮志饥餐胡虏肉,笑谈渴饮匈奴血。
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
.gitignore规则和忽略已经被git管理的文件
关于cookie的一些小测试
一步步优化JVM一:概述、方法及需求
2019年1篇
2016年4篇
2015年13篇
2014年4篇
2013年59篇
2012年204篇
2011年221篇
2010年338篇
目录
目录
分类专栏
Android
6篇
Apache
6篇
cms
2篇
ConcurrencyProgram
5篇
compass
2篇
CSS
5篇
database
18篇
Eclipse
42篇
Excel
2篇
FCKeditor
8篇
FreeMarker
1篇
Hibernate
51篇
html
17篇
java
116篇
JAVA
25篇
JavaEE
10篇
joram
2篇
JQuery
5篇
js
49篇
JSON
2篇
junit
8篇
JVM
20篇
Linux
30篇
log
7篇
oracle
100篇
optimize
12篇
php
4篇
POI
3篇
RSS
3篇
Spring
16篇
spring security
2篇
SQL
10篇
encrypt
3篇
SQL Server
2篇
SSO (Single Sign On)
1篇
Struts2
18篇
SVN
31篇
specialty common sense
17篇
Tool
18篇
Tomcat
34篇
webservice
11篇
encoding
13篇
open source
3篇
regular expression
8篇
browser
20篇
live common sense
4篇
decryption
1篇
design
9篇
software architecture
7篇
文章
30篇
学习方法
17篇
在线文档
6篇
伪静态
4篇
security
4篇
面试
10篇
项目管理
2篇
VMware
2篇
vim
5篇
ubuntu
9篇
server
4篇
iBatis
7篇
maven
15篇
JBoss
7篇
proxy
1篇
Hudson
1篇
Hadoop
4篇
design pattern
3篇
网站建设
6篇
Test
3篇
cache
4篇
Emacs
1篇
Debug
2篇
Bash
2篇
Algorithms
1篇
UML
1篇
MyBatis
1篇
Shell
2篇
FastJSON
3篇
Hessian
1篇
REST
1篇
API
1篇
web
2篇
http
2篇
SOA
1篇
mq
1篇
git
1篇
目录
评论 2
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值