阅读更多
项目名称: Eurasia3
发起时间: 2004年
代码托管:http://code.google.com/p/eurasia

项目介绍:
Eurasia3 是一种能够支持百万级同时在线长连接用户数量的 HTTP 服务器, 或者每秒处理上万次 CGI 请求的常规应用服务器。
Eurasia3 同时也泛指以 Eurasia3 应用服务器为核心的一系列组件形成的应用程序框架, 主要是一个嵌入式对象数据库 MissileDB, 和一个 JavaScript 框架 NJF。
Eurasia3 基于 Stackless Python。

产品信息:
运行平台: 支持 Stackless Python 2.5 的系统, 包括各种嵌入式平台
开发语言: Stackless Python
开源协议: BSD License

项目成员:
沈崴, 高级架构师, 上海,项目发起人。
赖勇浩, 某公司技术负责人,广州。
王健, 某公司技术负责人, 经理, 广州。
魏中华, 项目经理, 广州。
庄上林, 项目经理, 广州。


是什么促使你们发起/开始这个项目?
Eurasia 最初源于某个大型人工智能项目, 是为了解决大量逻辑数据的存储和管理的问题而形成的一个 Web 管理系统, 并发展成一套 AJAX 框架。
而 Eurasia3 项目则是源于一系列关于 Web Game 的尝试。我们试图在浏览器上在不使用任何插件和 Flash 的情况下, 就能实现即时类游戏的效果并维持几十乃至上百万人同时在线, 这最终导致了 Eurasia3 框架的产生。


该项目面向哪些使用群体?
黑客, Web Game 和 Web IM 从业人员, 对前沿技术感兴趣的人以及 Comet 爱好者。

举个例子说明下用户使用您的软件能做什么?
基于浏览器的 MMORPG, 玩家在地图上漫游时所看到的一切都是即时的。
基于浏览器的 Web IM, 服务器能负载传统 IM 服务器那样多的在线人数, 消息发送是即时的, 浏览器用户不需要插件就可以互传文件。
Comet 应用, 服务器程序可以在任何时候使用原生 Python 代码远程调用客户浏览器上的 JavaScript 函数。
在一两百块钱 200-300 MHz 主频的嵌入式系统 (诸如路由器, Stackless Python 官方发行版中已经带有我们贡献的补丁可以使 Stackless Python 运行在这类系统上) 上运行以 Eurasia3 为基础的网站可以接近或达到和常规服务器一样的性能。

您认为有多少人使用这个软件/项目/服务?
至少有四家以上的公司正在使用基于 Eurasia 的软件。

有什么迹象表明您的项目很成功?
尽管 Eurasia3 项目主要是面向黑客的, 并且我们相当低调 ──── 你知道我们主要还是以自己使用为主, 也回馈一下社区, 这并不会带来实际的利益。但是还是吸引了相当多的关注。
尽管 Eurasia3 目前仍然在 alpha4 阶段, 但是从 alpha2 开始我们就已经许多项目在实际使用 Eurasia3 了, 这些产品还是颇令我们满意的。

您觉得最大的惊喜是什么
尽管 Python 的框架已经很多, 我们也不期望 Eurasia3 在将来某一天像 Django 那样流行, 但是对 Eurasia3 感兴趣的人还是相当多, 有些人甚至表示在将来 Eurasia3 正式发布时用它来替代 Django (甚至 Nginx), 这比较意外。

您在该项目中遇到的最大挑战是什么?
最大的挑战是时刻保持领先。尽管目前 Eurasia3 是业内比较尖端的技术, 但是我们知道迟早会有超越 Eurasia3 的技术出现, 在此之前我们会努力保持领先。

您在该项目中认为获得成功的要素有哪些?
黑客的关注和参与。
持续地在正式项目中进行检验。
保证劣质的代码和编程思想不进入项目, 保证代码不膨胀不失控。

您对该项目有哪些期望?
一个使用 Eurasia3 编写的 Web Game, 事实上我们正在着手这件事情, 这在明年或许就会实现。然后就是大家在启动一个很酷的项目或者一个奇怪的想法时会自然而然地想到 Eurasia3。或许这些都不会真的出现, 但对我们也没有损失。

如果您能对项目进行修改,您会改善哪些地方?
文档, 当然了。从 alpha2 开始接口一直在缓慢变化, 到下一个冻结特性的 alpha5 版本或许会有更剧烈的变动, 而文档一直是滞后的。这也导致了许多用户的不满, 当然也包括我自己在内, 因为连我们自己都有许多产品都是基于老版本的。

你们如何来协调项目?
SVN、Gtalk

你们把所有精力都投入在这个软件上,还是有其他的什么工作?
我们大部分人都有自己的公司, 并且正带着自己的团队在做一些看上去很有前途的东西。

那你们一般花多长时间在这个项目上?
每周20小时, 10 小时, 或者 0小时。你知道在没有灵感时与其放一些垃圾代码进去, 还不如不写,

你们用的开发环境是什么
操作系统: Linux (主要是 Ubuntu)
编辑器: vim, gedit

项目里程碑
1999 年 NJF 框架开始设计, 这是 Eurasia 最早的组成部分。
2004 年 Eurasia 项目开始。
2006 年 9 月 Eurasia 2.0.2 版以 BSD License 开源, 年底 Eurasia3 项目开始。
2007 年 12 月 Eurasia 3.0.0 alpha 发布。
2008 年 Eurasia 3.0.0 alpha4 发布。

其他人如何给你们提供建议?
Eurasia3 用户组 http://groups.google.com/group/eurasia-users

对JavaEye的印象
感谢 JavaEye 对脚本语言推广所做的贡献, 祝 JavaEye 越办越好。
18
0
评论 共 34 条 请登录后发表评论
14 楼 gqf2008 2008-09-17 11:27
征途号称单台服务器能同时在线4万个用户,这样看来Eurasia3不是一般的强大,支持
13 楼 eishn 2008-09-17 11:15
呵呵, Quake Wang 把测试数据找出来了啊

另外一份测试在这里: http://eishn.blog.163.com/blog/static/6523182007102133552397/

这些测试不是为了真实环境模拟, Quake Wang 说得不错, 测试的实际用意是针对 Eurasia3 内核调度压力的, 所以要尽量消除 IO 的干扰。你可以注意到 ab 并发数是 1021, 已经是 ab 并发的上限了, 并且连接没有发生排队, 而且这是动态页面。

Eurasia3 在最初的时候做过一段时间的测试, 但是在最近将近一年的时间里一直忙于升级 Eurasia3, 把性能评测疏忽了, 不过目前也尚无作新压力测试的计划, 这是因为:

1. Eurasia3 发展很快, 如果给每个版本作测试, 必然会严重影响进度。
2. Eurasia3 发展至今, 各版本接口变化很大、性能起伏也很大, 测试没有意义。
3. 性能相关的改进起码在 alpha6 以后, 诸如多 CPU 支持等很多重要支持还没有加进来。故在此之前没有特别关注性能测试的打算。

基本上 ray_linn 批评得不错, 但是因为上述这些原因, 抱歉最近很长一段时间内, 都没有性能测试的计划了, 不过对于 Eurasia3 的性能, 在 Eurasia3 编写前后我做过很多测试, 基本上都是由实验得来的。

引用
我用C#就写过类似的MicroThread,无非如此而已。


ray_linn, 我对你 MicroThread 的 C# 实现比较感兴趣, 有资料可以推荐一下吗
12 楼 QuakeWang 2008-09-17 10:47
引用
1。网络速度出奇的高,273KB/S -- ??

273KB/S约等于3M的带宽,是很小的带宽

引用
2。页面大小偏小:80688 bytes (估计也无图片之类的),换个看看?

这里Document Length只有8 bytes,但是这个测试的重点在于:
每0.1秒对协程进行一次调度。
为每个请求建立一个session (共计 10000 份)。
而不是为了测试下载速度

如果你对于Eurasia3是否能够支持百万级用户有疑问,建议下载代码,试玩一下。
11 楼 ray_linn 2008-09-17 10:34
本次测试:

1。网络速度出奇的高,273KB/S -- ??

2。页面大小偏小:80688 bytes (估计也无图片之类的),换个看看?

这样换速度可取巧了。
10 楼 ray_linn 2008-09-17 10:30

谢谢楼下。不过我认为本机联机测试的数据不准确。
9 楼 QuakeWang 2008-09-17 10:21
引用
给点实际的数据,服务器配置,压力测试的数据吧?

http://groups.google.com/group/eurasia-users/browse_thread/thread/310b19fb3497ee67
8 楼 ray_linn 2008-09-17 10:11
如果按楼主吹嘘的方式,任何一个web server都可以到百万千万的级别,只要你服务器够强,达不到,只是“已经超过操作系统上限, 你甚至需要重新编译操作系统。”。。。。。


给点实际的数据,服务器配置,压力测试的数据吧?
7 楼 ray_linn 2008-09-17 09:55
Stackless Python 轻便线程模型?? 无非就是用伪线程代替线程而已,这和erlang是类似的。--- 瓶颈就还给了硬件和操作系统,这句话就很不负责了。

Erlang或者Stackless python再牛叉,也是建立在系统OS 线程上的“伪”Thread,即通俗上说的MicroThread 微线程或者GreenThread,离开OS Thread,皮之无存,毛将焉附?

我不是指摘你的项目,而是“事实上要完全利用到 Eurasia3 的长连接调度能力, 已经超过操作系统上限, 你甚至需要重新编译操作系统。”这句话很不负责。

我用C#就写过类似的MicroThread,无非如此而已。
6 楼 天才阿昭 2008-09-17 09:17
国人在赶上
5 楼 eishn 2008-09-17 08:28
引用
引用
自从 Pre alpha 之后, 著名的 Python 开源框架 Euraisa3 的作者 William Shen 宣布将抛弃 Python 转而使用更为强大的 Lua 和 Ruby 重写 Eurasia3 ... 框架现在的名字是 "Lua and Ruby on Euraisa"。 ( http://eishn.blog.163.com/blog/ )

我不得不把沈崴这篇N年前的东西翻出来,哈哈


嘿黑, fyting 还记得这个啊。这篇文章也是值得纪念的, 当时真实的情况 Eurasia3 确实是 "抛弃" Python 了, 不过不是转向 Lua & Ruby, 而是全部 Stackless Python 化了。之前的 Eurasia3 轻便线程都是模拟出来的, 继续坚持原生 Python 已经遇到瓶颈, 到了无以为继的地步, 在当时要么转向 Stackless Python, 要么使用 Erlang, 而我选择了前者。程序体系转移完毕后, 就借机会恶搞了一下。

在 Eurasia3 0.0.1 alpha 之前, 这类文章还有很多, 当时 Eurasia3 仍然是试验性质的, 2006 年至 2007 年初我们主要还是在使用 Eurasia2。
4 楼 fyting 2008-09-16 23:29
引用
自从 Pre alpha 之后, 著名的 Python 开源框架 Euraisa3 的作者 William Shen 宣布将抛弃 Python 转而使用更为强大的 Lua 和 Ruby 重写 Eurasia3。

    ── "Python 令人绝望, 为了获得更快的执行效率, 并突显我的牛叉。我将使用 Lua 构建底层核心, 并且使用 Ruby 构建华丽的拱顶。"

    ── "国内的 Pythoner, 你们已经有 Django 了, 所以你们实际上已经不再需要其他框架了。我联系过 TurboGears 的作者, 试图说服他们解散开发团队 …… 恰好他们也正有此意。"

    "毫无疑问我需要被追捧, 或许这在 Windows 社区或者初学者社区里将更容易实现一些。"

    ── 在接受采访时 William Shen 如是答道。

在问到使用 Lua 和 Ruby 技术后 Eurasia3 将会有哪些进步时 William Shen 慷慨回答说, 除了 Pypy 谁也不相信 Python 的执行效率会比 C 快 10 倍、比 C++ 快 100 倍, 所以他决定放弃这个不切实际的想法。
而牛人们普遍任为 Lua 的执行效率要比 Python 快 4 倍以上, 为了向牛人兼容, 所以将使用 Lua, 因此 Eurasia3 的速度理论上将提高 4 倍以上。
    ── 但是使用 Lua 以后框架实际上只获得了原有速度的 1/10, 而且看上去已经使用了所有的优化手段, "事实上, 我使用 C 和汇编替代了大部分 Lua 的代码, 这当然得感谢 Lua 对 C 的完美支持"。William Shen 补充到。

我不得不把沈崴这篇N年前的东西翻出来,哈哈
3 楼 eishn 2008-09-16 20:54
引用
如果使用 comet 支持 httpd 的长连接; 一般几百个客户同时连接服务器; 服务器性能上就有问题了; 一般建议直接使用 socket 直接连接, 不使用 http 的长连接; 看你们的项目时间挺长了, 有 9 年了。


meng9999 谢谢你的建议, 我来解释一下吧

对于 HTTP 协议来说, 只是在建立长连接时 HTTP 协议头部会产生额外的负荷, 但是 HTTP Body 部分协议并没有规定必须以何种方式传输数据。因为是 HTTP 长连接, 所以协议头是可以忽略的, 故对 HTTP 长连接而言, 从协议上看就是一个 TCP 传输, 而对于目前我们的网络状况而言, 经我们测试 TCP 与 UDP 等协议在传输效率上并没有特别大的差别, 甚至会有优势。故从协议上看 HTTP 长连接和 socket 并不会有本质不同。

你说的几百个用户同时连接服务器会产生性能问题, 这里涉及到 IO、CPU、数据量、报文设计等因素, 每个都能成为瓶颈, 这个我就不清楚了, 但是肯定和是否使用 HTTP 协议或者使用 socket 自定义协议关系不大。虽然表面上 HTTP 长连接不如直接使用 socket, 但是这和你使用的传统 HTTP 服务器有关, 目前绝大部分或者几乎所有 HTTP 服务器都不是为 HTTP 长连接设计的, 以至于看上去使用 HTTP 长连接建立的 Comet 应用无法支持这么多的连接。

单就维护成百上千个连接状态, 目前很多服务器在架构上就会遇到瓶颈, 不过常见的线程模型也应该可以调度上千个 HTTP 长连接。不过都会很吃力。所以 Eurasia3 服务器被设计出来。Eurasia3 不同于任何一种以往的 HTTP 应用服务器技术, 它使用的是 Stackless Python 轻便线程模型, 可以同时维护几乎没有上限的线程数量, 或者说连接数, 同时每秒可以调度百万级别的线程数量。这样瓶颈就还给了硬件和操作系统, 事实上要完全利用到 Eurasia3 的长连接调度能力, 已经超过操作系统上限, 你甚至需要重新编译操作系统。

从实测上看, 仅就短连接传统 HTTP 应用服务器和 Eurasia3 就已经有很大差距, 对于 HTTP 长连接来看则根本无法同日而语。单数百个长连接根本不会对 Eurasia3 服务器造成压力

我是沈崴, 感谢诸位的支持。
2 楼 meng9999 2008-09-16 19:25
如果使用comet支持httpd的长连接;
一般几百个客户同时连接服务器;服务器性能上就有问题了;
一般建议直接使用socket直接连接,不使用http的长连接;
看你们的项目时间挺长了,有9年了;



1 楼 wanghuanan 2008-09-16 15:51
最后挺有趣的

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • http、smtp协议封装

    用c++封装的http和smtp协议,可以实现http下载和邮件客户端,实现了邮件的发送

  • 用.net发送 Email 帮助类 EmailHelper

    上一篇转人家的, 虽然复制粘贴简单, 但找参数都要找半天的…… 发送邮件不就是知道人家的地址,再输入主题和内容就可以了嘛! 1. 配置文件 App.config 2. EmailHelper 类 using System; using System.Collections.Gener

  • SMTP说明(与HTTP的对比)

    SMTP简单说明 下去是因特网电子邮件系统的总体情况: 从该图中我们可以看到它有3个主要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议( Simple Mail Transfer Protocol ,SMTP)。用户代理允许用户阅读、回复、转发、保存和撰写报文。微软的Outlook和 Apple Mail 是电子邮件用户代理的例子。完成邮件撰写时,邮件代理向其邮件服务器发送邮件,此时邮件放在邮件服务器的报文队列中。邮件服务器形成了电子邮件体系结构的核心。

  • 轻量级邮件发送组件:基于 Socket/SMTP 协议的浅层封装

    Java 发送邮件组件,大家第一时间想到的就是 JavaMail。JavaMail 本身也不大,才 500kb 的 jar 包,足够轻量级。而今天为大家介绍的,可以说“羽量级”,核心一个类就可以发送邮件了,除了依赖 JDK 无须依赖什么。如果我们了解 SMTP 协议以及 Socket 的简单使用,就知道其中过程并不复杂——实质都是基于文本的协议交互。

  • 邮件协议SMTP、POP3和IMAP

    IMAP提供邮件服务器与邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的任何操作,服务器上的邮件也会做相应的动作。也就是说,你在本地对邮件进行的操作和邮箱服务器是同步的。他可以使用邮件客户端对邮件进行接收以及操作。比如移动该邮件,删除该邮件,标记该邮件为已读,但是这些操作并不会反馈到邮箱服务器上。也就是说,你在本地对邮件进行的操作和邮箱服务器是不同步的。SMTP服务器通过查询DNS得到对方邮箱的POP3服务器,然后将邮件通过SMTP协议传送给对方的POP3服务器或IMAP服务器。

  • [源码和文档分享]基于SMTP协议和POP3协议实现的邮件收发客户端

    一、概要设计 1.1 抽象数据类型定义 主要定义了三个抽象数据类型: Base64 功能:用于发送邮件时进行编码,以及接收邮件时进行解码 数据部分:无 操作部分:编码(encode)、解码(decode) SMTP 功能:简单邮件传输协议类。用于实现SMTP协议中各种命令调...

  • smtp协议邮件发送工具MailUtil的配置文件

    #发送方的邮箱账号 mail.username=****@sina.cn #发送方的邮箱密码 mail.password=***** #使用的协议(JavaMail规范要求) mail.transport.protocol=smtp #发件人的邮箱的 SMTP 服务器地址 mail.smtp.host=smtp.sina.cn #需要请求认证 mail.smtp.auth=true #某...

  • 计算机网络实验:如何用SMTP协议发送邮件?(C#实现)

    实验目的: (1)掌握SMTP协议各个字段的含义; (2)掌握利用SMTP协议发送电子邮件。 实验内容: 设计一个页面,利用SMTP协议,实现发送一封邮件,具体要求如下: (1)可输入邮箱地址,编写邮件内容; (2)有邮件发送提示,利用协议发送邮件。 设计 SMTP界面入下图: 另外: 没有163邮箱可以先注册一个,下面要用到,然后登陆邮箱,找到POP3/SMTP/IMAP,选择开启服务IMAP/SMTP服务和POP3/SMTP服务,下拉新增授权码,然后申请一个,待会...

  • SMTP协议发送附件 MIME扩充协议

    SMTP协议发送附件 MIME扩充协议

  • SMTP 协议邮件发送工具封装

    文章目录1. 前言1.1 说明1.2 建议1.3 源码2. 发件人邮箱开通smtp 服务2.1 为什么要开通smtp 服务2.2 开启服务的步骤2.3 普通邮箱开启服务图文3. 工具类封装3.1 邮件依赖管理3.2 日志依赖管理3.3 邮件工具类封装4. 工具类测试及效果演示5. 模拟邮件发送接口及接口测试 1. 前言 1.1 说明     此处为Jav...

  • 一个关于SMTP 的封装类

    今天网友问我要SMTP 的封装类,我顺便共享在网上,换点积分,实在是太穷了,别怪我。想免费的自己去CODEPROJECT上面去下载,这个是我比较喜欢的一个。 地址如下:http://download.csdn.net/detail/saiolive/9565972

  • SMTP协议介绍

    1、SMTP介绍 基本概念 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件 的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件 时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程 只要几分钟。SMTP服务器则

  • php 利用smtp封装类发送邮件

    1. smtp封装类,二开注意名称不要与已有冲突还要注意位置放正确, 比如我这里重命名为smtp_email.php,放在classes文件夹下     <?php class smtp_email { /* Public Variables */ public $smtp_port; public $time_out; public $host_n...

  • php使用smtp封装类发送邮件

    <?php date_default_timezone_set('Asia/Shanghai'); // 'Asia/Chongqing' or 'PRC' require_once ('mail.class.php'); $smtpserver = "smtp.163.com";//SMTP服务器 $smtpserverport =25;//SMTP服务器端口 $smtpusermai

  • QT SMTP发送邮件(封装库)

    SMTP是一组用于从源地址到目的地址传送邮件的规则,并且控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,我们就可以把E—mail寄到收信人的服务器上了,整个过程只需要几分钟。SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或中转用户发出的电子邮件。 本文作者原创,转载请附上文章出处与本文链接。 程序暂时闭源,但提供免费,版本也会一直更新。目前正在测试阶段,首发...

  • SMTP实现发送邮箱2(封装版)

    SMTP.h #ifndef __SMTP_H__ //避免重复包含 #define __SMTP_H__ #include &lt;iostream&gt; #include &lt;list&gt; #include &lt;WinSock2.h&gt; using namespace std; const int MAXLEN = 1024; const int ...

  • 三种使用SMTP协议发送邮件的方法

    第一、.NET类库种自带的SMTP类:SmtpMail         在.NET中的System.Web.Mail名字空间下,有一个专门使用SMTP协议来发送邮件的类:SmtpMail,它已能满足最普通的发送邮件的需求。这个类只有一个自己的公共函数--Send()和一个公共属性—SmtpServer,您必须通过SmtpServer属性来指定发送邮件的服务器的名称(或IP地址),然后再调用Se

  • 使用.net的SmtpMail发送邮件及本机SMTP的简单配置

    这是我在这里发的第一篇文章        这几天,我做了一个有关发邮件的程序,也查了不少资料,下面把主要部分总结一下。        首先,当然是配置本机SMTP服务拉,如果是采用非本机的SMTP服务则不用做这一步(废话)。先打开Internet信息服务,右击 SMTP虚拟服务器--属性--访问--中继--添加,然后输入你的ip就可以了(当然如果为了方便你也可以输入127.0.0.1),确定,配置

  • 随笔:Python发送SMTP邮件方法封装

    随笔:Python发送SMTP邮件方法封装 封装的方法可以用来发送附件 import smtplib from email.mime.text import MIMEText from email.header import Header from email.mime.multipart import MIMEMultipart from email.utils import parseaddr, formataddr class Send_smtp_email_report(object):

Global site tag (gtag.js) - Google Analytics