BeansDB

BeansDB 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的Dynamo。

它采用类似memcached的去中心化结构,在客户端实现数据路由。目前只提供了Python版本的客户端,其它语言的客户端可以由memcached的客户端稍加改造得到。

更新

2009.12.29 第一个公开版本 0.3

特性

高可用:通过多个可读写的用于备份实现高可用

最终一致性:通过哈希树实现快速完整数据同步(短时间内数据可能不一致)

容易扩展:可以在不中断服务的情况下进行容量扩展。

高性能:异步IO和高性能的KeyValue数据TokyoCabinet

可配置的可用性和一致性:通过N,W,R进行配置

简单协议:Memcache兼容协议,大量可用客户端

客户端

目前只提供了Python版本的客户端,在python目录中,该目录中各文件的左右如下:

dbclient.py BeansDB的客户端,由memcached的客户端简单封装而成

status.py 查看BeansDB的状态,各个节点的数据分布,以及同步状态

sync.py 同步各节点

httpd.py HTTP方式访问BeansDB的内容(目前只有GET方式)

store.pyx, dbserver.py test.py setup.py

Python 版本的BeansDB,核心部分是C实现
代码示例:
[sourcecode language=”python”]
from dbclient import Beansdb

# three beansdb nodes on localhost
BEANSDBCFG = {
“localhost:7901”: range(16),
“localhost:7902”: range(16),
“localhost:7903”: range(16),
}

db = Beansdb(BEANSDBCFG, 16)

db.set(‘hello’, ‘world’)
db.get(‘hello’)
db.delete(‘hello’)
[/sourcecode]
性能

在小数据集上,它跟memcached一样快:

# memstorm -s localhost:7900 -n 1000
Num of Records : 10000
Non-Blocking IO : 0
TCP No-Delay : 0

Successful [SET] : 10000
Failed [SET] : 0
Total Time [SET] : 0.45493s
Average Time [SET] : 0.00005s

Successful [GET] : 10000
Failed [GET] : 0
Total Time [GET] : 0.28609s
Average Time [GET] : 0.00003s
实际部署情况下的性能(客户端测量):

服务器 请求数 评价时间(ms) 中位数(ms) 99% (ms) 99.9%(ms)
get A:7900 n=151398, avg=8.89, med=5.94, 99%=115.5, 99.9%=310.2
get B:7900 n=100054, avg=6.84, med=0.40, 99%=138.5, 99.9%=483.0
get C:7900 n=151250, avg=7.42, med=5.34, 99%=55.2, 99.9%=156.7
get D:7900 n=150677, avg=7.63, med=5.09, 99%=97.7, 99.9%=284.7
get E:7900 n=3822, avg=3.07, med=0.18, 99%=44.3, 99.9%=170.0
get F:7900 n=249973, avg=8.29, med=6.36, 99%=46.8, 99.9%=241.5
set A:7900 n=10177, avg=18.53, med=12.78,99%=189.3, 99.9%=513.6
set B:7900 n=10431, avg=12.85, med=1.19, 99%=206.1, 99.9%=796.8
set C:7900 n=10556, avg=17.29, med=12.97,99%=132.2, 99.9%=322.9
set D:7900 n=10164, avg=7.34, med=0.64, 99%=98.8, 99.9%=344.4
set E:7900 n=10552, avg=7.18, med=2.33, 99%=73.6, 99.9%=204.8
set F:7900 n=10337, avg=17.79, med=15.31, 99%=109.0, 99.9%=369.5

消息来源:Solidot, 豆瓣开源数据存储系统BeansDB

细看Google的35个开源项目 Go列其中

Sun号称开源方面的领路人之一,其实Google拥有的开源项目也是十分丰富的。除了开发方面的项目外,也有MySQL等方面的内容。在这其中还包括新出的Google Go!

Google是支持开源运动的最大公司之一,它们现在总共发布有超过500个的开源项目(大部分都是利用它们的API来完成),本文将列举一些有趣的开源项目,其中很可能有不少你不知道的哦。

Google开源助Web2.0开发 不排斥专有深入了解Google开源框架GWT Google开源新举动:Linux桌面1.1版上线(.. Mozilla、Google开源合作遭美国税局质疑微软担心Google和苹果超越Windows 8 文本文件处理:

◆Google CRUSH (Custom Reporting Utilities for SHell)

CRUSH是为命令行或shell scripts处理特定文字数据而制作的一系列工具,这里有指南。

C++库和源代码:

◆Google Breakpad

一个开源的多平台崩溃报告系统。

◆Google GFlags

Gflags是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。指南在此。

◆Google Glog

Glog库可执行应用级的登陆,提供基于C++式的登陆API,可用于Linux、BSD和Windows。指南见此。

◆Google PerfTools

这个工具可让开发创建更强大的应用程序,特别是那些用C++模版开发的多线程应用程序,包括TCMalloc, heap-checker, heap-profiler 和cpu-profiler。指南见此还有这里。

◆Google Sparse Hash

非常节省内存的hash-map。指南见此。

◆Omaha – Google Update

Omaha,也就是Google Update,它可以保证你的软件随时升级到最新版本,目前很多Windows下的Google软件都是用Omaha升级的,包括Google Chrome和Google Earth,当然你也可以用于自己的应用程序。指南看这里还有这里。

◆Protocol Buffers

Protocol Buffers是一种可扩展编码序列数据的方式,Google在几乎所有内部RPC协议和文件格式都使用了Protocol Buffers。指南见此。它可以用于很多语言而且被一些IDE所支持,比如NetBeans。

互联网:

◆Google Code Pretiffy

这是一个Javascript模块和CSS文件,它可以让HTML页面里的部分源码高亮显示,支持C/C++, Java, Python, Ruby, PHP, VisualBasic, AWK, Bash, SQL, HTML, XML, CSS, JavaScript, Makefiles和部分Perl,不支持Smalltalk和所有的CAML。例子见此。

◆SpriteMe – easy “CSS spirtes”

SpriteMe使你可以更轻松的创造CSS Sprites(俗称雪碧……)就是把网站要用到的图片都堆在一张图片里,用CSS控制调用哪个区域。它有一个自己的官网在这里。

◆Redacisaurus

Reducisaurus是一个压缩CSS和JS文件的网络服务,基于YUI压缩算法,运行于App Engine。

◆JaikuEngine

JaikuEngine是一个运行于App Engine的微博系统,由jaiku.com运营。要查看移动客户端的源码可以看这里,这里还有介绍。

◆Selector Shell

Selector Shell是一个基于浏览器的测试工具,它可以让你看到CSS在不同浏览器里的样式,用Javascript写的,你可以在这里测试。

◆Google Feed Server

Google Feed Server是一个开源Atom发布协议服务,基于Apache Abdera框架,允许开发者快速为当前数据源(比如数据库)配置feed。指南见这里和这里。

◆Melange, the Spice of Creation

这个项目的目标是创建出一个适合开源贡献流程的框架,比如Google Summer of Code TM (GSoC)项目。使用这个框架你就可以用Google App Engine来运行Google Summer of Code项目,和其它类似项目比如Google Highly Open Participation TM Contest和GHOP。指南见此。

◆NameBench

它可以查找最快的DNS服务器给你的电脑用,在Mac OS X、Windows和UNIX系统下都有命令行也有用户界面可以帮你测试,这是Google工程师用20%自由时间写出来的。

◆Rat Proxy

一个半自动化的大型被动网络应用安全审查工具,专为精确的探测而优化,文档在此。

◆TopDraw

Top Draw是一个图形生成程序,使用简单的文字脚本,基于JavaScript编程语言,Top Draw可以创造出非常复杂和有趣的图形。支持Mac OS 10.5以上系统,使用XCode开发。

◆etherpad

开源的EtherPad,这是一个基于网络的实时合作文档编辑器,这个项目主要是为了演示代码而开发,帮助那些想在自己服务器部署Etherpad的人使用,这里有如何安装的指南。EtherPad使用JavaScript、Java和Comet服务器来建造实时协作服务。

◆Chromium

Chromium是开源版的Chrome浏览器,Chromium的目标是建立一个新一代的强大网络应用程序,它与Chrome有很多不同之处。这里有指导如何在Linux上编译Chromium。

◆V8 Google’s open source JavaScript engine

V8是Google的开源JavaScript引擎,用C++写成,用于Chrome浏览器之上。V8使用ECMAScript的ECMA-262第三版可运行于Windows XP、vista、Mac OS 10.5和使用IA-32或ARM处理器的Linux。V8可独立运行也可嵌入到任何C++程序里使用,这里有指南。

◆Chromium OS

Chromium OS是开源版的Chrome OS操作系统,提供快速、简单而安全的网络体验,源码在此。

◆Android

Android是第一个免费、开源而且可完全自定义的移动平台,提供完整的堆栈:一个操作系统、中间件和重要的一用应用,它包含丰富的API可以让第三方开发者开发出强大的应用程序。

MySQL工具:

◆Google MySQL Tools

各种管理、维护和改进MySQL数据库性能的工具,由Google编写,包括:

◆mypgrep.py:一个类似pgrep的工具来管理MySQL连接

compact_innodb.py:可导出和重载所有表格的密集型innodb数据文件

◆Google mMAIM

mMAIM的目标是对MySQL的监控和分析更简单,且可以和任何环境整合使用。它可显示主/从同步状态,一些性能状态,可以返回大量“show”命令的状态等等。

其它:

◆Stressful Application Test (stressapptest)

Stressful Application Test试图让来自处理器和I/O到内存的数据尽量随机化,以创造出模拟现实的环境来测试现在的硬件设备是否稳定,Google就在使用它,现在是Apache 2.0许可,这里有介绍、安装向导和指南。

◆Pop and IMAP Troubleshooter

它用于诊断并解决客户端到邮件服务器的连接问题。

◆OpenDuckBill

Openduckbill是一个Linux下简单的命令行备份工具,可用于监视文件/目录在有变化后是否标记为备份,并传输这些变化到本地备份目录、远程NFS导出分卷或是用rsync命令导出到远程SSH服务器。见安装向导。

◆ZXing

ZXing(发音类似Zebra crossing)是Java的开源多格式1D/2D条码图像处理库,目的是使用内置在手机上的摄像头拍照并对条码进行解码,而不必与服务器通讯,它被用于Android系统。这里有向导和支持的设备列表。

◆Tesseract OCR Engine

Tesseract OCR引擎是1995年UNLV Accuracy测试的前三名之一,在1995和2006年之间它的进展不大,但依然是当前精度最高的OCR引擎。这个源码可读取二进制、灰阶或彩色图片并输出文字,内置一个TIFF阅读器可读取非压缩的TIFF文件,增加libtiff后也可读取压缩图片。指南和问答。

◆Neatx – Open Source NX server

Neatx是一个开源NX服务,类似NoMachine公司商业的NX服务。NX协议比VNX更强大,它们的区别主要在:

NX是X11客户端所以不会发送位图

NX可兼容X、VNC和Windows版的Remote Desktop

NX可缓存数据

NX安装简单

另外一个可选的项目可以看看Google的FreeNx。

◆PSVM

它是这个文件的代码,这是一个SVM的“支持所有核心”的版本,可多机并行运行,实例见此。

◆Google GO

Google开发的新编程语言。

◆The Google Collections Library for Java

这是一系列与Java 5以及更高版本有关的库,Google花钱给买过来了。

◆Google styleguIDE
每个主流的开源项目都有它自己的向导形式,比如一系列的演示代码。如果这些代码都按照“Style”的形式来演示,会更友好。
来源:chinaunix

SOA走向开源打破私有软件封闭门槛

OpenSource,开放源代码,和SOA,Service-OrientedArchITecture,服务导向的架构,是目前最为前沿的 IT行业趋势。IT行业分析公司Gartner认为SOA将成为创建和交付软件的主导框架,同时预测到2010年时,应用软件收入增长的80%将来自基于 SOA的方案,IDC预计 2010年中国SOA市场规模将达5亿美元。另一方面,开源社区也越来越活跃,IBM、Oracle、AMD等都在支持和实施一些开源计划。

  当然,开源不仅仅是针对商用,SOA也仅仅是针对系统集成。这两个因素正酝酿IT的一场技术机制与商业模式的变革,同时这也构成了新的行业“洗牌”动因。而把SOA与开源软件的优点相结合,不仅可以降低客户的IT成本,同时还能敏捷地应对不断变化的业务需求。那么开源能否成为SOA的急先锋呢?或是两者相得益彰?抑或开源是SOA的最终归宿?

  一、开源与SOA合并渐成趋势

  应用软件及应用解决方案采用开源软件或是部分采用开源软件已是普遍的趋势,因为这样做可以降低信息化的成本。开源策略的优势,可归为三点:

  1.提高企业系统的独立性,即公司的IT系统不会被绑定于某一家的商用环境上,以便于企业走独立的技术发展路线;

  2.初期投入很小,虽然开源也不意味着完全免费,但总费用上开源软件小于商用软件;

  3.开源的门槛低,人力资源易于获得,表现为运营、研发时费用更低。

  开源比商用方式更具优势,开源阵营的人力成本低而易补充,在开源社区中很容易找到熟悉J2EE的人,但要在IBM公司以外找到熟悉DB2和 Websphere的人恐怕很难。在一般的企业级应用中,开源软件不会遇到技术上的挑战,相反,在构建SOA时,其开源组件的粒度和粘度正好,尤其是应用服务的开发。

  开源应用与SOA越来越成为完美的搭档。这一点正在为行业所重视。由Forrester调研公司和Unisys合作进行的一项调查显示,大部分CEO认为开源软件是向SOA和集成计划进军的最佳途径。

  参加调查的400位CEO中,有71%认为在整合IT基础设施时开源软件能够起到“重要”或“非常重要”的作用。另外,有57%的被调查者认为开源资源对于促进SOA项目具有非常重要的作用。

  这些回答的一个核心就是SOA所具有的延长原有应用生命周期的能力。Forrester还表示,有78%的被调查者出于对开源标准的认可而倾向于使用开源软件,而这正是提升SOA作为下一代企业基础架构的价值的主要原因。

  事实上,今天已经在有一些开源软件及开源服务可供使用了。Apache组织提供了一系列的开源SOA.企业可以使用ActiveMQ(一个开放源码基于 Apache2.0licenced发布,并实现了JMS1.1.能够与 Geronimo、轻量级容器和Java应用程序无缝的集成)进行通信。可使用开放源的ApacheAxis 2.0进行Web服务集合。可使用Apache ODE(Apache正在孵化的WS-BPEL引擎)工作流引擎。使用ESB(Enterprise ServiceBus)无缝地组合与拆解该复合应用程序。

二、开源的SOA规范及实现

  为了响应客户需求,IBM、BEA、Oracle、SAP、Primeton等公司正在合作制定用于构建SOA系统的规范,为开发人员提供构造基于 SOA应用程序的更简单更强大的方法。目前,制定规范的工作交由这些公司组成的 OSOA(OpenServiceOrientedArchITecture)协作组织负责,另外OSOA还负责在Apache推出开源的SCA/SDO 实现,用来更快的催化市场的发展。

  OSOA目前正在起草一系列的规范,并以免版税的许可方式提供给业界使用。OSOA的业界伙伴们现在主要在两个项目上协同工作,分别是 SCA(ServiceComponentArchitecture,服务构件架构)和 SDO(Service Datats,服务数据对象)。OSOA于2007年3月份发布了SCA1.0和SDO2.1规范,并已经提交到OASIS标准组织,为SOA的正式落地揭开了序幕。这两个项目就像OSOA的两架马车一样,为SOA架构立下了汗马功劳。根据笔者掌握的最新情报,OSOA正在准备启动第三架马车:DAS(ServiceDatats,服务数据对象)。

  SOA作为新生事物,它的开源实现已经初现端倪。SCA和SDO的开源产品,主要有 ApacheTuscany、EclipseSTP(SOA Tools Platform)、PECL SOA forPHP、CodeCauldronNewton等。这些开源产品中,尤其以Apache旗下的Tuscany和Eclipse旗下的STP最为引人注目。

  ApacheTuscany:是ApacheIncubation的一个开源项目,主要开发人员来自IBM和 BEA.Tuscany出身于皇家血统(OSOA联盟),可以算是SCA和SDO的最正宗的开源项目了。与EclipseSTP 相比,Tuscany提供的只是一个SOA基础设施,包括SCA运行时环境、SDO和DAS实现,Tuscany项目本身并不提供SOA开发和管理IDE 插件。

  Eclipse STP(SOAToolsPlatform):是由IONA、IBM、BEA、Sybase、tWeb等公司贡献的,并于2005年成为Eclipse的第九个顶级开源项目。STP目前尚未有正式的版本release,最新的稳定版本是2007年2月1号发布的(S200702011041)版本。根据项目计划,STP将于2007年8月29号发布Europa版(中文意思为“木卫二”,木星最亮的四颗行星之一,与木星的距离排在其卫星的第七位,最早为伽俐略观测到)。Europa版即是原来的Callisto版。

  PECL(PHP ExtensionCommunityLibrary)库:在PHP社区是无人不知无人不晓,不过知道PECL库新纳入的SOAPHP项目的人却并不多见。SOAPHP项目的主要目标是用PHP来实现SOA中的SCA/SDO标准,这对PHP社区真是个莫大的福音。

  Newton:它是基于GPL协议的,这意味着如果对Newton源代码做了修改,修改后的代码也需要免费开放给第三方使用,并需要将修改后的源代码反馈给Newton项目。它是一个分布式的运行时框架,用来对企业级环境下复杂的SOA系统做动态的实例化和可持续管理。Newton利用SCA系统描述,对OSGi的组件做动态的部署,由此实现对分布式的异构数据源的监控和管理。
来源:ChinaUnix

Yet Another (remote) Process Monitor

Introduction

Yet Another (remote) Process Monitor (YAPM) is a powerful application that allows to view and manage your running tasks, processes, threads, modules…etc. and your services on a local or on a remote machine. YAPM offers lots of features to manipulate them, such as privilege management, memory management, a complete history of statistics, a dependency viewer… etc.

It is the first and only open source software to offer all these features.

It’s totally free and open source (GNU GPL 3.0).

You are also able to monitor all Windows perfmon counters (local or remote machine) with an advanced time scale. YAPM also can save advanced reports of your system (HTML or TXT files).

System Snapshot feature allows the user to save and then open a snapshot of the system, very useful for remote assistance.

YAPM offers an user-friendly GUI with Microsoft Office Ribbon style, or a classical menu-based GUI if you don’t like the Ribbon style 🙂
Main features

In addition to all basic features available with the standard Windows Task Manager, YAPM offers lots of other useful features :

* Local and remote monitoring
* Module and thread management
* Job management : allows to add some processes to a job and set limits to the job. ; this affects all the processes in the job. For example, user can set an unique priority for all processes, a maximum memory usage for each process in the job…etc.
* Handle management (keys, files, semaphores…etc. opened by a process)
* View of TCP/UDP connections opened
* Windows management (opacity, position, show, hide…)
* Window’ find’ process feature : allows to find the process associated to a window via a drag & drop over the screen
* Emergency Hotkeys feature : allows to associate a custom shortcut to a custom action (for example : Ctrl+Shift+Suppr to close the window which is on foreground)
* Privilege management : allows to view and modify the privileges of processes
* Build-in hex editor to view memory of processes
* “Log mode” to monitor all actions made by a specific process
* Find Hidden Processes feature to detect basic hidden rootkits
* Local and remote shutdown
* Dependency viewer
* Powerful Service creator to create new service on a local or remote machine
* System Snapshot feature : allows to save a snapshot of the system. A System Snapshot File is created and can be explored on another system by an expert. Ideal for remote assistance.
* … And lots & lots of other features !

Requirements

* .NET Framework 2.0
* Operating system : Microsoft Windows XP, Windows Vista or Windows Seven. Now YAPM works on both 32-bit and 64-bit platforms.
* Administrator rights if you want to access to system processes and some other informations.
* For remote monitoring, WMI (Windows Management Instrumentation) must be installed and available on both machines if you use WMI method only, or the YAPM Server must be started on the remote machine if you use the client-server method.

http://yaprocmon.sourceforge.net/


伦敦股票交易所用开源软件取代.NET

今年夏天,伦敦股票交易所(LSE)决定放弃使用基于微软.NET技术的交易平台TradElect,TradElect在2008年9月发生了下线了一整天的严重事故。伦敦股票交易所将迁移到基于GNU/Linux的MillenniumIT系统,这是自由软件的又一次胜利。
相比TradElect高达6500万美元的费用,MillenniumIT整个公司也只要3000万美元。伦敦股票交易所已经100%收购了MillenniumIT的股权,获得了451名专家(其中软件开发部门大约有300名)和技术。LSE估计,从2011/12年开始,他们每年能节省1470万美元(1000万英镑)的成本。LSE的信息技术主管David Lester认为,基于GNU/Linux的交易平台更易于安装,速度更快,开发时间也更短。这次收购意味着LSE改变了策略,从尽可能多的外购转变到内部开发。Lester解释道,世界发生了很大变化,LSE需要在研究和开发上进行投资,在软件开发上要能掌控自己的命运。Lester称他们放弃TradElect并不是因为它的交易速度(2.7毫秒)没有基于Linux的系统(0.5毫秒)慢,而更多是为了控制、减少成本和有能力进行改进。

来源:solidot

Open source visual diff tools

比较工具哪能没有开源的呢?

1. JMeld

  • Implement directory diff.
  • Right/Left side readonly (preference)
  • Ask save settings when closing settings-tab.
  • Allow multiple selections in FolderDiffPanel.
  • Rescan action in FolderDiffPanel.
  • Statusbar should have a bar which tells how far the diff is.
  • Exclude filters. (Create preferences and store with jaxb)
  • Ignore whitespace in diff.
  • Use newest swingx library (JTableTree has changed significantly)
  • Click in JTreeTable is forgotten if it is outside length of node-label
  • Save-as, Load buttons in settings panel disappear when frame is made smaller.

project on sourceforge.net

2. WinMerge

WinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and handle.

WinMerge is highly useful for determining what has changed between project versions, and then merging changes between versions. WinMerge can be used as an external differencing/merging tool or as a standalone application.

Features

In addition, WinMerge has many helpful supporting features that make comparing, synchronising, and merging as easy and useful as possible:

  • General
    • Supports Microsoft Windows 98/2000/XP/2003/Vista/2008
    • Handles Windows, Unix and Mac text file formats
    • Unicode support
    • Tabbed interface
  • File Compare
    • Visual differencing and merging of text files
    • Flexible editor with syntax highlighting, line numbers and word-wrap
    • Highlights differences inside lines
    • Difference pane shows current difference in two vertical panes
    • Location pane shows map of files compared
    • Moved lines detection
  • Folder Compare
    • Regular Expression based file filters allow excluding and including items
    • Fast compare using file sizes and dates
    • Compares one folder or includes all subfolders
    • Can show folder compare results in a tree-style view
  • Version Control
    • Creates patch files (Normal-, Context- and Unified formats)
    • Resolve conflict files
    • Rudimentary Visual SourceSafe and Rational ClearCase integration
  • Other
    • Shell Integration (supports 64-bit Windows versions)
    • Archive file support using 7-Zip
    • Plugin support
    • Localizable interface
    • Online manual and installed HTML Help manual

非常好。支持语法高亮。DiffMerge的优点是跨平台,缺点是不开源。换用这个版本喽。

3. Meld

Meld is a visual diff and merge tool. You can compare two or three files and edit them in place (diffs update dynamically). You can compare two or three folders and launch file comparisons. You can browse and view a working copy from popular version control systems such such as CVS, Subversion, Bazaar-ng and Mercurial. Look at the screenshots page for more detailed features.

4. rgdiff

The RGDiff project parses the output from a standard command line Diff program and presents the results in a graphical manner. It re-uses the GNU Diff program by “shelling out” using the WIN32 CreateProcess() function.

The techniques used could easily be incorporated into other programs requiring Diff functionality.

This article explains how the above is done in more detail.