互联网开发

HDFS、TFS、FastDFS 、mooseFS、Lustre和mogileFS。

hdfs: Hadoop分布式文件系统(Hadoop Distributed File System)

跨语言RPC框架:
hessian(Binary),thrift,REST,protostuff, ice, httpInvoker, Burlap

(XML-RPC), Axis (SOAP)

RMI,socket,rpc,hessian,http,jms



json smart > Fastjson > Jackson(spring mvc) > Gson > Json-lib。

msgpack,protocal buffer,Kryo


Memcached(dbcached), Redis, MongoDB


各种nosql数据库的比较Cassandra

(facebook),MongoDB,CouchDB,Redis,Riak,HBase

MQ:MetaQ, httpsqs, memcacheq, Activemq,  RabbitMQ, UCMQ

starling , amazonsqs , tokyocabinet ,kestrel


Java NIO(框架:Mina、Netty、Grizzly灰熊,yanf4j)

juc, guava(瓜哇)

前端:yoeman,grunt

分布式SOA框架:zookeeper,dubbo, hive(蜜蜂),pig, hadoop(大象)


日志收集:flume、scribe、 flume+kafka+storm

监控系统:
Ganglia(RRDtool)、Nagios、Cacti
zabbix,ZoneMinder,MRTG,Tsar,HawtIO,Countly,Rmamona,Ziplin,Ganglia-

activemq


Thread,ThreadLocal


openAPI


YY: 们除了java框架,我们用的比较多的是nginx redis tfs hadoop,数据库

基本mysql


alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程

调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。


hessian<pb <yu kryo



JMS(Java Messaging Service)是Java平台上有关面向消息中间件(MOM)的技

术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准

的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
JMS和MQ的关系:
JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程

中的所有数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(

MOM)的最终实现,是真正的服务提供者;MQ的实现可以基于JMS,也可以基于

其他规范或标准。
支持JMS的开源MQ:
目前选择的最多的是ActiveMQ。
activeMQ 是一个jms 的实现, apache 出的.



protocol buffer:一种序列化协议

jsonsmart  json格式中的绝对王者 速度快,信息少
msgpack  二进制序列化的怪杰,号称比protocal buffer快四倍,比json快10


protocal buffer GOOGLE出品,号称比XML快百倍


json是一种数据格式,便于数据传输、存储、交换
gson是一种组件库,可以把java对象数据转换成json数据格式


序列化: 将java对象转为JSON字符串
反序列化:将Json字符串转化为java对象



Memcached, Redis, MongoDB区别:
mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数

据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached

不存在谁替换谁的问题。

和memcached更为接近的是redis。它们都是内存型数据库,数据保存在内存中

,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功

能不强,一般用作缓存。在我们团队的项目中,一开始用的是memcached,后

来用redis替代。

相比memcached:

1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。

2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可

依照binlog进行数据恢复。

3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则

通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。

4、redis原生支持的数据类型更多,使用的想象空间更大。

5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负

载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,

单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。

6、redis更多优点,请移步官方网站查询。

7. 性能

Redis作者的说法是平均到单个核上的性能,在单条数据不大的情况下Redis更

好。为什么这么说呢,理由就是Redis是单线程运行的。
因为是单线程运行,所以和Memcached的多线程相比,整体性能肯定会偏低。
因为是单线程运行,所以IO是串行化的,网络IO和内存IO,因此当单条数据太

大时,由于需要等待一个命令的所有IO完成才能进行后续的命令,所以性能会

受影响。

原子操作是不可分割的,在执行完毕之前不会被任何其它任务或事件中断。
"原子操作(atomic operation)是不需要synchronized",这是Java多线程编程

的老生常谈了。所谓原子操作是指不会被线程调度机制打断的操作;这种操作

一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另

一个线程)。

compareAndSet这个方法多见于并发控制中,简称CAS(Compare And Swap),意

思是如果valueOffset位置包含的值与expect值相同,则更新valueOffset位置

的值为update,并返回true,否则不更新,返回false。
这里可以举个例子来说明compareAndSet的作用,如支持并发的计数器,在进

行计数的时候,首先读取当前的值,假设值为a,对当前值 + 1得到b,但是+1

操作完以后,并不能直接修改原值为b,因为在进行+1操作的过程中,可能会

有其它线程已经对原值进行了修改,所以在更新之前需要判断原值是不是等于

a,如果不等于a,说明有其它线程修改了,需要重新读取原值进行操作,如果

等于a,说明在+1的操作过程中,没有其它线程来修改值,我们就可以放心的

更新原值了。

138 2893 0131

猜你喜欢

转载自sunwtrain.iteye.com/blog/2153704